Ping的实现原理

ping是定位网络通不通的一个重要手段,是用来探测本机与网络中另一台主机之间是否可达的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。

ping命令是基于ICMP协议来工作的,ping命令会发送一份ICMP回显请求报文给目标主机,并等待目标主机返回ICMP回显应达,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机间是连通的。

举一个例子来描述ping命令工作的原理

1)假设有两个主机,主机A(192.168.0.1)和主机B(192.168.0.2),现在我们要监测主机A和主机B之间网络是否可达,那么我们在主机A上输入命令:ping 192.168.0.2;

2)此时,ping命令会在主机A上构建一个 ICMP的请求数据包,然后 ICMP协议会将这个数据包以及目标IP(192.168.0.2)等信息一同交给IP层协议;

3)IP层协议得到这些信息后,将源地址(即本机IP)、目标地址(即目标IP:192.168.0.2)、再加上一些其它的控制信息,构建成一个IP数据包;

4)IP数据包构建完成后,还不够,还需要加上MAC地址,因此,还需要通过ARP映射表找出目标IP所对应的MAC地址。当拿到了目标主机的MAC地址和本机MAC后,一并交给数据链路层,组装成一个数据帧,依据以太网的介质访问规则,将它们传送出出去;

5)当主机B收到这个数据帧之后,会首先检查它的目标MAC地址是不是本机,如果是就接收下来处理,接收之后会检查这个数据帧,将数据帧中的IP数据包取出来,交给本机的IP层协议,然后IP层协议检查完之后,再将ICMP数据包取出来交给ICMP协议处理,当这一步也处理完成之后,就会构建一个ICMP应答数据包,回发给主机A;

6)在一定的时间内,如果主机A收到了应答包,则说明它与主机B之间网络可达,如果没有收到,则说明网络不可达。除了监测是否可达以外,还可以利用应答时间和发起时间之间的差值,计算出数据包的延迟耗时。

ping不需要端口号

因为ping是应用层直接使用网络层ICMP的一个例子,而端口是运输层的概念,ping并没有通过运输层的TCP和UDP等