none
设置端口是选择 tcp动态端口 还是 tcp端口? RRS feed

  • 问题

  • 如题,这两个选择对连接到引擎的连接有什么不同吗? 连接数比较多的时候 或者 连接时间长的时候 有什么不同影响吗?

    谢谢。

    2013年1月24日 2:16

答案

  • Default instance uses static port number 1433 while named instance uses dynamic port number by default. If your network has firewall, it's more difficult to manage with dynamic port but doesn't affect number of connections. 
    • 已标记为答案 zhanggq 2013年2月4日 2:48
    2013年1月24日 3:56
  • 更详细的

    ----------------------SQLSERVER解析协议SSRP与SQL Browser服务---------------------------------------------------------
    --SQL2000以前,一台计算机只能安装一个SQL实例
    --SQL2005引入对SQL多个实例的支持,却只有默认的SQL实例可以使用1433端口
    --命名实例每次启动绑定的端口号都不一样

    --SQL产品组开发了SQLSERVER解析协议SSRP,用于侦听UDP1434
    --当任何一个客户端要访问这台服务器上的SQL实例时,都会先询问UDP1434端口,
    --然后由SSRP协议告诉客户端本台服务器上所安装的SQLSERVER实例的端口号以及
    --管道名字,客户端根据这个反馈,知道该和哪个端口或管道连接了

    --客户端(说明要连接的实例,不说明就默认实例)----》UDP1434----》SSRP---》实例的端口号或管道名
    --客户端----》端口号或管道名
    --默认实例---》对应的端口1433  或 管道名字
    --命名实例---》SSRP---》对应的端口号  或管道名字


    --SQL Browser启动后,启动并使用1434端口。读取注册表
    --HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\MSSQLServer\SuperSocketNetLib\
    --下的各个项目,识别计算机上的所有SQL实例,并标明它们使用的端口和命名管道
    --当一台服务器有多个网卡时,SQL Browser会为SQL返回其遇到的第一个已启用的端口

    --当SQL客户端请求SQL资源时,客户端数据驱动程序将使用1434端口向服务器发送一条UDP消息,
    --SQL Browser会回应请求实例的TCP/IP或命名管道名称。
    --然后客户端使用所需实例的端口或命名管道向服务器发送请求来完成连接

    --当SQL Browser不运行时,如果你提供正确的端口号或命名管道,依然可以连接SQL
    --如果SQL的默认实例的端口号是1433,则可以使用TCP/IP连接此默认实例

    --如果停掉SQL Browser以下连接无效
    --未提供端口号或管道名字就连接到命名实例
    --未完全指定所有参数情况下(管道名字 TCP/IP端口)尝试连接到命名实例
    --未使用TCP1433情况下,将DAC连接到命名实例或默认实例
    --枚举局域网中的SQL服务器 如果局域网中的SQL服务器没有开SQL Browser

    --如果连接命名实例,需要在防火墙或网关上打开UDP1434端口
    --SQL Browser的启动帐号要有读写注册表的权力,否则会导致客户端连接不上

     

    至于影响,像rmiao大侠所说没有什么影响


    给我写信: QQ我:点击这里给我发消息

    • 已标记为答案 zhanggq 2013年2月4日 2:47
    2013年1月24日 5:04
  • 连接数比较多的时候 或者 连接时间长的时候 有什么不同影响吗?

    :没什么不同。

    默认实例会使用1433端口, 命名实例会在启动的时候选择上一次启动时使用的端口,如果这个端口已经被别的程序占用,会使用一个新的端口。

    如果为命名实例指定了一个端口,那么在启动的时候有可能因为端口被占用而启动失败

    2013年1月28日 4:48
    版主

