精华内容
参与话题
问答
  • ICMP协议详解

    万次阅读 2016-03-24 17:27:47
    ICMP协议详解 一. 什么是ICMP协议  ICMP全称Internet Control Message Protocol(网际控制信息协议) 提起ICMP,一些人可能会感到陌生,实际上,ICMP与我们息息相关。在网络体系结构的各层次中,都需要控制,而...

    ICMP协议详解

    一. 什么是ICMP协议

        ICMP全称Internet Control Message Protocol(网际控制信息协议)



    提起ICMP,一些人可能会感到陌生,实际上,ICMP与我们息息相关。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。

     

    二.ICMP报文格式

    IC M P所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。。

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

     

    表示ICMP头部的数据结构

    typedefstruct icmp_hdr

    {   unsigned char icmp_type; //消息类型

         unsigned char icmp_code; //代码

         unsigned short icmp_checksum; //校验和

         unsigned short icmp_id; //ID号

         unsigned short icmp_sequence; //序列号

         unsigned long icmp_timestamp; //时间戳

    }  ICMP_HDR,*PICMP_HDR;

     

    三 ICMP报文的类型

    各种类型的I C M P报文如图所示,不同类型由报文中的类型字段和代码字段来共同决定。图中的最后两列表明I C M P报文是一份查询报文还是一份差错报文。因为对I C M P差错报文有时需要作特殊处理,因此我们需要对它们进行区分。例如,在对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端口号来判断)联系起来。6 . 5节将举例来说明一点。

    下面各种情况都不会导致产生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差错报文对广播分组响应所带来的广播风暴。

    下面是几种常见的ICMP报文:

    1.响应请求

    我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。

    2.目标不可到达、源抑制和超时报文

    这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。

    3.时间戳

    时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。

     

    四.ICMP协议的运用

     

    1 ICMP地址掩码请求与应答

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

    它的I C M P请求报文(这一过程与无盘系统在引导过程中用R A R P获取I P地址是类似的)。无盘

    系统获取子网掩码的另一个方法是B O O T P协议。如图

    I C M P报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回。

    这样,发送端就可以把应答与请求进行匹配。

    我们可以写一个简单的程序(取名为i c m p a d d r m a s k),它发送一份I C M P地址掩码请求报

    文,然后打印出所有的应答。由于一般是把请求报文发往广播地址,因此这里我们也这样做。

    目的地址(1 4 0 . 2 5 2 . 1 3 . 6 3)是子网1 4 0 . 2 5 2 . 1 3 . 32的广播地址。

    sun% icmpaddrmask 140.252.13.63

    receivedmask = ffffffe0, from 140.252.13.来3自3 本 机

    receivedmask = ffffffe0, from 140.252.13.来3自5 b s d i

    receivedmask = ffff0000, from 140.252.13.来3自4 s v r 4

    在输出中我们首先注意到的是,从s v r 4返回的子网掩码是错的。显然,尽管s v r 4接口

    已经设置了正确的子网掩码,但是S V R 4还是返回了一个普通的B类地址掩码,就好像子网并

    不存在一样。

    svr4% ifconfig emd0

    emd0:flags=23<UP,BROADCAST,NOTRAILERS>

    inet140.252.13.34 netmask ffffffe0 broadcast 140.252.13.63

    S V R 4处理I C M P地址掩码请求过程存在差错。

    我们用t c p d u m p命令来查看主机b s d i上的情况,输出如图6 - 5所示。我们用- e选项来查看

    硬件地址。

    发到广播地址的ICMP地址掩码请求

    注意,尽管在线路上什么也看不见,但是发送主机s u n也能接收到I C M P应答(带有上面

    “来自本机”的输出行)。这是广播的一般特性:发送主机也能通过某种内部环回机制收到一份广播报文拷贝。由于术语“广播”的定义是指局域网上的所有主机,因此它必须包括发送主机在内。

    接下来,b s d i广播应答,而s v r 4却只把应答传给请求主机。通常,应答地址必须是单播地址,除非请求端的源I P地址是0 . 0 . 0 . 0。本例不属于这种情况,因此,把应答发送到广播地址是B S D / 3 8 6的一个内部差错。

    R F C规定,除非系统是地址掩码的授权代理,否则它不能发送地址掩码应答(为

    了成为授权代理,它必须进行特殊配置,以发送这些应答。参见附录E)。但是,正如

    我们从本例中看到的那样,大多数主机在收到请求时都发送一个应答,甚至有一些主

    机还发送差错的应答。

    最后一点可以通过下面的例子来说明。我们向本机I P地址和环回地址分别发送地址掩码

    请求:

    sun% icmpaddrmask sun

    receivedmask= ff000000, from 140.252.13.33

    sun% icmpaddrmask localhost

    receivedmask= ff000000, from 127.0.0.1

    上述两种情况下返回的地址掩码对应的都是环回地址,即A类地址1 2 7 . 0 . 0 . 1。

    发送给本机I P地址的数据报( 1 4 0 . 2 5 2 . 1 2 . 3 3)实际上是送到环回接口。

    I C M P地址掩码应答必须是收到请求接口的子网掩码(这是因为多接口主机每个接口有不同的子网掩码),因此两种情况下地址掩码请求都来自于环回接口。

     

    2 ICMP时间戳请求与应答

    I C M P时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计

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

    I C M P时间戳请求和应答报文格式如图所示。请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在

    发送应答时填写发送时间戳。但是,实际上,大多数的实现把后面两个字段都设成相同的值

    (提供三个字段的原因是可以让发送方分别计算发送请求的时间和发送应答的时间)。

    展开全文
  • ICMP协议

    千次阅读 2019-03-15 15:57:54
    一.ICMP协议的简介 IP协议是一种面向无连接的数据报协议,它是一种不可靠的协议,它不提供任何差错检验。因此网际报文控制协议(Internet Control Message Protocol)ICMP出现了,ICMP协议用于IP主机、路由器之间...

    一.ICMP协议的简介

    IP协议是一种面向无连接的数据报协议,它是一种不可靠的协议,它不提供任何差错检验。因此网际报文控制协议(Internet Control Message Protocol)ICMP出现了,ICMP协议用于IP主机、路由器之间传递控制消息,这里的控制消息可以包括很多种:数据报错误信息、网络状况信息、主机状况信息等,虽然这些控制消息虽然并不传输用户数据,但对于用户数据报的有效递交起着重要作用,从TCP/IP的分层结构看ICMP属于网络层,它配合着IP数据报的提交,提高IP数据报递交的可靠性。ICMP是封装在IP数据报中进行发送的,从这点看来,ICMP协议又有点像一个传输层协议,其实不然,因为ICMP报文的目的不是目的主机上的某个应用程序,它不为应用程序提供传输服务,ICMP报文的目的是目的主机上的网络层处理软件。简单的来说,ICMP协议就像奔波于网络中的一名医生,它能及时检测并汇报网络中可能存在的问题,为解决网络错误或拥塞提供了最有效的手段

    二.ICMP的报文封装


    ICMP报文是使用IP数据报来封装和发送的,携带ICMP报文的IP数据报完全像其他类型数据的数据报那样在网络中被转发,没有额外的可靠性和优先级,由于IP数据报本身被放在底层物理数据帧中进行发送,因此,ICMP报文本身也可能丢失或者出现传输错误

    三.ICMP报文类型


    ICMP报文可以分为两大类:ICMP差错报告报文和ICMP查询报文。差错报告报文主要用来向IP数据报源主机返回一个差错报告信息,这个错误报告信息产生的原因是路由器或主机不能对当前数据报进行正常的处理,例如无法将数据报递交给有效的协议上层,数据报因为生存时间TTL为0而被删除等。查询报文用于一台主机向另一台主机查询特定的信息,通常查询报文都是成对出现的,即源主机发起一个查询报文,在目的主机收到该报文后,会按照查询报文约定的格式为源主机返回一个应答报文。注意,    ICMP差错报文并不能纠正差错,它只是简单地报告差错,差错报告报文总是被返回给数据报的原始发出者,因为数据报中关于路由的唯一可用信息就是源IP地址和目的IP地址,路由器在不能正常处理数据报时,会产生相应的差错报文并返回给数据报源端。差错的纠正需要留给高层协议,当源主机网络层收到差错报告报文后,或者直接根据报文做出相应的处理,或者向更高层的协议通知这个差错信息,由上层协议选择处理。查询报文能用于对某些网络问题的诊断,也可用于网络设备信息的交互,查询报文都是成对出现的

    四.报文格式


    8位的类型字段标识了该ICMP报文的具体类型,8位的代码字段进一步指出产生这种类型ICMP报文的原因,每种类型报文的产生的原因都可能有多个,就拿目的站不可达报文来说,产生的原因可能有主机不可达、协议不可达、端口不可达等;16位校验和字段包括整个ICMP报文,即包括ICMP首部和数据区域。首部中的剩余4个字节在每种类型的报文中有特殊的定义

    1、差错报文

    目的站不可达:当路由器不能给数据报找到合适的路由路径,或者主机不能将数据报递交给上层协议时,相应的IP数据报就会被丢弃,然后一个目的站不可达差错控制报文将会被返回给源主机。目的站不可达差错可以由很多因素引起,例如网络不可达、主机不可达、协议不可达、端口不可达等,可以在报文首部中的代码字段指出具体原因。在ICMP目的不可达报文的数据区域,装载了引起目的站不可达的IP数据报首部及数据报数据区的前8个字节,当源主机收到这样一份ICMP报文后,它能根据报文数据区中的数据判断是哪个数据报出现了问题。装载引起差错的数据报数据区的前8个字节是因为这8个字节恰好覆盖了TCP报文或UDP报文中的端口号字段,IP层能够根据这个端口号把ICMP报文传递给具体的上层协议进行处理。常用目的站不可达报文格式及代码字段常用取值如下:




    数据报超时:数据报超时可以用来防止数据报在网络中被循环的路由,在IP首部中都有一个生存时间(TTL)字段,数据报每被转发一次,TTL的值便会减1,当TTL的值被减为0时,数据报会被网络丢弃,同时一个ICMP数据报超时报文会被返回给源主机。此外在分片重装时,也用到了ICMP超时报文,若某个数据报在重装过程中其重装时间超时,而数据分片还没有全部到达,此时与该数据报所有相关的分片将被删除,同时,一个ICMP超时报文将被返回给源主机。常用数据报超时报文格式及代码字段常用取值如下:



    源站抑制:ICMP源站抑制报文就是为了给IP协议增加一种流量控制而设计的,当路由器或主机因拥塞而丢弃数据报时,它可以向源站发送ICMP源站抑制报文,这个报文将告诉源站两个信息:第一,你的数据报发得太快,我已经丢弃了;第二,路径中出现了拥塞,请放慢你的数据报发送频率

    重定向(路由):当路由器要将数据报转发到另一个网络时,它必须知道下一个路由器的IP地址,源主机也是这样,当一台主机刚开始运行时,它会将所有数据报发送给网络中的一个默认路由器,因为它只知道默认路由器这一个IP地址。在这样的情况下,主机始终把所有数据报都发送到默认路由器,这样的处理也意味着所有数据报的目的地址都在默认路由器所处的网络内,但实际上,有些数据报可能是要发送到其他网络上的,若默认路由器接收到这样的数据报,它就可以发送一个ICMP重定向报文告诉源主机改变它的路由表:你可以直接将那些数据报发送给另外一个路由器,这样我就不用再帮你转发了,你的数据报递交效率也提高了

    数据报参数错误:数据报在网络中传输时,其首部中出现的任何二义性都可能会产生严重的问题,如果路由器或主机发现了这种二义性,或者数据报中的某个字段丢失,路由器会直接丢弃数据报,并向源主机返回一个数据报参数错误报文

    2、查询报文

    常见的ICMP查询报文有以下几种:回送请求或回答、时间戳请求或回答、路由器询问和通告、信息请求或回答、地址掩码请求或回答。其中用得较多的是回送请求或回答、时间戳请求或回答,其他的三种查询报文目前几乎很少被用到,以前它们主要在主机启动时使用,通过使用这三种查询报文,主机能确定自身在网络环境中IP地址、地址掩码、路由器状况等信息,现在,DHCP协议已经能够完全实现这些功能。此外,在互联网中的两台主机能够使用时间戳请求或回答报文来确定数据报在彼此之间往返所需要的时间。

    回送请求或回答:回送请求和回送回答报文是为诊断网络而设计的,我们使用这对报文来发现网络的问题,回送请求和回送回答报文组合起来就可以确定两个网络设备之间彼此是否能够通信。回收请求和回送回答报文可以直接确定两台主机的IP协议是否能够正常通信,这是因为ICMP报文是被封装在IP数据报中发送的,发送请求的主机能收到回答报文,证明两台主机之间能够使用IP协议进行通信,同时也能证明源主机与目的主机之间的所有路由器的接收、处理、转发功能正常。回送请求或回答报文格式如下:

    类型字段指出了是请求报文(8)还是回答报文(0);代码段无特殊取值,始终为0;首部中的标识符和序号两个字段在ICMP协议中没有定义其取值规范,因此发送方可以自由使用这两个字段,例如可以用序号来记录源主机发送出去的回送请求报文编号。可选数据区域表示回送请求报文中可包含的数据,其长度是可选的,发送方应该选择合适的长度并填充相应的数据。在接收方,它将根据这个回送请求产生一个回送回答,回送回答中的数据与回送请求中的数据应该完全相同

    展开全文
  • ICMP 协议

    2020-03-04 16:39:24
    一、什么是ICMP协议? ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否...

    什么是ICMP协议?

    ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
    ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现。
    中文名 ICMP
    外文名 Internet Control Message Protocol
    类 型 控制报文协议
    协议族 TCP/IP协议族
    归 属 网络层协议
    作 用 在主机与路由器之间传递控制信息

    ICMP出现的原因

    在IP通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,但是由于搞错了端口号,服务器软件可能不能接受它。这时,在错误发生的现场,为了联络而飞过来的信鸽就是ICMP 报文。在IP 网络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。ICMP 协议是为了辅助IP 协议,交换各种各样的控制信息而被制造出来的。

    制定万维网规格的IETF 在1981 年将RFC7922作为ICMP 的基本规格整理出来了。那个RFC792 的开头部分里写着“ICMP 是IP 的不可缺少的部分,所有的IP 软件必须实现ICMP协议。也是,ICMP 是为了分担IP 一部分功能而被制定出来的。

    那么我们详细介绍一下ICMP协议?(来自百度)

    ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。 它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

    ICMP 是 TCP/IP 模型中网络层的重要成员,与 IP 协议、ARP 协议、RARP 协议及 IGMP 协议共同构成 TCP/IP 模型中的网络层。ping 和 tracert是两个常用网络管理命令,ping 用来测试网络可达性,tracert 用来显示到达目的主机的路径。ping和 tracert 都利用 ICMP 协议来实现网络功能,它们是把网络协议应用到日常网络管理的典型实例。

    从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性。当路由器在处理一个数据包的过程中发生了意外,可以通过ICMP向数据包的源端报告有关事件。

    其功能主要有:侦测远端主机是否存在,建立及维护路由资料,重导资料传送路径(ICMP重定向),资料流量控制。ICMP在沟通之中,主要是透过不同的类别(Type)与代码(Code) 让机器来识别不同的连线状况。
    ICMP 是个非常有用的协议﹐尤其是当我们要对网路连接状况进行判断的时候。

    ICMP的用途

    有两种功能:

    差错通知

    (通俗点讲也就是通知在发送过程中IP包被丢弃的原因),给送信者的错误通知;是到IP 数据包被对方的计算机处理的过程中,发生了什么错误时被使用。不仅传送发生了错误这个事实,也传送错误原因等消息。

    信息查询

    (通俗点讲也就是确认IP包是否成功到达目标地址),送信者的信息查询;其信息询问是在送信方的计算机向对方计算机询问信息时被使用。被询问内容的种类非常丰富,他们有目标IP 地址的机器是否存在这种基本确认,调查自己网络的子网掩码,取得对方机器的时间信息等。

    同时我们需要注意几点:

    1.ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议
    2. ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6

    ICMP的报文格式

    简易版报文格式:

    在这里插入图片描述

    类型:标识生成的错误报文,它是ICMP报文中的第一个字段;
    代码:进一步地限定生成ICMP报文。该字段用来查找产生错误的原因;
    校验和:存储了ICMP所使用的校验和值。
    未使用:保留字段,供将来使用,起值设为0
    数据:包含了所有接受到的数据报的IP报头。还包含IP数据报中前8个字节的数据;

    详细版报文格式:

    在这里插入图片描述
    实际上与ICMP协议相关的有7个子段
    1)协议; —协议字段值是1
    2)源IP 地址;—用来交流ICMP 报文的地址信息
    3)目的IP 地址;—用来交流ICMP 报文的地址信息
    4)生存时间;
    这四个包含在IP 首部的字段。
    5)类型;—很重要,所有ICMP 用来交流错误通知和信息询问的报文,都是由类型和代码的组合来表示的。RFC 定义了15种类型。“报文不可到达”这样的错误通知和“回送请求”这样的信息查询是由类型字段来区分的。
    6)代码;—很重要,所有ICMP 用来交流错误通知和信息询问的报文,都是由类型和代码的组合来表示的。虽然ICMP报文由类型来表达它的大概意义,但是传递细小的信息时是由代码来分类的。
    7)选项数据;—向对方传送数据
    这三个包含在ICMP数据部分的字段。

    ICMP协议提供的诊断报文类型

    已经定义的ICMP消息类型大约有10多种,每种ICMP数据类型都被封装在一个IP数据包中。主要的ICMP消息类型包括以下几种。

    响应请求

    我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。

    目标不可到达、源抑制和超时报文

    这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。

    时间戳

    时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。

    全部消息类型可归纳为以下5个大类:

    1.诊断报文(类型8,代码0;类型0,代码0);
    2.目的不可达报文(类型3,代码0-15);
    3.重定向报文(类型5,代码0-4);
    4.超时报文(类型11,代码0-1);
    5.信息报文(类型12-18)。

    在这里插入图片描述

    超详细的消息列表:
    在这里插入图片描述

    ICMP 协议应用在许多网络管理命令中,下面以 ping 和 tracert 命令为例详细介绍 ICMP 协议的应用。

    ICMP实现之ping命令

    ping 命令使用 ICMP 回送请求和应答报文
    在这里插入图片描述

    上面ping的是ip地址,也可以ping 域名,域名可以通过DNS解析成IP地址。

    ping命令的功能
    (1)能验证网络的连通性
    (2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)

    那么如何验证的呢?
    (1)ping命令会先发送一个 ICMP Echo Request给对端
    (2)对端接收到之后, 会返回一个ICMP Echo Reply
    (3)若没有返回,就是超时了,会认为指定的网络地址不存在。

    用ping 命令不能确定与对方连通的原因大致有哪些?
    主要有以下三个:
    (1)目标服务器不存在;
    (2) 花在数据包交流上的时间太长ping 命令认为超时;
    (3)目标服务器不回答ping 命令。
    如果是原因2),通过ping 命令的选项来延长到超时的等待时间,就能正确显示结果了。如果原因是1)或3)的话,仅凭ping 命令的结果就不能判断是哪方了。正如这样,ping 命令不一定一定能判断对方是否存在。

    telnet是23端口,ssh是22端口,那么ping是什么端口?
    ping命令是基于ICMP,是在网络层。
    而端口号,是传输层的内容。所以在ICMP中根本就不关注端口号这样的信息。

    ICMP实现之traceroute命令

    为了调查到通信对方的路径现在是怎么样了,使用的是traceroute 命令。它与ping 并列,是代表网络命令。这个traceroute 也是ICMP 的典型实现之一。

    在这里插入图片描述
    (1).执行tracert命令。
    在Windows 上执行tracert 命令后,首先计算机向目的服务器发送IP 数据包。Windows 上使用的是与ping 同样的ICMP 回送请求报文。但是,有一点和通常的回送请求不一样。那是,最初将IP 首部的TTL(生存时间)字段设为1 这一点。
    路由器每转送一次数据包就将TTL 的值减1。当TTL 变为0 的时候,按规定将丢弃这个数据包。正如这样,与其说TTL 是时间,还不如说TTL 是经过路由器的个数。对于计算机发送出去的数据包,只要它与目标服务器不在同一局域网内,一定会被哪儿的路由器中继。这时如果TTL 的值是1,由于路由器的处理会变为0,则该数据包将会被丢弃。

    (2).用超时报文来通知送信方。
    路由器丢弃数据包的同时,用ICMP 报文来通知错误。这时使用的ICMP 报文是,类型为11,代码为0 的ICMP 超时报文。而且在选项数据字段里,将填入原先数据包的IP 首部和ICMP 的开始8 字节。正如ping 命令的时候看到的,ICMP 回送请求的先头8 字节里包含了标识符和序号字段。因此,送信方的计算机看了超时报文后,就知道是针对自己发出的回送请求的错误通知。
    计算机接到针对第一个数据包的ICMP 超时报文后,接下来将TTL 加1(TTL=2)并同样地送出(同3)。这次通过第一个路由器,TTL 变为1,到达第二个路由器。但是第二个路由器象前面一样,由于TTL变为0,将不能转发该包。因此,同第一个路由器一样,将该包丢弃,并返回ICMP 超时报文。以后,收到错误的发送方计算机将TTL 加1,重复同样的工作。

    (3).只有目标服务器的反应不同。
    如此一个一个增加TTL,某个时候ICMP 回送请求报文将到达最终的目标服务器。这时,只有目标服务器与途中的路由器不同,不返回ICMP 超时报文。为什么呢?因为即使目标服务器收到TTL 为1 的数据包也不会发生错误。
    作为代替处理,服务器针对送信方计算机发出的ICMP 回送请求报文,返回ICMP 回送回答报文。也就是,送信方计算机与服务器之间,与ping 命令的执行一样了。得到了ICMP 回送回答报文的送信方知道了路经调查已经到了目标服务器,就结束了tracert 命令的执行。像这样,通过列出中途路由器返回的错误,就能知道构成到目标服务器路径的所有路由器的信息了。

    ICMP实现之端口扫描

    所谓的端口扫描就是检查服务器不需要的端口是否开着。服务器管理者用来检查有没有安全上有问题的漏洞开着。不是像ping 和traceroute 那样是操作系统自带的工具,需要利用网络工具才行。

    端口扫描大致分为“UDP 的端口扫描”和“TCP 的端口扫描”两种。这里面,与ICMP 相关的是UDP一边。使用TCP 的通信,通信之前必定要先遵循三向握手的程序。因此,只要边错开端口号边尝试TCP连接就能调查端口的开闭。不特别需要ICMP。与此相对,UDP 没有这样的连接程序。因此,调查端口是否打开需要想点办法。这样,被使用的是ICMP。根据ICMP 规格,UDP 数据包到达不存在的端口时,服务器需要返回ICMP 的“终点不可达”之一的“端口不可达”报文。

    在这里插入图片描述

    具体来说,向希望调查的服务器发送端口号被适当指定了的UDP 数据包。这样,目标端口没开着的话,服务器就返回ICMP 端口不可达报文。返回的ICMP 数据包的选项数据字段里放入着,送信方送出的UDP 数据包的IP 首部与UDP 首部的头8 个字节。送信方通过这个信息来辨别该错误通知是针对哪个UDP 数据包的,并判断端口是否打开着。

    UDP 端口扫描一边一个一个错开端口号,一边持续着这个通信。这样,就知道了哪个端口是“好像开着的”了。但是,UDP 端口扫描与TCP 端口扫描有很大区别的地方。那就是,即使ICMP 端口不可达报文没有返回,也不能断定端口开着。端口扫描除了被管理员用来检查服务器上是否有开着的漏洞,作为黑客非法访问的事先调查,对服务器实施的情况也是很多的。需要非常小心地来使用。

    ICMP和安全的关系

    为什么停止方便的ICMP?

    为什么有停止ICMP 使用的设定项目呢?理由只有一个,那就是确保安全。虽然ICMP 是非常便利的协议,但黑客在尝试非法访问的时候会被恶意利用。由于ICMP 被恶意使用而遭受损害的用户正在不断增加之中,因此有了限制ICMP 使用的意见。

    ICMP攻击

    ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。

    例如,在1999年8月海信集团悬赏“50万元人民币测试防火墙”的过程中,其防火墙遭受到的ICMP攻击达334050次之多,占整个攻击总数的90%以上!可见,ICMP的重要性绝不可以忽视!

    比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。
    “Ping of Death” 攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。(操作系统已经取消了发送ICMP数据包的大小的限制,解决了这个漏洞)
    此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。
    在这里插入图片描述
    黑客发送伪装了的ICMP 回送请求后,到达在作为踏板的网络的入口处的路由器。这样,路由器将回送请求转发给网内所有的计算机。假如有100 台计算机,回送请求将到达100 台所有的计算机。收到回送请求的计算机对此作出反应,送出回送回答报文。这样,黑客送出的一个ICMP回送请求报文,一下子增加到了100 倍。

    这样增加的ICMP 回送回答报文面向的不是黑客的计算机,而是伪装成回送请求的源IP 地址的攻击对象服务器。变成到达了,从几百台计算机发出的巨大数量的ICMP 回送回答。smurf 与ping 洪水攻击不同,因为到达服务器的是ICMP 回送回答,服务器不用返回回答。但是为了处理大量的ICMP,服务器承受了大量的负载。网路被撑爆了也是一样的。

    抵御方法

    虽然ICMP协议给黑客以可乘之机,但是ICMP攻击也并非无药可医。只要在日常网络管理中未雨绸缪,提前做好准备,就可以有效地避免ICMP攻击造成的损失。

    对于“Ping of Death”攻击,可以采取两种方法进行防范:

    第一种方法是在路由器上对ICMP数据包进行带宽限制,将ICMP占用的带宽控制在一定的范围内,这样即使有ICMP攻击,它所占用的带宽也是非常有限的,对整个网络的影响非常少;
    第二种方法就是在主机上设置ICMP数据包的处理规则,最好是设定拒绝所有的ICMP数据包。

    设置ICMP数据包处理规则的方法也有两种:
    一种是在操作系统上设置包过滤;
    另一种是在主机上安装防火墙。(有效防止ICMP攻击,防火墙应该具有状态检测、细致的数据包完整性检查和很好的过滤规则控制功能。)

    展开全文
  • ICMP协议及报文格式

    万次阅读 多人点赞 2017-05-12 16:02:37
    ICMP协议及报文格式

    摘自:《深入理解计算机网络》 王达著 机械工业出版社
    相关知识链接
    1. IPV4数据报头部格式请点击这里
    2. IPv6数据报头部格式请点击这里
    3. IPv4数据报的封装与解封装请点击这里
    4. IPv4数据报的分段与重组请点击这里
    5. ARP协议报文格式及ARP表
    6. ARP地址解析原理

    ICMP协议及报文格式

    ICMP(Internet Control Message Protocol)因特网控制报文协议。它是IPv4协议族中的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是在网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然不传输用户数据,但是对于用户数据的传递起着重要的作用。
    ICMP协议与ARP协议不同,ICMP靠IP协议来完成任务,所以ICMP报文中要封装IP头部。它与传输层协议(如TCP和UDP)的目的不同,一般不用来在端系统之间传送数据,不被用户网络程序直接使用,除了想Ping和Tracert这样的诊断程序。

    ICMP消息类型

    ICMP报告无法传送的数据报的错误,并帮助对这些错误进行疑难解答。例如,如果IPv4不能讲数据报传送到目标主机,则路由器上的或目标主机上的ICMP会向主机发送一条“无法到达目标”消息。下表为最常见的ICMP消息。

    ICMP消息类型 用途说明
    回显请求 Ping工具通过发送ICMP回显消息检查特定节点的IPv4连接以排查网络问题。类型值为0
    回显应答 节点发送回显答复消息响应ICMP回显消息。类型值为8
    重定向 路由器发送“重定向”消息,告诉发送主机到目标IPv4地址更好的路由。类型值为5
    源抑制 路由器发送“源结束”消息,告诉发送主机它们的IPv4数据报将被丢弃——因为路由器上发生了拥塞。于是,发送主机将以较低的频度发送数据报。类型值为4
    超时 这个消息有两种用途。第一,当超过IP生存期时向发送系统发出错误信息。第二,如果分段的IP数据报没有在某种期限内重新组合,这个消息将通知发送系统。类型值为11
    无法到达目标 路由器和目标主机发送“无法到达目标”消息,通知发送主机它们的数据无法传送。类型值为3

    其中无法到达目标消息中可以细分为一下几项

    无法到达目标消息 说明
    不能访问主机 路由器找不到目标的IPv4地址的路由时发送“不能访问主机”消息
    无法访问协议 目标IPv4节点无法将IPv4报头中的“协议”字段与当前使用的IPv4客户端协议相匹配时会发送“无法访问协议”消息
    无法访问端口 IPv4节点在UDP报头中的“目标端口”字段与使用该UDP端口的应用程序相匹配时发送“无法访问端口”消息
    需要分段但设置了DF 当必须分段但发送节点在IPv4报头中设置了“不分段(DF)”标志时,IPv4路由器会发送“需要分段但设置了DF”消息

    ICMP协议只是试图报告错误,并对特定的情况提供反馈,但最终并没有使IPv4成为一个可靠的协议。ICMP消息是以未确认的IPv4数据报传送的,它们自己也不可靠。

    ICMP报头格式

    ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。ICMP报头如下图所示。


    ICMP报头格式

    各字段说明

    • 类型:占一字节,标识ICMP报文的类型,目前已定义了14种,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文。
    • 代码:占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型。
    • 校验和:这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错。其计算方法与在我们介绍IP报头中的校验和计算方法是一样的。
    • 标识:占两字节,用于标识本ICMP进程,但仅适用于回显请求和应答ICMP报文,对于目标不可达ICMP报文和超时ICMP报文等,该字段的值为0。

    常见的ICMP报文

    相应请求

    我们日常进行的Ping操作中就包括了相应请求(类型字段值为8)和应答(类型字段值为0)ICMP报文。一台主机向一个节点发送一个类型字段值为8的ICMP报文,如果途中没有异常(如果没有被路由丢弃,目标不回应ICMP或者传输失败),则目标返回类型字段值为0的ICMP报文,说明这台主机存在。

    目标不可达,源抑制和超时报文

    这三种报文的格式是一样的。目标不可到达报文(类型值为3)在路由器或者主机不能传递数据时使用。例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回类型字段值3、代码字段值为3的ICMP报文。常见的不可到达类型还有网络不可到达(代码字段值为0)、主机不可达到(代码字段值为1)、协议不可到达(代码字段值为2)等等。
    源抑制报文(类型字段值为4,代码字段值为0)则充当一个控制流量的角色,通知主机减少数据报流量。由于ICMP没有回复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报回丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定的时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。
    超时报文(类型字段值为11)的代码域有两种取值:代码字段值为0表示传输超时,代码字段值为1表示分段重组超时。

    时间戳请求

    时间戳请求报文(类型值字段13)和时间戳应答报文(类型值字段14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接受方收到请求后填充接受时间戳后以类型值字段14的报文格式返回,发送方计算这个时间差。有些系统不响应这种报文。

    展开全文
  • Ping命令使用的ICMP协议中的回送请求和回送响应,所以可以使用协议分析软件通过使用ping命令来抓包,分析IP协议和ICMP协议的工作过程。 4. 实验步骤 (1) 打开192.168.0.204主机的命令行,打开抓包软件wireshark开始...
  • ICMP协议简介(一)

    2019-03-15 15:31:41
    ICMP协议简介(一) 1. ICMP介绍 架构IP网络时需要特别注意两点: 1.确认网络是否正常工作 2.遇到异常时进行问题诊断 ICMP的主要功能: 1.确认IP包是否成功送达目标地址。 2.通知在发送过程当中IP包被废弃的...
  • ICMP协议详解

    万次阅读 2018-07-26 23:18:14
    ICMP协议的作用:ICMP协议是IP协议的一个辅助,它可以传递差错报文以及其他信息 Ping用到的是ICMP协议,不是端口。 1.ICMP协议: ICMP经常被认为是IP层的一个组成部分,它传递差错报文以及其他需要注意的信息。...
  • ICMP协议

    2020-11-13 16:12:01
    (三)理解ICMP协议,以及ICMP使用的网络层和数据链路层协议。 实验原理 华为 eNSP 是华为推出的网络仿真工具平台,可以通过软件模拟华为数据通信设备的大部分特性,也可以通过真实网卡实现与真实网络设备的对接。...
  • 完全理解icmp协议

    千次阅读 2019-05-29 16:41:06
    1.ICMP出现的原因 在IP通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,...ICMP 协议是为了辅助IP ...
  • ICMP协议详解

    万次阅读 多人点赞 2018-05-30 18:51:00
    ICMP协议详解 ICMP协议是一个网络层协议。 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。 ...
  • ICMP协议

    千次阅读 2018-11-02 08:14:23
    ICMP(Internet Control Message protocol)互联网信息控制协议,用于实现链路连通性测试和链路追踪,可以实现链路差错报告,属于UDP协议ICMP有多种类型的报文,同一类型的报文会有多个不同的Co...
  • ICMP协议

    千次阅读 2015-08-31 10:01:43
    ICMP协议   前言   今天去学车,已累成狗,唉,回来还打了一会儿篮球,虽然累,但是心情不错啊,这几天好好研究研究如何不被人阴,别再让别人限速了还傻傻的不知道,发现一个不错的小软件,叫做按键...
  • ICMP协议

    2018-06-20 10:58:55
    下面关于ICMP协议的描述中,正确的是() 正确答案: C 你的答案: A (错误) A: ICMP协议根据MAC地址查找对应的IP地址 A 是RARP协议完成的 B: ICMP协议把公网的IP地址转换为私网的IP地址 B 是NAT协议完成的 C: ...
  • ICMP协议

    千次阅读 2010-04-29 10:50:00
    ICMP对安全的重要性ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。...
  • ICMP协议

    2019-01-20 19:06:53
    ICMP(internet 报文控制协议) 目的:为了更有效的转发IP数据及提高成功交付的机会 实质:ICMP报文控制协议是为路由器和主机反馈差错和异常情况的工具 ICMP数据报分为两类: 1.ICMP差错报告报文(类型3、5、11、13等...
  • ICMP协议

    2018-08-19 22:35:01
    概念 ICMP是(Internet Control Message Protocol)互联网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、...ICMP协议是一种面向...
  • ICMP协议

    2020-01-30 21:14:13
    ICMP协议 简介 ICMP–INTERNET CONTROL MESSAGE PROTOCOL 网络控制信息协议 ICMP负责传递IP协议或更高层协议的差错报文以及其他需要注意的信息,正式规范在RFC792 ICMP报文在IP数据报内部被传输 ICMP报文格式与类型...
  • ICMP协议详解

    2019-07-17 00:48:15
    ICMP协议详解前言ICMP简介ICMP差错检测ICMP重定向ICMP数据包ICMP应用pingTracert拓展IP协议全貌ICMP报文的类型与编码详细关系ICMP差错报文的特点ICMP控制报文拥塞控制与源站抑制报文路由控制与重定向报文请求与应答...
  • 网络协议 -- ICMP协议(1) 报文格式

    万次阅读 多人点赞 2018-01-12 16:33:58
    互联网控制消息协议(英文:Internet Control Message Protocol,ICMP)是互联网协议族的核心协议之一。定义在RFC 792文档中。 ICMP的消息大致可以分为两类:...使用ICMP协议的典型应用有ping和traceroute(windows上
  • ICMP协议分析

    千次阅读 2019-05-12 23:52:51
    ICMP协议分析 1.关于ICMP: ICMP是(Internet Control Message Protocol)Internet控制报文协议。 ICMP协议是一种面向无连接的协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制...

空空如也

1 2 3 4 5 ... 20
收藏数 92,134
精华内容 36,853
关键字:

icmp协议