利用ARP和ICMP协议解释ping命令(二)

时间:2021-06-01 10:32:38

一、MTU

以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit)。如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就要进行分片(Fragmentation),把数据报分成若干片,这样每一片都小于MTU。当网络上的两台主机互相进行通信时,两台主机之间要经过多个网络,每个网络的链路层可能有不同的MTU,其中两台通信主机路径中的最小MTU被称作路径MTU,Internet上标准MTU为576B(TCP)、512B(UDP)

二、以太网帧格式

利用ARP和ICMP协议解释ping命令(二)


其中的源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。

用ifconfig命令:ifconfig -a, 协议字段有三种值,分别对应IP、ARP、RARP。帧末尾是CRC校验码。
以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。ifconfig命令的输出中也有“MTU:1500”。注意,MTU这个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。


三、ARP(address resolution protocol)

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。

源主机发出ARP请求,询问“IP地址是10.0.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。如下图所示

利用ARP和ICMP协议解释ping命令(二)

APR格式:

利用ARP和ICMP协议解释ping命令(二)

硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0x0800为IP地址,后面两个地址长度对于以太网地址和IP地址分别为6和4(字节),op字段为1表示ARP请求,op字段为2表示ARP应答。

地址解析协议的处理流程如下图:

利用ARP和ICMP协议解释ping命令(二)

四、RARP(Reverse Address Resolution Protocol)

主要用于获取无盘工作站的ip地址

利用ARP和ICMP协议解释ping命令(二)


五、ICMP(Internet Control Message Protocol)

ICMP协议用于传递差错信息、时间、回显、网络信息等控制数据,如下图所示。

利用ARP和ICMP协议解释ping命令(二)

利用ARP和ICMP协议解释ping命令(二)


具体的类型和代码见下图。

利用ARP和ICMP协议解释ping命令(二)


六、利用ARP和ICMP协议解释ping程序

利用ARP和ICMP协议解释ping命令(二)

步骤a:应用程序ping会判断发送的是主机名还是IP地址,如果是主机名会调用函数gethostbyname()解析主机B,将主机名转换成一个32位的IP地址。这个过程叫做DNS域名解析。
步骤b:ping程序向目的IP地址发送一个ICMP的ECHO包
步骤c:将目标主机的IP地址转换为48位硬件地址,在局域网内发送ARP请求广播,查找主机B的硬件地址。
步骤d:主机B的ARP协议层接收到主机A的ARP请求后,将本机的硬件地址填充到应答包,发送ARP应答到主机A。
步骤e:发送ICMP数据包到主机B。
步骤f:主机B接收到主机A的ICMP包,发送响应包。
步骤g:主机A接收到主机B的ICMP包响应包。

ahuang1900@hellen1900:~$ ping www.baidu.com
PING www.a.shifen.com (180.97.33.107) 56(84) bytes of data.
64 bytes from 180.97.33.107: icmp_seq=1 ttl=49 time=27.2 ms
64 bytes from 180.97.33.107: icmp_seq=2 ttl=49 time=27.2 ms
64 bytes from 180.97.33.107: icmp_seq=3 ttl=49 time=23.6 ms
64 bytes from 180.97.33.107: icmp_seq=4 ttl=49 time=27.2 ms
64 bytes from 180.97.33.107: icmp_seq=5 ttl=49 time=23.2 ms
64 bytes from 180.97.33.107: icmp_seq=6 ttl=49 time=23.3 ms
64 bytes from 180.97.33.107: icmp_seq=7 ttl=49 time=23.4 ms
64 bytes from 180.97.33.107: icmp_seq=8 ttl=49 time=27.1 ms
64 bytes from 180.97.33.107: icmp_seq=9 ttl=49 time=27.1 ms
64 bytes from 180.97.33.107: icmp_seq=10 ttl=49 time=23.6 ms
64 bytes from 180.97.33.107: icmp_seq=11 ttl=49 time=23.5 ms
64 bytes from 180.97.33.107: icmp_seq=12 ttl=49 time=27.2 ms
64 bytes from 180.97.33.107: icmp_seq=13 ttl=49 time=27.2 ms
64 bytes from 180.97.33.107: icmp_seq=14 ttl=49 time=27.1 ms
64 bytes from 180.97.33.107: icmp_seq=15 ttl=49 time=27.2 ms