icmp回复报文_ICMP协议全解析

news/2024/7/7 13:23:29

1、ICMP简介

ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议。

ICMP的协议号为1。

ICMP报文就像是IP报文的小弟,总顶着IP报文的名头出来混。

因为ICMP报文是在IP报文内部的,如图:

534a1701a8ccfe976d4eb4e74b677d31.png

ICMP属于TCP/IP协议族,工作在网络层(第三层),用于在IP主机、路由器之间传递控制消息。

控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

c21d625565c48cbc33aa572cb9c01577.png

2、ICMP典型运用—ping

ICMP的一个典型应用是Ping。

Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。

用户可以在Ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数、等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。

Ping常用的配置参数说明如下:

1. -a source-ip-address指定发送ICMP ECHO-REQUEST报文的源IP地址。如果不指定源IP地址,将采用出接口的IP地址作为ICMP ECHO-REQUEST报文发送的源地址。

2. -c count指定发送ICMP ECHO-REQUEST报文次数。缺省情况下发送5个ICMP ECHO-REQUEST报文。

3. -h ttl-value指定TTL的值。缺省值是255。

4. -t timeout指定发送完ICMP ECHO-REQUEST后,等待ICMP ECHO-REPLY的超时时间。

Ping命令的输出信息中包括目的地址、ICMP报文长度、序号、TTL值、以及往返时间。序号是包含在Echo回复消息(Type=0)中的可变参数字段,TTL和往返时间包含在消息的IP头中。

3、ICMP典型运用—Tracert

ICMP的另一个典型应用是Tracert。

Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。

为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。

该报文到达第一个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。

然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。

这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。

Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。

Tracert常用的配置参数说明如下:

1. -a source-ip-address指定tracert报文的源地址。

2. -f first-ttl指定初始TTL。缺省值是1。

3. -m max-ttl指定最大TTL。缺省值是30。

4. -name使能显示每一跳的主机名。

5. -p port指定目的主机的UDP端口号。

4、ICMP类型

ICMP报文主要有两大功能:查询报文和差错报文。

对于查询报文,常用的ping命令,以及用于无盘系统启动获取网络子网掩码查询报文,以及时间戳报文,目标主机收到返回相应的格式的回应包;

对于差错报文在一些情况下目标主机不会返回对应的数据包:

1fee49d675bd58bdc22e128c92d81f25.png

5、目的不可达(Destination Unreachable Message)

1fbdf186367c7dfc336b66819fb37df4.png

日常生活中,邮寄包裹会经过多个传递环节,任意一环如果无法传下去,都会返回寄件人,并附上无法邮寄的原因。

同理,当路由器收到一个无法传递下去的IP报文时,会发送ICMP目的不可达报文(Type为3)给IP报文的源发送方。

报文中的Code就表示发送失败的原因。

Code

0 = net unreachable;

1 = host unreachable;

2 = protocol unreachable;

3 = port unreachable;

4 = fragmentation needed and DF set;

5 = source route failed.

6、超时(Time Exceeded Message)

43f864def64c13ef1fa9bef04a41df7c.png

网络传输IP数据报的过程中,如果IP数据包的TTL值逐渐递减为0时,需要丢弃数据报。

这时,路由器需要向源发送方发送ICMP超时报文(Type为11),Code为0,表示传输过程中超时了。

一个IP数据报可能会因为过大而被分片,然后在目的主机侧把所有的分片重组。

如果主机迟迟没有等到所有的分片报文,就会向源发送方发送一个ICMP超时报文,Code为1,表示分片重组超时了。

7、参数错误报文(Parameter Problem Message)

c785804c7f32126e39ae7fc7bf208f92.png

当路由器或主机处理数据报时,发现因为报文头的参数错误而不得不丢弃报文时,需要向源发送方发送参数错误报文(Type为12)。

当Code为0时,报文中的Pointer表示错误的字节位置。

8、源冷却(Source Quench Message)

37c8adc6957a2fd2449f65a0ef8826c3.png

路由器在处理报文时会有一个缓存队列。

如果超过最大缓存队列,将无法处理,从而丢弃报文。

并向源发送方发一个ICMP源冷却报文(Type为4),告诉对方:“嘿,我这里客满了,你迟点再来。”

9、重定向(Redirect Message)

671864475ee9c425d7bacd8ec0ff1f4d.png

想像一下,在公司中,有人来你的项目组问你某某某在哪儿。

你一想,我们组没有这人啊。

你肯定就会说,我们组没有这号人,你去其他组看看。

当路由收到IP数据报,发现数据报的目的地址在路由表上没有,它就会发ICMP重定向报文(Type为5)给源发送方,提醒它想要发送的地址不在,去其他地方找找吧。

10、请求回显或回显应答(Echo or Echo Reply Message)

ce4bbb96a812e3104d8e9bc622dba32d.png

Type(8)是请求回显报文(Echo);

Type(0)是回显应答报文(Echo Reply)。

请求回显或回显应答报文属于查询报文。

