網絡層協議主要有4個:
ARP協議
IP協議 最重要
ICMP協議
IGMP協議
IP數據報的格式
IP數據報要是比較大,就需要分隔,分隔后的小單元就是分組
固定部分:顧名思義一定要有,所有IP數據報都有,大小20字節
可變部分:大多數情況下都是沒有可變部分的。可有可無optiona
上圖是IP數據報首部的圖,固定部分+可變部分
數據部分其實就是傳輸層。等到傳輸層再講
-
版本字段:IPV4 還是IPV6
-
首部長度 占4bit,理論范圍是0-15,但是考慮到固定部分必須有20字節,它的范圍就是5-15 單位是4B 最小5的話,\(5✖️4B=20B(固定長度)\)
-
區分服務 這個字段很少用,有時候急着發送的時候會有加急選項。反正很少用
-
總長度 首部長度+數據部分長度 整個IP數據報的長度 單位是1B
IP數據報長度上限值 是$2^{16}-1=65535B $ 但是考慮到數據鏈路層的MTU,實際中還是不會取到65535,早早都已經分片了
-
標識
-
標志
-
片偏移
上面三個都是和IP數據報分片成分組相關
-
生存時間TTL :每經過一個路由器,TTL就會減一,變成0就丟棄。防止不能傳輸到目的的數據報不會在網絡中無限傳輸,讓它傳一會就死掉
-
協議字段 數據部分使用的的協議(傳輸層使用的協議)
-
首部檢驗和:
首部的這些字段中,諸如生存時間、片偏移、標識每經過一個路由器都會發生變化。首部檢驗和就是看整個首部有沒有變化到出錯。
-
源地址
-
目的地址 32位IP地址
-
可選字段 可有可無。有的話,可能會增強一些功能。
-
填充字段。補0 自然要填充成4B的整數倍,呼應首部長度4B單位的要求
IP數據報分片的過程
以太網中,鏈路層的數據部分最大傳輸單元MTU1500字節。
而鏈路層的數據部分就是一個IP數據報,也就是一個IP數據報的整個長度都不能超過1500字節! 要是IP數據報的首部是20字節,那么數據部分的最大長度就是1480字節
對於有的IP數據報的長度要是超過1500B,多數情況都需要分片 ,分成IP分組;但是也有例外,要是IP數據報不同意分組,這個數據報就不能傳輸給鏈路層封裝,就返回一個錯誤,ICMP錯誤!
分片的話,就要結合IP數據報的三個字段:
-
標識: 同一數據報的分片 都會使用相同的標識。最終組合起來就是靠着標識
-
標志:
標志字段有三位,只要后兩位有意義 \(X ~\_~\_\)
中間位表示"禁止分片", don't fragment (DF):1 表示不許分片 0 :表示允許分片
最低位表示 "更多分片" more fragment (MF) :1 表示后面還有分片
0: 表示后面沒有分片/最后一個分片了
-
片偏移:
IP數據報分組分片后,某一個片在原來片中的相對位置,以8B為單位。解決中間分片的位置關系 , 占13bit 除了最后一個分片,每一個分片都是8B的整數倍
這個MTU是1420 不同數據鏈路層協議的MTU不同
分片2的偏移量是 \(1400B /8=175\)
分片3的偏移量 \(2800B /8=350\)
IP數據報格式幾個字段格式單位區分:
總長度 ——1B
首部長度——4B
片偏移——8B