Internet控制报文协议

首先,我们必须先清楚,IP协议本身没有为终端系统提供直接的方法来发现那些发往目的地址失败的IP数据包,并且IP没有提供直接的方式来获取诊断信息,那么我们的故事来了。

Internet控制报文协议(ICMP)腾空而出,与IP结合使用,提供了与IP协议层配置和IP数据包处置相关的诊断和控制信息,即它负责传递可能需要注意的差错和控制报文。ICMP表明了某些类别的故障和配置信息,但是并不为IP网络提供可靠性。

注意:我们常见的丢包(路由器缓冲区溢出)并不会触发任何的ICMP信息。


在IPv4和IPv6中的封装

ICMP报文是在IP数据包内被封装传输的。

如图所示:

ICMP报文封装在IPv4和IPv6的内部,即在其头部后面。ICMP头部包含了整个ICMP数据段的校验和。

下图表示了报文的格式

我们可以了解到:

  • 类型字段长8位,ICMPv4为其保留42个值,但是只有8个常用,下文会提到。
  • 代码字段长8位,每个类型有不同的代码,代表不同的含义
  • 校验和长16位,涵盖了整个报文

如果一个ICMP报文校验和错误,显然是要被丢弃的;

同时这边给出中文版一个蹩脚的翻译 :没有ICMP报文可以表示收到的ICMP报文中的校验和是错误的。 原版本的翻译是: there is no ICMP message to indicate a bad checksum in a received ICMP message,较为顺口的翻译应该是,在收到的ICMP报文中没有指示校验和错误的ICMP报文,即ICMP的报文不会去指错另一个ICMP的报文。


ICMP报文

