简单了解ICMP协议

参考:

最近有同学面试遇到问题:ping是基于TCP还是UDP的?
不熟悉网络协议的同学可能就栽了跟头。
这里,我们来具体了解一下。

ping命令是什么协议?

维基百科介绍:

ping是一种电脑网络工具,用来测试数据包能否通过IP协议到达特定主机。ping的运作原理是向目标主机传出一个ICMP echo@要求数据包,并等待接收echo回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。

可以知道,ping基于ICMP协议。

ICMP属于哪一层?

查阅书籍《TCP/IP协议族》,第9章“网络控制报文协议(ICMP)”,我们可以看到下面这一段话:

IP协议还缺少主机和管理查询所需要的机制。主机有时候需要判断某个路由器或者是对方主机是否活跃。有时网络管理员也需要来自其他主机或路由器的信息。
网络控制报文协议(ICMP)是设计来弥补上述两个遗憾的,它是IP协议的伴侣。图9.1给出了ICMP协议在网络层中的位置,以及它与IP及其他协议之间的关系。

ICMP

查看《TCP/IP协议详解卷1》,第6章“ICMP:Internet控制报文协议”:

ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。
ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。

由此可见,ICMP位于网络层,与IP属于同一层。

进一步验证

我们进一步查看权威的资料,找到RFC 792文档:

The Internet Protocol (IP) [1] is used for host-to-host datagram
service in a system of interconnected networks called the
Catenet [2]. The network connecting devices are called Gateways.
These gateways communicate between themselves for control purposes
via a Gateway to Gateway Protocol (GGP) [3,4]. Occasionally a
gateway or destination host will communicate with a source host, for
example, to report an error in datagram processing. For such
purposes this protocol, the Internet Control Message Protocol (ICMP),
is used. **ICMP, uses the basic support of IP as if it were a higher
level protocol, however, ICMP is actually an integral part of IP, and
must be implemented by every IP module**.

大意就是:

ICMP协议是用于host到host之间的数据报服务,目的host与源host进行通信时,ICMP会用到,比如通过处理数据报报告一个错误。
ICMP基于IP,以至于它看起来像一个上层协议,但是实际上是IP的一部分,而且必须在每个IP模块中实现。

至于ICMP的详细作用以及帧结构定义,这里不再赘述,读者自行了解。

抓包实践

使用WireShark抓包。
打开cmd,ping一下百度:

ping baidu

在WireShark中输入过滤规则,只抓ICMP协议,结果如下:

wireshark ping

可以看出,ICMP下层是IPv4,并没有TCP或者UDP。

至此,我们已经证明ICMP确实是IP层的一员。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值