Ping命令的执行过程和应用协议以及ARP协议

ICMP协议

ICMP“Internet Control Message Ptotocol”的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。

控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。在网络中经常会使用到ICMP协议。例如经常用于检查网络不通的ping命令,这个ping的过程实际上就是ICMP协议工作的过程。还有跟踪路由的trancert命令也是基于ICMP协议的。

Ping命令

ping.exe的原理

向指定的IP地址发送一定长度的数据包,按照约定,若指定IP地址存在的话,会返回同样大小的数据包,当然,若在特定时间内没有返回,就是“超时”,会被认为指定的IP地址不存在。由于ping使用的是ICMP协议,有些防火墙软件会屏蔽ICMP协议,所以有时候ping的结果只能作为参考,ping不通并不一定说明对方IP不存在。

Ping命令过程

机器A ping 机器B

同一网段

  • ping通知系统建立一个固定格式的ICMP请求数据包
  • ICMP协议打包这个数据包和机器BIP地址转交给IP协议层(一组后台运行的进程,与ICMP类似)
  • IP层协议将以机器BIP地址为目的地址,本机IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包
  • 获取机器BMAC地址

IP层协议通过机器BIP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络查找这台机器的MAC

若两台机器之前有过通信,在机器AARP缓存表应该有BIP与其MAC的映射关系;若没有,则发送ARP请求广播,得到机器BMAC地址,一并交给数据链路层

数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址是本机的MAC地址,再附加一些控制信息,依据以太网的介质访问规则,将他们传送出去
机器B收到这个数据帧后,先检查目的地址,和本机MAC地址对比

符合,接收。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP协议层协议。IP层检查后,将有用的信息提取交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B类似(这时候主机B已经知道了主机AMAC地址,不需再发ARP`请求);不符合,丢弃。

不同网段

  • ping通知系统建立一个固定格式的ICMP请求数据包
  • ICMP协议打包这个数据包和机器BIP地址转交给IP协议层(一组后台运行的进程,与ICMP类似)
  • IP层协议将以机器BIP地址为目的地址,本机IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包
  • 获取主机BMAC地址

IP协议通过计算发现主机B与自己不在同一网段内,就直接交给路由处理,就是将路由的MAC取过来,至于怎么得到路由的MAC地址,和之前一样,先在ARP缓存表中寻找,找不到可以利用广播。路由得到这个数据帧之后,再跟主机B联系,若找不到,就向主机A返回一个超时信息。

Ping结果

  • Request timed out:对方与自己不在同一网段内,通过路由也无法到达;对方已关机,或者网络上没有这个地址;对方存在,不过设置了ICMP数据包过滤;错误设置IP地址
  • Destination host Unreachable:自己未设定默认路由,对方跟自己不在同已网段。
  • Bad ip address:没有连接到DNS服务器,无法解析IP,也可能是IP不存在
  • Source quench received:对方或中途服务器繁忙而无法应答
  • Ping 127.0.0.1:如果ping不通,则表明本地址TCP/IP协议不能正常工作

ARP协议

什么是ARP协议?

网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口。因此我们需要进行IP地址与物理地址之间的转化。对于IPv4来说,我们使用ARP地址解析协议来完成IP地址与物理地址的转化(IPv6使用邻居发现协议进行IP地址与物理地址的转化,它包含在ICMPv6中).ARP协议提供了网络层地址(IP地址)到物理地址(mac地址)之间的动态映射。ARP协议 是地址解析的通用协议。

工作流程

  • 每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址(以太网地址)之间的对应关系。

  • 主机(网络接口)新加入网络时(也可能只是MAC 地址发生变化,接口重启等), 会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。

  • 网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。

  • 某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。

  • 当本网络的所有主机收到该 ARP 数据包时:

    ​ 首先检查数据包中的IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包。

    ​ 如果是,则首先从数据包中取出源主机的 IPMAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。

    ​ 然后将自己的 MAC地址写入ARP响应包中告诉源主机自己是它想要找的MAC地址。

  • 源主机收到 ARP 响应包后。将目的主机的 IPMAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP查询失败。

获取目的端的MAC地址(在一个以太网中)步骤

  • 发送ARP请求的以太网数据帧给以太网上的每个主机,即广播(以太网源地址填全1)。ARP请求帧中包含了目的主机的IP地址。
  • 目的主机收到了该ARP请求之后,会发送一个ARP应答,里面包含了目的主机的MAC地址。

报文格式