ip頭部最長是60字節,前面的20字節是固定的,選項可加上40字節linux
4位版本號--- 對於ipv4來講呢,就是4tcp
4位頭部長度 --- 表示 有多小個32bit(4字節),4位最大表示數是15啦,也就是最大就是15啦,因此頭部最長就是60啦blog
8位服務類型 --- 已經不用了ip
16總長度---ip數據報長度 因此最大長度爲 65535啦路由
16位標識-- 分片的時候用的 get
3位標誌 --- 第一位保留 第二位 禁止分片 第三位 表示更多分片hash
13位偏移 --- 相對ip數據報的開始處it
8位生存時間 ---ttl 當變爲0的時候拋棄request
8 位協議 ---- 指應用層協議,區分上層協議im
16位校驗和 ---- 數據的hash值啦
32 位 原端 和目的端ip地址
選項 包括有
1 記錄路由
2 時間戳
3 鬆散路由
4 嚴謹 路由
下面來分析一下
tcpdump -i eth0:1 -ent '(dst 192.168.5.190 and src 192.168.5.109)or( dst 192.168.5.109 and src 192.168.5.190)' –X
bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 74: 192.168.5.109 > 192.168.5.190: ICMP echo request, id 1, seq 72, length 40
0x0000: 4500 003c 7da4 0000 4001 70a1 c0a8 056d E..<}...@.p....m
0x0010: c0a8 05be 0800 4d13 0001 0048 6162 6364 ......M....Habcd
0x0020: 6566 6768 696a 6b6c 6d6e 6f70 7172 7374 efghijklmnopqrst
0x0030: 7576 7761 6263 6465 6667 6869 uvwabcdefghi
0x4 表明ip版本號
0x5 頭部長度爲 5個32位(20個字節)
0x00 說明tos沒有開啓
0x003c 說明 數據報總長度 60字節
0x7da4 數據報標示
0x0 沒有設置標誌位
0x000 分片偏移
0x40 ttl設置爲64
0x01 表示上層協議 爲 icmp 1 ICMP # internet control message protocol (能夠查找linux的/etc/protocols )
0x70a1 校驗值
0xc0a8 056d 源ip
0xc0a8 05be 目標ip
何時會分片呢,就是數據包大的時候啦
參照下圖就最清楚啦
下面來作個試驗
ping 192.168.5.190 -l 1473
bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 20425, offset 0, flags [+], proto ICMP (1), length 1500)
192.168.5.109 > 192.168.5.190: ICMP echo request, id 1, seq 92, length 1480
bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 20425, offset 1480, flags [none], proto ICMP (1), length 21)
192.168.5.109 > 192.168.5.190: icmp
從id能夠看出
他們兩個包都是同一個包的
第一個包偏移爲0 ,flag[+] 表示MF標誌啦
第二個包偏移爲1480 flag[none]表示已經無下一個
從上個咱們能夠知道,第二個包是沒有包含icmp頭部,由於規範說第一次發了下次就不發啦