最近在整理網絡抓包分析相關的資料,同時又在閱讀《網絡是怎樣鏈接的》。本篇文章從網絡協議對設備連網的過程和發送數據的過程進行探討。
在對網絡進行分析時,會使用wireshark進行抓包分析。緩存
在討論本篇文章時,假設讀者對網絡協議有必定的基礎,對TCP/IP四層協議有必定的瞭解,也大體瞭解網絡通信抓包。服務器
在一個局域網內,在網絡層,經過IP肯定來肯定數據包發往哪裏,在同一個局域網內,IP地址必須惟一。而在數據鏈路層,則經過MAC地址保證設備的惟一。網絡
加入設備剛聯網沒有設置靜態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
DHCP Disconver
廣播。當DHCP服務器收到該請求時,就會處理請求,非DHCP服務器收到該請求不會處理,直接丟棄。DHCP Discover
網絡數據包以下圖所示。
路由
此時並無IP地址,因此原始IP地址爲0.0.0.0
,客戶端的MAC地址是95:57:02:4a:09:01
。每一個DHCP處理階段都會有一個會話ID,用於標記是哪次的DHCP請求。部署
DHCP Offer
請求返回。因爲客戶端一個網卡只能設置一個IP。所以即便有多個DHCP服務都返回了響應,客戶端也僅會獲取第一個收到的IP進行設置。域名
如上圖所示,DHCP Offer
向MAC地址爲95:57:02:4a:09:01
的客戶端返回的IP地址爲192.168.137.60
。
DHCP Request
請求進行廣播告訴全部人當前客戶端選擇使用的IP地址。這樣若是這個IP地址是當前DHCP服務分配的,該服務器就會返回一個確認包,若是不是當前DHCP服務分配的,它就會忽略該請求。
在之前家用路由器多個路由器進行橋接時,若都提供DHCP服務功能,則分配的IP範圍不能重合,不然可能致使分配個多個設備一樣的IP,致使設備沒法上網。實際路由器應該能夠識別將
DHCP Request
的IP也設置爲被租賃狀態,避免該IP再次被使用。不肯定如今新的路由器設備是否還會有該問題。
在返回確認的同時,還會告知客戶端IP可以使用的期限。當到達期限時,這個IP就會被DHCP回收,客戶端須要從新向DHCP服務器申請一個新的IP。
最後當設備設置IP時,就會發送一個ARP探針請求的廣播,發送該請求時,客戶端尚未設置IP,,若局域網已有設備使用這個IP,就會返回MAC地址。
如今咱們的設備已經有了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地址才行。
經過ARP協議發送廣播詢問對應IP的MAC地址,全部設備收到會校驗當前的IP,若與ARP請求的IP一致,則會將本身的MAC地址響應給對端。若不一致就會丟棄請求。當請求者獲取到ARP響應後就會把對應的IP和MAC地址保存到本身的ARP緩存種,下次請求IP時就不須要再查詢MAC地址,直接能夠從緩存中獲取。
當客戶端獲取到了DNS的MAC地址時,就能夠向DNS發送請求查詢域名對應的IP了。
DNS是域名系統(Domain Name System)的縮寫。DNS協議經過DNS請求查詢指定域名的地址或別名等信息。DNS服務器若是存在該域名,則返回查詢到的信息,不然從上一級DNS服務器獲取信息,仍不存在繼續向上以及DNS服務器獲取,直到到達根域名服務器。當DNS服務器從上一級DNS服務器獲取到指定域名的查詢信息時,DNS服務器會將其緩存起來。
當經過DNS協議查詢到域名對應IP時,請求就能夠經過該IP發送到對端。若目標IP不在當前同一子網內,所以會經過路由器或交換機等設備進行轉發,本篇文章不對這個過程進行具體的探討。