请求帧如下(为了清晰在每行的前面加了字节计数,每行16个字节):
以太网首部:目的主机采用广播地址,源主机的MAC地址是00:05:5d:61:58:a8,上层协
议类型0x0806表示ARP。
ARP帧:硬件类型0x0001表示以太网,协议类型0x0800表示IP协议,硬件地址(MAC地
址)长度为6,协议地址(IP地址)长度为4,op为0x0001表示请求目的主机的MAC地址,源
主机MAC地址为00:05:5d:61:58:a8,源主机IP地址为c0 a8 00 37(192.168.0.55),目的
主机MAC地址全0待填写,目的主机IP地址为c0 a8 00 02(192.168.0.2)。
由于以太网规定最小数据长度为46字节,ARP帧长度只有28字节,因此有18字节填充
位,填充位的内容没有定义,与具体实现相关。
应答帧如下:
以太网首部:目的主机的MAC地址是00:05:5d:61:58:a8,源主机的MAC地址是
00:05:5d:a1:b8:40,上层协议类型0x0806表示ARP。
ARP帧:硬件类型0x0001表示以太网,协议类型0x0800表示IP协议,硬件地址(MAC地
址)长度为6,协议地址(IP地址)长度为4,op为0x0002表示应答,源主机MAC地址为
00:05:5d:a1:b8:40,源主机IP地址为c0 a8 00 02(192.168.0.2),目的主机MAC地址为
00:05:5d:61:58:a8,目的主机IP地址为c0 a8 00 37(192.168.0.55)。
思考题:如果源主机和目的主机不在同一网段,ARP请求的广播帧无法穿过路由器,源
主机如何与目的主机通信?
IP数据报格 式
IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍。对于IPv4,4位
版本字段是4。4位首部长度的数值是以4字节为单位的,最小值为5,也就是说首部长度最小
是4x5=20字节,也就是不带任何选项的IP首部,4位能表示的最大值是15,也就是说首部长
度最大是60字节。8位TOS字段有3个位用来指定IP数据报的优先级(目前已经废弃不用),
还有4个位表示可选的服务类型(最小延迟、最大?吐量、最大可靠性、最小成本),还有一
个位总是0。总长度是整个数据报(包括IP首部和IP层payload)的字节数。每传一个IP数据
报,16位的标识加1,可用于分片和重新组装数据报。3位标志和13位片偏移用于分片。
TTL(Time to live)是这样用的:源主机为数据包设定一个生存时间,比如64,每过一个路
由器就把该值减1,如果减到0就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该
包,因此这个生存时间的单位不是秒,而是跳(hop)。协议字段指示上层协议是TCP、
UDP、ICMP还是IGMP。然后是校验和,只校验IP首部,数据的校验由更高层协议负责。IPv4
的IP地址长度为32位。