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?
-
总体架构
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 的端口号

