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地址。
报文格式
