日期:2014-05-16  浏览次数:20582 次

外网访问内网问题?
公司想实现外网访问内网sql2000服务器,内网宽带为固定ip,通过路由、交换机连接到内网服务器,路由已经映射服务器ip和端口1433,但是为什么外网telnet可连接,sql查询分析器却连不上,错误提示"一般性网络错误,请检查网络文档"?
------解决方案--------------------
初步看来可能是权限问题。
------解决方案--------------------
SQL2000把SP4补丁打一下
------解决方案--------------------
telnet connection 验证了 Cisoc Network Firewall inbound已经开放,那么 outbound呢?
服务器上是否有杀毒软件的屏蔽?
是否有SQL的访问权限?
客户端软件版本是否和服务器端的一致(这种可能性很小,通常兼容)
------解决方案--------------------
我曾经碰到过类似的情况,msdn 上说还要让network firewall开放UDP
------解决方案--------------------
也是外网,也是telnet ok,就是连不上,开放了UDP 后就可以了,但是存在一定的网络风险。
------解决方案--------------------
问题产生的可能原因非常多:
常见原因:
1.      服务器的负荷:
如果服务器负荷高,有可能在网络中会发出很多RESET包,在超过重试次数后,客户端会中断连接,抛出GNE。这类问题会影响所有连接,甚至在SQLServer服务器上的本地连接。
2.      繁忙的应用服务器没有使用连接池:
在三层应用结构中,中间层应用服务器会同时接受大量的数据库登出登入请求,如果没有使用连接池,SQLServer需要维护连接的负担会非常重。可能会有少数连接照顾不过来,容易遇到GNE。如果开启连接池,负载就能大大降低,问题也就可以解决了。
3.      网络传输层问题:
由于数据库经常要传输大量的结果集,网络层比较繁忙。如果两台计算机之间的网络有频繁重传现象,或者特定类型的网络包被某个网络设备(网关、路由、防火墙等)修改或丢弃,那么GNE出现几率比较高。这类问题只发生在特定的一组SQLServer服务器和客户端之间。同一个SQLServer可能有写客户端没有问题,有些有问题。跨网段或跨子网的客户端问题比较多。
4.      Windows操作系统层面问题:
SQLServer的连接由Windows建立和维护,所以Windows层面的许多行为会影响SQLServer的连接稳定性。当数据库、网络很繁忙时,Windows为了维护自身安全,会有意拒绝一些网络请求。造成误杀。
5.      不恰当的系统设置:
有时候会从安全性角度考虑,修改一些系统设置,但是过于严厉的话会导致SQLServer连接的不稳定。常见的是TCP设置,在
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下。
SQLServer层的设置也有两个地方可能引起GNE错误,都在sp_configure中:
l  Priority boost:SQLServer以高优先级启动。一般情况下不推荐设置。
l  Lightweight pooling:会使SQLServer切换到纤程模式计划。会影响SQLServer的运行模式,有时会带来GNE副作用。由于大部分情况下不会带来明显的性能提高,所以不建议使用。
6.      防毒软件和防火墙:
这些软硬件有可能导致误杀现象。
7.      网络设备:
有些应用会长时间连接数据库,几乎从来不登出。如果没有操作请求,连接会长时间处于空闲状态。对于这样的TCP连接,SQLServer会每隔30秒做一次KeepAlive握手。确保连接是否有效。如果客户端对此没有反馈,SQLServer会中断这个连接。当客户端下次使用时,就会收到GNE。有些网络设备会在空闲30~40分钟后直接断开连接。也会直接导致GNE。
8.      错误的网卡配置:
在集群服务器上,至少有两块网卡。如果心跳线也能访问公共网络,就容易出现GNE。
4、  GNE情况很多,但是还是可以做以下的操作,减缓或者解决:
1.  分析网络拓扑结构,确定网络的可靠性
2.  涉及SQLServer服务器和客户端服务器做全面健康检查,确认它的工作正常。
l  Windows日志中不可以有明显的错误
l  CPU不可以长时间100%
l  Windows不可以有系统缓存及内存方面的问题。
l  SQL Server的errorlog里不可以有明显的错误,重点错误是:AV、内存、磁盘、17883/17884
l  SQLServer不可以发生大范围、涉及100个以上的连接阻塞问题。
l  检查sysprocesses系统视图,不可出现经常有大量连接处于runnable/running状态。
3.  按照下面方式配置SQLServer服务器和客户端服务器:
(1)、禁用RSS:
找到注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnableRSS,将其设为0.
(2)、禁用TaksOffload:
找到注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DisableTaskOff,将其设为1
(3)、禁用TCP Chimney:
输入:netsh in tip set chimney DISABLED
(4)、禁用TCPA:
找到注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnableTCPA,将其设为0.
(5)、重启机器使设置生效。
(6)、将所有有关系的机器Windows升级到最新的更新版本。网络设备firmware升级到最新。
(7)、检查SQLServer sp_configure里面priority boost和lightweight pooling是否被改动过。
4.  正确配置网络:
(1)、确认注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下都是默认配置
(2)、再次确认没有配置网卡的Teaming。
(3)、在集群环境里,确认两块网卡配置正确。
(4)、确认网罗设备自动关闭Idle连接的功能已经被禁用。
(5)、暂时关闭防毒软件和防火墙。
(6)、如果可能,尽量将SQLServer服务器和客户端服务器移到物理上比较近、中间网络设备比较少的网段。修改连接配置,换一种网络协议。
------解决方案---