写给非网工的CCNA教程(4)聊聊ping命令后的原理(续)

本文基于ARP、IP、ICMP协议基础,以PC-A ping PC-B为例讲解ping命令原理。先明确A、B已知和未知信息,介绍路由表及配置IP后生成的表项,再分析原理,包括A查路由表、ARP表,发送ARP广播获取B的MAC地址,A、B互发ICMP请求和响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    前文我们讲解了ARP协议、IP协议、ICMP协议,有了这些基础,咱们再来讲解ping命令后面的原理,就简单多了。我们以一个例子来讲解,如下图所示,PC-A【10.74.97.116 /28】要去ping PC-B【10.74.97.125 /28】,看是否能ping通。A与B之间是通过网线直连,这也是把问题简单话,现实中直连的场景还是毕竟少,不过本文是讲解ping的原理,所以其他的简化,突出重点。

1 前提

    在分析之前,我们先得搞清楚几点:

(1)对A而言,自己的IP地址、子网掩码、MAC地址这些信息都是已知的;

(2)对A而言,B的IP地址是知道的,A要去ping B,肯定会知道B的IP地址,要不然ping谁去;

(3)对A而言,B的子网掩码、MAC地址这些都是不知道的,没人告诉它。

    对B而言,也是一样。我们只分析A发送数据给B的过程,至于B回复数据给A的过程,道理是一样的。读者理解A到B的数据发送原理后,可以自己试着分析B回复数据给A的过程。

 

2 路由表简单介绍

    任何需要通过IP地址通信的设备,都会在本地维持这一个路由表。比如Windows可以通过命令【route print -4】查看路由表,Linux可以通过命令【ip route】查看。当一个设备的接口配置了IP地址并且接口状态是up的时候,会在本地路由表中,生成几条路由表项。

    例如本例中的PC-A(Windows),给网卡配置了IP地址【10.74.97.114 /24】后,会在路由表中生成以下表项。

C:\Users\wenca>route print -4

Network Destination   Netmask              Gateway       Interface      Metric
10.74.97.112          255.255.255.240      On-link       10.74.97.116   291
10.74.97.116          255.255.255.255      On-link       10.74.97.116   291
10.74.97.127          255.255.255.255      On-link       10.74.97.116   291

    可以发现A中路由表多了三条表项,第一条是到此IP所在网段(子网)的路由,第二条是到此IP自己的路由,第三条是到此IP对应的网段广播地址的路由。而且三条路由的Gateway都是On-link,表示这这三条都是直连路由。也就是去往这三个目的地,直接二层封包即可,不需要先把数据包给到Gateway,让Gateway去转发。

    本例中的PC-B(Linux),网卡配置了IP地址【10.74.97.125 /24】,对应的路由表如下所示。

root@wenca-dell:~$ ip route 

10.74.97.112/28 dev eth0  proto kernel  scope link  src 10.74.97.116

 

3 原理分析

    在A【ip地址为10.74.97.116 /28】的命令行下,敲入【ping 10.74.97.125】,如下所示。

C:\Users\wenca>ping 10.74.97.125

(1)A查找路由表:找去往B的路由

    A根据目的IP地址【10.74.97.125】,去查找自己的路由表。发现该地址【10.74.97.125】匹配了路由表知道第一条,而是找到对应的Gateway【On-link】,表示A自己与B在同一个网段。

(2)A查找ARP表:找B的MAC地址

    A发现B与自己在同一个网段,于是用B的IP地址,去找ARP表,没有找到B的IP地址对应的MAC地址。        

    然后A发送ARP广播请求,询问【10.74.97.125】对应的MAC地址是多少,如下图所示。

    B收到此广播后回复此ARP广播,告诉A自己(B)的MAC地址多少,如下图所示。

    A收到B的回复后,把B的IP地址和MAC地址映射关系写到ARP表中,方便将来的查询,如下所示。

C:\Users\wenca>arp -a

Interface: 10.74.97.116 --- 0x5
  Internet Address      Physical Address      Type
  10.74.97.125          00-50-56-89-0a-1b     dynamic  

(3)A发送ICMP请求给B,B回复

    上面完成后,A已经有了B的IP地址和MAC地址,发送ICMP请求包,如下图所示。

    B收到此ICMP请求包以后,准备回复此ICMP请求,但是没有A的MAC,而是发送ARP广播,请求A的MAC。

    A收到此ARP广播后,回复此请求,如下图所示(我的抓包过滤了A的MAC,因此不会看到B的ARP广播)。

    B收到A的ARP响应报文后,知道了A的IP地址和MAC地址,于是发送ICMP响应报文,如下图所示。

    至于后面的NO.6--NO.11,是因为Windwos上执行ping命令,默认会发送4此ICMP请求,如下图所示。

    可以看到在后面的3此ICMP交互期间,是没有ARP包的,那是因为A和B已经知道了对方的IP和MAC,记录在各自的ARP表中。

(4)在A的命令行界面下可以看到结果如下所示。

C:\Users\wenca>ping 10.74.97.125

Pinging 10.74.97.125 with 32 bytes of data:
Reply from 10.74.97.125: bytes=32 time=5ms TTL=128
Reply from 10.74.97.125: bytes=32 time=2ms TTL=128
Reply from 10.74.97.125: bytes=32 time=6ms TTL=128
Reply from 10.74.97.125: bytes=32 time=5ms TTL=128
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值