icmp和ping的区别
扫描二维码
随时随地手机看文章
ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。
ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。在Unix/Linux,序列号从0开始计数,依次递增。而Windows ping程序的ICMP序列号是没有规律。
ICMP协议在实际传输中数据包:20字节IP首部 + 8字节ICMP首部+ 1472字节《数据大小》38字节
ICMP报文格式:IP首部(20字节)+8位类型+8位代码+16位校验和+(不同的类型和代码,格式也有所不同)
首先icmp和arp是没有关系的!icmp承载于网络层他的协议号好像是1,其中有8种类型比如host不可达、超时等这是用来测试网络连通性的一种控制信息协议。ARP是以太网技术中最重要的一种协议地址解析协议,它承载于osi第二层类型号好像是806,因为以太网是多路访问的一种,所以为了解析其以太网物理MAC地址必须要用ARP协议,这种协议发送的request包中目标MAC地址为全1广播地址,reply包以自己的mac和IP地址为源,目标地址以目标主机MAC和IP地址为目标封装成帧后发送出去!虽然说它是链路层协议,但是他有网络层的概念IP地址,我抓包看到过ARP协议中有协议类型800这是IP协议的类型,因为他要用IP地址来解析MAC地址,所以每个网络层以上的设备都会有基于ARP的缓存,路由交换设备中的命令是show arp !windows中的命令是arp -a,
有了这种缓存大大提高了互联网访问速度!好了说了这么多可能楼主认为我说的是废话!那么我就开始所问所答了!
第一,ping命令是ICMP的一种形式,它属于ICMP,当然tracert也属于ICMP!ICMP与ARP没有任何关系,一个是网络层协议,一个是数据链路层协议!在功能方面上也没有什么交集的地方,唯一共同点就是都涉及IP地址。
第二,我不会写什么UBOOT代码,但是既然承载在internet上那么他就应该遵循网络体系结构为了让网络统一化,IEEE和国际标准化组织iso统一定义了接入层及上层协议标准!当你ping时会发送ARP帧是因为你在以太网的环境中,为什么会发送ARP是因为在计算机刚刚启动的时候是没有对方主机的通信地址的!
ping是为了测试与对方主机的连通性,所以需要知道对方主机的地址虽然你知道了目的的IP地址,但还需要其MAC地址,所以在ping之前就会发送ARP帧,主机中ARP默认缓存老化时间应该是10分钟。也就是说,自ARP解析10分钟后ARP缓存条目会自动清除。
第三,arp帧发送和恢复确实不一样!一个用广播一个是单播
Ping工作过程——假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内,则当你在主机A上运行“Ping 192.168.1.2”后,都发生了些什么呢?
首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个映射表中查找出IP地址192.168.1.2所对应的物理地址(也叫MAC地址,熟悉网卡配置的朋友不会陌生,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
其中映射表由ARP实现。ARP(Address ResoluTIon Protocol)是地址解析协议,是一种将IP地址转化成物理地址的协议。ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。
主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。
即先由IP地址,在网络层传输,然后再根据mac地址由数据链路层传送到目的主机