ICMP: Internet控制报文协议

I C M P经常被认为是 I P层的一个组成部分。它传递差错报文以及其他需要注意的信息。
I C M P报文通常被 I P层或更高层协议(T C P或U D P)使用。一些 I C M P报文把差错报文返回给用户进程
I C M P报文是在 I P数据报内部被传输的

I C M P报文的格式如图 6 - 2所示。所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。


类型字段可以有 1 5个不同的值,以描述特定类型的 I C M P报文。某些 I C M P报文还使用代码字段的值来进一步描述不同的条件。
检验和字段覆盖整个 I C M P报文。

地址掩码请求和应答、时间戳请求和应答以及不可达端口
ICMP报文的类型
各种类型的I C M P报文如图6 - 3所示,不同类型由报文中的类型字段和代码字段来共同决定。
图中的最后两列表明 I C M P报文是一份查询报文还是一份差错报文。因为对 I C M P差错报文有时需要作特殊处理,因此我们需要对它们进行区分。

当发送一份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) 目的地址是广播地址(见图 3 - 9)或多播地址( D类地址,见图1 - 5)的I P数据报
3) 作为链路层广播的数据报
4) 不是I P分片的第一片(将在 11 . 5节介绍分片)。
5) 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地
址或多播地址

这些规则是为了防止过去允许 I C M P差错报文对广播分组响应所带来的广播风暴
ICMP地址掩码请求与应答
I C M P地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码( 3 . 5节)。系统广播它的I C M P请求报文(这一过程与无盘系统在引导过程中用 R A R P获取I P地址是类似的)。无盘系统获取子网掩码的另一个方法是 B O O T P协议

I C M P地址掩码应答必须是收到请求接口的子网掩码(这是因为多接口主机每个接口有不同的子网掩码),因此两种情况下地址掩码请求都来自于环回接口
ICMP时间戳请求与应答
I C M P时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间(Coordinated Universal Time, UTC)

这种I C M P报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间(如某些 U n i x系统提供的r d a t e命令)只能提供秒级的分辨率。由于返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期,这是它的
一个缺陷。

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

d i f f e r e n c e的值是接收时间戳值减去发起时间戳值

本机时钟需要进行调整,调整值是d i f f e r e n c e减去RT T的一半。
ICMP端口不可达差错
一种I C M P差错报文,即端口不可达报文,它是 I C M P目的不可到达报文中的一种,以此来看一看I C M P差错报文中所附加的信息。使用 U D P(见第11章)来查看它。

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

 

当I C M P报文返回时,为什么 T F T P客户程序还要继续重发请求呢?这是由于网络编程中的一个因素,即 B S D系统不把从插口 ( s o c k e t )接收到的 I C M P报文中的U D P数据通知用户进程,除非该进程已经发送了一个 c o n n e c t命令给该插口。
标准的 BSD TFTP客户程序并不发送c o n n e c t命令,因此它永远也不会收到 I C M P差错报文的通知。

ICMP报文的4.4BSD处理
由于I C M P覆盖的范围很广,从致命差错到信息差错,因此即使在一个给定的系统实现中,对每个I C M P报文的处理都是不相同的。

如果最后一列标明是“内核”,那么 I C M P就由内核来处理。如果最后一列指明是“用户进程”,那么报文就被传送到所有在内核中登记的用户进程,以读取收到的 I C M P报文如果不存在任何这样的用户进程,那么报文就悄悄地被丢弃(这些用户进程还会收到所有其他类型的I C M P报文的拷贝,虽然它们应该由内核来处理,当然用户进程只有在内核处理以后才能
收到这些报文)。有一些报文完全被忽略。最后,如果最后一列标明的是引号内的一串字符,那么它就是对应的 U n i x差错。其中一些差错,如 T C P对发送端关闭的处理等,我们将在以后的章节中对它们进行讨论。
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值