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协议打包这个数据包和机器- B的- IP地址转交给- IP协议层(一组后台运行的进程,与- ICMP类似)
- IP层协议将以机器- B的- IP地址为目的地址,本机- IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包
- 获取机器B的MAC地址
IP层协议通过机器B的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络查找这台机器的MAC。
若两台机器之前有过通信,在机器A的ARP缓存表应该有B机IP与其MAC的映射关系;若没有,则发送ARP请求广播,得到机器B的MAC地址,一并交给数据链路层
数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址是本机的MAC地址,再附加一些控制信息,依据以太网的介质访问规则,将他们传送出去
机器B收到这个数据帧后,先检查目的地址,和本机MAC地址对比
符合,接收。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP协议层协议。IP层检查后,将有用的信息提取交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B类似(这时候主机B已经知道了主机A的MAC地址,不需再发ARP`请求);不符合,丢弃。
不同网段
- ping通知系统建立一个固定格式的- ICMP请求数据包
- ICMP协议打包这个数据包和机器- B的- IP地址转交给- IP协议层(一组后台运行的进程,与- ICMP类似)
- IP层协议将以机器- B的- IP地址为目的地址,本机- IP地址为源地址,加上一些其他的控制信息,构建一个- IP数据包
- 获取主机B的MAC地址
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地址,如果不是,则忽略该数据包。-  如果是,则首先从数据包中取出源主机的 - IP和- MAC地址写入到- ARP列表中,如果已经存在,则覆盖。-  然后将自己的 - MAC地址写入- ARP响应包中告诉源主机自己是它想要找的- MAC地址。
- 源主机收到 - ARP响应包后。将目的主机的- IP和- MAC地址写入- ARP列表,并利用此信息发送数据。如果源主机一直没有收到- ARP响应数据包,表示- ARP查询失败。
获取目的端的MAC地址(在一个以太网中)步骤
- 发送ARP请求的以太网数据帧给以太网上的每个主机,即广播(以太网源地址填全1)。ARP请求帧中包含了目的主机的IP地址。
- 目的主机收到了该ARP请求之后,会发送一个ARP应答,里面包含了目的主机的MAC地址。
报文格式
