码迷,mamicode.com
首页 > 其他好文 > 详细

ICMP协议

时间:2018-10-08 11:28:42      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:--   tab   格式   主机   margin   packet   ati   回复消息   无法   

 ICMP 是Internet控制报文协议,工作在网络层,用来在网络设备间传递各种差错和控制信息。它对于收集各种网络信息、诊断和排除各种网络故障具有至关重要的作用。

1、ICMP功能

?ICMP重定向:当数据发送的路径错误的时候,对方发送ICMP纠正协议以使发送端选择正确路径。

ICMP差错检测:检测两台主机之间能否正常的进行收发,使用的命令就是PingICMP Echo Request和ICMP Echo Replay分别用来查询和响应某些信息,                             进行差错检测。

ICMP错误报告

    当网络设备无法访问目标时,中间设备会自动发送ICMP目的不可达报文到发送端。ICMP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因。比如,如果网络中发生了环路,导致报文在网络中循环,最终TTL超时,这种情况下网络设备会发送TTL超时消息给发送端设备。又比如如果目的不可达,则中间的网络设备会发送目的不可达消息给发送端设备。目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息; 如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息。

2、ICMP数据包格式

技术分享图片

ICMP消息封装在IP报文中。ICMP消息的格式取

      决于Type和Code字段, 其中Type字段为消息类型,Code字段包含该消息类型的具体参数。后面的校验和字段用于检查消息是否完整。在ICMP Redirect消息中,这个字段用来指定网关IP地址,主机根据这个地址将报文重定向到指定网关。 在Echo请求消息中,这个字段包含标识符和序号,源端根据这两个参数将收到的回复消息与本端发送的Echo请求消息进行关联。尤其是当源端 目的端发送了多个Echo请求消息时,需要根据标识符和序号将Echo 请求和回复进行一一对应。

技术分享图片

 

       ICMP定义了多种消息类型,用于不同的场景。有些消息不需要Code字段来描述具体类型参数,仅用Type字段表示消息类型。比如,ICMP Echo回复消息的Type字段设置为0。 有些ICMP消息使用Type字段定义消息大类,用Code字段表示消息的具体类型。比如,类型为3的消息表示目的不可达,不同的Code值表示不可达的原因,包括目的网络不可达(Code=0)、目的主机不可达(Code=1) 、协议不可达(Code=2)、目的TCP/UDP端口不可达(Code=3) 等。 其中网络不可达指的是没有这个网段,主机不可达指的是有这个网段,但是网段里头没有这台主机,端口不可达指的是主机没有开放这个端口(最常用),协议不可达指的是不支持这个协议号。

3、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每次会发5个包,ping通的情况下会回5个包,每个包显示字节数,序列号。TTL值和延迟

如果丢包,会恢复丢包率,最小延迟平均延迟最大延迟

--10.0.0.2 ping statistics---

5 packet(s) tranamitte

5 packet(s) received

0.00% packet loss

Round-trip min/avg/max=10/88/340  ms

 

Tracert

Tracert和Ping的区别是 Tracert是一种追踪的状态,可以追踪到数据走的哪个端口

Tracert使用的端口号比较大,大到接受端无法识别

Tracert使用的TTL值从1开始加

Tracert每次发送3个一样的包,以防止丢失,只要回来一个包就可以

主机A向第一个路由器发送TTL值,TTL值为1

第一个路由器A收到TTL值减1,当TTL=0时 代表超时 便不能向前转发,此时返回给主机A 捎带路由器A的地址

主机A下次发数据包 TTL=2 路由器B收到后 TTL减为0 超时返回 捎带路由器B的地址

以此类推 直到主机B

主机B收到一个超大端口 不能识别 回复一个目的不可达的信号 主机A收到这个信号 直到信息已达主机B

 

ICMP协议

标签:--   tab   格式   主机   margin   packet   ati   回复消息   无法   

原文地址:https://www.cnblogs.com/lipengfei159263/p/9752994.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!