首页 > 其他分享 >《计算机网络微课堂》4-8 网际控制报文协议ICMP

《计算机网络微课堂》4-8 网际控制报文协议ICMP

时间:2024-05-28 09:12:22浏览次数:30  
标签:主机 报文 H1 发送 网际 ICMP 数据

本节课我们介绍网际控制报文协议 ICMP (Internet Control Message Protocol):

  • 为了更有效的转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP
  • 主机或路由器使用 ICMP 协议来发送差错报告报文和询问报文
  • ICMP 报文被封装在 IP 数据报中发送

ICMP 差错报告报文共有以下 5 种,它们分别是终点不可达,源点抑制,时间超过,参数问题,改变路由(重定向)。

我们首先来看终点不可达,当路由器或主机不能交付数据报时,就像源点发送终点不可达报文。

具体可再根据 ICMP 的代码字段细分为:目的网络不可达,目的主机不可达,目的协议不可达,目的端口不可达,目的网络未知,目的主机未知等 13 种错误,我们来举例说明。

假设主机 H1 给 H2 发送 IP 数据报,H1 会将 IP 数据报发送给路由器 R1,由 R1 帮其转发,若 R1 的路由表中没有网络 N3 的路由记录,默认路由,以及主机 H2 的特定主机路由,则 R1 旧不知道如何转发该数据报,只能将其丢弃,并向发送该数据报的源主机 H1 发送 ICMP 差错报告报文,其类型为终点不可达。


来看源点抑制,当路由器或主机由于拥塞而丢弃数据报时,就像源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。

例如 H1 给 H2 发送 IP 数据报,当该数据报传输到路由器 R2 时,由于 R2 拥塞也就是 R2 比较繁忙,R2 根据自己的丢包策略,丢弃了该数据报,并向发送该数据报的源主机 H1 发送 ICMP 差错报告报文,其类型为源点抑制。

又例如 H1 给 H2 发送 IP 数据报,当该数据报传输到 H2 时,由于 H2 拥塞就丢弃了该数据报,并向发送该数据报的源主机 H1 发送 ICMP 差错报告报文,其类型为源点抑制


来看时间超过。当路由器收到一个目的 IP 地址不是自己的 IP 数据报时,会将其生存时间 TTL 字段的值减一,若结果不为 0,则将数据报转发出去;

若结果为 0,除丢弃该数据报外,还要向源点发送时间超过报文。例如某个生存时间等于 2 的 IP 数据报传输到了路由器 R1,R1 将其生存时间减一后,结果是一,这表明该数据报的生存时间还没有结束,R1 将其转发出去,当该数据报传输到路由器 R2 后,R2 将其生存时间减一号结果是 0,这表明该数据报的生存时间结束了,R2 丢弃该数据报,并向发送该数据报的源主机 H1 发送 ICMP 差错报告报文,其类型为时间超过。

另外当终点在预先规定的时间内,不能收到一个数据报的全部数据报片时,就把已收到的数据包片都丢弃,也会向源点发送时间超过报文


来看参数问题。当路由器或目的主机收到 IP 数据报后,根据其首部中的检验和字段,发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。

例如这是 H1 发送给 H2 的 IP 数据报,假设该数据报在传输过程中受到了干扰,其首部出现了误码,当该数据报传输到路由器 R1 后,R1 检测出该数据报的首部出错,于是丢弃该数据报,并向发送该数据报的源主机 H1 发送 IC MP 差错报告报文,其类型为参数问题。


再来看改变路由,路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器,这样可以通过更好的路由。我们来举例说明。假设我们给主机 H1 指定的默认网关是路由器 R1,则 H1 要发往网络 N2 的 IP 数据报,都会传输给 R1,由其帮忙转发,当 R1 发现 H1 发往 N2 的数据报的最佳路由,不应当经过 R1,而是应当经过 R4 时,就用改变路由报文,把这个情况告诉主机,于是 H1 就在自己的路由表中添加一个项目,到达 N2 应经过路由器 R4,而不是默认网关 R1。之后 H1 要发往 N2 的 IP 数据报,都会传输给 R4 由其帮忙转发。

