ICMP

您所在的位置:网站首页 icmp报文协议 ICMP

ICMP

2023-08-06 11:10| 来源: 网络整理| 查看: 265

曾经看过这样的一道面试题,ICMP报文是基于什么传输层协议进行传输的?顺着他的思路传输层的两个主要协议TCP和UDP,区别也就是在于是否需要保证传输的可靠性。当时还没有系统的学习过ICMP的报文结构和组成,因此也没有过多思考,基于TCP。实际上,ICMP报文是不基于传输层的协议进行传输的,它只是对IP功能的一个补充。

ICMP报文通过IP报文发送,ICMP报文当做是IP数据包的数据部分,而IP数据包又被放到了以太网的数据帧中的数据区。我们知道IP数据报的首部有一个协议类型的字段,这个部分封装的是传输层的协议的类型,当IP数据部分为ICMP报文时,这里的首部协议类型字段也将改为1,表示为ICMP报文。

                                                                  

那么,ICMP到底是什么样的报文,它有什么用处吗?首先,ICMP报文分为了三类:差错控制类,请求/应答类,通知类。这三类报文包括了所有的ICMP报文的类型。

我们先看看ICMP报文的结构:

                                                           

ICMP的不同的报文的类型中,首部的结构是确定的。其中校验和部分和IP首部的校验和的计算方法相同,并且这个计算方法贯穿于整个的ICMP报文中。

类型1:差错控制类报文

发送差错控制类的报文的规则如下:

ICMP差错控制报文的数据区包括发生差错的ip数据包的首部和数据区的至少前64bit。仅能向数据包的源端发送差错控制报文,不能向中间的路由器报告差错。当携带差错控制的报文发生差错时,不再报告差错。对于进行了分片的ip数据包,紧能对第一个分片应用ICMP协议。

差错控制类报文分类:                 

目的站不可达;当路由器无法转发或者交付数据时,使用icmp报文通知数据包的发送者,并且告诉不可达的原因。超时报文;发送超时报文的两种情况:1 TTL值为0  2 数据报分片重组超时。参数错误报告;不是以上两种情况的错误时,就会向源主机报告此报文。 类型2:请求/应答类报文 回送请求和回送应答报文;测试网络的连通性的时候,可以用这种类型的报文,ping 的应用。地址掩码请求和应答报文;当主机使用子网编码时,为了知道本网络中的子网掩码,主机可以向路由器发送地址掩码请求报文,路由器收到这个报文后,发送携带有掩码的应答报文。(此时,主机可能知道路由器的IP地址,这时就直接发给路由器,也肯那个不知道ip地址,这时就要以广播的方式进行发送,路由器收到后再单播给主机。)时戳请求和应答报文;路由器通告和路由器恳求报文;通告报文:是路由器在网络中定时的向主机发送自己存在的通告,告诉主机自己还在正常的运行着。恳求报文:这个报文是主机发送的,用于需找默认的路由(注意,这两种报文都是可以主动发送的,当一种报文发送后,另外的一种报文在接收方作为响应报文发送给发送方。) 类型3:单向通知控制类报文 源站抑制报文;这种报文产生的原因是:路由器接收的数据是有上限的,不能无限的接收,当路由器中缓冲区快满时,路由器会向源主机发送这种类型的报文,告诉主机要降低发送速度。如果一段时间内,源主机没有收到源站抑制的报文,就会提高发送速度。重定向报文;路由器选路时,不一定都选择最近的路,优化路由选路。我们回到开始提出的问题,icmp到底是基于什么传输层的协议的,答案是它根本不基于传输层的协议,只是封装在了ip数据包中。 ICMP报文的应用:

ping    traceroute指令

ICMP 协议应用总结:(2019年4月)

我们知道网络通信是双向的,数据包必须在两个设备之间进行传输。这样才能保证数据的交互。如果某一个方向的路由不正常的话,通信就会产生问题。

在使用ping命令进行网络测试时,会产生各种错误,我们如何使用各种错误代码及提示信息来判断网络问题?下面给出几种常见的ping 命令错误提示:

目的主机不可达(destination host unreachable)  

在router3未配置到router2的路由时,产生目的主机不可达,

表明是中间PC1与PC0之间的节点出现故障,又因为router2是直连目的网络的路由器,所以定位到Router3,没有到达目的网络的路由。

请求超时(request time out)

在Router3上配置到达目的网络的路由后,思科配置指令如下:

Router3(config)# ip route 172.16.3.0 255.255.255.0 172.16.2.10  

原因是,在请求数据包发送至PC0后,PC0向PC1发送数据包过程中,不能到达PC1,因此这个数据包被Router2丢弃,过一段时间后,不能响应PC1,请求超时。

在Router2中添加到达PC1所在的网络的路由。

Router2 (config)# ip route 172.16.1.0 255.255.255.0 172.16.2.20  

由上图可知,网络连通了。

其他情况下可能ping不通 某些路由器,主机,或者中间的防火墙等设置了禁止ping的数据包。多路由负载均衡场合。比如Ping远端目的主机,成功的reply和timed out交错出现,结果发现在网关路由器上存在两条到目的网段的路由,两条路由权重相等,但经查一条路由存在问题。网络因设备间的时延太大,造成ICMP echo报文无法在缺省时间(2秒)内收到。时延的原因有若干,比如线路(卫星网时延上下星为540毫秒),香港服务器租用路由器处理时延,或路由设计不合理造成迂回路径。使用扩展Ping,增加timed out时间,可Ping通的话就属路由时延太大问题。引入NAT的场合会造成单向Ping通。NAT可以起到隐蔽内部地址的作用,当由内Ping外时,可以Ping通是因为NAT表的映射关系存在,当由外发起Ping内网主机时,就无从查找边界路由器的NAT表项了。指定源地址的扩展Ping.登陆到路由器上,Ping远程主机,当ICMP echo request从串行广域网接口发出去的时候,路由器会指定某个IP地址作为源IP,这个IP地址可能不是此接口的IP或这个接口根本没有IP地址。而某个下游路由器可能并没有到这个IP网段的路由,导致不能Ping通。可以采用扩展Ping,指定好源IP地址。IP地址分配不连续。地址规划出现问题象是在网络中埋了地雷,地址重叠或掩码划分不连续都可能在Ping时出现问题。比如一个极端情况,A、B两台主机,经过多跳相连,A能Ping通B的网关,而且B的网关设置正确,但A、B就是Ping不通。经查,在B的网卡上还设有第二个地址,并且这个地址与A所在的网段重叠。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3