以太网帧、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包(含头和数据)总长度
- 区别:每一层的“长度”只关心本层及其上层的数据,不包括下层头部