ping缁勭綉鏂瑰紡
预置条件:
1 pc 和路由器端口的 ip 地址配置如上图,掩码均为 24 比特
2
pc 上没有 arp 表,没有到其他网段的路由表
3
,路由器没有配置任何路由协议
pc1
能够ping pc2 的过程:
1 pc1 上配置缺省路由 route add <?xml:namespace prefix = st1 />0.0.0.0 mask 0.0.0.0 192.168.1.2 ,即默认网关为 192.168.1.2 此时 pc1 发出 arp 请求报文,目的 MAC 广播,源 MAC pc1 MAC ,内容为 who has 192.168.1.2
p1
回应该报文并发送 arp 应答给 pc1 ,目的 MAC pc1 MAC ,源 mac p1 MAC ,内容为 192.168.1.2 at p1 MAC
此过程中 pc1 上和路由器上生成相应的 arp
2 pc2 上配置缺省路由 route add 0.0.0.0 mask 0.0.0.0 192.168.2.2 ,即默认网关为 192.168.2.2
与第一步相似需要配置缺省路由,有 arp 请求和应答的过程
此过程中 pc2 上合路由器上生成相应的 arp
3 ,路由器上配置静态路由192.168.1.1的下一跳是192.168.1.2192.168.2.1的下一跳是192.168.2.2----粗心大意导致这一步是错误的。路由器的作用就是桥接不同网段,所以路由器上不应该再配置路由了;只需要PC上生成相应的路由即可。
4 pc1 上执行命令 ping 192.168.2.1
pc1 上的过程:<?xml:namespace prefix = o />

首先生成 icmp 请求报文协议栈的内容
然后生成 ip 协议栈的内容,目的 ip 192.168.2.1 ,源 ip 192.168.1.1
然后查路由表没有表项匹配,按照缺省路由转发,即需要发给默认网关 192.168.1.2
再查 arp 表项,获得默认网关的 MAC ,于是封装报文链路层目的 MAC p1 MAC ,源 MAC pc1 MAC
路由器上的过程:

收到该 icmp 请求报文后解析,目的 MAC 为自己的 MAC ,则进一步解析
目的 ip 不是自己的 ip ,于是查路由表获得下一跳的端口和 ip 地址
Ip 层信息不做修改
arp 表得到下一跳的 MAC 信息
修改报文的链路层信息,将目的 MAC 修改为 pc2 MAC MAC 不变
pc2 上的过程:

收到该 icmp 请求报文后解析,目的 MAC 为自己的 MAC ,则进一步解析
目的 ip 是自己的 ip ,则进一步解析
识别是 icmp request 报文,于是构造 icmp reply 报文
首先生成 icmp 应答报文协议栈的内容
然后生成 ip 协议栈的内容,目的 ip 192.168.1.1 ,源 ip 192.168.2.1
然后查路由表没有表项匹配,按照缺省路由转发,即需要发给默认网关 192.168.2.2
再查 arp 表项,获得默认网关的 MAC ,于是封装报文链路层目的 MAC p2 MAC ,源 MAC pc2 MAC
路由器上的过程:
icmp 请求报文类似,是反向转发
pc1 上的过程:
pc1 收到 icmp reply 报文后解析,识别目的 MAC 为自己的 MAC ,则进一步解析
目的 ip 是自己的 ip ,则进一步解析
识别是 icmp reply 报文,接下来是 icmp 协议栈的工作了

 

显示在 pc1 上的结果就是 ping 通了。