一、官网关于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. 初识MongoBD

    一.安装 我使用的系统是Ubuntu16.04,不同版本系统参照官网安装步骤.安装官网4个步骤安装好MongoDB并启动. sudo apt-key adv --keyserver hkp://key ...

  2. selenium3环境搭建以及各浏览器驱动的使用方法

    想了解更多关于seleniu请访问selenium官网 https://www.seleniumhq.org/ 以Selenium3.0.2版本为例介绍在Python中如何安装及使用,具体操作步骤如下 ...

  3. JVM(二)—— 类加载机制

    问题 1.为什么要有类加载机制(类加载机制的意义是什么) 2.类加载机制的过程,这些步骤可以颠倒顺序么?,每个步骤的作用是什么? 3.什么情况下必须对类进行初始化 类加载的过程 加载--验证--准备- ...

  4. mvc 中合并两个list集合

    有时候,在进行查询操作的时候需要将从数据库中查询的两张表进行合并,成为一张表然后返回给前端.或者在原有的一张表基础上面加几个新的字段. 这个时候可以新建一个.class[model类],在这个新建的m ...

  5. [转]Database Transactions in Laravel

    本文转自:https://fideloper.com/laravel-database-transactions Laravel's documentation on Database Transac ...

  6. sqlserver count(1),count(*),count(列名) 详解

    sqlserver数据库 count(1),count(*),count(列名) 的执行区别 count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括 ...

  7. Owin Middleware如何在IIS集成管道中执行

    Owin Middleware Components(OMCs) 通过安装Install-Package Microsoft.Owin.Host.SystemWeb 可以让OMCs在IIS集成管道下工 ...

  8. mysql全文索引之模糊查询

    旧版的MySQL的全文索引只能用在MyISAM表格的char.varchar和text的字段上. 不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引,所以具体信息大家可以随时关注官网, ...

  9. Android Studio 学习(一)

    XML给元素定义ID 定义id android:id="@+id/button_1" 引用id id/id_name 解决Failed to load Appcompat Acti ...

  10. PHP常用函数归类【持续整理中......】

    一.PHP基础语法   变量,常量     严格区分大小写,但内置结构或关键字无所谓(echo)     命名:不能以数字,空格,.来开头,但是可以有汉字,eg:$变量="aa"; ...