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. pycharm中常用设置

    当安装时检查版本过低 首先 pip --help 进入帮助,找到 复制,然后 pip install --disable-pip-version-check 要安装的包 这样就会跳过版本检测. 在py ...

  2. Linux添加新硬盘,设置分区和开机自动挂载之图文教程!

    虚拟机添加硬盘的步骤就不多废话了,主要列出添加硬盘后要进行设置的几个详细步骤: 1.查看磁盘信息:fdisk -ls 添加前如下图所示: 添加后如下图: 也可以用:ls /dev/sd*查看,如下图: ...

  3. 常见的HTTP状态码有哪些?

    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求. ...

  4. CSU1216: 异或最大值(01Trie树)

    Description 给定一些数,求这些数中两个数的异或值最大的那个值 Input 多组数据.第一行为数字个数n,1 <= n <= 10 ^ 5.接下来n行每行一个32位有符号非负整数 ...

  5. Percona-Tookit工具包之pt-stalk

      Preface       We have a lot of methods to diagnose problems in our system such as strace,pstack,gs ...

  6. IDEA怎么生成UML类图

    说之前先说一下Diagram这个单词,意思是图表; 示意图; 图解; [数] 线图的意思. 打开设置 File->Setting或windows下按Ctrl+Alt+S 在搜索框中输入Diagr ...

  7. oracle命令集

    1.安装oracle后,需要导入表数据,操作如下: 连接数据库:sqlplus / as sysdba 创建表空间: create tablespace user_data logging dataf ...

  8. Nginx无法加载.woff .eot .svg .ttf等解决办法

    在Nginx的配置文件,加上以下代码即可修复该问题 location ~ \.(eot|otf|ttf|woff|svg)$ { add_header Access-Control-Allow-Ori ...

  9. webstorm报错Unescaped xml character解决方案1

    当idea认为你的书写格式不适合的时候便会报出Unescaped xml character提示,但不影响运行. 若想禁掉这个提示,可以尝试修改文档类型为:<!DOCTYPE html>

  10. PHP continue和break的用法(深入理解)

    对于刚入门的PHP童鞋们来说,在循环体中的continue和break的作用总是分不清到底是什么意思, 怎么用, 两者到底有什么区别? 接下来说几个例子,其实它们是很好区分的. <?php $t ...