需要注意的是以下情况不应发送 ICMP 差错报告报文:

  • 对 ICMP 差错报告报文,不再发送 ICMP 差错报告报文
  • 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文
  • 对具有多播地址的数据报,都不发送 ICMP 差错报告报文
  • 对具有特殊地址,例如 127.0.0.0 或 0.0.0.0 的数据报,不发送 ICMP 差错报告报文

练习:这是计算机专业考研全国统考,计算机网络部分 2010 年的题 36,答案是选项 C


接下来我们介绍常见的两种 ICMP 询问报文:

  • 一种是回送请求报文及其回答报文。ICMP 回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文,这种询问报文用来测试目的站是否可达,以及了解其有关状态
  • 另一种是时间戳请求报文及其回答报文。ICMP 时间戳请求报文,是请求某个主机或路由器回答当前的日期和时间。在 ICMP 时间戳回答报文中有一个 32 位的字段,其中写入的整数代表从 1900 年 1 月 1 日起到当前时刻一共有多少秒,这种询问报文用来进行时钟同步和测量时间


接下来我们介绍利用 ICMP 协议的两个典型应用,一个是分组网间探测 PING(Packet Internet Groper),另一个是跟踪路由。

首先来看分组网间探测,该应用用来测试主机或路由器之间的连通性,其应用层直接使用网际层的 ICMP 协议,而不通过运输层的 TCP 或 UDP 协议。所使用的 ICMP 报文类行为回送请求和回答,如下所示。这是在我的主机的 WINDOWS 命令行中使用拼命令来测试该主机与我校官方网站服务器的连通性。

再来看跟踪路由,该应用用来测试 IP 数据报,从源主机到达目的主机要经过哪些路由器,在该应用的 WINDOWS 版本中,具体命令为 tracert。其应用层直接使用网际层的 ICMP 协议,所使用的 ICMP 报文类型有回送请求和回答报文以及差错报告报文。在该应用的 UNIX 版本中,具体命令为 traceroute、其在运输层使用 UDP 协议,在网际层使用的 ICMP 报文类型,只有差错报告报文如下所示,这是在我的主机的 Windows 命令行中是用 tracert 命令来测试该主机与我校官方网站服务器之间要经过哪些路由器。

请大家思考一下 tracert 命令的实现原理是什么?我们来举例说明,假设主机 H1 想知道到达主机 H2 要经过哪些路由器,H1 就给 H2 发送 ICMP 回送请求报文,该报文被封装在 IP 数据报中,IP 数据报首部中生存时间字段 TTL 的值被设置为1,该 IP 数据报到达 R1 后,其生存时间减 1,结果为 0。R1 丢弃该数据报,并向发送该数据报的源主机 H1,发送 ICMP 差错报告报文,其类型为时间超过,这样 H1 就知道了到达 H2 的路径中的第一个路由器。

H1 继续发送下一个封装有 ICMP 回送请求报文的 IP 数据报,其首部中生存时间字段 TTL 的值被设置为 2,经过 R1 的转发后,该数据包的生存时间减少为 1,该 IP 数据报到达 R2 后,其生存时间减 1,结果为 0,R2 丢弃该数据报,并向发送该数据报的源主机 H1,发送 ICMP 差错报告报文,其类型为时间超过,这样 H1 就知道了到达 H2 的路径中的第二个路由器。

H1 继续发送下一个封装有 ICMP 回送请求报文的 IP 数据报,其首部中生存时间字段 TTL 的值被设置为 3,经过 R1 和 R2 的转发后,该数据报到达主机 H2,其生存时间减少为 1,H2 解析该数据报,发现其内部封装的是 ICMP 回送请求报文,于是就给 H1 发送封装有 ICMP 回送请求回答报文的 IP 数据报,这样 H1 就知道已经跟踪到路径中的最后一站,也就是目的主机 H2。

本节课的内容小结如下:

标签:主机,报文,H1,发送,网际,ICMP,数据
From: https://www.cnblogs.com/PeterJXL/p/18214962

