訪問互聯網時發生了什么?


前言

最近在整理網絡抓包分析相關的資料,同時又在閱讀《網絡是怎樣連接的》。本篇文章從網絡協議對設備連網的過程和發送數據的過程進行探討。
在對網絡進行分析時,會使用wireshark進行抓包分析。

在討論本篇文章時,假設讀者對網絡協議有一定的基礎,對TCP/IP四層協議有一定的了解,也大致了解網絡通訊抓包。

設備聯網

在一個局域網內,在網絡層,通過IP確定來確定數據包發往哪里,在同一個局域網內,IP地址必須唯一。而在數據鏈路層,則通過MAC地址保證設備的唯一。

DHCP

加入設備剛聯網沒有設置靜態IP時,需要通過DHCP協議向DHCP服務器獲取到一個可用的IP地址。

DHCP(動態主機配置協議)是一個局域網的網絡協議。指的是由服務器控制一段IP地址范圍,客戶機登錄服務器時就可以自動獲得服務器分配的IP地址和子網掩碼。

在一個局域網內可以有一個或多個DHCP服務器。比如日常家里使用路由器上網,路由器內置了DHCP服務,當手機、平板、筆記本等設備聯網時就會向路由器獲取一個可用的動態IP。在企業的局域網中,則通常需要部署一個DHCP服務器或多個DHCP服務器形成一個DHCP服務集群用於維護局域網內的動態IP。

DHCP獲取動態IP有四個階段:發現階段(DHCP Discover)、提供階段(DHCP Offer)、選擇階段(DHCP Request)和確認階段(DHCP ACK)。

20200802152256.png

  1. 由於客戶端首次連接互聯網,並不知道DHCP服務器的地址,因此客戶端首先需要向局域網內發送一條DHCP Disconver廣播。

20200802152338.png

當DHCP服務器收到該請求時,就會處理請求,非DHCP服務器收到該請求不會處理,直接丟棄。DHCP Discover網絡數據包如下圖所示。
20200802152607.png

此時並沒有IP地址,所以原始IP地址為0.0.0.0,客戶端的MAC地址是95:57:02:4a:09:01。每個DHCP處理階段都會有一個會話ID,用於標記是哪次的DHCP請求。

  1. 當DHCP服務器收到請求時,會從可用的IP池中獲取一個IP,通過DHCP Offer請求返回。

20200802153019.png

由於客戶端一個網卡只能設置一個IP。因此即使有多個DHCP服務都返回了響應,客戶端也僅會獲取第一個收到的IP進行設置。

20200802153209.png

如上圖所示,DHCP Offer向MAC地址為95:57:02:4a:09:01的客戶端返回的IP地址為192.168.137.60

  1. 由於同一個局域網內可能有多個DHCP服務器,因此,為了告訴其他的DHCP服務器,被使用的新的IP,客戶端會通過DHCP Request請求進行廣播告訴所有人當前客戶端選擇使用的IP地址。

20200802153523.png

這樣如果這個IP地址是當前DHCP服務分配的,該服務器就會返回一個確認包,如果不是當前DHCP服務分配的,它就會忽略該請求。

20200802154046.png

在以前家用路由器多個路由器進行橋接時,若都提供DHCP服務功能,則分配的IP范圍不能重合,否則可能導致分配個多個設備同樣的IP,導致設備無法上網。實際路由器應該可以識別將DHCP Request的IP也設置為被租賃狀態,避免該IP再次被使用。不確定現在新的路由器設備是否還會有該問題。

  1. DHCP服務確認返回

20200802154312.png

在返回確認的同時,還會告知客戶端IP可使用的期限。當到達期限時,這個IP就會被DHCP回收,客戶端需要重新向DHCP服務器申請一個新的IP。

20200802154255.png

最后當設備設置IP時,就會發送一個ARP探針請求的廣播,發送該請求時,客戶端還沒有設置IP,,若局域網已有設備使用這個IP,就會返回MAC地址。
20200802164048.png

發送數據

ARP

現在我們的設備已經有了IP地址,可以訪問局域網了,只要路由器有連外網,就可以將設備的請求轉發到互聯網,也就是說我們的設備已經可以連接互聯網了。

當我們需要訪問互聯網時,比如要訪問connectivitycheck.platform.hicloud.com,我們首先要獲取到該地址的IP。通過DNS協議可以將域名轉換為實際IP。但是在講解DNS之前,設備必須限訪問DNS服務器,而此時設備剛聯網獲取到IP,並不知道DNS服務器的地址,解析來ARP協議就發揮作用了。

ARP協議是根據IP獲取MAC地址的一個TCP/IP協議。有些人可能會奇怪,為什么我們有了IP地址,還需要MAC地址呢?因為在通常情況下我們發送數據到目標IP時,IP是確定的(除非NAT地址轉換),但是我們通過路由器需要轉發到下個路由器時,則需要通過修改MAC地址為下一跳的路由器的MAC地址實現數據轉發。因此在網絡通訊的時候光有IP地址還不夠,我們需要獲取到設備的MAC地址才行。

20200802165007.png

通過ARP協議發送廣播詢問對應IP的MAC地址,所有設備收到會校驗當前的IP,若與ARP請求的IP一致,則會將自己的MAC地址響應給對端。若不一致就會丟棄請求。當請求者獲取到ARP響應后就會把對應的IP和MAC地址保存到自己的ARP緩存種,下次請求IP時就不需要再查詢MAC地址,直接可以從緩存中獲取。

當客戶端獲取到了DNS的MAC地址時,就可以向DNS發送請求查詢域名對應的IP了。

DNS

DNS是域名系統(Domain Name System)的縮寫。DNS協議通過DNS請求查詢指定域名的地址或別名等信息。DNS服務器如果存在該域名,則返回查詢到的信息,否則從上一級DNS服務器獲取信息,仍不存在繼續向上以及DNS服務器獲取,直到到達根域名服務器。當DNS服務器從上一級DNS服務器獲取到指定域名的查詢信息時,DNS服務器會將其緩存起來。

20200802205628.png

當通過DNS協議查詢到域名對應IP時,請求就可以通過該IP發送到對端。若目標IP不在當前同一子網內,因此會通過路由器或交換機等設備進行轉發,本篇文章不對這個過程進行具體的探討。

參考文獻

  1. 《網絡是怎樣連接的》
  2. 《Wireshark數據包分析實戰詳解》

20191127212134.png
微信掃一掃二維碼關注訂閱號傑哥技術分享
出處:https://www.cnblogs.com/Jack-Blog/p/13423355.html
作者:傑哥很忙
本文使用「CC BY 4.0」創作共享協議。歡迎轉載,請在明顯位置給出出處及鏈接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM