4.8、网际控制报文协议 ICMP

为了更有效地转发 IP 数据报和提高交付成功的机会

  • 在网际层使用了网际控制报文协议 ICMP(Internet Control Message Protocol)。

主机或路由器使用 ICMP 来发送

  • 差错报告报文 \color{red}差错报告报文 差错报告报文
  • 询问报文 \color{red}询问报文 询问报文

I C M P 报文被封装在 I P 数据报 \color{red}ICMP 报文被封装在 IP 数据报 ICMP报文被封装在IP数据报中发送。


ICMP 差错报告报文共有以下 5 5 5

  • 终点不可达、源点抑制、时间超过、参数问题、改变路由(重定向)

1、终点不可达

当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。

具体可再根据 ICMP 的代码字段细分为

  • 目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知

  • 13 13 13 种错误。


假设主机 H1H2 发送 IP 数据报

H1 会将 IP 数据报发送给路由器 R1,由 R1 帮其转发

R1 的路由表中没有网络 N3 的路由记录、默认路由以及主机 H2 的特定主机路由

  • R1 就不知道如何转发该数据报,只能将其丢弃

  • 并向发送该数据报的源主机 H1 发送 ICMP 差错报告报文(类型:终点不可达)

image-20230103215830549

2、源点抑制

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

慢。


假设主机 H1H2 发送 IP 数据报

当该数据报传输到 R2 时,由于 R2 拥塞,也就是 R2 比较繁忙

  • R2 根据自己的丢包策略丢弃了该数据报

  • 并向发送该数据报的源主机 H1 发送 ICMP 差错报告报文(类型:源点抑制)

image-20230103220103483


image-20230103220123091

3、时间超过

当路由器收到一个目的 IP 地址不是自己的 IP 数据报,会将其生存时间 TTL 字段的值减 1 1 1

若结果不为 0 0 0 ,则将该 IP 数据报转发出去;若结果为 0 0 0,除丢弃该 IP 数据报外,还要向源点发送时间超过报文。


image-20230103220324230


另外,当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃

  • 也会向源点发送时间超过报文。

4、参数问题

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

image-20230103220527018

5、改变路由(重定向)

路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。


假设我们给主机 H1 指定的默认网关是路由器 R1 ,则 H1 要发往网络 N2IP 数据报都会传输给 R1 ,尤其帮忙转发

zhuanfa.gif

R1 发现 H1 发往 N2 的数据报的最佳路由是应当经过 R4

  • 就用改变路由报文把这个情况告诉主机

于是,H1 就将自己的路由表种添加一个项目,到达 N2 应经过路由器 R4,而不是默认网关 R1

zhuanfa2.gif

6、不应发送 ICMP 差错报告报文的情况

ICMP 差错报告报文不再发送 ICMP 差错报告报文

对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文

对具有多播地址的数据报都不发送 ICMP 差错报告报文

对具有特殊地址(如 127.0.0.0 127.0.0.0 127.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0)的数据报不发送 ICMP 差错报告报文

7、习题

image-20230103222013632

答案 C

8、常见的 ICMP 询问报文(2 种)

8.1、回送请求和回答

ICMP 回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。

收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文。

这种询问报文用来 测试目的站是否可达 \color{red}测试目的站是否可达 测试目的站是否可达及了解其有关状态。

8.2、时间戳请求和回答

ICMP 时间戳请求报文是请某个主机或路由器回答当前的日期和时间。

ICMP 时间戳回答报文中有一个 32 32 32 位的字段,其中写入的整数代表从 1900 1900 1900 1 1 1 1 1 1 日起到当前时刻一共有多少秒。

这种询问报文用来进行 时钟同步和测量时间 \color{red}时钟同步和测量时间 时钟同步和测量时间

9、ICMP 应用举例

9.1、分组网间探测 PING(Packet InterNet Groper)

用来测试主机或路由器间的连通性

应用层直接使用网际层的 ICMP (没有通过运输层的 TCPUDP

使用 ICMP 回送请求和回答报文

例如:测试主机与百度网站服务器的连通性

ping.gif

9.2、跟踪路由 traceroute

用来测试 IP 数据报从源主机到达目的主机要经过哪些路由器

Windows 版本

  • tracert 命令

  • 应用层直接使用网际层 ICMP

  • 使用了 ICMP 回送请求和回答报文以及差错报告报文

Unix 版本

  • traceroute 命令

  • 在运输层使用 UDP 协议

  • 仅使用 ICMP 差错报告报文

image-20230103223903601

9.2.1、实现原理

假设 H1 想要知道到达 H2 要经过哪些路由器

H1 就给 H2 发送 ICMP 回送请求报文

  • 该报文被封装在 IP 数据报中

IP 数据报中首部生存字段 TTL 的值被设置为 1 1 1

IP 数据报到达 R1 后其生存时间减 1 1 1 结果为 0 0 0

R1 丢弃该数据报。并向发送该数据报的源主机 H1 发送 ICMP 差错报告报文

  • 类型:时间超过

image-20230103224542697


H1 继续发送下一个封装有 ICMP 回送请求报文的 IP 数据报

  • 其首部中生存时间字段 TTL 的值被设置为 2 2 2

image-20230103224740677


H2 解析该 ICMP 回送包请求报文的 IP 数据报

  • 发现其内部封装的时 ICMP 回送请求报文

image-20230103224919419

10、小结

image-20230103224945171

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值