Ping就是用这种报文进行查询和回应。

11、时间戳或时间戳请求(Timestamp or Timestamp Reply Message)

时间戳报文是用来记录收发以及传输时间的报文。

Originate Timestamp记录的是发送方发送报文的时刻;

Receive Timestamp记录的是接收方收到报文的时刻;

Transmit Timestamp表示回显这最后发送报文的时刻。

12、信息请求或信息响应

053c380b168d20a172acb1a2bbd91f93.png

这种报文是用来找出一个主机所在的网络个数(一个主机可能会在多个网络中)。

报文的IP消息头的目的地址会填为全0,表示this,源地址会填为源IP所在的网络IP。

b5b6033373f8d72ed952382c9cef5669.png

3b10fd3fb47a3eeaadfdc124952ec97b.png

好了,今天的分享就到这了~

也可以加我的微信一起交流学习?

 b44b8015672a6fc40ec5ba169ef1f4ad.png

39fb0285a27e2c47ba41c7885b53cc07.png

6902a2ae49cf2454098f3b482e8bf0ef.gif

为了方便广大网络爱好学习者一起学(聚)习(众)交(搞)流(基),特开设QQ群-思科华为资料库④群:797202429(①②③群已满),里面已经上传大量网络学习资料,欢迎广大网络工程师进群学习!

87bb6dced55d568d6107880dc1ae2c34.png

扫我入群?

c607a7aac3f78a7728cad7d6ef4c3621.png

我就知道爱学习的你“在看” f143aae546a87205a9e174ce802865d9.gif

http://www.niftyadmin.cn/n/3938203.html

相关文章

maven 打包时缺少文件_jenkins+maven应如何动态打包不同配置文件

概述很多时候我们在用jenkins打包的时候,肯定有很多环境,例如生产环境、测试环境、开发环境等等,那么jenkinsmaven应如何动态打包不同配置文件呢?下面简单介绍下怎么设置和其中的配置是怎么关联起来的。1、pom.xml配置先看下pom.x…

为空 判断_Form表单submit提交时的非空判断

概要使用Form表单提交信息时&#xff0c;可能我们需要对输入的信息进行判断&#xff0c;如果没有输入内容或者全部输入空格则不能进行提交&#xff0c;从而达到简单的信息过滤&#xff0c;这里使用的是JS来进行判断。实例代码&#xff1a;# Form表单 <form class"form-…

tplink连接服务器失败_tplink路由器网络已连接但是上不了网怎么办?

问&#xff1a;本人家里用的tplink路由器&#xff0c;现在问题是电脑和手机都可以连接到tplink路由器网络&#xff0c;但是连接网络后却上不了网。请问大家这是什么原因造成的&#xff0c;我要怎么办&#xff1f;答&#xff1a;能够连接到tplink路由器的网络但上不了网&#xf…

Linux主要的常用命令(玩Linux的人士不得不学哦!)

Linux虽然是免费的&#xff0c;但它的确是一个非常优秀的操作系统&#xff0c;与MS&#xff0d;WINDOWS相比具有可靠、 稳定、速度快等优点,且拥有丰富的根据UNIX版本改进的强大功能。下面&#xff0c;作为Linux爱好者&#xff0c;让我们一起来学习Linux的一些主要命令&#xf…

dubbo service注解用法_被事务代理的spring service 不能使用注解方式发布dubbo服务的问题解决...

问题:使用 com.alibaba.dubbo.config.annotation.Service 发布dubbo服务的时候,当服务类没有加入Transactional的时候没有问题.但是当加入事务后,spring bean 事务代理, dubbo的 AnnotationBean 扫描 类执行下面的代码的时候就获取不到对应的注解,也就发布不了服务:Service ser…

CISCO认证介绍

Cisco认证是互联网界具有极大声望的网络技能认证。其总体认证体系包括路由和交换网络支持&#xff08;售后工程师认证体系&#xff09;&#xff0c;路由和交换网络设计&#xff08;售前工程师认证体系&#xff09;和广域网交换网络设计和支持几大部分。同时&#xff0c;Cisco公…

【一只蒟蒻的刷题历程】 【洛谷】 高精度乘法

洛谷 / 题目列表 / 题目详情 P1303 A*B Problem 题目描述 求两数的积。 输入格式 两行&#xff0c;两个整数。 输出格式 一行一个整数表示乘积。 输入输出样例 输入 #1 1 2 输出 #1 2 说明/提示 每个数字不超过 102000 &#xff0c;需用高精。 思路&#xff1a; …

apache转发tomcat路径_Apache + Tomcat环境如何配置URL转发

一、准备相关软件a) Apache HTTP Server 2.2(http://httpd.apache.org/download.cgi )b) Tomcat 6.0 (http://tomcat.apache.org/ )c) Apache Tomcat Connector(http://tomcat.apache.org/connectors-doc/ )mod_jk-1.2.31-httpd-2.2.3.so 对应Apache HTTP Server 2.2的版本二、…