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

前言

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

在討論本篇文章時,假設讀者對網絡協議有必定的基礎,對TCP/IP四層協議有必定的瞭解,也大體瞭解網絡通信抓包。服務器

設備聯網

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

DHCP

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

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

在一個局域網內能夠有一個或多個DHCP服務器。好比平常家裏使用路由器上網,路由器內置了DHCP服務,當手機、平板、筆記本等設備聯網時就會向路由器獲取一個可用的動態IP。在企業的局域網中,則一般須要部署一個DHCP服務器或多個DHCP服務器造成一個DHCP服務集羣用於維護局域網內的動態IP。blog

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

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數據包分析實戰詳解》
相關文章
相關標籤/搜索