一、官网关于SQL SERVER Browser服务的解释(谷歌翻译后稍作修改的)
背景:
在SQL Server 2000之前,只能在计算机上安装一个SQL Server实例。 SQL Server通过官方互联网号码分配机构(IANA)侦听端口1433上的传入请求,然后分配给SQL Server。只有一个实例可以使用这个端口,所以当SQL Server 2000引入了对多个SQL Server实例的支持时,开发了SQL Server解析协议(SSRP)来侦听UDP端口1434。该监听器服务响应客户端对所有已安装实例的带实例名字的请求,返回实例们所使用的端口号和命名管道。为了解决SSRP系统的局限性,SQL Server 2005引入了SQL Server Browser服务作为SSRP的替代品。
SQL Server Browser的工作原理:
当SQL Server实例启动时,如果TCP / IP协议启用,则会为服务器分配一个TCP/IP端口。如果命名管道协议启用,SQL Server将侦听特定的命名管道。该端口或“管道”被该特定实例用于与客户端应用程序交换数据。在安装过程中,TCP端口1433和pipe \sql\query分配给默认实例,但之后可以由服务器管理员使用SQL Server Configuration Manager更改这些实例。因为只有一个SQL Server实例可以使用默认端口或管道,所以为命名实例(包括SQL Server Express)分配不同的端口号和管道名称。
默认情况下,命名实例和SQL Server Express实例启动时配置为使用动态端口,即SQL Server启动时分配可用端口。如果需要,可以将特定端口分配给SQL Server实例。连接时,客户端可以指定特定端口;但是如果端口是动态分配的,则在SQL Server重新启动时,端口号可以随时更改,因此客户端不知道正确的端口号。
SQL Server Browser启动时,配置使用UDP端口1434。SQL Server Browser读取注册表,标识计算机上的所有SQL Server实例,并记下使用的端口和命名管道。当服务器有两个或更多网卡时,SQL Server浏览器将返回第一个启用的SQL Server端口。 SQL Server浏览器支持ipv6和ipv4。
当SQL Server客户端请求SQL Server资源时,客户端网络库使用端口1434向服务器发送UDP消息。SQL Server Browser会使用所请求实例的TCP / IP端口或命名管道进行响应。然后,客户端应用程序上的网络库通过使用所需实例的端口或命名管道向服务器发送请求来完成连接。
 
二、个人实验:
从官网的解释来看,SQL Server Browser是为解决多实例情况下,非默认实例使用动态端口号的情况。因此实例重启后,客户端可能无法连接命名实例。因此需要开启SQL Server Browser服务来使用UDP的1434端口监听本服务器所有命名实例,并为客户端请求返回命名实例所使用的真实端口或命名管道。
 
1)实验环境
SQL Server 2008R2版本,安装了默认实例MSSQLSERVER和命名实例TEST,其中默认实例使用默认的1433端口,TEST使用默认的动态分配端口。
实验过程中主要观察:
1、是否可以使用sqlcmd联通 
2、netstat -ano的端口占用情况
2)实验说明:
开启SQL Server Browser服务等同于开启UDP的1434端口。而且如果将默认实例的端口换为1434,Browser服务依然使用UDP1434端口,不会改变。
3)实验步骤
    1.只开启两个实例的服务,默认实例使用1433端口,TEST实例使用动态端口,用sqlcmd远程尝试连接两个实例的的结果如下:
    2.开启SQL Server Browser服务之后:
此时如果关闭SQL Server Browser:
sqlcmd -S 192.168.111.69\TEST -U sa -P Leo123 依然会成功,但是将动态端口号设置为0后重启服务就会失败,说明只要启动过一次Browser服务且数据库服务没重启过(这意味着动态端口号没变过)就一直可以连通。
    3.将默认实例的端口号改为动态端口:
sqlcmd -S 192.168.111.69\MSSQLSERVER -U sa -P Leo123 无论Browser服务是否开启,都无法连接。
说明此服务对默认实例无效。
4)实验结论
SQL Server Browser只负责使用UDP的1434端口转发使用动态端口的命名实例的信息给客户端,默认实例必须使用固定端口,并告知客户端。
因此如果服务器上有多个实例,且命名实例使用动态端口,那么一定要开启Browser服务。
对使用固定端口1433连接服务器的程序来说,如果是命名实例,那么最好设置固定的端口号,并修改配置文件使用新的固定端口号连接。此时可以关闭Browser服务。
在集群环境中,应保证Browser服务在所有节点始终开启。
最后,也希望大家不要迷信这个实验结论,不保证能解释所有问题,要自己动手验证。
 
