以前使用 CDMA 上网时曾经亲身经历过突然无法上网的问题,最后通过软件修复 Winsock 解决。当时的症状是浏览任何网页都无法打开,IE 状态栏显示 DNS 解析出了问题。但用 ipconfig 查看发现已经自动获得了 DNS 地址,Ping DNS 地址也正常,测试 Ping QQ 服务器和其它几个 IP 都能 Ping 通,尝试用 ipconfig/flushdns 来清除 DNS cache 无效,更换其他 DNS 无效。最后下载了 LSP-Fix,修复了 Winsock,问题终告解决。
前段时间同事的电脑也遇到无法上网,但是能获取 IP 地址(内网通过 DHCP 服务器)和 DNS 地址,当时第一反应就是修复 Winsock。在上网寻找软件的时候,发现对于 Windows XP SP2 版本,可以使用新增的 Netsh 命令更快地解决这个问题。借此机会正好仔细研究了一下有关修复 Winsock 的问题,整理如下:
1. Winsock 和 Winsock2,以及 LSP
Winsock 最初来源于 Windows Sockets API 的简称。简而言之,Winsock 的作用就是 Windows 网络应用程序与底层网络协议之间的桥梁。从 Windows 98 系统开始包含了2.0 版本 Winsock 组件,所以有时候我们会看到 Winsock2 这样的说法。LSP 则是对 Winsock2 的扩展。(详见 Wikipedia: Winsock )
2. Winsock 错误的症状和修复方法
与网络有关的应用程序、恶意程序、注册表误操作等,都可能造成 Winsock 设置错误,从而出现能够连接网络(比如能够获取有效的 IP 地址,和 DNS 地址;在防火墙允许的情况下,可以被其他电脑 Ping 通),但无法实现网络应用(比如用 IE 无法显示网页)的症状。
对于 Windows XP SP2 及 Windows Server 2003 / Windows Vista,修复的方法非常简单,就是使用 Netsh 命令重置 Winsock:
netsh winsock reset
对于 Windows XP SP2 之前的版本,可以借助第三方软件,如 WinSock XP Fix、前文提到的 LSP-Fix 等软件,也可以手动删除注册表中 Winsock 设置后重新安装 TCP/IP 协议来解决。
Microsoft 知识库文章 811259 提供了详细的 Winsock 损坏症状、确认和修复办法,请参考。