计算机网络——p1 ping p2过程详解


转载自:
p1 ping p2过程分析

IP数据包的交换转发 PC1 ping PC2 过程分析

pc1的ip地址为1.1.1.1,pc2的ip地址为1.1.1.2,两者通过交换机sw1连接。

在pc1上ping pc2,即pc1向 pc2发起icmp请求。此时pc1上生成一个icmp请求报文,来判断pc2的存在性(根据数据包封装原理,要生成icmp请求需要有目的IP地址和目的MAC地址,此处即pc2的地址,其中pc2的ip地址是pc1上发起ping时我们写入的。因此需要找到pc2的MAC地址即可。

即:pc1若要将这个ICMP协议封装的请求发送给目标主机pc2就必须要使用IP协议来“运输”该请求。这样,IP协议这个时候就充当了一个邮差的角色,将ICMP这个数据包写上发送者(pc1)的IP地址和接收者(pc2)的IP地址,然后就可以根据这个目标地址(pc2的地址)来“投递”这个数据包了)。

在pc1封装的时候pc1会查看自己的arp表中是否有pc2的MAC地址,由于是一个新连接的网络,pc1发现自己没有pc2的MAC地址,但是icmp请求报文又必须需要。

1)pc1会生成一个arp请求包,请求pc2的MAC地址(pc1触发ARP协议来请求pc2的MAC地址,补全自己的arp表项)。arp请求包的目的MAC(Dst MAC)为全f,全f的MAC地址是广播MAC,能在自己的广播域中达到任何一个网口上,arp请求包广播出去后到达交换机sw1。

2)sw1收到arp请求包:

先把pc1的mac地址,添加到自己的mac表中,以方便转发需要(交换转发属于链路传输层转发,主要依靠mac表,让到达不同mac地址的数据包在对应的接口上转达出去)。

然后发现此arp请求中目的mac为广播mac,sw1将报文从除feth10口之外的其余接口广播出去到达pc2 。

3)pc2收到arp请求包,对此数据包进行解析(查看arp数据部分)

先把pc1的mac,加入自己的arp表中。

查看arp请求包的请求数据部分。

若被请求mac(Target MAC address)对应的ip地址(Target IP address)是自己的,则pc2生成对应的arp应答包以单播方式回应pc1的arp请求;

若PC2查看到收到的请求地址不是自己,PC2只更新自己的arp表不进行回应。

4)pc2发出的arp应答包到达sw1,将此arp应答包从feth10发送出去。

首先sw1更新自身mac表,添加pc2的mac地址。

然后sw1需要转发此arp应答包。此包为单播包,sw1需要查自身的mac表找到对应的接口转发。由于在arp请求包经过sw1时已经添加了pc1的mac地址,在mac表项中能够找到对应的转发接口:feth10。

5)pc1收到目的mac地址为自身的此arp应答包,进行解封装。

首先pc1记录pc2的mac地址添加到自身的arp表中。

没有完成的icmp请求包就可以在自身的arp表中找到pc2的mac地址从而继续封装icmp请求报文。

6)sw1收到pc1发来的icmp请求包,从feth11发送出去给pc2。

sw1先查找自己的arp表

发现目的mac在自己的arp表中对应的接口为feth11

将icmp请求包发出去。

7)pc2收到icmp请求包,回应pc1的询问。

pc2查看icmp请求包

发现目的mac为自己,将包解封装,发现目的ip是自己的。

继续解封装,发现这是一个icmp请求包,查看自己是否存在。

pc2作为一个正常电脑,生成对应的icmp应答包回应pc1。

8)sw1查找自己的arp表,将icmp请求包从feth10发送出去到达pc1。

9)pc1收到icmp应答包

查看icmp应答包,发现目的mac为自己的地址,将包解封装,发现目的ip也是自己。

继续解封装,查看数据部分正是pc2对自己的icmp请求包发出的icmp应答包。

10)pc1获取应答数据产生屏幕显示,告诉我们探测结果。

此时PC1 ping PC2就完成了。

IP数据包的路由转发 过程分析

pc1的ip地址为1.1.1.1 默认网关为1.1.1.254

pc2的ip地址为1.1.2.2 默认网关为1.1.2.254 网关地址均位于路由器r1上。

1)pc1向pc2发出ping,即pc1向 pc2发起icmp请求(此时需要pc1上封装成一个icmp请求报文,判断pc2的存在性)。

2)pc1会生成一个arp请求包,请求pc2的MAC地址(新组的网络pc1上没有pc2的mac地址,因此需要发出arp请求)。

对于pc1发出的arp请求包来说,Dst MAC为全f,全f的MAC地址是广播MAC,能在自己的广播域中达到任何一个网口上。此时的组网是路由环境,pc1和pc2的掩码运算后发现不是同一网段的地址,全f的Dst MAC到达r1上,r1是不支持转发扩散。

需要pc1(发起端)对于探测不同网段ip地址时做出一定的判断,pc1的icmp请求报文的目的mac只要封装成网关的就足够(体现出路由转发环境端机要设置网关的必要性)。

3)pc1添加了路由器r1上feth10接口的mac(通过arp协议),封装完成了icmp请求包。

icmp请求包的源地址自身的mac和ip,目的地址是网关的mac和pc2的ip。

4)r1收到pc1发来的icmp请求包,然后发一个ARP请求包。

r1查看icmp请求包,发现目的mac为自己的mac地址

将包解封装,发现探测的目的ip是pc2。

r1通过自己的直连路由转发出去(r1上配置有pc2同网段的ip地址)

但r1并不知道pc2的mac,r1首先要发一个ARP请求包,询问pc2的mac地址。

5)pc2收到r1的arp请求包,pc2发出arp应答包到达r1。

首先添加r1的mac到自己的arp表中。

然后查看此arp请求包(发现是要请求自己的mac地址)

于是pc2封装对应的arp应答包给r1(基于arp协议规则)。

6)r1收到arp应答包,对pc1发出的icmp询问包进行路由转发封装。

首先添加pc2的mac到自己的arp表中。

然后根据生成的对应arp表项,继续对pc1发出的icmp询问包进行路由转发封装。需要通过pc2的直连路由从feth11发出到pc2(根据路由器r1的路由表可知)

此时该icmp询问包的源地址是pc1的mac和ip,目的ip是pc2的ip不会变,目的mac变成了pc2的mac。

7)pc2收到icmp请求包,解封装查看自己是否存活,向pc1发送icmp应答包

查看icmp请求包,发现目的mac为自己

将包解封装,发现目的ip也是自己

继续解封装,发现这是一个icmp请求包,查看自己是否存活。

pc2向pc1发送icmp应答包(目的ip为pc1的ip,目的mac为网关mac,源ip为自己的ip,源mac是自己的mac)。

8)r1收到icmp应答包(pc2发来的),封装好通过直连路由转发给pc1。

此时arp缓存表中已经有了pc2的mac。

然后查看icmp请求包,发现目的mac为自己的mac地址

将包解封装,发现目的ip为pc1的ip地址,通过自己的直连路由转发出去。

r1将icmp应答包封装好以后再转发给pc1。

9)pc1收到icmp应答包

发现目的mac为自己的mac地址

开始将包解封装,发现目的ip是自己的ip

继续解封装,发现pc2对自己发出的icmp请求包对应的icmp应答包。10)pc1产生屏显告知pc2的探测结果。

10)此时PC1 ping PC2就完成了。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值