三、一些附加信息:
1.可以使用netstat -ano|findstr PID来查看SQL Server监听的端口号,其中[: :]表示所有IPv6地址,[: : 1]表示IPv6的looopback address,在ipv6中::表示连续的0且只能出现一次双冒号,::和::1单独出现时比较特殊,表示任意地址和本地回环地址,当然sqlserver肯定会设置这些ipv6地址都可以接受ipv4连接(通过ipv4-mapped ipv6 address),这里无需对此问题更加深入。
2.如何修改SQL Server实例的默认端口号:
修改下图的IPALL即可,动态端口设为空表示使用固定端口,设为0表示使用动态端口。

 

SQL Server Browser探究的更多相关文章

  1. SQL Server : Browser服务

    SQL Server : Browser服务是SQL Server 2005新增的,简单的说,如果一个物理服务器上面有多个SQL Server实例,那么为了确保客户端能访问到正确的实例,所以SQL S ...

  2. 童话故事 --- 什么是SQL Server Browser

    高飞狗这几天特别郁闷,不知该如何通过TCP/IP协议连接SQL Server数据库.好在功夫不负有心人,经过几天的刻苦研究,终于得到了答案. 高飞狗呼叫UDP1434端口,"叮铃铃,叮铃铃- ...

  3. (4.1)SQL Server Browser 与动态端口

    转自:http://blog.51cto.com/jimshu/1120295 一.启用TCP端口 1.启用TCP/IP协议 打开SSCM(SQL Server Configuration Manag ...

  4. 自动化安装SQL Server+SP就那么简单

    随着业务.企业规模的日益壮大,DB的数量也在不断增多,配置一台新增DB,从服务器的参数配置,磁盘阵列规划,DB安装部署,DB参数调优等等一列步骤下来,手工操作的效率变得越来越低,因为我负责的数据库近些 ...

  5. SQL Server 2012 Managed Service Account

    原创地址:http://www.cnblogs.com/jfzhu/p/4007472.html 转载请注明出处 (一)Windows服务使用的登陆帐号 Windows服务只有登录到某一帐户的情况下才 ...

  6. SQL Server 跨网段(跨机房)复制

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搭建过程(Process) 注意事项(Attention) 参考 ...

  7. System.Data.SqlClient.SqlException: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: SQL Network Interfaces, error: 26 - 定位指定的服务器/实例时出错)

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. ...

  8. sql server 远程连接不上解决思路

    1.数据库是否允许远程连接: 1.1.0登陆SQL Server 2008(windows身份认证),登陆后右击,选择“属性”.左侧选择“安全性”,选中右侧的“SQL Server 和 Windows ...

  9. SQL server 2014安装以及解决连接数据库失败问题

    安装教程:http://jingyan.baidu.com/article/3a2f7c2e653d5926afd61197.html 安装好之后打开SQL server 2014 Managemen ...

随机推荐

  1. python三大神器之virtualenv

    virtualenv virtualenv用来管理python项目环境,隔离出一个只属于这个项目的虚拟python环境(windows和Linux用法一样). 首先你需要安装virtualenv模块 ...

  2. 微信开发中网页授权access_token与基础支持的access_token异同 【转载、收藏】

    问题1:网页授权access_token与分享的jssdk中的access_token一样吗? 答:不一样.网页授权access_token 是一次性的,而基础支持的access_token的是有时间 ...

  3. 【手记】解决VS2017 git 拉取按钮灰色的问题

    如图: 若干仓库都是能推不能拉,下面显示当前分支不跟踪远程分支,后来在这里找到给分支建立跟踪的方法,又在这里找到在VS2017中敲git命令的方法,在此感谢上述博文的作者.总结一下: 在VS2017进 ...

  4. 图解vs2015生成JSON实例

    在开发的过程中那个会使用到JSON数据,在使用的时候需要将它反序列化进行使用 如果说JSON存在很多实例情况手动敲肯定显得很繁琐而且很容易出错,VS提供了粘贴JSON类的方法. 这是我的JSON文件 ...

  5. Android Studio 杀掉当前进程

    android.os.Process.killProcess( android.os.Process.myPid());

  6. C#中saveFileDialog(另存为)保存图片文件

    弹出另存为提示框保存图片文件: //用户自由选择指定路径保存文件            SaveFileDialog savedialog = new SaveFileDialog();        ...

  7. Java类加载机制(加载、验证、准备、解析、初始化)

    如下图所示,Java的类加载机制主要分为三个部分,分别为加载.链接.初始化.其中链接又分为三个小部分--验证.准备.解析. 加载--在经过对Java代码进行编译后,JVM将Java类编译后的二进制文件 ...

  8. Integer Partition(hdu4658)2013 Multi-University Training Contest 6 整数拆分二

    Integer Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...

  9. 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?

    在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一.做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种 ...

  10. 记录一些日常windows命令或操作技巧

    一.远程连接 通常我们发布项目的时候会先发布成本地文件然后通过远程服务器连接放到测试服务器发布成站点,这里就涉及到对远程发布的一些操作. 1. 点击运行,输入 mstsc /admin (这里的adm ...