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 的端口号

相关推荐
山岚的运维笔记1 天前
SQL Server笔记 -- 第13章:IF...ELSE
数据库·笔记·sql·microsoft·sqlserver
woshilys4 天前
sql server 表被另外一张表锁
sqlserver
zhangzeyuaaa5 天前
SQL Server删除重复数据
运维·sqlserver
雪碧聊技术7 天前
DBeaver连接sql server数据库时,提示驱动版本不合适
数据库·sqlserver·dbeaver·更换驱动·修改java.security
雷工笔记8 天前
数据库|SQLServer2025安装教程
数据库·sqlserver
梁正雄10 天前
linux服务-麒麟10安装sqlserver
linux·运维·sqlserver
齐 飞10 天前
SQL server使用MybatisPlus查询SQL加上WITH (NOLOCK)
数据库·mysql·sqlserver
曲幽11 天前
从0到1掌握SQL Server可编程性:让数据自己动起来
sql·sqlserver·delete·insert·function·update·trigger·procedure