Ping过程分析
流程如下:
1.PC1的Ping程序生成一个ICMP请求报文。
a.ICMP报文沿协议栈向下传输到IP层封装IP头包含源地址IP与目的地址IP。在此封装过程中IP层已经根据IP地址和掩码判断出了源IP与目的IP不属于同一网段.
b.ICMP报文再向下传到链路层准备进行以太帧头的封装但由于无法知道目的MAC地址暂时无法进行封装。
c.由于已经知道了源IP与目的IP不属于同一网段故PC1要查找FIB表找自己的下一跳.
如果PC1没找到下一跳则得不到下一跳的IP也得不到下一跳的MAC地址以太帧头无法进行封装于是PC1就Ping不通PC2。
如果PC1找到了下一跳得到了下一跳的IP但此时还不知道下一跳的MAC地址故PC1要发送ARP广播请求。
3.下一跳Switch a口10.1.1.2/24收到此请求以后发现请求所对应的IP地址是自己于是回复一个ARP单播应答给PC1此应答包含了10.1.1.2/24所对应的MAC地址。
4.PC1此时已经收到ARP应答得到了下一跳的MAC地址进行以太帧头的封装然后将数据报发送给Switch。
当PC1向Switch发送ARP请求时将自己的IP地址到物理地址的映射写入ARP请求中。当Switch收到PC1的ARP请求后Switch就将PC1的这一映射写入到了自己的ARP缓存中。这是因为以后很可能Switch也要向PC1进行数据传送为了以后彼此通信的方便避免总是发送ARP请求及应答减少网络上的通信。
5.Switch收到数据报文后剥掉以太帧头上送到IP层发现IP首部中的目的IP地址11.1.1.2/24不是自己需要转发故查找自己的路由表重新进行数据报文的封装。当封装到以太帧头时发现目的MAC地址11.1.1.2/24对应的MAC地址未知故Switch也要发送ARP广播请求。
6.PC2收到此请求以后发现请求所对应的IP地址是自己于是回复一个ARP单播应答给Switch此应答包含了11.1.1.2/24所对应的MAC地址。与前面Switch学习PC1的ARP映射一样PC2也相应地在自己的ARP缓存中记录了Switch b口的IP地址到物理地址的映射。
7.Switch此时已经收到ARP应答得到了PC2的MAC地址进行以太帧头的封装。然后将数据报发送给PC2。
8.PC2收到此数据报文后拆封以太帧头拆封IP首部后发现是个ICMP请求报文于是会回复一个ICMP应答报文给PC1。此时的源IP地址变成了PC2的IP地址11.1.1.2/24目的IP地址变成了PC1的IP地址10.1.1.1/24。
由于目的IP与源IP不在同一网段所以PC2也要查找FIB表经查找得知下一跳为Switch b口11.1.1.1/24。如前所述PC2的ARP缓存中已经记录了Switch b口的映射信息故不需要再向Switch发送ARP请求直接在ARP缓存中读到Switch 11.1.1.1/24的MAC地址进行封装将数据报发给Switch。
同理Switch也不需要向PC1发送ARP请求直接在自己的ARP缓存中读到PC1的MAC地址将数据报文转发给PC1。
9.PC1收到数据报文后逐层拆封以太帧头、IP首部得到ICMP应答报文显示Ping通。