一、官网关于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. 禁用feign retryer

    为什么要禁用retryer?其实主要是为了Debug,禁用feign retryer有两面性,如果接口做好幂等性,retry不影响,但是总有一些意外发生,比如:有一个实例发生了故障而该情况还没有被服务 ...

  2. Ubuntu 16.04 安装 VMware Tools(解决windows和Ubuntu之间不能互相复制粘贴文件的问题)

    Ubuntu 16.04安装虚拟工具VMware Tools,指的是在虚拟机VMWare安装Ubuntu 16.04后再安装VMware Tools的过程.很多人接触Linux都是从虚拟机开始,而安装 ...

  3. Gradle nexus配置

    1.下载Gradle; 2.添加脚本init.gradle到gradle的init.d目录中: ext { nexus = 'http://192.168.184.6:8081/nexus' user ...

  4. python干掉pycache

    当第一次运行 python 脚本时,解释器会将 *.py 脚本进行编译并保存到 __pycache__ 目录 下次执行脚本时,若解释器发现你的 *.py 脚本没有变更,便会跳过编译一步,直接运行保存在 ...

  5. SpringBoot(11) SpringBoot自定义拦截器

    自定义拦截器共两步:第一:注册.第二:定义拦截器. 一.注册 @Configuration 继承WebMvcConfigurationAdapter(SpringBoot2.X之前旧版本) 旧版本代码 ...

  6. Centos 7.6配置nginx反向代理,直接yum安装

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...

  7. [nodejs] nodejs开发个人博客(四)数据模型

    数据库模型 /model/db.js 数据库操作类,完成链接数据库和数据库的增删查改 查询表 /*查询*/ select:function(tableName,callback,where,field ...

  8. 谈下mysql预处理基础

    传统的操作数据库方法有两种: 先写一条sql语句,然后通过mysqli->query($sql)去操作数据库(此处使用的是mysqli扩展库).这样操作并不会有什么大的错误,但是当要插入上千条上 ...

  9. springMVC_07乱码及restful风格

    乱码的解决 通过过滤器解决乱码问题:CharacterEncodingFilter 配置web.xml文件 <filter> <filter-name>encoding< ...

  10. 【Java每日一题】20170316

    20170315问题解析请点击今日问题下方的“[Java每日一题]20170316”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...