[網路]解析第二層及第三層的網路封包結構

網路的IP位址讓我們路由到LAN(區域網路),而MAC位址讓我們找到了目標電腦
MAC作用在第二層 - 資料連結層,而IP作用在第三層 - 網路層,關於MAC和IP位址的詳細解說請參考這一篇

那麼,讓我們從第二層 - 資料連結層 開始吧!

資料連結層

資料連結層透過MAC位址進行溝通,所以它的Header包含了固定長度的來源MAC位址和目的地MAC位址,結構如下所示:

我們可以看到資料連結層的header總共有三項資料,除了MAC位址之外還有type,它是一個2 bytes的unsigned short int,具體對應的type可以參考維基百科,比較常見的有:

  • 0x0800 - IPv4
  • 0x86DD - IPv6
  • 0x0806 - ARP

我們一直都沒說到IP位址和MAC位址怎麼做mapping對應,用的就是ARP協議,它通知路由器IP和MAC位址的對應關係。

整個header有14個bytes,而這14個bytes後面接的就是網路層的header。

網路層

網路層提供了路由和尋址的功能,幫助封包導向兩端的最佳路徑,並具有一定的擁塞控制和流量控制的功能。和資料連結層一樣,我們來看看網路層header結構:

這裡列出比較重要的欄位:

  • Total Length:封包總長度

  • Identification:識別碼,通常是為了校驗checksum

  • Fragmentation: 如果要傳輸大封包,能進行切割標記

  • Time To Live(TTL):經過幾個路由器,如果為0則傳輸失敗

  • Protocol:協定,例如tcp協定、icmp協定等,這和應用層的http、DNS等不同,應用層協定屬於這層協定的一部分。Protocol以數字表示,這裡列舉比較常見的:

    • 1 -> ICMP
    • 6 -> TCP
    • 17 -> UDP

    由於不同的Protocol後續的header長度內容也會不同,故需要加以區分

  • Checksum:用來檢錯用的

  • Source IP Address:來源IP位址

  • Destination IP Address:目的地IP位址

其header長度總共有20個bytes。


總結:

我們透過MAC位址在資料連結層找到目標電腦,並使用IP位址在網路層進行路由。MAC和IP位址各自在不同層次發揮重要作用,共同協助封包在網路中的傳輸。