ICMP报文可以分为两大类:

  • 有关IP数据包传递的ICMP报文(差错报文
  • 有关信息采集和配置的ICMP报文(查询或信息类报文

信息类报文包括回显请求和回显应答,以及路由器通告和路由器请求。

最常见的差错报文类型包括目的不可达,重定向,超时,和参数问题。

关于类型字段以及类型所使用的代码号表格在书本250页均有,这边不再强调


下面进一步讨论差错报文常用的类型:

目的不可达(ICMPv4类型3,ICMPv6类型1)和数据包太大(ICMPv6类型2)

目的不可这种类型的报文用来表示数据包无法送达目的地,其主要可细分成:

  • 主机不可达(ICMPv4代码1)和地址不可达(ICMPv6代码3)

    • 由路由器或主机产生,直接交付的时候由于某种原因无法到达目的地,例如主机关闭
  • 目的无路由(ICMPv6代码0)
    • 出现在到达数据包不必采用直接交付的方式来转发,但没有路由条目指定下一跳路由地址
  • 管理禁止通信(ICMPv4代码3)和目的管理禁止通信(ICMPv6代码1)
    • 通常是防火墙故意丢弃流量导致
  • 端口不可达(ICMPv4代码3)和端口不可达(ICMPv6代码4)
    • 当传入数据报的目的应用程序还没有准备好接收,就生成端口不可达报文

数据包太大(PTB):

如果一个IPv4路由器收到一个数据报大于选定的传出网络接口的MTU, 则其需要分片,但如果IP头部设置了不分片位字段,则其被丢弃。同时,产生ICMPv4目的不可达(PTB)报文,该报文能将下一跳的MTU包含在其中。

picture

而在ICMPv6中,因为IPv6只有数据包的发送者才能执行数据包分片,所以只产生ICMPv6目的不可达(PTB)报文,该报文能将下一跳的MTU包含在其中。


重定向(ICMPv4类型5,ICMPv6类型137)

当路由器收到一个来自主机的不是给自己的数据报时,转发数据报到下一跳更好的路由,同时,路由器发送一个重定位报文到主机,使其更新路由表,这样下一次数据报直接就会到新定义的节点上。如图所示:

重定向报文包含了数据报下一跳正确路由器的IPv4地址。如图

超时(ICMPv4类型11,ICMPv6类型3)

当由于TTL或跳数限制字段值调小致使路由器丢弃报文时,产生ICMP超时报文

一个工具:traceroute工具,被用于确定发送者到目的地路径上的路由器。

工作方式:

  1. TTL置1
  2. 发送数据报,接收路由器的ICMP超时报文,如果该路由为最终路由则停止。
  3. TTL+=1
  4. 转回第二步

参数问题(ICMPv4类型12,ICMPv6类型4)

当一个主机或者路由器接收到一个IP数据报,其IP头部存在不可修复的问题时就会产生一个ICMP参数问题报文。一个特殊的参数报文指针字段只是了错误字段相对于出错的IP头部的偏移值。


下面进一步讨论信息类报文常用的类型:

回显请求/应答(ping)(ICMPv4类型0/8,ICMPv6类型129/128)

原理,收到ICMP回显请求报文后,ICMP要求将任何接收到的数据返回给发送方。报文格式如下

其中,标识符字段可以让发送主机利用,借此分离返回的应答。

当一个ping实例运行的时候,序列号从0开始,每发送一个回显请求报文便加1.
ping打印出每个返回的数据报的序列号,方便用户查看数据报是否丢失等。

路由器发现:路由器请求RS和通告RA(ICMPv4类型9,10)

首先定期使用TTL=1,对本地网络的所有主机组播(224.0.0.1)。使用RS报文发送到所有路由器组播地址(224.0.0.2),路由器发现的主要目的是让一台主机学习到它所在本地子网中的所有路由器,这样让他选好出一个默认的路由。


处理ICMP报文

传入的信息类请求将被操作系统自动处理,而差错类报文传递给用户进程或传输层协议

特例:重定向报文将导致主机路由表中的自动更新,目的不可达报文用于路径MTU发现机制(PMTUD)。这一般由传输层协议来实现。


ICMP差错报文

限制生成的ICMP差错报文的元婴是限制生成所谓的广播风暴,ICMPv4有以下情况:

  • ICMPv4差错报文
  • 目的地址是IPv4广播或组播地址
  • 作为链路层的广播数据报
  • 不是第一个分片的其他分片
  • 源地址为环回地址,广播或组播地址,零地址。

ICMPv6有以下情况:

  • ICMPv6差错报文
  • ICMPv6重定向报文
  • 目的地址是IPv6的组播地址数据报(除PTB和参数问题报文)
  • 链路层广播组播的数据包
  • 源地址为未指定或组播地址,或者任意为发送者所致的选播地址

限制ICMP报文数据的方法是使用令牌桶
每个桶保留最大数量的令牌,每个令牌允许一定数量的报文被发送。桶定期被新的令牌填充。每发送一个报文就减一,

一个概念:当发送一个ICMP差错报文的时候,它包含了一个完整的源自“违规”或者“原始”数据包的IP头部副本,再加上原始数据报的IP有效载荷区中的任何其他数据。


第八章 Internet控制报文协议的更多相关文章

  1. 《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  2. ICMP Internet控制报文协议

    ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网 ...

  3. TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议

    1.概述      ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制 ...

  4. ICMP:Internet控制报文协议

    ICMP:Internet控制报文协议. 是IP层的组成部分.传递差错报文或其他信息. ICMP报文被封装在IP数据报内部: 详细格式例如以下所看到的: 个字段含义例如以下: 8位类型. 表示该ICM ...

  5. ICMP:internet 控制报文协议

    ICMP:internet 控制报文协议 1.概述      ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个 ...

  6. 《TCP/IP 详解 卷1:协议》第 8 章:Internet 控制报文协议

    路由器是 Internet 的重要组成部分,严密监视 Internet 的操作.IP 协议未给发送失败的 IP 数据包提供一种错误处理,也没有给端系统提供直接的方法来发现错误.为了解决这一不足之处,I ...

  7. TCP/IP详解 卷一(第六章 ICMP:Internet控制报文协议)

    ICMP是(Internet Control Message Protocol)Internet控制报文协议. 用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可 ...

  8. TCP/IP详解,卷1:协议--第6章 ICMP:Internet控制报文协议

    引言 I C M P经常被认为是 I P层的一个组成部分.它传递差错报文以及其他需要注意的信息. I C M P报文通常被I P层或更高层协议( T C P或U D P)使用.一些I C M P报文把 ...

  9. TCP/IP 笔记 - ICMPv4和ICMPv6 : Internet控制报文协议

    ICMP是一种面向无连接的协议,负责传递可能需要注意的差错和控制报文,差错指示通信网络是否存在错误(如目的主机无法到达.IP路由器无法正常传输数据包等.注意,路由器缓冲区溢出导致的丢包不包括在ICMP ...

随机推荐

  1. 在c#中using和new这两个关键字有什么意义?

    在c#中using和new这两个关键字有什么意义?答:using 引入名称空间或者使用非托管资源, new 新建实例或者隐藏基类方法

  2. l1,l2norm

    http://www.chioka.in/differences-between-l1-and-l2-as-loss-function-and-regularization/ 这里分别对l1 loss ...

  3. Linq to Entity 时间差作为筛选条件产生的问题

    前言 在使用 Linq to Entity 的時候,會把之前 Linq to SQL 的想法就帶進去,寫好之後編譯也都不會出錯,但是實際上在跑的時候就會出現錯誤訊息了,這點真的要注意了.這次我遇到問題 ...

  4. MySQL另类的备份恢复方法——innodb可传输表空间

      Preface       There're many ways in backing up or migrating data from one server to another one.Lo ...

  5. Java数据处理

    对于形如“(TYPE=SITA##)&&(((CTYP=FPL##)||(CTYP=CHG##)||(CTYP=CNL##)||(CTYP=DLA##)||(CTYP=DL##)||( ...

  6. MySQL数据库 : 查询语句,连接查询及外键约束

    查询指定字段        select 字段1,字段2 from 表名; 消除重复行(重复指的是结果集中的所有完全重复行)             select distinct 字段1,字段2.. ...

  7. 2016 ACM-ICPC Asia China-Final D 二分

    题意:一共有N个冰淇淋球,做一个冰淇淋需要K个球,并且由于稳定性,这K个球还必须满足上下相邻的下面比上面大至少两倍.先给出N个球的质量,问最多能做出多少个冰淇淋? 思路:二分答案并对其检验. 检验标准 ...

  8. POJ:3259-Wormholes(最短路判断负环)

    Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 58153 Accepted: 21747 Descripti ...

  9. P2580 于是他错误的点名开始了(trie)

    P2580 于是他错误的点名开始了 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉 ...

  10. form表单提交和重置小结

    1. input标签 1.1>input[type=submit] <form name="form" method="post" action=& ...