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