SQL server 的3种数据库连接协议

SQL Server 支持多种网络协议用于客户端与数据库引擎之间的通信,其中最常用和推荐的三种协议是:

TCP/IP(Transmission Control Protocol/Internet Protocol)‌

是最常用、推荐的协议,尤其适用于远程连接和跨网络通信。

使用固定的端口(默认是 1433),也可以配置为动态端口或多 IP 监听。

支持 IPv4 和 IPv6。

在防火墙环境中易于配置(只需开放对应端口)。

适用场景包括局域网、广域网、互联网连接以及应用程序服务器与数据库分离部署。

✅ 优点:稳定、高效、广泛支持。

⚠️ 注意:需确保 SQL Server 已启用 TCP/IP 协议(通过 SQL Server 配置管理器启用)。

Named Pipes(命名管道)‌

基于 Windows 的进程间通信(IPC)机制,使用文件系统路径风格的管道名(如 \\.\pipe\sql\query)。

通常用于本地或局域网内的快速通信,尤其在早期 Windows 环境中较常见。

依赖于 SMB(Server Message Block)协议,因此在网络延迟高或跨防火墙时性能较差。

默认在本地连接(如 localhost 或 .)时可能优先使用 Named Pipes。

✅ 优点:在低延迟局域网中性能良好。

❌ 缺点:跨网络或互联网支持差,安全性较低,现代应用中逐渐被 TCP/IP 取代。

Shared Memory(共享内存)‌

仅限本地连接:当客户端与 SQL Server 实例运行在同一台机器上时使用。

是最快、最高效的协议,因为不经过网络堆栈。

无法用于远程连接。

当连接字符串中使用 (local)、localhost、. 或 127.0.0.1 且未指定协议时,SQL Server 客户端驱动程序会优先尝试 Shared Memory。

✅ 优点:零网络开销,速度极快。

❌ 限制:只能用于本机连接。

这三种协议各有特点,适用于不同的使用场景。在实际部署中,可以根据需求选择合适的协议以优化性能和安全性。


参考:SQL Server 基础知识 3 - 总体架构

  • 什么是 SQL Server?

  • 总体架构

SQL Server 有三个主要组件:

• 协议层(Protocol Layer)

• 关系引擎(Relational Engine)

• 存储引擎(Storage Engine)

协议层(Protocol Layer)

共享内存(Shared Memory)- 客户端和 SQL Server 运行在同一台机器上时,可通过该协议通讯。

-- 使用 SSMS 连接到本地 SQL Server 时,SSMS 登录窗口中的服务器名称(Server Name)可以为:

• . - 这里的点号 . 表示 SQL Server为本地安装

• localhost - 顾名思义,指本地安装

• 127.0.0.1 - 同上

• \ - 服务名称加上实例名称

TCP/IP - 客户端和 SQL Server 不运行在同一台机器上时,或者可理解为处在网络环境时,可采取此种方式通讯。

-- 使用 SSMS 连接到远端时,SSMS 登录窗口中的服务器名称(Server Name)只能是:<Instance>

命名管道(Named Pipe)- 为局域网(LAN)开发的协议。默认是关闭的,需要通过 SQL 配置管理器(SQL Configuration Manager)开启。

架构图中的 TDS 是 Tabular Data Stream 的缩写。

• TDS 最初由 Sybase 开发,现在为微软所有。

• TDS 是包装的网络包。

• 三种协议均使用 TDS 包。

关系引擎(Relational Engine)

关系引擎(Relational Engine)又被称为查询处理器(Query Processor)。它包含能够决定执行什么样的查询以及如何做到最优查询。它负责从存储引擎(Storage Engine)请求数据并处理返回的数据。

• 命令解析器(CMD Parser)

-- 从协议层(Protocol Layer)传入的数据进入关系引擎。命名解析器首先接收到查询数据。它的主要职责是:

• 语法检查(Syntatitic) -> 语义检查(Semantic) -> 创建查询树(Query Tree)

-- 解释:

• 语法检查(Syntatitic) - SQL Server 预定义了很多关键字(SELECT, INSERT, UPDATE 等等)和语法。如果查询数据没有遵守这些规则,则会返回错误。

• 语义检查(Semantic) - 由规范器(Normalizer)执行。比如,检查表名、列名是否存在于架构(Schema)里。如果存在,则将其绑定(Bind)到查询。


修改SQL server 的端口号

相关推荐
知识分享小能手8 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 开发企业人事管理系统 — 语法知识点及使用方法详解(21)
sql·学习·sqlserver
No8g攻城狮1 天前
【SQL】MySQL中空值处理COALESCE函数
数据库·sql·mysql·postgresql·sqlserver
山岚的运维笔记1 天前
SQL Server笔记 -- 第80章:分页
java·数据库·笔记·sql·microsoft·sqlserver
知识分享小能手1 天前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 新增功能 — 语法知识点及使用方法详解(20)
数据库·学习·sqlserver
山岚的运维笔记1 天前
SQL Server笔记 -- 第78章:MS SQL Server 基本 DDL 操作
数据库·笔记·sql·microsoft·oracle·sqlserver
山岚的运维笔记2 天前
SQL Server笔记 -- 第73章:排序/对行进行排序
数据库·笔记·后端·sql·microsoft·sqlserver
山岚的运维笔记2 天前
SQL Server笔记 -- 第77章:文件组
数据库·笔记·sql·microsoft·oracle·sqlserver
知识分享小能手2 天前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 数据库的备份与恢复 — 语法知识点及使用方法详解(19)
数据库·学习·sqlserver
山岚的运维笔记2 天前
SQL Server笔记 -- 第74章:权限或许可 第75章:SQLCMD 第76章:资源调控器
数据库·笔记·sql·microsoft·oracle·sqlserver
山岚的运维笔记3 天前
SQL Server笔记 -- 第72章:隔离级别与锁定
数据库·笔记·后端·sql·microsoft·sqlserver