Internet控制消息协议CMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,并对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。使用基于ICMP的应用时,需要对ICMP的工作原理非常熟悉。
ICNP是TCP/IP协议簇的核心协议之一,它用于在IP网络设备之间发送控制报文,传递差错、控制、查询等信息,也就是=ping
ICMP重定向
我们PC主机端都有网关,例如主机A网关是100,他要发送报文首先向他的网关路由器打招呼,喊他帮忙整一整,RTB得和他连接得接口ip就是100,所以第一个找他,RTB检查报文信息发现不是找他,而是找他同网段的另一台网关设备,所以RTB会向主机发送redirect(重定向)消息,让他去找200的RTA,RTA则会将报文转发给服务器A。
ICMP差错检测
ICMP Echo Request和ICMP Echo Reply分别用来查询和响应某些信息,进行差错检测。
主机A向服务器A发送报文为请求报文,也就是request 服务器收到要回复,称为reply
简单来讲,抓包出来的报文,有请求,有回复的就是能够连接的,如果只有请求没有回复就是没链接对。
正常
错误
ICMP错误报告
当网络设备无法访问目标网络时,会自动发送CMP目的不可达报文到发送端设备
ICNP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,主机A可以判断出数据传输失败的原因。比如,如果网络中发生了环路,导致报文在网络中循环,且最终TTL超时,这种情况下网络设备会发送TTL超时消息给发送端设备。又比如如果目的地不可达,则中间的网络设备会发送目的不可达消息给发送端设备。目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息;如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息。
ICMP数据包格式
这里只是说ICMP数据包的格式,type表示数据包类型,code表示同一类型中不同的信息 checksum也就是校验,用于检查消息是否完整,消息中包含32比特的可变参数,checksum字段一般不使用
再ICMP的Redirect消息中,这个字段用来指定网关IP地址,主机根据这个地址将报文重定向到网关。在Echo请求消息中,这个字段包含标识符和序号,源端根据这两个参数将收到的回复消息与本端发送的Echo请求消息进行关联。尤其是当源端问目的端发送了多个Echo诘求消息时,需要根据标识符和序号将Echo诘求和回复消息进行——对应。
ICMP消息类型和编码类型
怎么再实际上用到呢,当然是抓包咯
抓了个ping包,10ping21显示为request 它的type和code分别是8和0
那么reply则是type 0 code 0
type类型为3的属于是网络报错信息,报错有很多种,所以分开为1234
ICMP的一个典型应用是Ping。Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数.等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP恨文,进行Ping测l试。
Ping常用的配置参数说明如下:
1. -a 源IP 目的IP 指定发送IGNP ECHO-REQUEST报文的源IP地址。如失不指定源IP地址,将采用出接口的IP地址作为ICNP ECHO-REQUEST报文发送的源地址。
例: ping -a 10.1.1.100 21.1.1.100
2. -c count指定发送ICMP ECHO-REQUEST报文次数。缺省情况下发送5个ICMIP ECHO-REQUEST报文。
3. -h ttl-value指定TTL的值。缺省值是255。
4. -t timeout指定发送完ICMP ECHO-REQUEST后,等待ICMP ECHO-REPLY的超时时间。
ICMP应用Tracert
TTL值 一般Windows为128 Linux为64
当我们使用Ping命令进行网络连通测试或者是测试网速的时候,本地计算机会向目的主机发送数据包,但是有的数据包会因为一些特殊的原因不能正常传送到目的主机,如果没有设置TTL值的话,数据包会一直在网络上面传送,浪费网络资源。数据包在传送的时候至少会经过一个以上的路由器,当数据包经过一个路由器的时候,TTL就会自动减1,如果减到0了还是没有传送到目的主机,那么这个数据包就会自动丢失,这时路由器会发送一个ICMP报文给最初的发送者。举个例子,如果一个主机的TTL是64,那么当它经过64个路由器后还没有将数据包发送到目的主机的话,那么这个数据包就会自动丢弃。
当我们TTL值为0的时候,将我们数据包丢弃的路由器会向我们发送一个ICMP报文,告诉我们丢了,但在这个报文中夹杂着这个路由器的IP地址等信息,所以我们可以通过控制TTL值来对网络进行排查,看问题出在了哪里,而不是摸top。。。
Tracert
Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。该报文到达第一个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时问戳信息计算往返时间。Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。Tracert常用的配置参数说明如下:
-a source-ip-address 指定tracert报文
-f first -ttl 指定初始TTL。缺省值是1。
-m max-tt1 指定最大TTL。缺省值是30。
-name 使能显示每一跳的主机名。
-p port 指定月的主机的UDP端口号
一般用不到 直接 tracert IP地址 就OK
怎么做呢,你可以先ping一下百度域名,回复得到IP过后再对得到的IP进行 tracert。。。
该总结学习于B站视频网址如下,如有总结不到之处我自己担待。
https://www.bilibili.com/video/BV1D44y1b7WW?p=8&spm_id_from=333.880.my_history.page.click
【千锋】网络安全入门基础教程_华为/思科(CCIE/HCIE)全套课程_纯干货整理_哔哩哔哩_bilibili
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)