1.前言
1). 什么是ping?
PING (Packet Internet Groper),因特网包探索器,用于测试网络连通性的程序。
Ping发送一个ICMP(Internet Control Messages Protocol,因特网信报控制协议);回声请求消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答)。
工作原理:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。
2). ping 过程
假设我们是Host A,现在需要访问Host C,在访问之前,我们需要知道是否与Host C网络相通,此时我们就用到了ping
Ping的四个用途:
1. ping localhost:
localhost的IP地址一般为127.0.0.1, 也称loopback(环回路由);如果此时ping不通,则表示协议栈有问题;ping 该地址不经过网卡,仅仅是软件层面
2. ping 本机IP:
ping 本机IP其实是从驱动到网卡,然后原路返回;所以如果此时ping不通,则表示网卡驱动有问题,或者NIC硬件有问题;
3. ping 网关:
所谓网关,就是连接到另外一个网络的“关卡”, 一般为离我们终端最近的路由器;可以使用ipconfig (windows)或ifconfig (Linux)查看;若此时ping不通,则为主机到路由器间的网络故障;
4. ping 目的IP:
若此步骤不成功,应该就是路由器到目的主机的网络有问题
ping的过程分为很多个步骤:
Step 1: ICMP 创建一个请求数据包(数据域中只包含字母)
Step 2: ICMP将该有效负荷交给IP协议,增加的IP头包含:源IP(Host A的IP),目标IP(Host C的IP),协议字段(0x01, ICMP的协议号),这些信息在接收方主机用来判断将数据交给哪个协议处理
Step 3: IP协议判断目的IP是处于LAN还是某个远程网络,具体的判断方法是将目标IP和子网掩码一起找出目标网络,看是否等于本地网络;
Step 4: 由于IP协议判定这是一个远程的跨网络请求,要将这一分组路由到远程网络,就必须将它发给默认路由
Step 5: 主机 Host A(192.168.1.2)要将分组数据发送到默认网关(192.168.1.1), 就必须要知道Router A接口F0/0的MAC地址
Step 6: 检查主机ARP缓存,查看默认网关IP地址是否已经被解析为一个硬件地址
若已被解析:此分组可被传送到数据链路层以组建帧(可使用arp -a查看)
若未被解析:Host A使用ARP广播(MAC广播地址为:FF-FF-FF-FF-FF-FF), Router A接受到广播后,通过F0/0口返回该口的硬件地址
Step 7: 一旦分组和硬件地址交给链路层,局域网驱动程序负责选择合适的局域网类型(本例为以太网)的介质访问方式,创建数据帧
Step 8: 一旦帧创建完成,该帧被提交到物理层;物理层将 1bit/次的方式将数据发送到物理介质中
Step 10: 将分组数据从帧中取出,并将其他部分丢弃;然后,分组被递交给以太网类型字段中列出的协议(本例为IP协议)
Step 11:IP接受该分组,并检查其目的IP
由于分组的目的IP与本路由(Router A)的配置IP不匹配,此路由将在其路由表中查找目的IP的位置
Step 12: 如果路由表中没有网络 192.168.20.0 的路由表项,则立即丢弃该分组;并向源主机Host A发送目标网络不可达的ICMP报文
Step 13: 如果在路由表中查找到了相关的路由表项,则分组将被交换到指定的输出接口
Step 14: 路由器Router A将此分组交换到F0/1的缓冲区内
Step 15: F0/1需要获得目的方设备的MAC地址(本例为Router B的F0/0 MAC地址)
查看F0/1的ARP缓存,若存在,则分组和MAC地址将被提交到数据链路层,用于数据帧的组建;
若不存在,采用路由选择协议(RIP/EIGRP/OSPF);
Step 16: 帧创建完成后,将其交给物理层,并由物理层逐比特发送到物理介质中
Step 17: Router B执行与Router A相同的操作 (即step9 - step16)
Step 18: Host C 接收到该帧,并立即运行CRC运算,若与FCS匹配,则检测帧中的目标MAC,如果同样相同,检查以太网类型值,判断网络层协议 -- 本例为IP
Step 19: 在网络层,IP接受到该分组,并对其头部进行CRC;若相同,则检查目标IP是否与本机相同;若相同,检查分组的协议字段,了解上层的交付对象 -- 本例为ICMP
Step 20: 负荷提交给ICMP;ICMP知道此为回应请求信号,ICMP将应答此请求
应答方式:首先丢弃接受到的字段,产生一个新的有效负荷作为回应字段
Step 21: 此时一个新的有效负荷产生,目标为Host A
Step 22: 将其提交给IP层,IP判断目的地址为本地LAN还是远程主机(本例为远程主机),此分组首先发到默认网关
Step 23: 重复请求包所经历的步骤,直到将应答包发送到Host A的ICMP协议为止