IP協議&&IP首部

guojawee發表於2018-11-11

1、概述
(1) IP是TCP/IP協議族中最為核心的協議。所有的TCP,UDP,ICMP,IGMP資料都以IP資料包格式傳輸。
(2) IP提供不可靠,無連線的資料包傳送服務。
不可靠:它不能保證IP資料包能成功的到達目的地。
無連線:IP並不維護關於後續資料包的狀態資訊。每個資料包的處理都是相互獨立的。

2、IPv4報文結構
在這裡插入圖片描述
3、使用tcpdump觀察 IPv4 頭部結構
在同一臺機器上,使用telnet 127.0.0.1登陸本機,並用tcpdump抓取這個過程中telnet客戶端和telnet伺服器程式之間交換的IP資料包,操作見下圖所示:
在這裡插入圖片描述
tcpdump的-x選項,輸出資料包的二進位制碼。
4、IP分片
4.1、IP資料包格式再介紹、MTU
(1)當IP資料包長度>幀MTU時,它將被分片
(2)分片可能發生在傳送端、中專路由器,但是隻有在最終的目標機器上,分片才會重組

IP頭部中的三個欄位給IP分片和重組提供了足夠的資訊:

欄位
標識 同一個資料包的每個分片有相同的標識
片偏移 同一個資料包的分片有不同的片偏移
標誌 除了最後一個分片,其他分片的MF設為1

4.2、tcpdump測試IP分片
MTU=1500的情況下,想傳送一個長度為1501位元組的IP報文,測試在IP的分片過程。由於IP的頭部大小為20個位元組,所以需要製作出1481位元組的IP報文

  1. ping www.baidu.com -s 1473
    Q:為什麼不使用-s 1481,而使用-s 1473
    A:因為ping程式傳送一個ICMP報文,ICMP報文頭部長度為8位元組,所以實際上是1481位元組( = 1473位元組資料 + 8位元組的ICMP頭部)。
  2. sudo tcpdump -ntv -i any icmp
    可以看到,tcpdump抓取到兩個分片的報文,二者的ip相同(說明是同一個報文的分片)、偏移offset分別是0和1480、flags分別是+(不是最後一個分片)和none(最後一個分片)、length分別是1500和21。
    在這裡插入圖片描述

相關文章