逸事:死鎖之銳捷與AP
本文早就想寫了,但是直到寫這篇文章時纔決定要寫下來。
這件事發生時,我所用的操作系統是Windows 7 64bit Home Premium。
我們學校的上網方案採用的是銳捷。
銳捷上網撥號要用它的客戶端,而用電腦共享有線網絡當AP這事也是完全正常的。
本來銳捷客戶端是它的客戶端,使用完全正常。我嫌每次共享網絡都要自己敲一大串命令費事,也爲了給別人設置方便,就寫了個批處理文件來解決。
問題就出在這裏:一旦在開啓銳捷客戶端的同時運行那個批處理,就會發生死鎖。(從彈出UAC提示到客戶端窗口打開,中間需要一段時間,就在那段時間/UAC提示之前運行批處理)
具體表現是:銳捷認證成功;批處理的執行窗口沒有內容,但不會自動關閉;關機永遠無法完成,除非手動斷電。
這個現象經反復測試,每次都會重現。
我猜想原因是銳捷要使用網絡設備,於是進行某種程度的加鎖;而做AP的那個腳本使用Windows(Windows Vista起)自帶的一個叫Microsoft Virtual WiFi Adapter的東西,事先也要加鎖。這兩個動作導致調度出現問題,最後鎖上釋放不掉了……
有更清楚者望告知,謝過。
逸事: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/
另,如有哪位知道原因,煩請賜教,在此謝過。