首页 > 数据库 >SQL Server 的网络通信机制

SQL Server 的网络通信机制

时间:2023-07-23 12:34:18浏览次数:42  
标签:网络通信 端口 通信 TCP Server 实例 SQL

问题

我试图了解 SQL Server 如何在网络上进行通信,因为我必须告诉我的网络团队在防火墙上打开哪些端口,以便边缘 Web 服务器与内部的 SQL Server 进行通信。我需要知道什么?

 

解决方案

为了了解需要在哪里打开什么,我们首先简单谈谈当今常用的两个主要协议:

  • TCP - 传输控制协议
  • UDP - 用户数据报协议

两者都是 TCP/IP 协议套件的一部分。我们将从 TCP 开始。

TCP

TCP 是客户端与 SQL Server 通信的主要协议。实际上,更正确的说法是客户端和 SQL Server 使用表格数据流 (TDS),但 TDS 实际上位于 TCP 之上,当我们谈论 Windows、防火墙和其他网络设备时,规则和控制就是围绕该协议构建的。所以我们只用 TCP 来讨论。

TCP 是一种面向连接的协议。这意味着两个系统协商连接并都同意。把它想象成一个电话。当一个人发起电话时,另一个人必须同意接听电话,并且双方都可以随时结束电话。TCP也是同样的道理。两个系统都必须同意通信,但任何一方都可以随时结束通信。此外,TCP 中还内置了一项功能,可确保所有通信都可以根据需要进行拆卸和重新组装,以便它可以通过各种网络设备并以正确的顺序重新正确组合在一起。它还具有处理和重传丢失通信的机制。

由于此功能,TCP 成为许多不同网络应用程序使用的协议。所有应用程序共享的方式是通过使用端口。当系统上出现 SQL Server 等服务时,它必须侦听端口。对于默认的SQL Server实例,默认端口为1433。客户端通过TCP协议连接到该端口,协商并同意连接,然后双方可以根据需要传输信息,直到任何一方决定结束通信。实际上,双方都会有一个用于通信的端口,但由于客户端的端口通常是半随机确定的,因此当我们谈论防火墙等时,通常我们对服务器或服务正在使用的端口感兴趣。

UDP协议

与 TCP 不同,UDP 不是面向连接的。“客户端”可以向任何它想要的人发送 UDP 通信。没有任何东西可以协商通信连接,协议本身也没有任何东西可以协调通信顺序或类似的东西。如果需要,它必须由应用程序或由应用程序使用的基于 UDP 构建的协议来处理。如果您将 TCP 视为电话,则将 UDP 视为明信片。我可以将明信片邮寄给我想要的任何人,只要写明地址并贴上邮票,邮政部门就会取走它。现在,无法保证之后会发生什么。没有重新传输丢失的通信的机制。它非常适合不需要确认的简短沟通。由于多个网络应用程序可以通过 UDP 进行通信,因此它使用端口,就像 TCP 一样。SQL 浏览器或 SQL Server 侦听器服务使用 UDP。

网络通信 - 与 SQL Server 对话

设置 SQL Server 实例时,它侦听的 TCP 端口取决于。默认实例将设置为侦听端口 1433。命名实例将设置为安装期间选择的随机端口。此外,命名实例将被配置为允许它动态更改该端口。这意味着当命名实例启动时,如果它发现某些东西已经在使用它通常使用的端口,它将选择一个新端口。如果您有一个命名实例,并且有穿过防火墙的连接,您将需要使用 SQL Server 配置管理器来设置静态端口。这将允许网络和安全人员配置他们的设备以获得最大程度的保护。虽然您可以更改 SQL Server 默认实例的网络端口,但大多数人不会这样做。

网络通信 - 查找 SQL Server

当仅指定客户端连接到 SQL Server 的名称(例如 MySQLServer)时,这是尝试连接到默认实例。在这种情况下,客户端将自动尝试与 MySQLServer 上的端口 1433 进行通信。如果您已切换默认实例的端口,则需要告诉客户端正确的端口,通常通过在连接字符串中指定以下语法:,。例如,如果您将 SQL Server 移至侦听 14330,则您将使用 MySQLServer,14330 而不仅仅是 MySQLServer。

但是,由于命名实例默认动态设置其端口,因此客户端从一开始就永远不知道它应该与哪个端口通信。这就是 SQL 浏览器或 SQL Server 侦听器服务 (SQL Server 2000) 的用途。在本例中,客户端通过 UDP 协议向端口 1434 发送通信。它询问“命名实例在哪里?” 因此,如果我运行一个名为 SQL2008R2 的命名实例,它会询问 SQL 浏览器:“嘿,我如何与 MySQLServer\SQL2008R2 对话?” 然后,SQL 浏览器会从UDP 端口 1434将通信发送回客户端,告诉客户端如何与命名实例通信。当然,您可以跳过所有这些静态设置命名实例的端口。然后您可以使用,连接机制,客户端不会尝试与 SQL Browser 服务通信。它只会尝试建立连接。例如,如果 SQL2008R2 实例正在侦听端口 20080,指定 MySQLServer,20080 将尝试连接到命名实例。

