目錄
解析步驟
1.版本字段(大小:4比特位)
2.首部長度(大小:4比特位)(單位:4字節)
🍜細節解釋:
3.服務類型(大小:8比特位)
位TOS字段
4.數據報長度:總長度(大小:16比特)(單位:字節)
5.? ? ?16位標識(大小:16比特)
6.? ? ? 3位標記(大小:3比特)
第1位
第2位(不分片標志位)(DF:don’t fragment)
第3位(更多分片標志位)(MF:more fragments)
7.? ?13位片偏移(大小:13比特)(單位:8字節)
8.? ?8位生存時間(TTL)
9.? ?8位協議
10.? ?16位首部校驗和
11.? ?32位源IP,32位目的IP
12.數據區域
解析步驟
對于IP,每次先去看前二十個字節。也就是說這二十字節里面的東西是固定的,每個IP報頭都是如此,不會改變。
前二十個字節就包含除了選項部分(如果存在)和數據區域。選項部分的大小,數據區域的大小是可以改變的。
然后選項的有無,數據區域的大小根據首部長度,數據報長度(總大小,單位字節)推算出來。
也就是下面的推算關系。
選項 | 首部長度 |
數據區域大小 | 數據報長度減去手部長度 |
1.版本字段(大小:4比特位)
IP的版本現在有IPv4還有IPv6。
所以這四位要么是4(二進制為:0100),要么是6(二進制為:0110)。
所以每個IP地址前面要么填0100(表示IPv4),要么填0110(表示IPv6)。
題外話:
雖然IPv6比IPv4要好,但是目前主要還是IPv4。
IPv6在我國發展的比較好,IPv4的主導是外國的,IPv4和操作系統有關,操作系統也是外國主導的。所以IPv4不可能迅速變更到IPv6。
2.首部長度(大小:4比特位)(單位:4字節)
首部長度主要是去看選項的,看有沒有選項,如果有選項,選項的大小又是多少?
首部長度------》選項有無,選項大小
🍜細節解釋:
首部長度是占四個比特位的,表示的范圍是0~15。但是最起碼報頭都有20字節,那么這是怎么表示的呢?
原來首部長度的的單位是4字節。
所以現在能表示的范圍就是0~15*4=60字節。所以最大就能表示60字節了。
60字節,減去固定的20字節,那么選項的最大就是占40字節。(二進制首部長度:1111)
最起碼要20字節。(二進制首部長度:0101)
3.服務類型(大小:8比特位)
前3位是優先級字段,已經廢用。
然后就是4位TOS字段+最后一位保留字段。最后的保留字段被設置為0.
位TOS字段
🍛第1位:最小延遲。
🍛第2位:最大吞吐量。
🍛第3位:最高可靠性。
🍛第4位:最低成本。
上面的最小延遲,最高可靠性,最低成本基本都能理解。那就解釋一下最大吞吐量。
最大吞吐量是描述網絡狀態的。單位時間內傳輸的數據量。單位是比特/s,字節/s,或者每秒數據包數。
4.數據報長度:總長度(大小:16比特)(單位:字節)
這里的單位是字節,在報頭長度那里的單位是4字節。
最大能表示65,535字節(16位無符號整數的最大值)。
然后減去報頭的最大值(60字節),所以數據區域的最大值就是(65475字節)。
這個被設計就是來看數據區域有多大。因為會有很多個IP,有粘包問題。為了讓每個IP都能被正確解包,就要看數據區域有多大。
5.? ? ?16位標識(大小:16比特)
IP協議允許數據報進行分片。
在數據鏈路層,IP可能會被分片。去適應鏈路的最大傳輸單位(MTU)。
然后在對方網絡層的時候,要能合并,就要進行區分哪些時一起的,然后進行拼接。
6.? ? ? 3位標記(大小:3比特)
第1位
目前還沒有被使用,被設置為0。
第2位(不分片標志位)(DF:don’t fragment)
如果是1,就表示數據報不能進行分片。如果數據報超過了鏈路的最大傳輸單位(MTU),這時候就會給發送方反饋數據報過大的信息。
如果是0,就表示數據報能被分片。
第3位(更多分片標志位)(MF:more fragments)
如果是1,表示后面還有很多的分片。
如果是0,表示是這個數據報的最后一個分片。
7.? ?13位片偏移(大小:13比特)(單位:8字節)
當IP數據報進行分片以后,在對方IP進行合并的時候,就要知道這是該數據報的哪一個部分。應該拼接在哪里,從哪里開始拼接。
用偏移量也能達到這個目的。
13位偏移量的單位是8字節。所有每個都是8的整數倍。
8.? ?8位生存時間(TTL)
實現是一個計數器,當計數器值為0,就丟棄這個IP數據報。并向發送方回饋超時信息。
每次經過一個路由器,它的值就會減1。
這個設計避免了網絡環回的問題。因為如果網絡換回,數據報一直在路由器之間跳來跳去,一直沒有結束,也到不了目標主機。就會影響網絡。
WIndows系統一般設置為128.
Linux系統Unix一般設置為64.
9.? ?8位協議
它的作用就是來區分上層用的什么協議,TCP還是UDP還是ICMP。
TCP為6,UDP是17,ICMP(1)。
10.? ?16位首部校驗和
這個是看IP數據報頭在傳輸的過程中是否發送錯誤。
它是采用反碼求和的方式。如果對方把接受的報頭反碼求和,看是不是等于這個數,如果對得上,就基本是對的。
它的具體計算方式是:
每個16位比特為一組,然后反碼求和。
11.? ?32位源IP,32位目的IP
用來表示發生方的IP,和接受方的IP。
標識發送方和接收方。
這個也不難理解。有了源IP,目的IP,就能進行路徑選擇。
A類(
0.0.0.0
到127.255.255.255
):用于大型網絡。B類(
128.0.0.0
到191.255.255.255
):用于中型網絡。C類(
192.0.0.0
到223.255.255.255
):用于小型網絡。D類(
224.0.0.0
到239.255.255.255
):用于多播。E類(
240.0.0.0
到255.255.255.255
):保留用于未來使用
12.數據區域
用來攜帶上層的數據。