IPv4的頭部格式:html
1. Versiontcp
版本號,默認是4。測試
2. IHL(Internet Header Length)spa
就是IPv4頭部長度。這個長度的單位是32bit,通常是5,那麼頭部的長度就是5x32bit=160bit。視頻
3. DSCP(Differentiated Services Code Point),ECN(Explicit Congestion Notification)htm
原來這8字節是被定義成TOS(Type of Service),如今被RFC2474定義成Differentiated services(差別化服務)和ECN。blog
背景:隨着互聯網的發展,各類各樣的服務被提供,好比語音、視頻、流音樂、網頁、郵件等等。原來的TOS定義已經跟不上時代的須要,因此在1998年,IETF發佈了RFC 2474,將原來的TOS替換成DSCP和ECN。ip
4. Total Lengthci
整個數據包的長度,含頭部,單位爲Byte。路由
5. Identification
數據包標識,用來區分相同的包,好比ping包。
6. Flags
bit 0 : 保留,老是0
bit 1 : Don’t Fragment, DF。表示不分片。當須要發送的數據大於最長數據包限制的時候,數據須要分片發送。若是這位置1,IP模塊將不會對數據報進行分片。這種狀況下,若是IP數據報長度超過MTU,IP模塊將丟棄數據報並返回一個ICMP差錯報文。
bit 2 : More Fragment,MF。表示更多分片,除了數據報的最後一個分片外,其餘分片都要把它置1.
7. Fragment Offset
分片的位移。(2^13 – 1) x 8 = 65528 bytes, 也就是說,最大的IP數據報長度爲65528+20=65548字節。
8. Time to Live, TTL
防止數據擁塞用的,有一個初始值,好比64,每通過一個路由器自動-1,到0的時候就被銷燬。
9. Protocol
上層協議號,好比ICMP是1,TCP是6,UDP是17.
10. Header Checksum
頭部CRC校驗,詳細能夠看這裏:http://en.wikipedia.org/wiki/IPv4_header_checksum
11. Source IP Address
源IP地址
12. Destination IP Address
目標IP地址
13. Options
可選,不經常使用,後面再詳細分析。
抓包測試:
用tcpdump抓包, sudo tcpdump –ntx –i eth0 icmp
抓一下ping數據包,我這裏ping一下本身的主機craftor.org
上面一個包是發送,下面的包是返回。
0x4 | 協議版本,v4 |
0x5 | 包頭長度,5x32bit |
0x00 | 參照RFC2474,00是默認包類型 |
0x0054 | 包總長爲0x54=84 |
0x59b0 | ID |
0x4000 | 不分片,不分包 |
0x40 | TTL=64 |
0x01 | ICMP協議,ping屬於ICMP協議 |
0xbbbc | CheckSum |
0xc0a82c81 | SourceIP=192.168.44.129 |
0xc64a71c8 | DestinationIP=198.74.113.200 |
0x0800~0x3637 | Options |