一、官网关于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. leetcode — search-in-rotated-sorted-array

    /** * Source : https://oj.leetcode.com/problems/search-in-rotated-sorted-array/ * * Created by lverp ...

  2. 五分钟轻松了解Hbase面向列的存储

    说明:从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点. 行式存储 传统的数据库是关系型的,且是按行来存储的.如下图: 其中只有张三把一行数据填满了 ...

  3. 【Python】正则表达式简单教程

    说明:本文主要是根据廖雪峰网站的正则表达式教程学习,并根据需要做了少许修改,此处记录下来以备后续查看. <Python正则表达式纯代码极简教程>链接:https://www.cnblogs ...

  4. 项目详解4—haproxy 反向代理负载均衡

    一.企业服务架构图及负载均衡的要求 1.场景说明 在企业生产环境中,每天会有很多的需求变更,比如增加服务器.新业务上线.url路由修改.域名配置等等,对于前端负载均衡设备来说,容易维护,复杂度低,是首 ...

  5. keras入门(三)搭建CNN模型破解网站验证码

    项目介绍   在文章CNN大战验证码中,我们利用TensorFlow搭建了简单的CNN模型来破解某个网站的验证码.验证码如下: 在本文中,我们将会用Keras来搭建一个稍微复杂的CNN模型来破解以上的 ...

  6. php的TS和NTS的区别

    ts(Thread-Safety)即线程安全,多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他 线程不能进行访问直到该线程读取完,其他线程才可使用.不会出现数据不一致或者数 ...

  7. canvas-a10isPointPath.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 2018-08-22 为中文API的简繁转换库添加迟到的持续集成

    前两天在V2EX偶遇反馈帖第一次见以汉字命名的 Java 类 - V2EX, 于是复习了一下半年多没碰的项目program-in-chinese/zhconverter. 前文介绍了发布过程: 在Ma ...

  9. Dynamics 365 Online-Unified User Interface

    为了加强界面的一致性,提高用户体验,Dynamics 365 Online V9发布了新的Interface:Unified User Interface. 区别于旧的Regular UI,UUI自适 ...

  10. 生产环境下JVM调优参数的设置实例

    JVM基础:生产环境参数实例及分析 原始配置: -Xms128m -Xmx128m -XX:NewSize=64m -XX:PermSize=64m -XX:+UseConcMarkSweepGC - ...