相关文章

  • ADS-B报文格式解析
    一、介绍二次雷达二次监视雷达(secondarysurveillanceradar,SSR)。SSR使用1030MHz发送询问,飞机应答器使用1090MHz发送答复。在SSR的早期设计中,引入了两种民用通信协议(模式A和模式C)。模式A和模式C允许SSR分别连续询问飞机的身份(代号)和气压高度。二次雷达通过两种不同的脉冲模式......
  • GB报文中的Cseq值的注意点
    一、问题现象【问题现象】NVR使用GB接三方平台发现倍速回放时,【现场拓扑】现场拓扑如下(1)NVR侧使用家用宽带的方式,通过国标跨公网接入三方平台。图1.1:网络拓扑二、抓包分析INVITEsip:[email protected]:5060SIP/2.0To:sip:4200000040132000000......
  • 【Linux】icmp_seq=1 Destination Host Unreachable
    执行ping命令提示:From192.168.XX.XX  icmp_seq=1DestinationHostUnreachable这个错误消息通常表示以下几种情况之一:网络连接问题:目标主机可能没有连接到网络,或者网络中的某个路由器无法将数据包转发到目标主机。目标主机不存在:目标主机的IP地址可能不存在,或者......
  • mac安装软件报文件已损坏错误
    事情是这样的,之前我的电脑都是可以自己安装idea之类的软件的,但是最近都无法安装了,打开显示“文件已损坏,请移除”,然后回忆了下最近有升级macos,接着便开始查询网站给我的建议,说要执行命令啥的,再重启一下,但是依然不行,随后看到执行sudoxattr-r-dcom.apple.quarantine 后面有个空......
  • 西门子通讯协议-S7COMM报文
       -(1)建立TCP连接   Socket.Connect   -(2)发送访问请求  COTP   -(3)交换通信信息  SetupCommunication   -(4)执行相关操作  读、写、PLC启停、时间、上传下载一、CTOP请求连接staticvoidMain(string[]args){Socketsoc......
  • HTTP 报文详解
    报文的语法所有的HTTP报文都可以分为两类:请求报文和响应报文。请求报文会向Web服务器请求一个动作,响应报文会将请求的结果返回给客户端。请求和响应报文的基本报文结构相同请求报文的格式:<method><request-URL><version><headers><entity-body>响应报文的格式:<vers......
  • 02_Modbus的功能码与报文详解
     Modbus协议类型  Modbus从站四张表类型 主站常用功能码  ModbusTCP请求报文,功能码03ModbusTCP应答报文,功能码03 0017为23个字节:请求长度加应答长度06+17=23;14为20长度:14+06=20  ModbusUDP请求报文,功能码03ModbusUDP应答报文,功能码03  M......
  • 内网-ICMP隧道(pingtunnel)
      常用的隧道技术:利用各种隧道技术,以网络防火墙允许的协议,绕过网络防火墙的封锁,实现访问被封锁的目标网络网络层:IPv6 隧道、ICMP 隧道传输层:TCP 隧道、UDP 隧道、常规端口转发应用层:SSH 隧道、HTTP/S 隧道、DNS 隧道 协议判断命令ICMPping ip or domai......
  • 手写协议报文 c语言手法
    鉴于绝大部分文件、网络通信协议、非网络通信协议都有类似的结构{类型,长度,校验,不定长数据,结束标志},再高级点的会包含多个单层TLV,甚至嵌套TLV,状态机流转标志等等。所以编程语言上也需要采用一定的手法。建立结构结构体和联合体例如//结构体对齐宏#ifdefined(__GNUC__)#defin......
  • Siemens 西门子 S7协议及报文格式详解
    一、简介S7Comm(S7Communication)是西门子专有的协议,是西门子S7通讯协议簇里的一种。S7通信协议是西门子S7系列PLC内部集成的一种通信协议,是S7系列PLC的精髓所在。它是一种运行在传输层之上的(会话层/表示层/应用层)、经过特殊优化的通信协议,其信息传输可以基于MPI网络、PRO......