工具:Cisco Packet Tracer
本机:PC1 192.168.1.3/24
对方:PC2 192.168.1.1/24
我们知道,ping命令是属于ICMP协议的,属于OSI七层模型的第三层,当我们在第三层想将ping包封装上IP地址后,需要先发送给第二层封装目的IP对应的MAC地址,但由于我们是第一次ping对方,所以ARP缓存表为空,需要先通过ARP协议来获取对方IP地址对应的MAC地址。
开始实验:
192.168.1.3/24第一次发送ping的请求包给192.168.1.1/24。
可以在表上发现两设备间都发送过哪些包的全过程。
**
我们一步一步来解析发生了什么。
自己第一次进行ping请求,ICMP为第三层协议,先再第三层封装好源IP和目的IP,然后发往自己的第二层
(图示的内层表示本设备接收,外层表示本设备发送)
自己的第二层查找对方IP对应MAC地址,发现没有ARP缓存记录
于是将ping请求先暂停,进行ARP请求(目的是为了拿到对方IP对应的MAC地址)
ARP请求是将目的IP设置为全F,表示匹配任何人,即进行广播,当前冲突域内的所有主机都会收到该请求,收到请求时,第二层目的MAC地址识别为全F后会发往自己的第三层解析目的IP,如果目的IP匹配,则响应ARP请求,反之则直接将包丢弃。
对方接收ARP请求,将包的目的IP等信息与自己匹配,并记录对方IP与MAC到自己的ARP缓存表,然后将自己的IP、MAC地址等信息通过ARP响应发送出去。
自己接收到ARP响应,更新自己的缓存表:
有了缓存表,自己就可以继续继续ICMP协议的ping请求:
对方接收ping包:第一层物理端口匹配,第二层MAC地址匹配,第三层IP地址匹配,然后就成功接收ping请求,进行ping响应:
自己接收到ping响应:
全过程完成。