1. 程式人生 > 其它 >談談網路協議 – 網路層( Network)

談談網路協議 – 網路層( Network)

網路層( Network)

  • 網路層資料包(IP資料包,Packet)由首部、資料2部分組成
    • 資料:**很多時候 **是由傳輸層傳遞下來的資料段(Segment)
      • ARP、ICMP 是直接在網路層生成的,不是由傳輸層傳遞下來的

網路層首部

版本、首部長度、區分服務

  • 版本(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/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。
我的聯絡方式: