Download presentation
Presentation is loading. Please wait.
1
第六章 差错与控制报文 (ICMP)
2
§6-1 引言 IP ICMP 缺少差错控制 缺少辅助机制
Internet Control Message Protocol(因特网控制报文协议) ICMP就是为了补偿上述两个缺点而设计的 它配合IP协议一起使用 Standards: RFC792: Internet Control Message Protocol,1981 RFC1256: ICMP Router Discovery Messages,1991
3
ICMP的位置及封装 IP Network layer ICMP 本身是一个网络层协议
IGMP Network layer IP ARP RARP ICMP 本身是一个网络层协议 ICMP报文首先要封装成IP数据报,然后再传送给下一层 ICMP message ICMP message IP header IP data IP header IP data Frame data Trailer (如果有) Frame header
4
§6-2 报文格式 代码 检验和 首部的其余部分 数据部分 类型 8 bits 16 bits
5
ICMP报文中各字段的作用 类型:是一个8比特长字段,定义了报文的类型。 代码:是一个8比特长字段,指明了发送此特定报文类型的原因。
检验和:是一个16比特长字段,进行差错检验。 首部的其余部分:对每一种报文类型都是特定的。 数据部分: 在差错报文中:所携带的信息可找出引起差错的原始分组; 在查询报文中:携带了基于查询类型的额外信息。
6
帮助主机或网络管理员从一个路由器或另一个主机得到特定的信息 报告路由器或主机(目的站)在处理一个IP数据报时可能遇到的一些问题
§6-3 报文的类型 ICMP 报文 差错报告 查询 帮助主机或网络管理员从一个路由器或另一个主机得到特定的信息 它是成对出现的 报告路由器或主机(目的站)在处理一个IP数据报时可能遇到的一些问题
7
路由器恳求(solicitation)或通告(advertisement)
ICMP Messages 种类 类型 报文 Reason 差错报告报文 3 目的站不可达 4 源站抑制 11 时间超过 Too long route 12 参数问题 Format error 5 重定向(改变路由) Route changed 查询报文 8 or 0 回送请求或应答 Reachability 13 or 14 时间戳请求或应答 Synchronization 17 or 18 地址掩码请求或应答 Mask maintenance 10 or 9 路由器恳求(solicitation)或通告(advertisement) Coincidence between routers
8
§6-4 差错报告 差错报告 目的站不可达 源站抑制 时间超过 参数问题 改变路由 ICMP不能纠正差错,它只是报告差错。
§6-4 差错报告 差错报告 目的站不可达 源站抑制 时间超过 参数问题 改变路由 ICMP不能纠正差错,它只是报告差错。 ICMP 总是向原始的数据源报告差错报文。 以下情况不产生ICMP差错报文: 对于携带ICMP差错报文的数据报,不再产生ICMP差错报文; 对于分片的数据报,如果不是第一个分片则不产生ICMP差错报文; 对于具有多播地址的数据报,不产生ICMP差错报文; 对于具有特殊地址的(如 或 )的数据报,不产生ICMP差错报文。
9
差错报文的数据字段的内容 收到的数据报 IP header 8 bytes IP data ICMP header IP header
所有的差错报文都包括一个数据部分,而这个数据部分包括原始数据报的首部,再加上数据报中的前8个字节的数据。 加上原始数据报中的首部就可给出原始信源。 要包括数据的前8个字节是因为这前8个字节提供了关于端口号(UDP和TCP)和序号(TCP)的信息,因而源站可以将差错情况通知这些协议(UDP或TCP)。
10
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
(一)目的站不可达 代码: 0至15 检验和 未使用 (全0) 收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节 类型:3 产生原因: 当路由器不能够给数据找到路由或主机不能够交付数据报时,就丢弃这个数据报,然后这个路由器或主机就发回目的站不可达报文给发出该数据报的源主机。
11
各代码的作用 代码0:网络不可达。可能是硬件故障。 代码1:主机不可达。这也可能是硬件故障。
代码2:协议不可达。IP数据报携带的数据可能属于高层协议,但此时高层协议并未运行,于是就发送出代码为2的报文。 代码3:端口不可达。数据报要交付的那个应用程序(进程)此时未运行。 代码4:需要进行分片,但该数据报的DF(不分片)字段已被设置。 代码5:源站路由选择不能完成。即在这个源站路由选择选项中定义的一个或多个路由器无法通过。 代码6:目的网络不可知。(与代码0不同) 代码7:目的主机不可知。(与代码1不同) 代码8:源主机是孤立的。
12
各代码的作用(续) 代码9:与目的网络的通信从管理上是禁止的。 代码10:与目的主机的通信从管理上是禁止的。
代码11:对所请求的服务类型,网络不可达。(与代码0不同) 代码12:对所请求的服务类型,主机不可达。(与代码1不同) 代码13:主机不可达。因为管理机构放置了一个过滤器在它上面。 代码14:主机不可达。因为主机的优先级被破坏了。这个报文由路由器发出,指出所请求的优先级对该目的站是不允许的。 代码15:主机不可达。因为它的优先级被删掉了。
13
说明: 有0至15种代码指明了产生目的站不可达差错报文的原因。 目的站不可达报文可以由路由器也可以由目的主机产生。
具有代码2或3的目的站不可达报文只能由目的主机创建,其余的目的站不可达报文只能由路由器创建。 甚至在路由器没有发送目的站不可达报文时,与不一定表示数据报已经交付了。即路由器无法检测出分组没有交付的所有问题。
14
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
(二)源站抑制 代码: 0 检验和 未使用 (全0) 收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节 类型:4 产生原因: IP在协议中没有嵌入的流控制机制。在运行IP时,缺乏流控制会产生一个主要问题:拥塞。若数据报的接收速率比它们被转发或处理的速率快得多,则队列将会溢出。这样,路由器或主机别无选择,只能将某些数据报丢弃。
15
说明: 源站抑制报文通知源站,由于拥塞在路由器或目的主机中已经丢弃了数据报。源站必须放慢数据报的发送,直到拥塞程度减轻为止。
对每一个由于拥塞而被丢弃的数据报,都应当发送源站抑制报文。 没有机制告诉源站拥塞程度已经减轻。 主机收到对目的站D的源站抑制报文,就会降低它向D发送数据报的速率,直到它停止收到源站抑制报文。 然后,只要没有再收到源站抑制请求,就会逐渐提高发送速率。
16
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
(三)时间超过 代码: 0 至1 检验和 未使用 (全0) 收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节 类型:11 产生原因: 当路由器收到一个数据报,发现TTL字段的值已经变为了0,就将此数据报丢弃,并向源站发送时间超过报文。 当组成一个报文的所有分片未能在某一时限内到达目的主机时,它就丢弃已收到的分片,然后也要产生时间超过报文向源站发送。
17
说明: 当数据报的生存时间字段的值为零而被路由器丢弃时,就使用代码0。
在时间超过报文中,代码0只能由路由器使用。它表示生存时间字段的值为零。 由于在规定的时限内一数据报的某些分片未能到达而导致已到达分片被丢弃时,就使用代码1。 在时间超过报文中,代码1只能由目的主机使用。它表示在规定的时限内,不是所有的分片都到达了。
18
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
(四)参数问题 代码:0 至1 检验和 未使用 (全0) 收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节 类型:12 指针 产生原因: 如果路由器或目的主机发现一个数据报的首部有二义性,或某个字段缺少某个值,它就丢弃这个数据报,并发送参数问题报文。
19
说明: 路由器或目的主机可以创建参数问题报文。 代码0:在首部的一个字段中有差错或二义性。在这种情况下,指针字段的值指向有问题的字节。
代码1:表示缺少所需的选项部分。在这种情况下,不使用指针。
20
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
(五)改变路由 代码:0至3 检验和 目标路由器的IP地址 收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节 类型:5 产生原因: 主机通常使用静态路由选择,当主机开始联网工作时,其路由表中的项目数很有限,通常只有一个默认路由器的IP地址。 这样,当主机向另一个网络发送数据报时,就将此数据报发给了这个错误的路由器。 在这种情况下,收到此数据报的路由器会将该数据报转发给正确的路由器。 但要更新主机中的路由表,就要由路由器发送改变路由报文。
21
说明: 主机在开始工作时只有很小的路由表,它逐渐增大和更新,完成此工作的工具之一就是改变路由报文。
改变路由报文是由路由器向同一个本地网络上的主机发送的。 虽然改变路由报文是一种差错报告报文,但这种情况下路由器不丢弃数据报。 改变路由报文的代码字段缩小了改变路由的范围: 代码0:对特定网络路由的改变。 代码1:对特定主机路由的改变。 代码2:基于指明的服务类型对特定网络路由的改变。 代码3:基于指明的服务类型对特定主机路由的改变。
22
改变路由的概念 主机A打算向主机B发送数据报。路由器R2显然是最有效的路由选择,但主机A没有选择R2,而是向R1发送。这时: Host A
Network Host A Host B R1 R2 IP 分组 改变路由报文
23
§6-5 查询 查询 回送请求和回答 时间戳请求和回答 地址掩码请求和回答 路由器询问和通告
24
可选数据(由请求报文发送,由回答报文重复)
(一)回送请求和回答 代码:0 检验和 可选数据(由请求报文发送,由回答报文重复) 类型:8 or 0 标识符 序号 8: 回送请求 0: 回送回答
25
说明: 回送请求和回送回答报文可由网络管理员来使用,用来检查IP协议的工作情况。
主机或路由器可以发送回送请求报文,收到回送请求报文的主机或路由器发送出回送回答报文。 回送请求和回送回答报文可由网络管理员来使用,用来检查IP协议的工作情况。 用回送请求和回送回答报文可测试一个主机的可达性,通常是调用ping命令来这样做的。 格式中的标识符和序号字段在协议中没有正式定义,可以由发送站任意使用。 可供选择的数据字段包含一个报文,它必须由回答的结点在回送回答报文中完全一样的重复。
26
(二)时间戳请求和回答 代码:0 检验和 标识符 序号 13: 请求 14: 回答 原始时间戳 接收时间戳 发送时间戳
类型:13 or 14 标识符 序号 13: 请求 14: 回答 原始时间戳 接收时间戳 发送时间戳
27
说明: 两个机器(主机或路由器)可使用时间戳请求和时间戳回答报文来确定IP数据报在这两个机器之间来往所需的往返时间。
它也可以用作两个机器中时钟的同步。 发送时间= 接收时间戳的值 - 原始时间戳的值 接收时间= 分组返回的时间 - 发送时间戳的值 往返时间= 发送时间 + 接收时间
28
(三)地址掩码请求和回答 代码:0 检验和 类型:17 or 18 标识符 序号 17: 请求 18: 回答 地址掩码
29
说明: 主机可能知道他的完整IP地址,但却不知道地址中的哪一部分定义网络地址和子网地址,哪一部分对应于主机标识符。这样,主机就需要知道掩码。
要得到掩码,主机应发送地址掩码请求报文给局域网上的路由器。 若主机知道该路由器的地址,它就将这个请求直接发给该路由器;若不知道,则广播此报文。 路由器收到地址掩码请求报文就响应地址掩码回答报文,向主机提供所需的掩码。 在请求报文中,地址掩码字段填入全0,回答报文中,这个字段就包含真正的掩码。
30
(四)路由器询问和通告 代码:0 检验和 类型:10 标识符 序号 代码:0 检验和 类型:9 寿命 路由器地址1 优先级1 路由器地址2
地址号 寿命 路由器地址1 优先级1 地址大小 路由器地址2 优先级2
31
说明: 路由器询问和通告报文使得主机可以知道连接到它自己的网络上的路由器的地址,还可以知道这些路由器是否正常工作。
主机可将路由器询问报文进行广播(或多播)。收到询问报文的一个或几个路由器就使用路由器通告报文广播其路由选择信息。 在没有主机询问时,路由器还可以周期性的发送路由器通告报文。 优先级定义了路由器的等级。
32
§6-6 检验和 在ICMP中,检验和的计算覆盖了整个报文(首部和数据)。 发送端的检验和计算: 先将首部的检验和字段置为0。
§6-6 检验和 在ICMP中,检验和的计算覆盖了整个报文(首部和数据)。 发送端的检验和计算: 先将首部的检验和字段置为0。 将分组划分为K部分,每部分都是16比特长。 用反码算术运算将所有这些部分相加。 将最终结果取反码就得出检验和。再将其填入检验和字段。 接收端的检验和计算: 将收到的分组划分为K部分,每部分都是16比特长。 用反码算术运算将所有这些部分相加。 将得到的结果取反码。 若结果为0,则接收此分组,否组就拒绝此分组。
Similar presentations