操作系統接駁網路連接設備後,都是怎樣判斷已經成功連入Interent?

例如 Windows ,未聯網托盤網路圖標有感嘆號。
請分別測試,如果是通過訪問一定http伺服器來判斷,請給出地址。


個人記憶和實際經驗中,主要有以下幾個階段來判斷——
//附圖是臨時專門抓的包,並不連續

  • DHCP

如果是使用 DHCP 獲得的IP,那麼就是先發送 DHCP 請求,網關回應 IP地址:

如果 DHCP 無回應,獲取 IP 失敗,感嘆號。

  • 尋找網關

不論是否是 DHCP ,Windows 都會先發送一個尋找網關的 ARP 廣播,請求網關的 MAC 地址:

如果收不到網關回應的 MAC 地址,與網關通訊失敗,感嘆號。

  • 驗證 IP 地址可用性

不論是否是 DHCP,Windows 都會發送神奇的 「免費ARP」 來驗證當前的 IP 地址是否已經被使用:

一旦發現衝突(即 免費ARP 有人回應),Windows 會自動關閉數據連接,IP置為 169.254.*.* ,彈出IP衝突提示窗,感嘆號。

  • 查找測試伺服器地址

IP可用,網關聯通,這時內網已經可以通信,該開始測試外網了,首先查詢測試伺服器的 IP :

可見,針對 IPv4 和 IPv6 的測試伺服器域名分別為:http://dns.msftncsi.comhttp://ipv6.msftncsi.com
如果查詢失敗,感嘆號,在運行網路診斷時會提示:DNS無響應。
我將 DNS 修改為 24.24.24.24 和 42.42.42.42 之後:

  • NCSI 檢測

NCSI 是Windows Vista 之後內置的網路狀態檢測服務,略為複雜一些。
首先是 NCSI 檢測的觸發條件,有以下幾種情況:

  1. 電腦啟動後首次登錄使用
  2. 電腦連接到了另一個新網路
  3. 電腦連接到了一個需要登錄的熱點

觸發 NCSI 檢測的條件後,Windows 會進行兩個操作:

  1. 請求下載 http://www.msftncsi.com/ncsi.txt
  • 內容為 Microsoft NCSI
  • HTTP 返回狀態為 200 OK
  • 請求解析 http://dns.msftncsi.com 這個域名
    • 解析結果為 131.107.255.255 / fd3e:4f5a:5b81::1

    也就是這個操作檢測到了 302 重定向,之後就會彈出我們常見的登錄提示。

    需要注意的是:我剛才專門測試了一下,無法解析 http://dns.msftncsi.com 和訪問 ncsi.txt 時被重定向,系統托盤的網路連接圖標都是不會有感嘆號的。


    它先連接網關,再連接dns,如果有反應,基本可以判定連上了,然後應該是連接一個外網地址,但是我還從來沒有考慮過,今天試一下

    試了但是沒查出來,短暫地連接過北京某個adsl的ip地址,因為不確定所以沒繼續查


    Windows 的話用的是 Microsoft NCSI :http://www.msftncsi.com/ncsi.txt

    在得知這個事實之後,我第一反應是這個網址後邊的伺服器每天得承受多大的訪問量啊。另外就想到,以後自己的程序驗證連通性可以直接使用這個地址了。


    參考:
    Win7如何檢測網路連通性
    Appendix K: Network Connectivity Status Indicator and Resulting Internet Communication in Windows Vista
    What do Microsoft and NCSI have in common?
    Windows 7 Network Awareness: How Windows knows it has an internet connection


    判斷是否連接到Internet這個功能由NCSI(Network Connectivity Status Indicator)完成。

    Appendix H: Network Connectivity Status Indicator and Resulting Internet Communication in Windows 7 and Windows Server 2008 R2

    這個服務從Vista開始就引進到Windows了,Vista的NCSI的大致過程就是系統會查詢:http://www.msftncsi.com/ncsi.txt,結果是Microsoft NCSI,之後查詢dns.msftncsi.com,響應地址為131.107.255.255,如果這兩項匹配,則認為是接入了Internet。在Windows 7/Server 2008 R2及以後的版本中,查詢還加入了IPv6的地址的確認。

    以下三種情況會觸發NCSI的以上過程:

    1. 重啟計算機後第一個用戶登錄時;
    2. 計算機接入新網路時;
    3. 計算機接入需要登錄操作的無線熱點時。

    推薦閱讀:

    tcp詳解v1 真的適合初學tcp/udp編程嗎?
    TCP/IP 協議到底在講什麼?
    tcp中的mss是536?
    為什麼區域網要用mac地址而不直接使用IP地址,統一用IP地址不是更好嗎?
    高帶寬往低帶寬傳送數據的處理機制是怎樣的?

    TAG:互聯網 | 操作系統 | 計算機網路 | 網路連接 |