ICMP协议详解
- ICMP协议是一个网络层协议
一个新搭建好的网络,为了检测网络是否畅通;但是IP协议并不提供可靠传输,如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。所以就需要一种协议来完成这样的功能——ICMP协议 - ICMP协议的功能
1.确认IP包是否成功到达目标地址
2.通知在发送过程中IP包被丢弃的原因
我们注意以下两点:
1.ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此把它归结为网络层协议
2.ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要用ICMPv6 - ICMP报文格式
ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括在IP报头(至少20字节)、ICMP报头(至少8字节)和ICMP报文。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。如图所示:
- 类型:占1字节,表示ICMP报文的类型,从类型值来看ICMP报文可分为两大类。第一类是取值为1-127的差错报文,第二类是取值128以上的信息报文
- 代码:占一字节,表示对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型
- 校验和:这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错
ping命令
ping www.baidu.com
此处ping的是域名,不是url,域名可以通过DNS解析程IP地址
ping命令的功能
(1)能检验网络的连通性
(2)会统计响应事件和TTL(IP包中的Time To Live,生存周期)
那么如何验证的呢?
(1)ping命令会先发送一个ICMP Echo Request给对端
(2)对端接收到之后,会返回一个ICMP Echo Reply
(3)若没有返回,就是超时了,会认为指定的网络地址不存在
问题:telnet是23端口,ssh是22端口,那么ping是什么端口?
答:ping命令是基于ICMP,是在网络层。
而端口号是在传输层的内容,所以在ICMP中根本就不会关注端口号这样的信息。