ICMP [INTERNET CONTROL MESSAGE PROTOCOL] 网络层协议

一、简介

ICMP 协议是一个网络层协议。

一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。

如果丢包了,IP 协议并不能通知传输层是否丢包以及丢包的原因。所以我们就需要一种协议来完成这样的功能,ICMP 协议。

ICMP全名为(internet control message protocol)网络控制消息协议。 ICMP 的协议号为 1。 ICMP 报文就像是 IP 报文的小弟,总顶着 IP 报文的名头出来混。因为 ICMP 报文是在 IP 报文内部的

ICMP 协议的功能

1、确认 IP 包是否成功到达目标地址

2、通知在发送过程中 IP 包被丢弃的原因

ICMP [INTERNET CONTROL MESSAGE PROTOCOL] 网络层协议

我们需要注意几点

1、ICMP 是基于 IP 协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议

2、ICMP 只能搭配 IPv4 使用,如果是 IPv6 的情况下, 需要是用 ICMPv6

二、ICMP 的报文格式

ICMP 报文包含在 IP 数据报中,IP 报头在 ICMP 报文的最前面。

一个 ICMP 报文包括 IP 报头(至少 20 字节)、ICMP 报头(至少八字节)和 ICMP 报文(属于ICMP报文的数据部分)。

当 IP 报头中的协议字段值为 1 时,就说明这是一个 ICMP 报文。ICMP 报头如下图所示。

ICMP [INTERNET CONTROL MESSAGE PROTOCOL] 网络层协议

类型说明
类型占一字节,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为 1~127 的差错报文,第2类是取值 128 以上的信息报文
代码占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型
校验和这是对包括 ICMP 报文数据部分在内的整个 ICMP 数据报的校验和,以检验报文在传输过程中是否出现了差错(其计算方法与在我们介绍IP报头中的校验和计算方法是一样的)

ICMP 大概分为两类报文

1、通知出错原因

2、用于诊断查询

类型(十进制)内容
0回送应答
3目标不可达
4原点抑制
5重定向或改变路由
8回送请求
9路由器公告
10路由器请求
11超时
17地址子网请求
18地址子网应答

三、ICMP 典型运用—ping

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 中根本就不关注端口号这样的信息。

ping baidu.com    // 注意, 此处 ping 的是域名,不是 url

ping -t // 一直 ping 下去

ping -l // 使用大包 ping

ping -i // 更改数据包的 TTL 时间。能够跟踪数据包途径的路由器

使用 ping 命令还可以粗略估计(不精确)一下对方是什么操作系统: ttl 是生存时间,每过一个路由器 ttl 都减1,当 ttl=0 时还没到达目的地,数据包就会被丢弃。 ttl 128 windows ttl 64 linux ttl 的最大值为 255

四、pathping(windows)

跟踪数据包路径,计算丢包情况

五、ICMP 典型运用—tracert(traceroute)

traceroute 也是基于 ICMP 协议实现的。 功能:打印出可执行程序主机,一直到目标主机之前经历多少路由器,在路由器上跟踪数据包路径的命令。

以上是 ICMP [INTERNET CONTROL MESSAGE PROTOCOL] 网络层协议 的全部内容, 来源链接: utcz.com/p/233503.html

回到顶部