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 包被丢弃的原因
我们需要注意几点
1、ICMP 是基于 IP 协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议
2、ICMP 只能搭配 IPv4 使用,如果是 IPv6 的情况下, 需要是用 ICMPv6
二、ICMP 的报文格式
ICMP 报文包含在 IP 数据报中,IP 报头在 ICMP 报文的最前面。
一个 ICMP 报文包括 IP 报头(至少 20 字节)、ICMP 报头(至少八字节)和 ICMP 报文(属于ICMP报文的数据部分)。
当 IP 报头中的协议字段值为 1 时,就说明这是一个 ICMP 报文。ICMP 报头如下图所示。
类型 | 说明 |
---|---|
类型 | 占一字节,标识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 协议实现的。 功能:打印出可执行程序主机,一直到目标主机之前经历多少路由器,在路由器上跟踪数据包路径的命令。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论