网络通信 - 命名管道

命名管道是一种较旧的网络库通信机制,通常不再使用。它不应该跨防火墙使用。但是,如果由于某种原因您需要使用它连接到 SQL Server,则该协议也位于 TCP 之上。命名管道实际上由操作系统使用,它在协议中拥有自己的机制来确定将通信路由到何处。就网络通信而言,它侦听 TCP 端口 445。无论我们谈论的是 SQL Server 的默认实例还是命名实例,都是如此。

汇总表

要将所有这些放在一起,您需要了解以下内容:

 

标签:网络通信,端口,通信,TCP,Server,实例,SQL
From: https://www.cnblogs.com/lkj371/p/17574870.html

相关文章

  • mysql auto_increment怎么删除
    MySQL中的auto_increment如何删除在MySQL中,auto_increment是一个非常有用的功能,它允许我们在插入数据时自动为表的主键字段生成唯一的递增值。然而,有时候我们可能需要删除表中的某些数据行,这就会导致auto_increment值出现断层。本文将介绍如何在MySQL中删除数据行时保持auto_incre......
  • mysql rpm包选择
    MySQLRPM包选择MySQL是一种流行的关系型数据库管理系统,被广泛用于开发和生产环境中。在Linux系统上安装MySQL,我们可以选择使用RPM包进行安装。RPM(RedHatPackageManager)是一种软件包管理系统,用于在RedHat系列的Linux发行版上进行软件安装、升级和卸载。本文将介绍如何选择适......
  • mysql arm dockerfile
    MySQLonARMwithDockerfileIntroductionWiththeincreasingpopularityofARM-baseddevices,itisbecomingmorecommontorunapplicationsandservicesonARMarchitecture.OnesuchapplicationisMySQL,apowerfulandwidelyusedrelationaldatabasem......
  • mysql redo_log_buffer_size
    MySQLredo_log_buffer_size详解在MySQL中,redolog是一种用于保证数据持久性的机制。当我们进行数据修改时,MySQL会将这些修改操作记录到redolog中,以便在系统崩溃或重启后,可以使用redolog来恢复数据的一致性。redolog的大小对于系统的性能和可靠性都有着重要的影响,本文将详细介......
  • mysql and 和 &&
    mysql和&&的区别在MySQL中,我们经常会使用AND和&&这两个操作符来组合多个条件。尽管它们都用于连接多个条件,但它们在使用时有一些区别。本文将介绍mysqland和&&的区别,并提供一些代码示例来帮助理解。AND操作符在MySQL中,AND是一个逻辑操作符,用于在WHERE子句中组......
  • mysql rank
    实现MySQLRank的流程实现MySQLRank的过程可以分为以下几个步骤:创建数据表导入数据编写查询语句添加Rank字段计算Rank值查询结果下面我会逐步介绍每个步骤需要做什么,并给出相应的代码说明。1.创建数据表首先,你需要创建一个包含需要排序的字段的数据表。假设......
  • 解决无法打开到 SQL Server 的连接错误
    一、问题描述有时,您可能会在连接到SQLServer时遇到问题,并且可能会收到如下消息: 这些错误可能是针对 命名管道连接或 TCP/IP连接。在本技巧中,我们将探讨导致这些错误的原因以及解决方法。二、解决方案您收到这些错误消息的原因可能有多种。请按照以下步骤查看是否可......
  • mysql执行execute immediate
    实现"mysql执行executeimmediate"的步骤对于刚入行的小白来说,学会如何使用"mysql执行executeimmediate"可能会有些困惑。在本文中,我将向你展示整个实现过程的步骤,并提供每一步所需的代码和注释。步骤概述下面的表格演示了实现"mysql执行executeimmediate"的步骤概述。步......
  • mysql增加两列,并往里面添加数据
    MySQL增加两列,并往里面添加数据在MySQL数据库中,我们经常需要对表结构进行修改,例如添加新的列。本文将介绍如何使用SQL语句在MySQL中添加两列,并向这两列中添加数据。1.创建示例表首先,我们需要创建一个示例表,作为演示的基础。以下是一个简单的表结构:CREATETABLEstudents(i......
  • SQL与NoSQL数据库选型及实际业务场景探讨
    在企业系统架构设计中,选择合适的数据库类型是一项关键决策。本文将对比SQL和NoSQL数据库的特点,分析它们在数据模型、可扩展性、一致性与事务、查询复杂性与频率,以及性能与延迟等方面的优势和劣势。同时,结合轻易云数据集成平台作为实际业务场景的例子,探讨了为什么NoSQL数据库(如Mo......