ICMP协议
• 源站抑制Source Quench (4)
•
当路由器收到太多的数据报以致内存不够时 ,在丢弃所收数据报的同时,向创建数据报的 源主机发送源抑制报文。源主机收到源抑制报 文后,需要降低发送数据报的速率。 • 当路由器或者主机因为拥塞而丢弃了一个数 据报时,它就向数据报的发送站发送源站抑制 报文。这个报文有两个目的:第一,它通知源 站数据报已经被丢弃。第二,它警告源站,在 路径中的某处出现了拥塞,因而源站必须放慢 发送过程。
7
ICMP主要差错报文
类型 代码 校验和
路由器互联网地址
IP数据报首部+数据的前64比特
…………………………….
所有ICMP差错报告报文中的数据字段都具有同样的格式。将收到 的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出 来,作为ICMP报告的数据字段。再加上相应的ICMP差错报告报文的 前8个字节,就构成了ICMP差错报告报文。提取收到的数据报的数据 字段的前8个字节是为了得到运输层的端口号(对于TCP和UDP)以及 运输层报文的发送序号(对于TCP)
2
ICMP具有如下一些特征: • ICMP就像一个更高层的协议那样使用IP(即,ICMP消息被封装 在IP数据报中)。然而,ICMP是IP的一个组成部分,并且所有 IP模块都必须实现它。
• ICMP用来报告错误,是一个差错报告机制。它为遇到差错的路 由器提供了向最初源站报告差错的办法,源站必须把差错交给 一个应用程序或采取其它措施来纠正问题。
8
收到的IP数据报
IP数据报首部 8字节
ICMP差错报告报文
ICMP的前8 个字节
IP数据报 首部
8 字节
首部
ICMP差错报告报文
பைடு நூலகம்
装入ICMP报文的IP数据报
• 重定向Redirect (5)
当一个源主机创建的数据报发至某路由器,该路由 器发现数据报应该选择其他路由,则向源主机发送改 变路由报文。改变路由的报文能指出网络或特定主机 的变化,一般发生在一个网络连接多路由器的情况下。
差错报告报文的类型有一下几个: • 类型3:目的站不可达 • 类型4:源站抑制 • 类型11:时间超过 • 类型12:参数问题 • 类型5:改变路由 查询报文的类型有一下几个: • 类型8或0:回送请求或回答 • 类型13或14:时间戳请求或回答 • 类型17或18:地址掩码请求或回答 • 类型10或9:路由器询问或通告
• 超时Time Exceeded (11) 有两种情况需要发送超时报文。一种是路由器 把数据报的生存时间减至零时,路由器丢弃数据报, 并向源主机发送超时报文;另一种是在规定的时间内 没有收到所有的分片时,它就丢弃所有的分片,并向 源站发送了超时报文。 代码段就是: 代码0:当数据报的生存时间字段的值为零被路由器丢弃 代码1:在固定的时间内分片未能到达而导致分片被丢弃 • 参数问题 Parameter Problem:数据报头部的标志出现差 错,或缺少必须的选项 代码端是: 代码0:在首部的一个字段中有差错或二义性。在这种情况 下,指针字段的值指向有问题的机子。 代码1:表示缺少所需的选项部分。在这种情况下,不使用 15 指针
ICMP首部
ICMP数据
IP数据报首 部
IP数据报数据区
帧首部
帧数据区
5
用来标识报文, 有15个不同的值
类型
代号
提供有关报文类型的进 一步信息
ICMP报文格式
覆盖整个ICMP 报文
校验和
ICMP数据(取决于消息类型) ……………… ICMP-报文格式 ICMP报文有一个8字节的首部和一个可变长度的数据部 分。前4个字节对所有的类型都是共同的,第一个8比 特字段是ICMP的类型,它定义了报文的类型。代码 字段指明了发送此特定报文类型的原因。最后一个共 同的字段是检验和字段。首部的其余部分对每一种报 文类型都是特定的。 ICMP定义了五种常用差错报文和六种询问报文类型,以 6 及用代码表达某类型下面不同情况的细分。
• • • • • •
代码6. 目的网站不可知,路由器根本没有关于目的网络的信息。 代码7. 目的主机不可知,路由器根本不知道网络主机的存在。 代码8. 源主机是孤立的。 代码9. 与目的网络的通信从管理上是禁止的。 代码10. 与目的主机的通信从管理上是禁止的。 代码11. 对指明的服务类型,网络不可达。如果源站被请求一个可用的 服务类型,路由器可以为数据报找到另一条路由。 • 代码12. 对指明的服务器类型,主机不可达。如果源站被请求一个可用 的服务类型,路由器可以为数据报找到另一条路由。 • 代码13. 主机不可达,因为管理机构放置了一个过滤器在它上面。 • 代码14. 主机不可达,因为主机的优先级被破坏了。这个报文由路由器 发出,指出锁清秋的优先级对该目的站是不允许的。 • 代码15. 主机不可达,因为它的优先级被删掉了。(当网络操作员已经 采用了运行该网络的最小优先级时就产生这个报文,但是这个数据报以 比这个优先级更低的优先级发送出去) 但是有两点要注意:目的站不可达的报文可以由路由器也可以由目的主机 产生,代码2和3的报文只能由目的主机产生,而其余的报文则只能由路 由器产生。 在路由器没有发送目的站不可达报文时,也不一定表示数据报已 经交付了。(如果数据报通过以太网网络,那么路由器就无法知道该数 12 据报是否已经交付给目的主机或者下一个路由器,因为以太网并不提供 任何确认机制),且路由器无法检测处分组没有交付的所有的问题
第9章 因特网控制报文协议(ICMP)
知识点 ICMP的概念和功能 ICMP报文—差错报文/查询报文的功能 以及ICMP的工作原理 ICMP应用与Ping、Tranceroute和MTU 的测试 ICMP引起的黑客隐患
1
Internet控制报文协议ICMP (Internet Control Message Protocol)
• 响应一个没有源主机IP地址的数据报时永远不会发送ICMP 消息。 总的来说,源地址不能为0、一个回送地址、一个广播地 址或者一个组播地址。这些是为了防止过去允许ICMP差错 报文对广播分组相应所带来的广播风暴。
4
• ICMP的两级封装 每个ICMP报文放在IP数据报的数据 部分中通过互联网传递,而IP数据报本身放在帧的数 据部分中通过物理网络传递。
虽然改变路由报文算是一种差错报文,但是它与其他种差错报文的不 同。在这种情况下的路由器不丢弃数据报;数据报被送到适当的路由 器中。它的代码段缩小了改变路由的范围: 代码0:对特定网络路由的改变 代码1:对特定主机路由的改变 代码2:基于指明的服务类型对特定网络路由的改变 10 代码3:基于指明的服务类型对特定主机路由的改变
13
• 下面几点要注意: • 经受拥塞的路由器或者目的主机必须为每一个丢弃的 数据报向源主机发送源站抑制报文。 • 没有一种机制可以告诉源站,拥塞程度已经减轻,因 为可以按照原来的速率发送数据报。源站应继续降低 发送速率,直到不再收到更多的源站抑制报文为止。 • 在一对一的通信,或者多对一的通信中,都可以产生 拥塞。在一对一的通信中,每个高速主机可以很快地 产生数据报,使得路由器和主机难于跟得上处理。这 种情况下,源站抑制报文就有用处了,这些报文告诉 了源站要放慢发送速率。而在多对一的通信中,许多 个源站产生的数据报都必须由路由器或目的主机来处 理。在这种情况下,有的会以低速率发送而有的则以 高速率发送,这就导致了源站抑制报文在发送后,路 由器或主机并不知道哪一个源站应对拥塞负责。它可 能丢弃从不非常低速率的源站法来的数据报,而没有 丢弃真正产生拥塞的源站所发来的数据报。 14
• 目的站不可达Destination Unreachable (3) 当路由器检测到数据报无法传递到目的地时,向创建数据 报的源主机发出目的地不可达报文。这报文区分:网络不通 (如路由器故障),目的主机连不通(没开机),协议不可 达、端口不可达、以及共15种不同的情况,用不同代码表示。
• 代码0. 网络不可达,可能是硬件故障。这种类型的报文只能由路由器产生 。 • 代码1. 主机不可达,这也可能是硬件故障。这种类型的报文只能由路由器 产生。 • 代码2. 协议不可达,IP数据报携带的数据可能属于高层协议的。若目的主 机收到了一个数据报文,但是此时,这个高层协议并未运行,则发出代码 2的报文。这类报文只能由目的主机产生。(主机收到了一个数据报,它 要交给TCP协议,但是TCP协议并没有运行) • 代码3. 端口不可达,数据要交付的那个应用程序(进程)此时未运行。 • 代码4. 需要进行分片,但该数据报的DF(不分片)字段已经被设置。( 数据报的发送站已经指明该数据报不能分片,但是不进行分片又不可能进 行路由选择) • 代码5. 源站路由选择不能完成。换言之,在这个源站路由选择选项中定义 11 的一个或多个路由器无法通过。
IP协议是TCP/IP协议使用的传输机制,它是一种不可靠 的无连接的数据报协议,但是IP协议假定了底层是不可 靠的,因此,要尽最大的努力传输到目的地,但正因为 如此,IP协议则没有了保证,也就是说,它并没有提供 检验或跟踪机制。 所以, ICMP设计的本意就是希望对IP包无法传输时提供 报告,这些差错报告帮助了发送方了解为什么无法传递, 网络发生了什么问题,确定应用程序后续操作。 注意:IP中有关于差错检测的机制——用于检测传输错误。
3
• ICMP不能用来报告ICMP消息的错误,这样就避免了无限循 环。当ICMP查询消息时通过发送ICMP来响应。 • 对于被分段的数据报,ICMP消息只发送关于第一个分段中 的错误。也就是说,ICMP消息永远不会引用一个具有非0 片偏移量字段的IP数据报。
• 响应具有一个广播或组播目的地址的数据报时,永远不会 发送ICMP消息
9
下面对改变路由报文进行简短的解释:
在因特网中各路由器之间要经常交换路由信息,以便动态更 新各自的路由表。但在因特网中主机的数量远大于路由器的数量。 主机如果也像路由器那样经常交换路由信息,就会产生很大的附 加通信量,因而大大浪费了网络资源。所以,出于效率的考虑, 连接在网络上的主机的路由表一般都采用人工配置,并且主机不 和连接在网络上的路由器定期交换路由信息。在主机刚开始工作 时,一般都在路由表中设置了一个默认路由器的IP地址。不管数 据报要发送到哪个目的地址,都一律先将数据报传送给网络上的 这个默认路由器,而这个默认路由器知道到每一个目的网络的最 佳路由。如果默认路由器发现主机发往某个目的地址的数据报的 最佳路由不应当经过默认路由器,而是应当经过网络上的另一个 路由器R时,就用改变路由报文将此情况报告主机。 于是,该主机就在其路由表中增加一项:到某某目的地址应经 过路由器R(而不是默认路由器)。