ICMP协议
ICMP(Internet Control Message Protocol)Internet控制协议。它是TCP/IP协议的议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要报文的协议,它对于网络安全具有极其重要的意义。 [3] 它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
ICMP 是 TCP/IP 模型中网络层的重要成员,与 IP 协议、ARP 协议、RARP 协议及 IGMP 协议共同构成 TCP/IP 模型中的网络层。ping 和 tracert是两个常用网络管理命令,ping 用来测试网络可达性,tracert 用来显示到达目的主机的路径。ping和 tracert 都利用 ICMP 协议来实现网络功能,它们是把网络协议应用到日常网络管理的典型实例。
网络层级 | 作用 | 协议 |
---|---|---|
链路层 | 负责节点之间数据的传输控制和寻址 | ATM, PPP 等 |
网络层 | 负责数据包的路由和转发 | IP, ICMP, OSPF 等 |
传输层 | 负责数据端到端之间的具体传输行为控制 | TCP, UDP 等 |
应用层 | 负责不同应用使用的通信协议的数据封装 | HTTP, SMTP, FTP, DNS, SSH 等 |
为什么会出现第一个Ping包会丢失
ping两个不同网段的ip地址时,会出现第一个包丢失。
在数据链路层是通过MAC地址进行寻址,网络层通过IP地址进行寻址。
过程
1.PC1 ICMP包的目的地址是不同于自身网段的,那么会先朝Gateway发一个ARP广播,获取Gateway的MAC。
2.此时,Gateway会把自己的MAC通过ARP包response给PC1。
3.PC1收到Gateway的ARP Response之后,直接将ICMP包发给192.168.1.1。
注意这个ICMP协议包的目的地址其实是192.168.2.10,目标MAC地址是网关192.168.1.1的MAC地址。
4.PC1把数据包发给Gateway的时候,Router发现这个数据是给192.168.2.10的。
但是Router第一次还不知道这个IP的MAC地址,所以不能直接将ICMP协议包发给目的IP。
所以Router会把第一个ICMP包丢弃,并通过ARP获取PC2的MAC地址。
然后发一个ARP,寻找192.168.2.10的MAC地址。
5.这样一来,Router就会在ARP表中缓存PC2的MAC地址,那么PC1跨网段发送至PC2的ICMP包就不会出现丢包的情况。
在第一次跨网段通信时,计算机1判断目标地址不在同一个网段。那么要通过路由网关来实现跨网段通信。会先发一个ARP给路由,获得网关的MAC。然后知道网关MAC后,会将ICMP包携带着目标ip,网关mac发给网关。网关第一次也没有目标ip的mac,所以也要先发一个arp找到目标mac,缓存下来。但是路由忙不过来,就会丢掉计算机1发的icmp包,而去发arp包获得目的ip的mac。
这样第一次跨网段通信就会产生第一次包丢失问题,后续就建立好正常通信了。
wireshark抓包
PC1 ARP表中没有对方的MAC地址,发送ICMP包之前会先进行ARP广播获取对方的MAC地址,然后生成ARP表,如下图所示:
原文始发于微信公众号(不知名菜鸟):为什么第一个Ping包会丢失/超时
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/240652.html