談談網路協議 – 網路層( Network)
阿新 • • 發佈:2021-08-13
網路層( Network)
- 網路層資料包(IP資料包,Packet)由首部、資料2部分組成
- 資料:**很多時候 **是由傳輸層傳遞下來的資料段(Segment)
- ARP、ICMP 是直接在網路層生成的,不是由傳輸層傳遞下來的
- 資料:**很多時候 **是由傳輸層傳遞下來的資料段(Segment)
網路層首部
版本、首部長度、區分服務
-
版本(Version)
- 佔4位
- 0b0100:IPv4
- 0b0110:IPv6
-
首部長度(Header Length)
- 佔4位,二進位制乘以4才是最終長度
- 0b0101:20(最小值)
- 0b1111:60(最大值)
-
區分服務(Differentiated Services Field)
-
佔8位
-
可以用於提高網路的服務質量(QoS,Quality of Service)
-
可實現優先傳輸
-
總長度
- 總長度(Total Length)
- 佔16位
- 首部 + 資料的長度之和,最大值是65535
- 由於幀的資料不能超過1500位元組,所以過大的IP資料包,需要分成片(fragments)傳輸給資料鏈路層
- 每一片都有自己的網路層首部(IP首部)
標識、標誌
- 標識(Identification)
- 佔16位
- 資料包的ID,當資料包過大進行分片時,同一個資料包的所有片的標識都是一樣的
- 有一個計數器專門管理資料包的ID,每發出一個數據包,ID就加1
- 標誌(Flags)
- 佔3位
- 第1位(Reserved Bit):保留
- 第2位(Don't Fragment):1代表不允許分片,0代表允許分片
- 第3位(More Fragments):1代表還有更多片,0代表是最後一片,沒有更多片
片偏移
- 片偏移(Fragment Offset) 當資料包過大時,分包後,用來標識當前資料是哪個位置的
- 佔13位
- 片偏移乘以8:位元組偏移 (為了能儲存更多的數值,才只儲存除以8之後的數值)
- 每一片的長度一定是8的整數倍
- 片偏移值為:上一個片在整個包中的前面偏移值 + 總長度
以下是 3800位元組的資料包,拆成3片
ping - 高階用法
-
ping /?
- 檢視ping的用法
-
ping ip地址 -l 資料包大小
- 傳送指定大小的資料包
-
ping ip地址 -f
- 不允許網路層分片
-
ping ip地址 -i TTL
- 設定TTL的值
-
通過tracert、pathping命令,可以跟蹤資料包經過了哪些路由器
案例:ping ke.qq.com -l 4000 ,傳送一個4000位元組的包,拆分後的各項值
-
片1
- 總長度:1500
- 首部:20
- 資料長度:1480
- 偏移值:0
-
片2
- 其它同上
- 偏移值:1480
- 偏移值表示的是在資料中的偏移值,不包括首部
-
片3
-
其它同上
-
資料長度:1068
-
偏移值:2960
-
抓包注意點,如果包被分片後,當包沒有傳輸到最後一個時,軟體是不知道是什麼協議的,如下圖,前2個包軟體當成了IPV4的協議,只有最後一個包也接收到的時候才能真正解析出協議是ICMP的
生存時間
- 生存時間(Time To Live,TTL)
- 佔8位
- 每個路由器在轉發之前會將TTL減1,一旦發現TTL減為0,路由器會返回錯誤報告
- 觀察使用ping命令後的TTL,能夠推測出對方的作業系統、中間經過了多少個路由器
協議、首部校驗和
- 協議(Protocol)
- 8位
- 表明所封裝的資料是使用了什麼協議
- 首部校驗和(Header Checksum)
- 用於檢查首部是否有錯誤
作者:悠悠清風
出處:https://www.ywgao.cn/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。
我的聯絡方式:[email protected]