ICMP协议详解
Posted 两片空白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ICMP协议详解相关的知识,希望对你有一定的参考价值。
ICMP协议
一.概念
ICMP协议是一个网络层协议。和IP协议处于同一层,但是ICMP协议底层用的是IP协议。
一个搭建好的网络,往往需要先进行简单的测试,来验证网络是否通畅。单单使用IP协议并不提供可靠性传输。似乎用IP协议如果丢包,并不能通知传输层是否丢包以及丢包原因。
ICMP协议,如果在网络中丢包,会返回一个丢包原因给传输层。
二.ICMP作用
- 确认IP包是否成功达到目标IP。
- 通知在发送过程中的IP包被丢弃的原因。
注意:
- ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍把它归结于网络层协议。
- ICMP只能搭配IPv4使用。如果是IPv6的情况下,需要使用ICMPv6。
三.ICMP报文格式
由于ICMP底层用的是IP协议,所以ICMP报文是IP协议的有效载荷。
所以IP报头的协议字段可能代表的是ICMP/TCP/UDP,当协议字段为1时,代表ICMP。
由下可知ICMP报头一共8字节。
- 类型:1字节,说明该报文属于什么类型。
- 代码:1字节,说明ICMP报文的代码。
- 检验和:2字节,检验ICMP报文是否有错误。
ICMP类型分两类:
- 通知出错原因
- 用于诊断查询
类型分类:
四.基于ICMP协议的命令
4.1 ping命令
作用:验证网络连通性,统计响应时间和IP数据包的生存时间TTL。
注意:ping的时一个域名,而不是url网址,域名可以通过DNS解析成IP地址。
ping命令执行细节
- ping命令会发送一个ICMP Echo Request给对端
- 对端接收后,返回一个ICMP Echo Reply
- 注意是在主机A网络层发出ICMP Echo Request,再主机B接收到网络层,再发出ICMP Echo Reply
问题:ping是否有端口号?
没有,ping命令基于ICMP,再网络层,端口号是传输层的内容。ICMP根本就不关注端口号。
4.2 traceroute命令
基于ICMP协议实现,能够打印出可执行程序主机到目标主机之间尽力了多少路由器。
说明:
- 记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关。
- 我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间
- 有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
以上是关于ICMP协议详解的主要内容,如果未能解决你的问题,请参考以下文章
ICMP协议 详解,ICMP协议的功能及实现原理,ICMP协议报文类型。
TCP/IP详解 卷1:协议—ICMP:Internet控制报文协议
TCP/IP详解 卷1:协议—ICMP:Internet控制报文协议
TCP/IP详解 卷1:协议—ICMP:Internet控制报文协议