文章标题

来源:互联网 发布:UC数据库设计 编辑:程序博客网 时间:2024/05/01 04:25

ICMP简介

ICMP 网际控制报文协议---internet control message protocol

icmp一般被认为是ip的一个组成部分。

icmp向源节点报告关于向目的地址传输IP数据包的错误和信息。

icmp报文通常被ip层或更高层的协议(TCP/UDP)使用。

===================================

报文格式:
这里写图片描述

类型字段有15个不同的值,以描述特定类型的icmp报文。某些icmp报文还用代码字段的值来进一步描述不同的条件。

校验和覆盖整个icmp报文。icmp的校验和是必须的。

这里写图片描述

差错报文有时候需要经过特殊处理。在对ICMP差错报文进行响应时,永远不会生成另一份差错报文。

当发送一份I C M P差错报文时,报文始终包含I P的首部和产生I C M P差错报文的I P数据报的前8个字节。这样,接收I C M P差错报文的模块就会把它与某个特定的协议(根据I P数据报首部中的协议字段来判断)和用户进程(根据包含在I P数据报前8个字节中的T C P或U D P报文首部中的T C P或U D P端口号来判断)联系起来。

下面各种情况都不会导致产生I C M P差错报文:
1) ICMP差错报文(但是,I C M P查询报文可能会产生I C M P差错报文)。
2) 目的地址是广播地址或多播地址的I P数据报。
3) 作为链路层广播的数据报。
4) 不是I P分片的第一片
5) 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地
址或多播地址。
这些规则是为了防止过去允许I C M P差错报文对广播分组响应所带来的广播风暴。

============================

I C M P地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。
ICMP 地址掩码请求报文。

这里写图片描述

I C M P报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回。这样,发送端就可以把应答与请求进行匹配。用于确认特定的包。

============================================

icmp时间戳请求与应答

I C M P时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间( Coordinated Universal Time, UTC)(早期的参考手册认为U T C是格林尼治时间)。这种I C M P报文的好处是它提供了毫秒级的分辨率。由于返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期,这是它的一个缺陷。

这里写图片描述

ICMP时间戳请求和应答报文。

请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。但是,实际上,大多数的实现把后面两个字段都设成相同的值(提供三个字段的原因是可以让发送方分别计算发送请求的时间和发送应答的时间)

===================================================

ICMP端口不可达差错

U D P的规则之一是,如果收到一份U D P数据报而目的端口与某个正在使用的进程不相符,那么U D P返回一个I C M P不可达报文。

这里写图片描述

ICMP端口不可达差错报文

I C M P的一个规则是, I C M P差错报文必须包括生成该差错报文的数据报I P首部(包含任何选项),还必须至少包括跟在该I P首部后面的前8个字节。在我们的例子中,跟在I P首部后面的前8个字节包含U D P的首部

UDP首部的内容是源、目的端口号,由于目的端口号不匹配,所以产生了ICMP端口不可达的差错报文。接收ICMP差错报文的系统可以根据源端口号与原来的某个特定用户进程相关联。

导致差错的数据报中的I P首部要被送回的原因是因为I P首部中包含了协议字段,使得I C M P可以知道如何解释后面的8个字节。如果我们来查看T C P首部,可以发现源端口和目的端口被包含在T C P首部的前8个字节中。

这里写图片描述

ICMP不可达报文

在报文图中,我们注意到有1 6种不同类型的I C M P不可达报文,代码分别从0到1 5。I C M P端口不可达差错代码是3。另外,尽管图指出了在I C M P报文中的第二个32 bit字必须为0,但是当代码为4时(“需要分片但设置了不分片比特”),路径M T U发现机制却允许路由器把外出接口的MTU填在这个32 bit字的低16 bit中。

0 0
原创粉丝点击