第二十章 网络层 : IP 协议 20.1 Copyright The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
20-1 网际互联 这一节, 我们要讨论网际互联和网络连接来实现一个互联网或者因特网 本节主题 : 网络层需求作为数据报网络的因特网作为无连接网络的因特网 20.2
20.3 Figure 20.1 两台主机之间的链路
20.4 Figure 20.2 互联网中的网络层
20.5 Figure 20.3 源端 路由器端和目的端的网络层
20.6 Figure 20.3 源端 路由器端和目的端的网络层 ( 续 )
注意 因特网中的网络层交换是利用数据报分组交换的方法实现的 20.7
注意 因特网的网络层通信是无连接的 可利用面向无连接网络服务来实现也可利用面向有连接的网络服务来实现 20.8
20-2 IPv4 网际协议第四版 (IPv4) 是 TCP/IP 协议使用的传输机制 本节主题 : 数据报分段校验和选项 20.9
Figure 20.4 IPv4 在 TCP/IP 协议族中的位置 20.10
Figure 20.5 IPv4 数据报格式 20.11
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 传送 首部 数据部分 IP 数据报
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 传送 首部 数据部分 IP 数据报
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 传送 首部 数据部分 IP 数据报
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 版本 占 4 bit, 指 IP 协议的版本目前的 IP 协议版本号为 4 ( 即 IPv4)
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 首部长度 占 4 bit, 可表示的最大数值是 15 个单位 ( 一个单位为 4 字节 ) 因此 IP 的首部长度的最大值是 60 字节
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 服务类型 占 8 bit, 用来获得更好的服务这个字段以前一直没有被人们使用
Figure 20.6 服务类型或差分服务 TOS(Type of Sevice) 差分服务 20.18
注意 在版本 4 中未使用优先子字段 20.19
20.20 Table 20.1 服务类型
Table 20.2 服务类型的默认值 NNTP(Network News Transport Protocol) 20.21
差分服务 当最右边 3 位都是 0 时, 最左边 3 位与服务类型中的优先级相同 当最右边 3 位不全是 0 时, 则 6 位的含义如下图 0,2,4,,62, 由 IETF 分配 3,7,11,15,,63, 本地组织结构时候用 1,5,9,,61, 临时的用作实验目的 20.22
20.23 码点
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 总长度 占 16 bit, 指首部和数据之和的长度, 单位为字节, 因此数据报的最大长度为 65535 字节 总长度必须不超过最大传送单元 MTU
注意 总长度定义了包括头部在内的数据报的总长度 20.25
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 可变部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 目的地址 可选字段 ( 长度可变 ) 填充数据部分 标识 (identification) 占 16 bit, 它是一个计数器, 用来产生数据报的标识 Sequence number Used with addresses and user protocol to identify datagram uniq
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 可变部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 目的地址 可选字段 ( 长度可变 ) 填充数据部分 标识 (identification) 占 16 bit, 它是一个计数器, 用来产生数据报的标识 More bit Don t fragment
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 片偏移 (12 bit) 指出 : 较长的分组在分片后某片在原分组中的相对位置 片偏移以 8 个字节为偏移单位
IP 数据报分片的举例 需分片的数据报 首部 数据部分共 3800 字节 偏移 = 0/8 = 0 字节 0 1400 2800 3799 首部 1 首部 2 首部 3 字节 0 数据报片 1 偏移 = 0/8 = 0 1399 1400 2799 2800 3799 数据报片 2 数据报片 3 偏移 = 1400/8 = 175 偏移 = 2800/8 = 350
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 生存时间 (8 bit) 记为 TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 协议 (8 bit) 字段指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程
运输层 TCP UDP 网络层 ICMP IGMP OSPF 首部 数据部分 IP 数据报 协议字段指出应将数据部分交给哪一个进程
20.33 Table 20.4 协议值
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 首部检验和 (16 bit) 字段只检验数据报的首部不包括数据部分 这里不采用 CRC 检验码而采用简单的计算方法
发送端 接收端 数据报首部 字 1 字 2 检验和字 n 16 bit 16 bit 置为全 0 16 bit 字 1 字 2 检验和字 n 16 bit 16 bit 16 bit 16 bit 反码算术 16 bit 运算求和取反码 IP 数据报 反码算术 16 bit 运算求和取反码 检验和 16 bit 结果 16 bit 数据部分不参与检验和的计算 数据部分 若结果为 0, 则保留 ; 否则, 丢弃该数据报
Figure 20.13 IPv4 中校验和的计算 20.36
比特 0 1 2 3 4 5 6 7 优先级 D T R C 未用 首部 比特 固定部分 0 4 8 16 19 24 31 版本首部长度 服务类型 总长度 标 识 标志 片偏移 生存时间 协 议 首部检验和 源地址 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 数据部分 源地址和目的地址都各占 4 字节
Figure 20.14 IPv4 中选项的种类 20.38
Data Field Carries user data from next layer up Integer multiple of 8 bits long (octet) Max length of datagram (header plus data) 65,535 octets
Figure 20.7 一个小的数据报封装在以太网帧中 20.40
Figure 20.8 协议字段和封装的数据 20.41
20.42 Table 20.4 协议值
Example 20.1 一个到达的 IPv4 分组的前 8 位如下 : 01000010 接收方是否应丢弃该分组? 为什么? 解这个分组有错误, 其中最左的 4 位是版本, 它是正确的 下一个 4 位是 1000, 则表明它是一个无效长度 (2 4 = 8) 而头部的最小字节数是 20. 因此, 这个分组在传输过程中被损坏了 20.43
Example 20.2 在一个 IPv4 分组中, 头部长度字段的值用二进制表示为 1000, 试问这个分组携带的选项是几个字节? 解头部的长度值是 8, 说明头部的总字节数是 8 4 = 32 字节 前面的 20 个字节是基本头部, 后面的 12 个字节是选项 20.44
Example 20.3 在一个 IPv4 分组中, 头部长度字段的值是 5, 而总长度字段的值是 0x0028, 试问这个分组携带的数据是多少字节? 解头部长度字段值是 5, 就是说头部的总字节数为 5 4= 20 字节 ( 无选项 ). 总长度是 40 字节, 也就是说, 这个分组携带 (40 20)=20 个字节的数据 20.45
Example 20.4 一个 IPv4 分组已到达, 最前面几个十六进制数字如下 0x45000028000100000102... 在丢弃这分组之前, 它经历了多少跳? 数据是属于上层的哪一个协议? 解为了求生存时间字段, 我们跳过了 8 个字节 (16 个十六进制数字 ) 生存时间字段是第 9 个字节, 它的值是 01, 这就是说分组仅能跳一次 协议字段是下一个字节 02, 也就是说上层协议是 IGMP 20.46
Figure 20.9 最大传输单元 (MTU) 20.47
20.48 Table 20.5 某些网络的 MTU 值
Figure 20.10 标记字段 20.49
Figure 20.11 分段示例 20.50
Figure 20.12 分段的细节示例 20.51
Example 20.5 到达到一个分组的 M 位的值是 0, 试问这是第一个分段还是中间的分段, 还是最后的分段? 我们是否知道这个分组已被分段? 解如果 M 位是 0, 这就是说不存在更多的分段, 该分段是最后的一个分段 但是我们不能说原来的分组是否已经被分段 没有分段的分组被认为是最后一个分段 20.52
Example 20.6 到达的一个分组的 M 位的值是 1, 试问这是第一个分段还是中间的分段, 还是最后的分段? 我们是否知道这个分组已被分段? 解如果 M 位是 1, 这就是说至少还有一个分段, 这个分段是第一个或中间的分段, 而不是最后的分段 但我们不知道它是第一个分段还是中间分段, 还需要有更多的信息 ( 分段偏移值 ) 20.53
Example 20.7 到达的一个分组的 M 位的值是 1, 而偏移值是 0, 试问这是第一个分段还是最后的分段, 或是最后的分段? 解因为 M 位是 1, 它或是第一个分段或是中间分段 由于偏移值为 0, 因此它是第一个分段 20.54
Example 20.8 到达的一个分组的偏移值是 100, 试问第一个字节的编号是什么? 我们能知道最后一个分段的编号吗? 解为了求第一个字节的编号, 我们将偏移值乘 8, 这就是说第一个字节的编号是 800. 但我们不能确定最后字节的编号, 除非知道数据的长度 20.55
Example 20.9 到达的一个分组的偏移值是 100, 而 HLEN 字段值为 5, 总长度字段的值是 100 试问第一个字节和最后字节的编号是多少? 解第一个字节的编号是 100 8 = 800. 总长度是 100 字节, 头部长度是 20 个字段 (5 4), 这就是说这个数据报有 80 个字节 如果第一个字节的编号是 800, 则最后字节的编号是 879 20.56
Example 20.10 图 20.13 表示了一个对没有选项的 IPv4 首部计算校验和 首部分成多个 16 位的部分 将所有这些部分相加, 再将得到的和取反码 将其结果插入到校验和字段中 20.57
20-3 IPv6 TCP/IP 协议族中的网络层协议现在是 IPv4 虽然 IPv4 设计地很好, 但自从 20 世纪 70 年代 IPv4 问世以来, 数据通信已经有了很大的发展 IPv4 有一些缺点, 这使得它对飞速发展的因特网有些不适应 本节主题 : 优点分组格式扩展头部 20.58
Figure 20.15 IPv6 数据报头部和有效载荷 20.59
IP v6 Header
IPv6 数据报的一般形式 选项 有效载荷 基本首部 扩展首部 1 扩展首部 N 数据部分 IPv6 数据报
IPv6 数据报首部与 IPv4 首部 有变化 比特 固定部分 20 字节 IPv4 数据报首部的对比 0 4 8 16 19 24 31 版本 首部长度 标 识 服务类型 生存时间协议 标志 源地址 总长度 片偏移 首部检验和 取消 可变部分 目的地址 可选字段 ( 长度可变 ) 填 充 上面是 IPv4 数据报的首部
比特 0 4 12 16 24 31 版本通信量类流标号 有效载荷长度下一个首部跳数限制 IPv6 的基本首部 (40 B) 源地址 (128 bit) 目的地址 (128 bit) IPv6 的有效载荷 ( 至 64 KB) 扩展首部 / 数据
比特 0 4 12 16 24 31 版本通信量类流标号 有效载荷长度下一个首部跳数限制 IPv6 的基本首部 (40 B) 源地址 (128 bit) 目的地址 (128 bit) IPv6 的有效载荷 ( 至 64 KB) 扩展首部 / 数据
比特 IPv6 的基本首部 40 B 0 4 12 16 24 31 版本通信量类流标号 有效载荷长度 下一个首部 跳数限制 源地址 (128 bit) 目的地址 (128 bit) 版本 (version) 4 bit 它指明了协议的版本, 对 IPv6 该字段总是 6
比特 IPv6 的基本首部 40 B 0 4 12 16 24 31 版本通信量类流标号 有效载荷长度 下一个首部 跳数限制 源地址 (128 bit) 目的地址 (128 bit) 通信量类 (traffic class) 8 bit 这是为了区分不同的 IPv6 数据报的类别或优先级 优先级是指当发生通信量拥塞时的分组的优先级
优先级 定义的是从相同源端发出的每一个分组相对于其他分组的优先级 IP v6 通信量被分为 2 类 : 可进行拥塞控制的通信量 (congestioncontrolled traffic) 不可进行拥塞控制的通信量 (noncongestioncontrolled traffic) 20.67
20.68 Table 20.7 可进行拥塞控制的通信量的优先级
20.69 Table 20.8 不可进行拥塞控制的通信量的优先级
20.70 Table 20.9 IPv4 和 IPv6 分组头部的比较
比特 IPv6 的基本首部 40 B 0 4 12 16 24 31 版本通信量类流标号 有效载荷长度 下一个首部 跳数限制 源地址 (128 bit) 目的地址 (128 bit) 流标号 (flow label) 20 bit 流 是互联网络上从特定源点到特定终点的一系列数据报, 流 所经过的路径上的路由器都保证指明的服务质量 所有属于同一个流的数据报都具有同样的流标号
20.72 流标号 支持流标号处理的路由器中包含有一个流标号表 流标号可用来加速路由器对分组的处理 流标号可用来支持实时音频和视频的传输 流标号使用的三个原则 : 流标号由源主机指定给分组, 是 1-2 24-1 之间的随机数 如果主机不支持流标号, 则置为 0 所有属于同一个流的分组必须就有相同的源地址 目的地址 优先级和选项
比特 IPv6 的基本首部 40 B 0 4 12 16 24 31 版本通信量类流标号 有效载荷长度 下一个首部 跳数限制 源地址 (128 bit) 目的地址 (128 bit) 有效载荷长度 (payload length) 16 bit 它指明 IPv6 数据报除基本首部以外的字节数 ( 所有扩展首部都算在有效载荷之内 ), 其最大值是 64 KB
比特 IPv6 的基本首部 40 B 0 4 12 16 24 31 版本通信量类流标号 有效载荷长度 下一个首部 跳数限制 源地址 (128 bit) 目的地址 (128 bit) 下一个首部 (next header) 8 bit 它相当于 IPv4 的协议字段或可选字段
20.75 Table 20.6 IPv6 的下一个头部的代码
比特 IPv6 的基本首部 40 B 0 4 12 16 24 31 版本通信量类流标号 有效载荷长度 下一个首部 跳数限制 源地址 (128 bit) 目的地址 (128 bit) 跳数限制 (hop limit) 8 bit 源站在数据报发出时即设定跳数限制 路由器在转发数据报时将跳数限制字段中的值减 1 当跳数限制的值为零时, 就要将此数据报丢弃
比特 IPv6 的基本首部 40 B 0 4 12 16 24 31 版本通信量类流标号 有效载荷长度 下一个首部 跳数限制 源地址 (128 bit) 目的地址 (128 bit) 源地址 128 bit 是数据报的发送站的 IP 地址
比特 IPv6 的基本首部 40 B 0 4 12 16 24 31 版本通信量类流标号 有效载荷长度 下一个首部 跳数限制 源地址 (128 bit) 目的地址 (128 bit) 目的地址 128 bit 是数据报的接收站的 IP 地址
Figure 20.16 IPv6 数据报的格式 20.79
Figure 20.17 扩展头部的类型 20.80
Table 20.10 IPv4 选项和 IPv6 扩展头部的比较 20.81
20-4 IPv4 到 IPv6 的过渡 因为因特网上的系统非常多, 所以从 IPv4 过渡到 IPv6 不能突然发生 要使每一个在因特网中的系统从 IPv4 过渡到 IPv6, 需要花费相当长的时间 这种过渡必须是平滑的, 以防止 IPv4 和 IPv6 系统间出现任何问题 本节主题 : 双协议栈隧道技术头部转换 20.82
Figure 20.18 三种过度策略 20.83
Figure 20.19 双协议栈 20.84 其中要使用 DNS 来确定使用那个协议栈
Figure 20.20 隧道策略 20.85
Figure 20.21 头部转换策略 20.86
20.87 Table 20.11 头部转换
作业 : P401 页 15,19,21,23 20.88