以太網幀、IP包及TCP與UDP的報文格式
下面用通俗+技術的方式詳細解釋:
1. MAC包頭(以太網幀頭)中的長度
- 字段名稱:EtherType/Length
- 位置:以太網幀頭的第13、14字節
- 含義:
- 如果值小于等于1500(0x05DC),表示數據部分的長度(即MAC幀中數據字段的字節數,不包括MAC頭和FCS)。
- 如果值大于等于1536(0x0600),表示上層協議類型(如0x0800表示IPv4,0x0806表示ARP),此時不表示長度。
- 注意:現代以太網大多用“類型”模式(即大于1536),很少用“長度”模式。
2. IP包頭中的長度
- 字段名稱:Total Length(總長度)
- 位置:IP頭的第3、4字節(16位)
- 含義:
- 表示整個IP數據包的總長度,包括IP頭和IP數據部分(如UDP、TCP等)。
- 單位:字節
- 舉例:如果IP頭20字節,UDP數據28字節,則Total Length=48。
3. UDP包頭中的長度
- 字段名稱:Length
- 位置:UDP頭的第5、6字節(16位)
- 含義:
- 表示整個UDP報文的長度,包括UDP頭(8字節)和UDP數據部分。
- 單位:字節
- 舉例:UDP頭8字節,數據20字節,則Length=28。
4. 三者的區別與聯系
包頭類型 | 長度字段含義 | 計量范圍 | 典型值 |
---|---|---|---|
MAC頭 | 數據字段長度或上層協議類型 | MAC幀數據部分 | 46~1500字節 |
IP頭 | IP包總長度(含頭和數據) | IP頭+IP數據 | 20~65535字節 |
UDP頭 | UDP包總長度(含頭和數據) | UDP頭+UDP數據 | 8~65535字節 |
- MAC長度:只管以太網幀的數據部分,不關心IP/UDP頭。
- IP長度:從IP頭開始到IP包結束,包含IP頭和所有上層數據(如UDP/TCP)。
- UDP長度:從UDP頭開始到UDP數據結束,包含UDP頭和UDP數據。
層級關系(外層包住內層):
MAC幀頭 | IP包頭 | UDP包頭 | UDP數據
- MAC頭的“長度”只管IP包(及其后面所有內容)的長度。
- IP頭的“總長度”包含UDP頭和UDP數據。
- UDP頭的“長度”只包含UDP頭和UDP數據。
5. 舉例說明
假設你有一個UDP數據包,UDP數據為20字節:
- UDP頭長度 = 8 字節
- UDP包總長度 = 8 + 20 = 28 字節
- IP頭長度 = 20 字節
- IP包總長度 = 20 + 28 = 48 字節
- MAC幀頭長度 = 14 字節(不計入長度字段)
- MAC幀數據長度 = 48 字節(即IP包總長度)
總結
- MAC頭長度:以太網幀數據部分長度(或類型)
- IP頭長度:IP包(含頭和數據)總長度
- UDP頭長度:UDP包(含頭和數據)總長度
- 區別:每一層的“長度”只關心本層及其上層的數據,不包括下層頭部