逸事:winsock導致網絡連接異常
(本文實寫於20140701)
昨天艾寧拎着電腦說上不去網,我就順手一查,結果發現這個事。
幾個基本情況:
操作系統是Windows7 64bit Home Basic,360之類的東西在我的勸說下卸載了,殺毒/反間諜軟件用的是微軟的MSE和Windows Defender。
之所以說是異事,因爲本身它有網絡連接,甚至共享網絡(通過自帶的Microsoft Virtual Wifi Adapter)給手機當AP時,手機都可以正常上網。
在確保有網絡連接的情況下(月底了,流量還有不少,就用我的手機當熱點),測試了一些命令,可以訪問因特網:
- ping
- tracert
- nslookup
- ftp
上面幾個命令發送了ICMP、UDP、TCP數據包,均可以訪問,說明並沒有哪個地方對特定類型包進行過濾。
本來還打算試試SSH,但是沒有合適的工具。抱着碰運氣的心態裝32bit的cygwin(沒有64位的包),嘗試ssh說無法解析,百思不得其解,於是又給刪掉了。
這裏有一個好玩的事:在*nix下,traceroute/tracepath使用的是UDP,而windows的tracert命令發送的是ICMP包。
但是當使用網絡瀏覽器時,不論是HTTP還是FTP都會出問題。
最後上網搜查一番,查到了一條命令:
netsh winsock reset
本來衹是抱着試試看的心態,結果還真就有用……
再細查,這條命令的作用是重置winsock。所以我就奇怪:winsock是何方神聖,會引起這麼大的問題?繼續翻閱資料,發現這貨其實就是windows的套接口API,原來叫Windows Sockets API,後來嫌長就給縮短了……
修復了這個問題之後,我仔細問她究竟做了些什麼。結果發現:她什麼都沒做……且網上搜到的那些文章也都說是莫名其妙就出了問題。
所以……原因完全找不到,也不知道這個問題下次什麼時候會發作……
再加上windows經常出現的奇怪死鎖現象(見這篇文章)……
三分慶幸:幸好不用windows多年了……
七分憂慮:windows上究竟有多少預料外的事會發生……
參考資料:
http://en.wikipedia.org/wiki/Winsock
http://my.oschina.net/u/246088/blog/71531
http://biaobiaoqi.me/blog/2013/04/23/winsock-kills-internet/
另,如有哪位知道原因,煩請賜教,在此謝過。