tcpdump分析IP協(xié)議

IP協(xié)議是互聯(lián)網最基礎的協(xié)議,在使用tcpdump查看數據包的時候,有時候對一些字段的漢所以不是很明確

比如:

[tenmao@localhost ~]$ sudo tcpdump -i any -n icmp -vvvv
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
21:11:21.505189 IP (tos 0x0, ttl 64, id 36112, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.58.100 > 14.215.177.38: ICMP echo request, id 61852, seq 1, length 64
21:11:21.509826 IP (tos 0x0, ttl 128, id 49303, offset 0, flags [none], proto ICMP (1), length 84)
    14.215.177.38 > 192.168.58.100: ICMP echo reply, id 61852, seq 1, length 64

我們仔細對照IP協(xié)議來分析上面的內容

IP協(xié)議字段解釋


IP協(xié)議頭
  • 版本號:IP協(xié)議的版本。對于IPv4來說值是4
  • 頭部長度:4位最大為0xF,注意該字段表示單位是字(4字節(jié))
  • 服務類型(Type Of Service,TOS):3位優(yōu)先權字段(現(xiàn)已被忽略) + 4位TOS字段 + 1位保留字段(須為0)。4位TOS字段分別表示最小延時、最大吞吐量、最高可靠性、最小費用,其中最多有一個能置為1。應用程序根據實際需要來設置 TOS值,如ssh和telnet這樣的登錄程序需要的是最小延時的服務,文件傳輸ftp需要的是最大吞吐量的服務
  • 總長度: 指整個IP數據報的長度,單位為字節(jié),即IP數據報的最大長度為65535字節(jié)(2的16次方)。由于MTU的限制,長度超過MTU的數據報都將被分片傳輸,所以實際傳輸的IP分片數據報的長度遠遠沒有達到最大值

下來的3個字段則描述如何實現(xiàn)分片:

  • 標識:唯一地標識主機發(fā)送的每一個數據報,其初始值是隨機的,每發(fā)送一個數據報其值就加1。同一個數據報的所有分片都具有相同的標識值

  • 標志: 位1保留,位2表禁止分片(DF),若設置了此位,IP模塊將不對數據報進行分片,在此情況下若IP數據報超過MTU,IP模塊將丟棄數據報并返回一個ICMP差錯報文;位3標識更多分片(MF),除了數據報的最后一個分片,其他分片都要把它設置為1

  • 位偏移:分片相對原始IP數據報數據部分的偏移。實際的偏移值為該值左移3位后得到的,所以除了最后一個IP數據報分片外,每個IP分片的數據部分的長度都必須是8的整數倍

  • 生存時間:數據報到達目的地之前允許經過的路由器跳數。TTL值被發(fā)送端設置,常設置為64。數據報在轉發(fā)過程中每經過一個路由該值就被路由器減1.當TTL值為0時,路由器就將該數據包丟棄,并向源端發(fā)送一個ICMP差錯報文。TTL可以防止數據報陷入路由循環(huán)

  • 協(xié)議: 區(qū)分IP協(xié)議上的上層協(xié)議。在Linux系統(tǒng)的/etc/protocols文件中定義了所有上層協(xié)議對應的協(xié)議字段,ICMP為1,TCP為6,UDP為17

  • 頭部校驗和: 由發(fā)送端填充接收端對其使用CRC算法校驗,檢查IP數據報頭部在傳輸過程中是否損壞

  • 源IP地址和目的IP地址: 表示數據報的發(fā)送端和接收端。一般情況下這兩個地址在整個數據報傳遞過程中保持不變,不論中間經過多少個路由器

  • 選項:可變長的可選信息,最多包含40字節(jié)。選項字段很少被使用??捎玫腎P可選項有:

    • 記錄路由: 記錄數據包途徑的所有路由的IP,這樣可以追蹤數據包的傳遞路徑
    • 時間戳: 記錄每個路由器數據報被轉發(fā)的時間或者時間與IP地址對,這樣就可以測量途徑路由之間數據報的傳輸的時間
    • 松散路由選擇: 指定路由器的IP地址列表數據發(fā)送過程中必須經過所有的路由器
    • 嚴格路由選擇: 數據包只能經過被指定的IP地址列表的路由器
    • 上層協(xié)議(如TCP/UDP)的頭部信息

tcpdump抓取二進制數據

  • 二進制數據
[tenmao@localhost ~]$ sudo tcpdump -i any -nxt icmp -vvvv
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
IP (tos 0x0, ttl 64, id 8012, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.58.100 > 14.215.177.38: ICMP echo request, id 9198, seq 1, length 64
    0x0000:  4500 0054 df3d 4000 4001 a060 c0a8 3a64
    0x0010:  0ed7 b127 0800 cbae 472e 0001 5d71 a35c
    0x0020:  0000 0000 1e81 0700 0000 0000 1011 1213
    0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223
    0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233
    0x0050:  3435 3637

IP頭部對照解析

IP (tos 0x0, ttl 64, id 8012, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.58.100 > 14.215.177.38: ICMP echo request, id 9198, seq 1, length 64
4500 0054 1f4c 4000 4001 6053 c0a8 3a64
字段 協(xié)議 內容 對應的tcpdump文字描述
0x4 4位的版本號 IP版本號
0x5 4位的頭部長度 頭部長度為5個字(20字節(jié))
0x00 8位的服務類型TOS 普通服務 tos 0x0
0x0054 16位的總長度 數據包總長度(84字節(jié)) length 84
0x1f4c 16位的標識 數據報標識 id 8012
0x4 3位的標志 禁止分片,因沒攜帶數據 flags [DF]
0x000 13位的位偏移 為0表沒發(fā)生位偏移 offset 0
0x40 8位的生存時間 生存時間為64跳 ttl 64
0x01 8位的協(xié)議字段 為1表上層協(xié)議是ICMP協(xié)議 proto ICMP (1)
0x6053 16位的IP頭部校驗和 頭部校驗和
0xc0a8 3a64 32位的源端IP地址 源端IP地址192.168.58.100 192.168.58.100
0x0ed7 b126 32位的目的端IP地址 目的端IP地址14.215.177.38 14.215.177.38

更多字段

tos(Type of Service):

8個優(yōu)先級的定義如下:
111--Network Control(網絡控制);
110--Internetwork Control(網間控制);
101--Critic(關鍵);
100--Flash Override(疾速);
011--Flash(閃速);
010--Immediate(快速);
001--Priority(優(yōu)先);
000--Routine(普通)

常見proto協(xié)議號

  • 1 ICMP Internet 控制消息
  • 6 TCP 傳輸控制
  • 17 UDP 用戶數據報

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容