全部回复

  • 请问LZ你所说的 

    tcp动态端口 还是 tcp端口

    是指哪个地方呢? 是指sqlserver配置管理器里配置端口的界面吗?


    给我写信: QQ我:点击这里给我发消息

    2013年1月24日 2:53
  • 是的  ,这两个有什么不同吗? 谢谢。
    2013年1月24日 3:20
  • Default instance uses static port number 1433 while named instance uses dynamic port number by default. If your network has firewall, it's more difficult to manage with dynamic port but doesn't affect number of connections. 
    • 已标记为答案 zhanggq 2013年2月4日 2:48
    2013年1月24日 3:56
  • 像rmiao大侠所说的 默认实例使用的是1433端口, 命名实例使用的是动态端口,一般最好静态端口比较好,这样比较好配置防火墙

    开放哪些端口,如果是动态端口的话,客户端一般是去数据库服务器的1434端口(要开启sqlbrowser服务)发去请求,询问命名

    实例数据库的动态端口是多少,知道动态端口号之后就可以通讯了


    给我写信: QQ我:点击这里给我发消息

    2013年1月24日 4:58
  • 更详细的

    ----------------------SQLSERVER解析协议SSRP与SQL Browser服务---------------------------------------------------------
    --SQL2000以前,一台计算机只能安装一个SQL实例
    --SQL2005引入对SQL多个实例的支持,却只有默认的SQL实例可以使用1433端口
    --命名实例每次启动绑定的端口号都不一样

    --SQL产品组开发了SQLSERVER解析协议SSRP,用于侦听UDP1434
    --当任何一个客户端要访问这台服务器上的SQL实例时,都会先询问UDP1434端口,
    --然后由SSRP协议告诉客户端本台服务器上所安装的SQLSERVER实例的端口号以及
    --管道名字,客户端根据这个反馈,知道该和哪个端口或管道连接了

    --客户端(说明要连接的实例,不说明就默认实例)----》UDP1434----》SSRP---》实例的端口号或管道名
    --客户端----》端口号或管道名
    --默认实例---》对应的端口1433  或 管道名字
    --命名实例---》SSRP---》对应的端口号  或管道名字


    --SQL Browser启动后,启动并使用1434端口。读取注册表
    --HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\MSSQLServer\SuperSocketNetLib\
    --下的各个项目,识别计算机上的所有SQL实例,并标明它们使用的端口和命名管道
    --当一台服务器有多个网卡时,SQL Browser会为SQL返回其遇到的第一个已启用的端口

    --当SQL客户端请求SQL资源时,客户端数据驱动程序将使用1434端口向服务器发送一条UDP消息,
    --SQL Browser会回应请求实例的TCP/IP或命名管道名称。
    --然后客户端使用所需实例的端口或命名管道向服务器发送请求来完成连接

    --当SQL Browser不运行时,如果你提供正确的端口号或命名管道,依然可以连接SQL
    --如果SQL的默认实例的端口号是1433,则可以使用TCP/IP连接此默认实例

    --如果停掉SQL Browser以下连接无效
    --未提供端口号或管道名字就连接到命名实例
    --未完全指定所有参数情况下(管道名字 TCP/IP端口)尝试连接到命名实例
    --未使用TCP1433情况下,将DAC连接到命名实例或默认实例
    --枚举局域网中的SQL服务器 如果局域网中的SQL服务器没有开SQL Browser

    --如果连接命名实例,需要在防火墙或网关上打开UDP1434端口
    --SQL Browser的启动帐号要有读写注册表的权力,否则会导致客户端连接不上

     

    至于影响,像rmiao大侠所说没有什么影响


    给我写信: QQ我:点击这里给我发消息

    • 已标记为答案 zhanggq 2013年2月4日 2:47
    2013年1月24日 5:04
  • 谢谢各位回复
    2013年1月24日 5:23
  • 连接数比较多的时候 或者 连接时间长的时候 有什么不同影响吗?

    :没什么不同。

    默认实例会使用1433端口, 命名实例会在启动的时候选择上一次启动时使用的端口,如果这个端口已经被别的程序占用,会使用一个新的端口。

    如果为命名实例指定了一个端口,那么在启动的时候有可能因为端口被占用而启动失败

    2013年1月28日 4:48
    版主
  • 今晚测试了一下,TCP端口那里,就算你输入了指定端口,但是SSMS还是连接不上,所以端口那里应该是由SQL自己分配的不能自己指定

    而且下面这些IP地址应该是连接成功了 才会记录的,如果当前电脑的ip地址跟上次电脑的ip地址不一样,而且当前也没有成功登录SQL

    那么当前ip地址不会记录的,所以你也改不了配置


    给我写信: QQ我:点击这里给我发消息

    2013年1月28日 15:49
  • Completely wrong, you can set static port number for named instance. To connect to sql instance that is not listening on 1433 with tcp/ip protocol, have to specify port number along with ip address or host name like host_name,12345.
    2013年1月28日 16:34
  • rmiao大侠有两个问题想问一下你

    问题一: To connect to sql instance that is not listening on 1433 with tcp/ip protocol, 你指的是默认实例还是命名实例,如果是命名实例,那么我在

    配置管理器里设置静态端口为1433

    我还是说一下我的步骤吧:

    我的电脑里的默认实例是MSSQLSERVER,命名实例是SQLEXPRESS

    电脑ip是127.0.0.1 

    我这样修改的:

    重启sqlexpress服务



    给我写信: QQ我:点击这里给我发消息

    2013年1月29日 3:31
  • 登录成功之后还是连接到我的默认实例


    给我写信: QQ我:点击这里给我发消息

    2013年1月29日 3:33
  • 指定tcp 

    还是连接到默认实例


    给我写信: QQ我:点击这里给我发消息

    2013年1月29日 3:35
  • 加上实例名


    给我写信: QQ我:点击这里给我发消息

    2013年1月29日 3:37
  • 指定tcp


    给我写信: QQ我:点击这里给我发消息

    2013年1月29日 3:39
  • It works for both default and named instance. Keep in mind that port number is associated with ip address, that means multiple sql instances on the machine with single ip address can't have same port number. That's why named instance uses dynamic port number by default.
    2013年1月29日 3:48
  • 第二个问题:

    我觉得这个问题可以分为几种情况
    1、默认实例没有改端口还是1433, 其他命名实例改端口为1433

    2、默认实例改为其他端口例如6666 其他命名实例改端口为1433

    3、其他命名实例改为其他端口 例如8888

    还有一个问题:每次改端口都要重启sql服务,为什麽设置的端口已经被占用了还能重启成功?

    可惜现在没有时间测试

    rmiao大侠可以给出一些实验结果,不是一两句话就全世界都听你的


    给我写信: QQ我:点击这里给我发消息

    2013年1月29日 3:48
  • I never ask anyone (not sure where whole world come from, funny) listen to me, just tell factors that dba should know. You can reinvent the wheel, I don't have time for that.
    2013年1月29日 4:01
  • 实例之间不能共用同一个端口这个我当然知道不管是默认实例还是命名实例,就像我们开发的串口程序,都是不同设备使用不同的端口号,不同的程序使用不同的端口号

    就像数据库镜像使用5022端口


    给我写信: QQ我:点击这里给我发消息

    2013年1月29日 4:01
  • 2、默认实例改为其他端口例如6666 其他命名实例改端口为1433

    还是无法更改端口


    给我写信: QQ我:点击这里给我发消息

    2013年1月29日 6:45

  • 给我写信: QQ我:点击这里给我发消息

    2013年1月29日 6:46
  • 其他命名实例改为其他端口 例如8888

    还是无法改变端口


    给我写信: QQ我:点击这里给我发消息

    2013年1月29日 7:14

  • 给我写信: QQ我:点击这里给我发消息

    2013年1月29日 7:17