ping的详细过程

ping是我们在Linux中测试网络连接的常用指令。首先ping是应用程序,而不是协议,它利用ICMP【Internet control message protocol 因特网控制报文协议】报文检测网络连接。

首先假设A ping B
1.ping通知系统建立一个固定格式的ICMP请求数据包。
2.ICMP协议打包这个数据包和B的IP地址转交给IP协议层
3.IP层协议将机器B的IP地址为目的地址,本机的IP地址为源地址,加上一些头部必要的控制信息,构建一个IP数据包
4.获取B的MAC地址,做这个操作首先机器A会判断B是否在同一网段内,若IP层协议通过B的IP地址和自己的子网掩码,发现它跟自己属于同一网络,就直接在本网络查找这台机器的MAC,否则则通过路由器进行类似查找。
接下来是ARP协议根据IP地址查找MAC地址的过程:
若两台机器之前有过通信,在机器A的ARP缓存表里应该存有B的IP与其MAC地址的映射关系。
若没有,则通过发送ARP请求广播,得到回应的B机器MAC地址,并交给数据链路层

5.数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址是本机的MAC地址,再附加一些必要的控制信息,依据以太网的介质访问规则将他们传送出去

6.机器B收到这个数据帧后,先检查目的地址,和本机MAC地址对比:
符合,接受。接收后检查该数据帧。将IP数据包从帧中提取出来,交给本机的的IP地址协议层协议,IP协议层检查之后,将有用的信息提取给ICMP协议,后者处理,马上构建一个ICMP应答包,发送给A,其过程和主机A发送ICMP请求包到B的过程类似,但不用ARP广播收取A的信息,因为请求包中已经有足够的信息用于B回应A。
若不符合,丢弃。

可以知道PING的过程即一段发送报文和接受确认报文的过程,在来回直接可以计算时延。其过程简单,但其中还包括了一步ARP协议请求,广播请求,单播回应的过程。其他都是正常IP数据包的发送和接受

转自:https://www.cnblogs.com/cherishry/p/5717387.html

原文地址:https://www.cnblogs.com/kuronekonano/p/11135666.html