Computer Networks Questions & Answers, Chinese Version - PDF
Document Details

Uploaded by PropitiousLapisLazuli31
Xie Xiren
Tags
Summary
This document contains practice questions related to computer networks, likely from the textbook "Computer Networks" (8th Edition) by Xie Xiren. The questions cover a range of networking topics, including IP addressing, routing, and network protocols. The document is primarily in Chinese.
Full Transcript
4-09 IP数据报中的首部检验和并不检验数据报中的数据。 这样做的最大好处是 什么? 坏 处是什么? 4-1 0 当某个路由器发现 一 IP数据报的检验和有差 错时 , 为什么采取丢弃的办法而不是要 求 源 站重传此数据报? 计算首部检验和为什么不采用C RC 检验码? 4-1 1 设 IP数据报使用 固 定 首部, 其 各...
4-09 IP数据报中的首部检验和并不检验数据报中的数据。 这样做的最大好处是 什么? 坏 处是什么? 4-1 0 当某个路由器发现 一 IP数据报的检验和有差 错时 , 为什么采取丢弃的办法而不是要 求 源 站重传此数据报? 计算首部检验和为什么不采用C RC 检验码? 4-1 1 设 IP数据报使用 固 定 首部, 其 各字段的具 体数值如 图 4- 76 所示( 除 IP地址外 , 均 为十进制形 式表示 ) 。 试用二进制运算方法计算应 当 写入到 首部检验和字段中的数值 ( 用二 进制形 式表示)。 4 | 5 | 。 。 28 I o I 4 I 17 首 部检验和 ( 待计 算 后 写 入 ) 1 0 1 2 1 4.5 12 6.7 9 图 4-76 习 题 4- 1 1 的 图 4-1 2 重新计算上题, 但使用十 六进制运算方法( 每1 6 位二 进制数字转换为4 个十六进制 数字 , 再按 十 六进制加 法规则计算)。 比较这 两种方法。 4-1 3 什么是 最大传送 单 元 MTU ? 它和IP数据报首部中的哪个字段有关系? 4-1 4 在互联网中将 IP数据报分片传送的数据报在最后的目的主机进行组装。 还可以有另 一种做法 , 即 数据报分 片 通过 一 个网络就进行 一 次组装 。 试 比 较 这 两种方法的优 劣 。 4-1 5 一 个3200 位长的 TCP报文传到IP层 , 加 上 1 06 位的首部后成为数据报。 下面的互 联 网 由两个局 域网通过路由器连接起来 , 但第 二个局 域 网所能传送的最长数据帧 中 的数据部分只有1 200 位 , 因此数据报在路由器必须进行分片 。 试问第 二个局 域 网向 其上层要传送多少比特 的数据( 这 里的 数据 当然 指的是 局 域 网 看见的数据) ? “ “ 4-1 6 1( ) 试解释为什么A RP高速缓存每存入 个项目就要设置 1 0 一 ~20 分钟的超时计时器。 这个时间设置得太大或 太小 会出现什么问题? (2 ) 举 出 至少两种不需要发送 A RP请求分组的情况(即不需要请 求 将 某个目的IP地 址 解 析 为相 应的 MA C 地址 )。 4-1 7 主机A 发送IP数据报给主机 B , 途中经过了5个路由器。 试问在IP数据报的发送过 程中总 共 使用了几次A RP? 4-1 8 设某路由器建立了如下转发表: 前缀匹配 下一跳 1 92 4.. 1 53.0 /2 6 R3 1 2 8. 96.39.0 /2 5 接口 mO 1 2 8.96.39. 1 2 8/2 5 接口 m l 1 2 8.96.40 0. /2 5 R2 1 92 4. 1. 53.0 /2 6 R3 * ( 默认 ) R4 现共收到 5个分组, 其目的地址分别 为: 1( 1) 2 8.96.39. 01 20 3 (2 ) 12 8. 96.40. 12 (3)1 2 8.96.40 1. 51 (4)1 92 4.. 153. 1 7.. 153.90 ( 5) 1 92 4 试分别计算其下 一 跳。 4-1 9 0 1/ 6。 该 单 位有4000 台机器, 平均分 布 在1 6 个不同 某单位分配到 一个地址块 1 2 9.2 5 的地点。 试给每 一个地点分配 一个地址块, 并算出每个地址块中 I P 地址的最小 值和 最大值。 4-20 一个数据报长度 为 4000 字节( 固 定 首 部 长 度 )。 现在经过 个网络传送, 但此网络 一 能够传送的最大数据 长度为 1 5 00 字节。 试问应 当 划分为几个短些的数据报片? 各 数 据 报 片 的数据字段长 度 、 片 偏 移字段和 MF 标志应为何数值? 4-2 1 写 出 互 联网的I P 层查找路 由 的算法。 4-22 有如下的4 个/2 4 地址块, 试进行最大可能的聚 合。 2 1 2.56.1 32 0. /2 4 21 2.56.1 33.0 /2 4 21 2.56. 1340. /2 4 21 2.56. 1 35.0 /2 4 4-23 有两个CID R 地址块20 81. 2 8/ 11 和20 81. 30 2. 8/2 2 。 是 否有哪 一个地址块 包 含 了 另 个 一 的地址? 如果有, 请 指出, 并说明理 由 。 4-24 已知路 由 器 凡 的转发表如表4-10 所示。 表 4- 1 0 习 题 4-24 中 路 由 器 氏 的转发 表 前缀 匹配 下 一 跳地址 路 由 器接 口 1 40 5 1 2 64/26 1 80 1 5 2 5 m2 1 30 5. 8/24 1 90 1 6 6 2 ml 1 10 7 1 / 1 6 ... mO 1 80. 1 5/ 1 6 ... m2 I 90 1 6/ 1 6 ... ml 默认 1 1 07 1.4 5 mO 试 画 出 各网络和必要的路由器的连接拓 扑, 标 注出必要的 I P 地址和接口 。 对 不能确 定 的情况应 当 指明。 4-25 一个 自 治 系 统分配到的 IP 地址块为30 1. 381. 1 8/ 2 3 , 并 包 含有 5个局 域网, 其连接图 如图4-7 7所示, 每个局 域 网 上的主机数分别 标注在图4-77上。 试给出每 一个 局 域 网 的地址块( 包 括前缀 )。 3 0. 1 3 8. 1 1 8/23 LAN 2 9 1 个 主 机 LAN 3 1 50 个 主 机 LAN4 3 个 主 机 了 了 广__ 豪少年〉 LAN5 1 5 个主机 LAN I 了 图 4-77 习 题 4-25 的 图 024 4-26 一 个大公司 有 一个总 部和三个下 属 部门。 公司分配到的网络前缀是 192.77.33 /24。 公 司的网络布局 如图4-78 所示。 总部共 有 5个局 域网, 其中的 LAN 1 ~ LA凡 都连 接到 三 路由 器 R 1 上,凡 再 通过 LAN5 与 路 由器 民 相连。 民 和远 地的三个部门的局 域网 LAN6 ~ LANs 通过广 域网相连。 每 一个局 域网旁边标明的数字是局 域网上的 主机数。 试给每 一个局 域网分配 一个合适的网络前缀。 9 2 3 3 / 2 4 l 7 7 ' , ,', 0 5 R3 ,-一、- - 、- - ' ,. LAN 、 - - ' ,、 ; ; 20 ` 一 'L _ , 6 4 }、L 0 l R R } 5' - } 2 ,--、一 一 ”. 一 、 ` , A.、』 N 『 ,',z ,J , _7 '; 20 ,_ LAN '-.、--夕、 Z l 2 8 、_ ,,. _ , 、 LAN 1 0 ,、 、 图 4-78 习 题 4-26 的 图 一 4-27 以下 地址中的哪 个和 86.32/12 匹配 ? 请 说明理由 。 (1) 86.33.224.123 ; (2) 86.79.65.216; (3) 86.58.119.74; (4) 86.68.206.154。 4-28 以下的地址前缀中的哪 一个地址与 2.52.90.140 匹配 ? 请 说明理由 。 ( 1 ) 0/4; (2) 32/4; (3) 4/6; (4) 80/4。 4-29 下 面的前缀中的哪 一个和地址 152.7.77.159 及 1 52.31.47.252 都 匹配 ? 请 说明理由。 (1) 152.40/13 ; (2) 153.40/9 ; (3)152.64/12; (4) 152.0/11。 4-30 与下列 掩码相对应的网络前缀各 有多少位? (1) 192.0.0.0; (2) 240.0.0.0; (3 ) 255.224.0.0; (4) 255.255.255.252。 4-31 已知地址块 中的一个地址是 140.120.84.24/20。 试求 这个地址块 中的最小地址和最大 地址。 地址 掩码是什么? 地址块 中共 有 多 少个地址? 相当千 多 少个C类地址 ? 一 4-32 已知地址块 中的 个地址是 190.87.140.202/29。 重新 计算上题。 4-33 某 单位 分配到一个地址块136.23.12.64/26。 现在需 要 进 一 步划分为 4 个一 样大的子 网。 试问: (1) 每个子网的网络前缀有多 长? (2) 每 一个子网中 有多 少个地址 ? (3) 每 一个子网的地址块 是什么 ? (4) 每 一个子网可分配给 主机使用的最小地址和最大 地址是什么 ? 4-34 I GP和 EGP这 两 类协议的 主要区别是 什么 ? 4-35 试简述R IP, OSPF 和BGP路由 选择协议的 主要特点。 4-36 R P使用I UDP, OSPF 使用 P I , 而BGP使用 TCP 。 这 样做 有何优点 ? 为什么R I P周 期性地和邻 站 交换 路由信 息而BGP 却 不这 样做 ? “ ” “ ” 4-37 假定网络中的路由器 B 的路由表 有 如下的项目 (这 三 列 分别表 示 目的网络 距离 “ ” 和 下 一 跳 路由器 ) : N1 7 A N2 2 C N6 8 F N8 4 E N9 4 F 205 现在 B 收到从C 发来 的路由信 息 ( 这 两 列分别表示 目的网络 和 距离 ): “ ” " ” 沁 4 凡 8 N6 4 沁 3 沁 5 试 求出路由器 B 更新后的路由表(详细说明每一个步骤)。 4-38 网络如 图4- 79 所示。 假定AS ] 和AS4 运行程序 RIP, AS2 和AS 3 运行程序 OSPF。 AS 之间运行程序 e BGP和 iBGP。 目前先假定在AS2 和 AS4 之 间没有物理连接(图中的 虚 线表示这个假定)。 图 4-79 习 题 4-3 8 的 图 1( ) 路由器 R3 c 使用哪 个协 议 知 道前缀 X ( X 在AS4 中) ? 一 ( 2) 路由器 R3a 使用哪 一 个协 议 知 道前缀 X ? (3) 路由器 R 1 c 使用哪 一个协 议 知 道前缀 X ? (4 ) 路由器 R l d 使用哪 一 个协 议 知 道前缀 X ? 4-39 网络 同 上题。 路由器 R l d 知 道前缀 X, 并将前缀 X 写入转发表。 1( ) 试问路由器 R l d 应当从接口 1 还是接口 2 转发分组呢? 请简述理由。 ( 2) 现假定 AS2 和 AS4 之间有物理连接, 即 图中的虚线变成了实线。 假定路由器 R ld 知 道到 达前缀 X 可 以经过 AS2 , 但也可 以经过 AS3。 试问路由器 R l d 应 当 从接口 l 还是接口 2转发分组呢? 请简述理由。 (3) 现假定有另 一个 AS 5 处在 AS 2 和 AS 4 之间( 图中的虚线之间未 画出 AS 5 )。 假定 路由器 Rl d 知 道到达前缀 X 可以经过路由[AS2 ASs AS4 ] , 但也可以经过路由[AS 3 AS4]。 试问路由器 R l d 应当从接口1 还是接口 2 转发分组呢? 请简述理由。 4-40 IGMP 协 议的要点是什么? 隧 道技术在多播中是怎样使用的? 4-4 1 什么是 VPN ? VPN 有什 么 特 点和优缺点? VPN 有几种类别? 4-42 什么是 NAT ? NAPT 有哪 些特 点? NAT 的优点和缺点有哪 些? 4-43 试把下列IPv4 地址从二进制记法转换为点分十进制记法。 ( I ) 1000000 I0000 I O11 0000 I O 1 1 1 1 01 1 1 1 1 ( 2) 11000001 1000001 1 000 1 01 1 1 1 1 11 1 1 1 1 (3) 111001 11 11011011 1000 101 1 01 101111 (4 ) 1111100 I 100110 11 1 1 1 1 011 1 0000 1 1 1 1 4-44 假设 段地址的首地址为1 46.10 2. 29.0 , 末 地址为1 46.10 23 一. 2. 255, 求这个地址段的 02 6 地址 数。 4-45 已知 一/27 网络中 有 一个地址是 167.199.170.82, 问 这个网络的网络 掩码 、 网络前缀 长 度 和网络后缀长度是多 少? 4-46 已知 条件同上题, 试求这个地址块的地址数、 首地址以及末地址各是多少? 4-47 某 单位 分配到 一个地址块14.24.74.0/24。 该 单位需要用到三个子网, 对这 三个子地址 块的具体 要求 是 : 子网 N 1 需要 120 个地址, 子网 N2 需要 60 个地址, 子网 N3 需要 10 个地址。 请给出地址块 的分配方案 。 4-48 如图4-80 所示, 网络 145.13.0.0/16划分为四个子网 N 1 , N2, N3 和 N4 。 这 四个子网与 路由器R 连接的接口分别是mO, m l , m2 和 m3 。 路由器R 的第五个接口m4 连接到互 联网。 网 络 1 45. 1 3.0.0/ 1 6 ' ,, 、、 -- // L.::JI 1 45. 1 3.0. l L : / 1 45. 1 3.64. 1 卢_ :' :... , 飞 ', '' I ' ' `、 一一 、 N 1 1 45 1 3 0 0/ 1 8 / , ' ,今 ,: N 2 1 4 5. 1 3.64.0/ 1 8 、、 、 、、 N ,3 1 45. 1 3. 1 28.0/ 1 8 、 、 、 、 ' `、 : 1 45. 1 3. 1 92.0/ 1 8 、、、 l I } : ' ' ( 4 :, I ' :/ ' ' ::i / ' ' ' ,户 , l ·.I... r ' , 一 ', : 、 ` 1 45. 1 3. 128. 1 --- ” - -- - -- ,,, `,、 、 1 45. 1 3. 1 92. 1 ,' / 1 , ,`、 、 、 一 、 一_ 、、 、 、 一',' , 图 4-80 习 题 4-48 的 图 (1) 试给出 路由器R 的 路由表。 (2) 路由器R 收 到 一个分组, 其目的地址是145.13.160.78 。 试给出这个分组是怎样被 转发的。 一 4-49 收 到 个分组,其目的地址 D = 11.1.2.5。 要 查 找的转发表中 有这 样三 项: 路由 1 到 达网络 11.0.0.0/8 路由 2 到 达网络 11.1.0.0/16 路由 3 到达网络 11.1.2.0/24 试问在转发 这个分组时应当选择哪一个 路由? 4-50 同上题 。假定路 由 l 的目的网络 11.0.0.0/8 中 有 一 台主机H , 其 IP 地址是11.1.2.3 。 当我们发送 一个分组给 主机 H 时, 根据 最长前缀匹配准则, 上 面的这个转发表却把 这个分组转发 到 路由 3 的 目的网络 11.1.2.0/24。 是最长前缀匹配准则有时会出错吗? 4-51 已知 - C D I R 地址块为200.56.168.0/21 。 (1) 试用二进制形式表示这个地址块。 (2) 这个 C I D R 地址块包括 有 多 少个C类地址块? 4-52 建议的 1Pv6协议 没有首部检验和。 这 样做的优缺点是什么? “ ” 4-53 在 1Pv4 首部中 有 一个 协议 字 段, 但 在 1Pv6的固 定首部中却 没有 。 这 是为什么? 207 4-54 当 使用 1Pv6时, 协议ARP是否需要 改变?如果需要 改变 , 那么应当进行概念 性的改 变 还是技术性的改 变? 4-55 1Pv6只允 许 在源点 进行分片。 这 样做有 什么好 处? 4-56 设每隔 1 微微秒就分配 出 100 万个 1Pv6地址。 试计算大约 要用多 少年 才 能将 1Pv6地 址空间 全部用光。 可 以和宇 宙的年 龄( 大 约 有 100 亿 年 ) 进行 比 较。 4-57 试把以下的 1Pv6地址用零压缩方法写成简 洁形式: (1) OOOO:OOOO:OF53:6382:AB00:67DB:B B27 :7332 (2) 0000:0000:0000:0000:0000:0000:004D:ABCD (3) OOOO:OOOO:OOOO:AF36:7328:0000:87AA:0398 (4) 2819: 00AF :0000:0000:0000: 0035:0C B2:B271 4-58 试把以下的零压缩的 1Pv6地址写成原来的形式: (1) 0: :0 (2) O:AA: :O (3) 0:1234: :3 (4) 123: :1:2 4-59 从 1Pv4 过渡到 1Pv6的方法有哪些? 4-60 多 协议标签 交换 M PLS 的工 作原理是怎样的?它 有哪些 主要的功 能? 4-61 SDN 的广义转发与传 统的基于终点 的转发 有 何区别? 4-62 试 举 出 IP 数据 报 首 部中 能 够 在 OpenFlow 1.0 中 匹 配 的三个 字 段 。 试 举 出 在 OpenFlow 中 不能匹配的三个IP数据 报 首部。 4-63 网络 如图4-81 所示。 (1)假定 路由器凡把所有发往网络前缀123.1.2.16/29 的分组都从 接口4 转发 出去。 (2)假定 路由器 R ] 要把凡发往 123.1.2.16/29 的分组从 接口 4 转发 出去 , 而把 儿 发 往 123.1.2.16/29 的分组从 接口3 转发 出去。 试问, 在上述 两种情况 下 , 你 都能够给 出 路由器 凡 的转发表吗?转发表只需要给 出 发往 123.1.2.16/29 的分组应当从哪一个接口转发 出去。 R R4 1 28. 1.2. 1 6/29 - 已 图 4-8 1 习 题 4-63 的 网 络 4-64 已知 一 具有 4个接口的路由器民的转发表 如表 4-11 所 示 , 转发表的每 一 行给 出了目 的地址的范围, 以及 对应的转发 接口。 表 4-1 1 习 题 4-64 中 路 由 器 R1 的转发表 目 的 地址范 围 转发接 口 。 最小地址 1 1 100000 00000001 00000000 00000000 最大地址 1 1 100000 00000001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 208 续表 目 的 地址范 围 转发接 口 最小地址 1 1 100000 00000000 00000000 00000000 I 最 大地址 1 1 100000 00000000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 最小地址 1 1 100000 00000010 00000000 00000000 2 最 大地址 1 1100001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 l l l l l l l l 其他 3 ( 1 ) 试把以上转发 改 换 为另一 形式, 其中的目的地址范围 改为前缀匹配, 而转发 表 表 由 4行增加为5行。 (2) 若 路由器收到一个分组,其目的地址是: (a) 11100000 I 0000001 0I O10001 01010 I O I (b) 11100000 00000000 11010111 01111100 ( c) 1110000 I 10010000 00010001 01110111 试给出每 一种情况 下分组应当通过的转发 接口 。 4-65 一 路由器连接到三个子网, 这三个子网共 同的前缀是 225.2.17/24。假定子网 N 1 要 有 62 台主机, 子网N 2 要 有 105 台主机, 而子网 凡 要 有 1 2 台主 机。 试分配这三个子网 的前缀。 4-66 图4-82 是 一 个 SDN OpenFlow 网 络。 假 定 : OpenFlow 控 制 器 00 1.3..6 : 凡 l / 00' I 、 !i4 1 t.2..4 勹:10 0 、 三 $/ l \ S2 4 00 1.3..5 -. l.2..3 0 ` 矗. I 0. 1..2 ' , ' -` l ,. 图 4-82 一 个 SDN OpenFlow 网 络 任何来自 儿 或H6 并 到达输入端 口 1 的且发往凡或 压 的分 组 , 应 通过端 口 2 转发出去 。 任 何来自 凡 或 压 并 到达输入端 口 2 的且发 往 儿 或 儿 的分组 , 应 通过端 口 1 转发出去。 任何从端 口 1 或 2 进入的且发往 儿 或 儿 的分组, 应 交付指明 的主机 ; H 3 或 儿 彼此可 以互 相发送分组。 " 试给出 交换 机 S 2 的流 项 ( 即 每 一行的 匹配 + 动 作 ” )。 表 4-67 SDN OpenFlow 网 络同 上题。 从主机 儿 或 儿 发出并 到 达 S 2 交 换 机 的 分组, 应遵循 以 下 规则: 任 何来自 压 并到达输入端 口 2 的且发往H , , H2, 儿 或H6 的分组, 应顺时针转发 出去。 209 任 何 来 自 儿 并到达输入端 口 2 的且发往 H 1 , H2, 凡 或 儿 的分组, 应逆时针转发 出去。 试给出交换机 S 2 的流表项(即 每 一 行的 匹配 + 动作 )。 " ” 4-68 SDN Op e nFlow 网 络 同 上题。 在 交 换机 S 1 和 S 3 有这样的规定 : 从源地址 凡或 儿 到 来 的分组, 将按照分组首部中的目的地址进行转发。 试给出交换机 S 1 和 S 3 的流表。 4-69 SDN Ope nFlow 网 络 同 上 题 。 假 定 我 们把交换机 S 2 作为防 火 墙。 防 火墙的行为有 以下 两种: 1( ) 对于目的地址为 压 和 儿 的分组 , 仅可转发从 凡 和 儿 发出的分组 , 也就是说 , 从 H 1 和 H 5 发出的分组应当被 阻挡。 ( 2) 仅对千目的地址为 儿 的分组才 交 付 , 也就是说 , 所有发往 儿 的分组均被 阻挡。 试分别对 上述的每 一种情况给出交换机 S2 的流表。 对于发往 其他 路由器的分组可不 用管。 210 第5章 运输层 本 章 先概括 介 绍 运输层协 议的特 点、 进程之 间 的通信 和端口等重要 概 念 , 然后讲 述 比 较简单的 UDP协议。 其余的篇 幅 都是 讨 论较为复杂但非常重要的 TCP协 议 和可靠传输的工 CD 作 原理, 包 括 停 止 等 待 协 议和 A RQ 协议。 在详细讲述 TCP 报 文 段的首部格 式 之后, 讨 论 TCP的三个重要问题: 滑动 窗口、 流量控制和拥塞控制机制。 最 后, 介 绍 TCP的连接管理。 运输层是 整个网络体系结构中的关键层次之 一 。 一 定要弄清以下 一 些 重要概 念: 1( ) 运输层为相 互通信的应 用 进程 提供逻辑通信。 ( 2) 端 口和套接字的意 义。 (3) 无连接的 UDP的特 点。 (4 ) 面向连接的 TCP的特 点。 ( 5 ) 在不可靠的网络 上实现可靠传输的工作原理, 停 止 等 待 协 议和A RQ 协 议。 ( 6 ) TCP的滑动 窗口、 流最控制 、 拥 塞控 制 和连接管 理。 5. 1 运输层协议概述 5. 1. 1 进程之 间 的 通信 从通信和信 息处理的角 度看, 运输层 向 它 上 面 的 应 用 层 提 供 通 信 服 务 , 它 属千面向通 信 部分的最高层, 同 时也是 用 户 功能中的最低层。 当网络边缘部分的两 台 主机使用网络 核 心 部分的功能进行端到端的通信时, 都要使用协议 栈中的运输层, 而网络 核 心部分中的路由器 在转发分组时只用到下三层的功能。 下面通过图 5-1 的示 意图来说明运输层的作用。 设 局 域网 LAN 1 上的主机 A 和局 域 网 LAN 2 上的主机 B 通过互 连的广 域网 WAN 进行通信。 我们知道,IP协议能够把源主机A 发 送出的分组, 按照首部中的目的地址, 送交到 目的主机 B, 那 么 , 为什么 还需要运输层呢? 从IP层来说, 通信的两端是 两 台主机。 IP数据报的首部明确地标 志了这 两 台主机的IP 地址。 但 两 台主机之间的通信 这种说法还不够明确。 真 正进行通信的实体是 在主机中的 “ ” 哪个构件 呢? 是主机中的应用进程, 是 一 台 主机中的应 用 进程和另 一 台 主机中的应 用 进程在 交换数据(即 通信)。 因此严 格地讲, 两 台 主机进行通信 就是两 台 主机中的应 用 进程互相通 信。 IP 协 议 虽 然能把分 组 送到 目 的主 机, 但是这个分组还 停 留 在 主机的网络层而没有交付 主机中的应用进程。 通信 的 两端应 当 是两个主机 中 的 应 用 进程。 也就是说, 端 到 端 的 通信是 应用进程之间的通信 。 在一 台 主机中经常有多个应用进程同 时分别和另 台 主机中的多个应 一 用进程通信。 例如, 某用户 在使用 浏 览器查找某网站的信 息时, 其主机的应用层运行浏 览器 客 户 进程。 如果在浏 览 网 页 的 同 时, 还要用 电子邮件给网站发送反馈意见, 那 么 主机的应用 $ 注 : 运 输 层 最 近 又增 加 了 第 三 种 协 议 , 即 流控制传输协议 SCTP (Stream Control Transmission Protocol) [RFC 4960 , 建 议 标准] , 它 具 有 TCP 和 UDP 协 议 的 共 同 优 点 , 可 支 持 一 些 新 的 应 用 , 如 IP 电 话 。 限 千 篇 幅 , 这 里 不 再 介 绍 。 21 1 层就 还 要运行 电 子邮件的客户 进 程 。 在图5-1 中, 主机A 的应 用 进 程AP1 和 主机 B的应 用 进 程 AP3 通信, 而与此同时, 应 用 进 程 AP2 也 和对方的应用 进 程 AP 4 通信 。 这表明运输 层 一 “ “ 有 个很重 要的功能 复 用 (m ultiplexing)和分用 (dem ultiplexing) 。 这 里的 复用 是指在发 送方 不同的应用 进 程都可以 使用 同 一 个运输 层协议传送 数据 ( 当然需要加上适当的首部 ), 而 “ ” 分用 是指接收方的运输 层在剥 去报 文的首部后能够把这些数据 正确 交付目的应用 进 程 气 ” 图 5-1 中 两个运输 层之间有 一个深 色 双 向 粗 箭 头 , 写 明 运输层提供应 用 进 程 间 的逻辑通 ” ” ” 信 。 逻辑 通信 的意 思是: 从应用 层来看, 只 要把应用 层报 文 交给下 面的运输 层,运输 层 就可 以把这 报 文传送到 对方的运输 层 (哪 怕 双方 相距 很远, 例如几千公 里 ), 好像这种通信 就是沿水平 方 向 直接传送数据 。 但事实上这 两个运输层 之间并没有 一 条水平方 向的物理连接 。 “ ” “ 数据的传送是沿着 图 中 的虚线方 向 ( 经过多个层 次 ) 传送的 。 逻辑 通信 的意 思是 好 像 ” 是这 样 通信, 但 事 实上 并 非真的这 样 通信 。 三豆 主 机 的 A 主 B 的 协议栈 Q 应 用 进程 应 用 进程 m 勹 艺 . [ 忙 … 运输层提供应用 进 程 间 的逻辑通信 机. . · 4 4 1..* ' 气享酰字心酗3酰翠咽霍覃芦霪霪霆麟单霹霉霆霉三叠“ ... IP 层 :… I 3 3 …. 2 2 …. : :' 丿 .·+ 1L … }tJ.......: ·.....................................: 主 B 主 A `、'----L---- -巴 L - 机 : :· 网 络 层 为主机之 间 的 通 信 提供服务 ,: : ' } 运 输 层 为 应 用 层进程之 间 的 通 信 提 供 服 务 \ 图5- 1 运输 层为相 互通信的应 用 进程提供 了 逻辑通信 从这 里可 以看出 网 络 层和运输 层 有 明 显的区 别 。 网络层 为主机之 间 的通 信提供服 务 , 而运输层则在 网络层的基础上 , 为 应 用 进程之间的通信提供服务 。 然而 正 如后 面 还 要讨论的, 运输层 还具 有网络层无法代 替 的许 多其他重 要功能 。 运输 层 还 要 对收 到 的报文进 行 差错检测 。 大家 应 当 还记 得, 在 网 络 层, I P数据 报 首部 中的检验和字段, 只 检验首部是否出现差错而 不检查数据 部 分 。 根据 应 用 程序的 不同需求,运输 层需 要 有两 种 不同的运输协议, 即面 向 连接的 TCP 和 无连接的 UDP, 这 两种 协议就是本章 要讨论的主要 内 容 。 我们 还应指出, 运 输层 向 高 层 用 户 屏 蔽 了 下 面 网 络核心的细节 ( 如网络拓 扑 、 所采用 的 路由选择协议等 ) , 它 使 应 用 进程看见的就是好像在两个运输层实体 之间 有一条端到端的 逻辑通信信道, 但这 条逻辑 通信 信道对上 层的表现却 因运输层 使用 的 不同协议 而 有很大的差 别 。 当运输 层采用 面 向 连接的 TCP 协议时, 尽 管下面的 网络是不可靠的 ( 只 提供尽最大努 @ 注 : IP 层 也 有 复用 和 分 用 的 功 能 。 即 在 发送 方 使 用 不 同 协 议 的 数 据 都 可 以 封 装 成 IP 数据报发送 出 去 , 而 在 接 收 方 的 IP 层 根 据 IP 首 部 中 的 协 议字段进行 分 用 , 把 剥 去 首 部 后 的 数 据 交 付 应 当 接 收 这 些 数 据 的 协 议 。 212 力 服务), 但这种逻辑 通信 信 道就相当于 一 条全双工的 可靠信道。 但当运输层采用无连 接 的 UDP 协议时, 这种逻辑 通信 信 道仍然 是 一条不可靠信道。 5. 1.2 运输层 的 两个主要协议 TCP/IP运输层的两个主要协 议都是 互联网的正 式标准, 即: ( 1) 用 户 数 据报协议 UDP( Us er Datagram Protocol) [RFC 768, STD6] (2 ) f专输t空制协议 TCP( Trans mis s ionC ontrol Protocol ) [RFC 793, STD7] 图 5- 2给出了这 两种协 议在协议栈 中 的位置。 | 应用 层 UDP TCP IP 与 各种 网 络接 口 图 5-2 TCP/IP 体 系 中 的 运输层协议 按照 OSI 的术语, 两个对等运输 实 体在通信时传送的数据单位叫作运输协议 数 据 单 元 DU ( Trans port Protocol Data Unit )。 但在 TCP/IP体系中 , 则根据所使用的协议是 TCP或 TP UDP, 分 别 称 之为 TCP 报文段( s e gment ) 或 UDP 用 户 数 据报。 UDP在传送数据之前不 需要先建立连接。 远地主机的运输层在收到 UDP报 文后, 不需 要给出任何确认。 虽 然 UDP不提供可靠交付, 但由于 UDP非常简 单, 在某些情况下 UDP 是 一种最有效的工作方式。 TCP 则提供 面 向 连接 的 服 务。 在传送数据之前必须先 建 立 连接, 数据传送结束后要释 放连接。 TCP 不 提供广播或多播服务。 由千 TCP要提供可靠的、 面向连接的运输服务, 因 此不可避免地增加了许多的开销, 如 确认、 流量控制、 计时器 以 及 连接管理等。 这 不仅使协 议数据单元的首部增大很多, 还要 占 用许多的处理机 资 源。 表 5-1给出 了 一 些应用和应用层 协议主要使用的运输 层 协 议 ( UDP或 TCP) 。 表 5-1 使用 UDP 或 TCP 协议 的各种应用和应用 层协议 应用 应 用 层协议 运输层协议 名 字转 换 DNS ( 域 名 系 统 ) UDP 文件传送 TFTP ( 简 单 文件 传 送 协 议 ) UDP 路 由 选择协议 RIP ( 路 由 信 息 协议 ) UDP IP 地址配置 DHCP ( 动 态主 机配置协 议 ) UDP 网 络 管理 SNMP ( 简 单 网 络 管 理 协 议 ) UDP 远程文件服务器 NFS ( 网 络 文 件 系 统 ) UDP IP 电 话 专用协议 UDP 流 式 多 媒体通信 专用协议 UDP 多播 lGMP ( 网 际组 管 理 协 议 ) UDP 电子邮件 SMTP ( 简 单 邮件 传 送 协 议 ) TCP 远程终端接入 TELNET ( 远程 终 端 协 议 ) TCP 万维网 HTTP ( 超 文 本 传送 协 议 ) TCP 文件传送 FTP ( 文 件 传 送 协 议 ) TCP 1 2 3 5. 1.3 运输层 的 端 口 前 面 已经 提到 过运输层的 复 用和分用功能。 其实 在 日 常生 活 中 也有很多复 用和分用的 例子。 假定 一个机构的所有部门向外 单位发 出 的公 文 都 山 收发室 负 责 寄 出 , 这相当千各部门 都 复用 这个收发室。 当收发室 收到从外 单位寄 来 的公 文 时 , 则 要完成 分用 功能 , 即 “ “ “ “ 按照信 封 上 写明的本机构的部门 地址把公 文 正确进行交付。 运输层的 复 用 和 分用功能也是类似的。 应用层所有的应用进程 都可以通过运输层再传 送到 IP层 ( 网络层), 这 就是 复 用 。 运输层从IP层收到发送给各 应用进程的数据后 , 必须 分别 交付指明的各 应用进程 , 这 就是 分用 。 显然 , 给应用层的每个应用进程赋 予 一个非常明 确的标志是 至 关重要的。 我们知道 , 在单个计算机中的进程是 用进程标 识 符( 一个不大的整数) 来 标 志的。 但 是 在互 联 网环境下 , 用计算机操作系统所指派的这种进程标 识符来 标 志运行在应用层的各种 应用进程 则是不行的。 这 是 因 为在互联网上使用的计算机的操作系统种类很多 , 而不 同 的操 作系统 又使用不 同 格式的进程标识 符。 为了使运行不 同 操作系统的计算机的应用进程能够互 相 通信 , 就必须用 统 一 的方法( 而这种方法必须与特定操作 系 统无关) 对 TCP/IP 体系的应 用进程进行标 志。 但是 , 把 一个特定机器上运行的特 定 进程 , 指明为 互 联 网上通信 的最后 终点是 不可行 的。 这 是 因为进程的创 建和撤 销 都是 动 态的, 通信的 方几乎无法知道和识 别 对方机器上的 一 进程。 另 外 , 我们往往需要利 用目的主机 提供的功能来 识 别 终点, 而不需要知道具体 实现这 个功能的进程是哪 一个 ( 例如, 要和互 联网上的某个邮件服 务器联系, 但并不 一定要知道这 个服务器功能是由目的主机上的哪 个进程实现的)。 解决这个问题的方法很巧 妙 , 就是 在应用层和运输层之间的 界 面上 , 设置 一个特 殊的 抽 象的 门 。 应用层中的应用进程要通过运输层发送到 互 联 网 , 必须要 通过这个 门 。 而别 “ ” 的主机上的应用进程要寻找本主 机中的某个应用进程 , 也必须通过这 个 门 。 这样 , 我们就可 以把应用层和运输层的界面上这 些 门 , 设为通信的抽 象 终 点 。 这 些抽 象终点的正 式 名 称 “ “ 就是 协议端 口 ( protocol port ) , 一 般就简称 为端 口 ( port )。 每 一个端口用 一个称为端 口 号( port numbe r)的正 整数 来 标 志 。 主机的操作系统 提供 了接口机制, 使得进程能够通过这种机制找 到 所要找的端 口。 请 注 意 , 这种在协议栈层 间 的 抽 象 的 协议端 口 是软件端 口 , 和路由器或 交换 机上的硬 件 端口是 完 全不 同 的概 念。 硬件端口是 不 同 硬件设备进行交互的接口, 而软件端 口 是应 用 层 的 各种协议进程与 运输实体进行层 间 交互 的 地点。 不 同的系统 具 体 实现端口的方法可以是 不 同的 ( 取决于系统使用的操作系统 ) 。 当 应用层要发送数据时 , 应用进程就把数据发送到 适当的端 口, 然 后运输层从 该 端 口 读取数据 , 进行后 续的处理 ( 把数据发送到目的主机)。 当运输层收到对方主机发来 的数据 时 , 就把数据发送到适当的端口 , 然 后应用进程就从该端口读取这 些数据。 显然 , 端口必须 有 一定容量的缓存来 暂时存放数据。 在后 面将讲到的 UDP和 TCP的首部格 式中(图 5-5 和图 5- 14) , 都有源端 口 和 目 的端 口 这 两个重要字段。 这 两个端口就是运输层和应用层进行交互的地点。 TCPI/ P的运输层用 个1 6 位端 口 号 来 标志 个端口。 但 请注 意 , 端 口 号只 具有本地意 一 一 义 , 它只是 为了标 志 本计算机应用层中的各个进程在和运输层交互时的层间接口。 在互联网 不 同 计算机中, 相 同 的端口号是 没 有 关联的。 1 6 位的端口号 可 允 许有 65535 个不 同 的端口 14 2 号 , 这个数 目对 一个计算 机来 说是足 够 用 的。 由此可见, 两个计算 机中的进 程 要 互 相通信, 不仅必须知道对方的IP地址 (为了找到 对 方的计 算 机), 而且 要知道对方的端 口 号 (为了找到 对 方 计 算 机中的应用 进 程)。 这 和我 们 寄 信 的过程类似。 当我们 要给 某 人 写 信时, 就必须 在信 封上 写 明他 的 通信 地 址 (这 是为 了 找到他的住所, 相当 于IP地址), 并 且 还 要 写上收 件 人的姓 名 (这 是因为在同 一 住所中可 能 有好几个 人, 这 相当千 端 口号)。 在信封 上 还应写 明 自 己的地址和姓 名 。 当收 信 人 回 信时, 很 容 易 在信 封上找到发 信 人 的地址和姓 名 。 互联网上的计 算 机 通信是采用 客 户 -服务 器方式。 客 户 在发 起 通信 请求时, 必须先知道对方服务器的 I P地址 (用来找到 目的 主机) 和端 口号 (用来找到目的进 程)。 因此运输 层的端 口号 分为下面的 两 大 类。 (1) 服 务 器 端 使 用 的端 口 号 这 里又 分为 两 类, 最重 要的一 类 叫 作熟知端 口 号(wel l- known port number)或全球通用 端 口 号, 数值为0~1023。 这 些熟知端 口 号最初公布 在文档中 [RFC 1700, STD2], 但后来因为互联网发展太快, 这种标准 文 档无法随时更新, 因此在 RFC 3232 中就把 RFC1700 列为陈 旧 的, 而当 前最新的熟知端 口 号可 在网 址 www.iana.org 上 查到。 I NA把这 些熟知端 口号指派给了 TCP/ IP最重要的一 些应用 程序, 让所 有的用 户 都知道。 A 当 一种新的应用 程序出现后,IANA 必须为它指派 一个熟知端 口 , 否则互联网上的其他 应用 进 程就无法和它 进行 通信。 和电话 通信对 比, 熟 知 端 口 号 相当 千所有 人 都应知晓的重 要 电话 号码, 如报警 电话 110, 急救 电话 120 等。 5-2 给出了 一 些常用 的熟知端 口 号。 表 表 5-2 常用 的熟知端 口 号 应 用 程序 I FTP I TELN ET I SMTP I DNS I TFTP I HTTP I SNMP I SNMP (trap ) I HTTPS 熟知端 口 号 I 21 23 25 53 69 80 161 1 62 443 另 一 类 叫 作登记端 口 号, 数值为 1024~49151。 这 类 端 口号是为没有熟知端 口号 的应用 程序 使用 的。 要 使用这 类端 口 号必须 在IANA按照规 定的手 续登记, 以 防 止 重 复。 (2) 客 户 端 使 用 的端 口 号 数值为 49152~65535。 由于这 类端 口号 仅 在客 户 进 程运行 @ 时才 动 态 选择, 因此又 叫 作短 暂 端 口 号 。 这 类端 口 号就是临时端 口号 , 留给客 户 进 程选择 临时 使用 。 当 服务 器进 程收 到 客 户 进 程的报文时, 就知道了客 户 进 程所使用的端 口号 , 因而 可 以把数据发送给客 户 进 程。 通信结束后, 刚才已使用 过的客 户 端 口 号就被 系 统收 回 , 以便 给其他 客 户 进 程 使用。 下 面 将 分别讨论UDP和 TCP 。 UDP比 较简 单, 本 章 主要讨论TCP 。 5.2 用 户 数据报协议 U D P 5.2. 1 UDP 概述 用户 数据报协议 UDP只在IP的数据 报 服务之上增加了 很少一 点的功能, 这 就是复 用 和分用 的功 能 以及 差错检测的功 能。 UDP的 主要特点 是: 视频讲解 CD 注 : 短 暂 端 口 (ephemeral port)[STEY94, p. 1 3]表示这种端 口 的存 在 时 间 是短 期 的 。 客 户 进 程 并 不在 意 操 作 系 统给它分配的 是 哪 一 个 端 口 号 , 因 为客 户 进程之所 以 必 须 有 一 个瑞 口 号 ( 在 本地主 机 中 必 须 是 唯 一 的 ) , 是 为 了 让运输层 的 实体 能 够 找 到 自 己 。 这和熟知 端 口 不 同 。 服 务 器 机 器 一 接通 电 源 , 服 务 器 程 序 就运 行起来。 为 了 让 互 联 网 上 所 有 的 客 户 程序都能找到服务器程序 , 服 务 器程序所使用 的端 口 ( 即 熟 知端 口 ) 就 必 须 是 固 定 的 , 并 且 是众所周 知 的 。 215 (1) UDP是无连接的 , 即发送 数据 之前不 需 要 建立连接 (当 然, 发送 数据 结束时也 没有 连接可释放 ) , 因此减少 了 开销 和发送数据 之前的时延。 (2) UDP 使用尽 最 大 努 力 交 付 , 即 不保证可靠交付 , 因此 主机不需要维持 复 杂 的连接状 态表 (这 里面有许 多 参 数)。 (3) UDP 是面 向 报文的。 发送方的 UDP 对应用程序 交 下来的报文 , 在添加首部后就 向 下 交付 IP 层。 UDP 对应用 层交 下来的报 文, 既 不 合 并 , 也 不拆 分, 而是保 留 这 些报文的边 界。 这 就是说 , 应用 层交给 UDP 多 长的报 文 , UDP 就照样发送 , 即 一 次发送 一 个报文 , 如 图 5-3 所示。 在 接收 方的 UDP , 对IP 层交 上来的 UDP用户 数据 报 , 在去 除首部后就原封 不 动 地交付 上 层的应用进 程 。 也就是 说 , UDP 一 次交付 一 个完 整的报 文。 因此, 应 用 程序必 须 选择合适 大小的报 文。 若 报 文 太长, UDP把它 交给IP 层后, IP 层 在传送时可能 要进行分 片 , 这 会降低IP 层的效率。 反之 , 若报文 太短, UDP把它 交 给IP 层后, 会 使IP 数据 报的 首部的相对长度太 大 , 这 也降低了IP 层的 效率。 应用层 运输层 IP 首 部 JP 数据 报 的 数据 部分 IP 层 图5-3 UDP 是面向报 文的 (4) UDP没有拥 塞控制 , 因此网络出现的 拥塞 不会 使源主机的发送速率 降低。 这 对某些 实时应用是很重 要的。 很 多 的实时应用 (如 IP 电 话 、 实时视频会议等) 要求源主机 以恒 定 的速率发送 数据 , 并 且 允 许 在网络发生 拥塞时丢 失 一 些 数据 , 但却 不允 许 数据 有太 大的时延。 UDP 正好适合 这 种 要 求。 (5) UDP支持 一 对 一 、 一 对 多 、 多对 一 和 多对 多的交互通信。 (6) UDP的首部开销 小 , 只有 8 个字节 , 比 TCP的 20 个字节的首部 要短。 下面举例 说明 UDP的通信 和端 口号的关 系 ( 如 图 5-4 所示 )。 主机 儿 中 有三个应用进 程分别 要 和 主机 H2 中的 两个应用进 程进行 通信。 通信 双 方的关 系 是: P] 一 凡, P2- P4 , P3 -P5 0 主机凡 的操作 系 统为这 三个进 程 分别 指派 了端 口, 其端 口号 分别为 a, b 和 c。 图 中位于应 用 层和运输 层之间的小方框代表端 口。 在端 口小 方框中间 还画 有队列, 表示端 口具 有缓存的 功能, 可 以把收 到的数据 暂时存 储 一 下。 有时也可 以把队列画成双 向 的, 即分别表示存放来 自 应用 层或运输 层的数据 。 现 在 假定主 机凡 中的进 程 已 经知道了 对方进 程 凡 和 P5 的端 口 号 分别 为 x 和 y , 于是在 主机 凡 的运输 层就可 以组装成需要发送的 UDP用户 数据 报 , 其中 最重 要的地址信 息(源端 口, 目的端 口) 分别是(a, x), ( b, x)和(c, y )。 在图 5-4 中把运输 层以下 的都省 略 了。 因此, 进 程之间的 通信 现 在可 以看成是两个端 口之间的通信。 图中 在 两个运输 层之间有 一 条 虚 线 , 表 示 在 两个运输 层之间可 以进行 通信 , 而 不是一 条连接。 但这 种 通信是不可靠的通信 , 即所发送的报 文 在传输过程中 有可能丢 失 , 同时也不 保证报文 都能按照发送的先后顺序 到 达终点。 这 正是 UDP 通信的特点 : 简 单方便 , 但 不可 靠。 如果想 要得到可靠的运输 层 通信 , 那就 要 使用后面 要介 绍 的 TCP 进行 通信。 请注意 , 在 两个运输 层的 UDP之间并 没有建立连接。 216 应 用 进程 应用层 端口 运输层 复用 分用 运输层 不 可 靠 的信 道 a x b x c --;::::y =〉... 工 请注 意 : 运输层之 间 的这条虚线不是 一 条连接 图5-4 UDP 的通信和端 口 号的关系 图 5- ) 。 如果改成 a-x, a-y, 则是 一对多的 4 的例子画出了多对 一 的通信(a-x, b - x 情况了。 主机 H 1 中的3个应用进程, 把用户 数据通过各自的端口传送到了运输层后 , 就共用 一 个网络层协 议 , 把收到的 UDP用户 数据报组装成不 同的IP数据报 , 发送到 互联网。 这 就是 UDP的复用 功能。 主机 H2 的网络层收到3个IP数据报后 , 提取出数据部分(即 UDP用户 数据报) , 然 后根据其首部中的目的端 口 号 , 分别传送到相 应的端 口 , 以便上层的应用进程 到 端口读取数据。 这 就是 UDP的分用 功能 。 虽 然 某 些 实 时 应用 需 要 使用没有拥 塞 控 制的 UDP, 但 当 很多的源主机 同 时都向网络发 送高速率的实 时视频流时, 网络就有可能发生拥 塞 , 结果大家都无法正常接收。 因此, 不使 用拥 塞 控 制功能的 UDP有可能会 引 起网络产 生严重的拥 塞问题。 还有 一 些使用 UDP 的实 时应用 , 需 要对 UDP 的不可靠的传输进行适 当 的改进, 以减 少数据的丢 失。 在这 种情况下 , 应用进程本身可以在不影 响 应用的实时性的前 提下 , 增加一 些 提高可靠性的措 施 , 如采用前向纠 错或重传 已 丢 失的报文。 5.2.2 UDP 的 首 部格式 用户 数据报 UDP有两个字段: 数据字段和首部字 段。 首部字 段很简单 , 只有 8 个字节 ( 如图 5-5 所 示) , 由4 个字段组成, 每个字段 的 长度 都 是 2字节。 各 字 段 意 义 如下: 1( ) 源端 口 源端口号。 在需要对方 回 信 时选用。 不 需 要时可用全0 。 ( 2) 目 的端 口 目的端口号。 这 在终点交付报文时必须使用。 (3) 长 度 UDP用户 数据报的长度 , 其最小值是 8( 仅有首部)。 (4 ) 检验 和 检测 UDP用户 数据报在传输中是否有错。 有错就丢弃。 4 4 字节 I I 2 - - - - - 竺 --2 __---- 2 2 俨一一一一一一 - , ·· 勿 1 1 - 伪 - -首- 部 -- IP 首 部 图5-5 UDP 用 户 数 据 报的首部和 伪 首 部 1 7 2 如果接收方 UDP 发现收到的报文中的目的端口号不正确(即 不存在对应于该端口号的 应用进程) , 就丢弃 该报文 , 并由网际控制报 文 协 议 IC MP发送 端口不可达 差 错报 文 给 “ ” 发送方 。 我们在上 章 44.. 2节 IC MP的应用举例 讨 论 trace route 时, 就是 让发送的 UDP 一 ” " 用户数据报故意使用 个非法的 UDP端 口 , 结果IC MP就返 回 端口不可达 差 错报文 , 一 “ " 因而达到了测 试的目的 。 UDP用户 数据报首部中检验和的计算方法有些特 殊。 在计算检验和时, 要在 UDP用户 数据报之前增加 1 2个字节的伪 首部 。 所 谓 伪 首部 是 因为 这种伪 首部并不是 UDP用户 数 “ ” 据报真 正 的首部。 只是在计算检验和时, 临 时添加在 UDP 用户 数据报前面 , 得到 一个临时 的 UDP用户 数据报 。 检验和就是按照这个临时的 UDP用户 数据报 来 计算的 。 伪 首部既不向 下传送也不向上递交, 而仅仅是 为 了计算检验和 。 图 5-5 的最上面给出了伪首部各 字段的 内 容。 UDP计算检验和的方法和计算IP数据报首部检验和的方法相 似 。 但不 同 的是 : IP数据 报的检验和只检验IP数据报的首部, 但 UDP的检验和是 把首部和 数 据部分—起都检验 。 在 发送方 , 首先是先把全零放入检验和字段 。 再把伪 首部以及 UDP 用户 数据报看成是 由许多 1 6 位的字 串 接起来 的。若 UDP用户 数据报的数据部分不是 偶数个字节 , 则要填 入 一个全零 字节(但此字节不发送) 。 然 后 按 二进制反码计算出这 些1 6 位字的和 。 将此和的二进制反码 写入检验和字段后 , 就发送这样的 U DP用户 数据报 。 在接收方 , 把收到的 UDP用户数据报 连同 伪 首部(以及可能的填 充 全 零 字 节) 起 , 按 二进制反码求这 些 1 6 位字的和 。 当无差 一 错时其结果应为全 l 。 否则就表明有差错出现 , 接收方就应丢弃这个 UDP 用户 数据报(也 可以上交给应用层 , 但附上出现了差错的警告)。 图 5-6 给出了 一个计算 UDP检验和的例子 。 这 里假定用户 数据报的长度是 1 5 字节 , 因此要添加一个全0 的字节 。 读者 可 以 自 己检验 一 下在接收端是 怎样对检验和进行检验 的 。 不难看出, 这种简单的差 错检验方法的检错能 力并 不强 , 但 它的好处是简单 , 处理起来 较 快。 I 00 I I00 I 000 I00 I I --- I 5 3. I9 00001000 01 I0 1 000 --- 8.104 1 53. 19.8 4. 1 0 IO I O I O11 000000 I I 一 171 3. 12 字 伪 171 14..3. 1 1 00001110 0000 1 011 --- 14. 1 1 部 全 o I 17 15 00000000 000 I 000 1 --- 0 禾廿 17 u节 首 00000000 0000 I 1 1 I --- 1 5 字节 首 1087 13 8 00000 1 00 00 1 11 I I 1 - 1087 部 15 全0 00000000 0000 1 1 0 I --- 1 3 L4;T Dp 今 4尸』, 节 00000000 00001 I 1 1 --- 1 5 7 字 数据 00000000 00000000 --- 0 ( 检验和 ) 数据 1 数据 数据 1 数 据 数据 1 数 据 数据 匡 o 0 1 0 I O I 00 0 I000 l O I 0 1 0 1 00 I 1 01 0 1 0 I 00 --- 数据 填充 0100 I0 0 I O10 0 1 I IO --- 数据 0 1 000 1 1 1 00000000 --- 数 据 和 0 ( 填 充 ) --- 数据 按二进制反码运算求和 I 00 IO 1 1 0 1 1 I O I IO 1 --- 求 和 得出 的结果 将得出 的 结果求反码 0 1 1 0 1 00 1 0001 00 1 0 --- 检验和 图5-6 计算 UDP 检验和的例 子 如图 5-6 所示 , 伪 首部的第 3 字段是 全零 ; 第 4 字 段是 I P 首部中的协议 字段的值 。 以 , 此协 议 字 段值为1 7; 第 5 字段是 UDP用户 数据报的长度。 因此, 这 前 曾 讲过 , 对千 UDP 样的检验和 , 既检查了 U DP用户 数据报的源端口号和目的端口号以及 UDP用户 数据报的数 据部分 , 又检查了IP数据报的源IP地址和目的地址 。 12 8 扫- -扫 5.3 传输控制协议 TC P 概述 由千 TCP 协 议比较复杂 , 因 此 本节 先对 TCP 协议进行 般的介 绍 , 然 一 后再逐步深入讨 论 TCP 的可靠 传 输 、 流量控 制和拥 塞 控制等问题。 视频讲解 5.3. 1 TCP 最主 要 的 特 点 TCP 是 TCP/IP 体系中非 常 复杂的 一个协议。 下面介 绍 TCP 最主要的特点。 ( 1 ) TCP 是 面 向 连 接 的 运输层协议。 这就是说 , 应用程序在使用 TCP 协议之前, 必须先 建立 TCP 连接。 在传送数据完 后 毕 , 必须释放 已经建立的 TCP 连接。 也就是说 , 应用进程 之 间的通信好像在 打 电 话 : 通话前要先 拨 号 建 立连接, 通话结束 后要挂机释放连接。 “ ” ( 2 ) 每 条 TCP 连接只 能有两个端 点(endpoint) , 每 条 TCP 连接只 能是 点对点的( 一 一 一 对 )。 这个问题 后面还要进 步 讨 论。 一 一 (3) TCP 提供可靠交付的服务。 通过 TCP 连接传送的数据 , 无差错 、 不丢 失 、 不重复 , 并且按 序到达。 (4) TCP 提供 全双工通信 。 TCP 允 许 通信 双 方的应用进程在任 何 时候 都能发送数据。 TCP 连接的两端 都设有发送级存和接收 缓存, 用来 临 时存放双向通信的数据。 在发送时 , 应用程序在把数据传送给 TCP 的缓存 后 , 就可以做 自 己的事 , 而 TCP 在合适的时候把数据 发送出去。 在接收 时 , TCP 把 收到的数据放入 缓存, 上层的应用进程在合适的时候读取缓 存中的数据。 (5) 面 向 字节流。 TCP 中的 流 (stream)指的是 流入到进程或从进程流 出 的 字节序列。 “ ” 面向字节流 的含义是: 虽然 应用程序和 TCP 的交 互是 一 次 一个数据块(大小不等) , 但 “ ” TCP 把应用程序 交下来 的数据仅仅看成是 一 连串 的无结构 的字节流。 TCP 并不知道所传送的 字节流的含义 。 TCP 不保证接收 方应用程序所 收到的数据块和发送方应用程序所发出的数据 块具有对应大小的关系(例如, 发送方应用程序交给发送方的 TCP 共 1 0 个数据块 , 但接收 方的 TCP 可能 只 用了 4 个数据块就把收到的字节流交付上层的应用程序)。 但接收 方应用程 序 收到的字节流必须和发送方应 用程序发出的字节流 完 全 一样。 当然 , 接收方的应用程序必 须有能力 识 别 收到的字节流 , 把它还原成有意 义的应用层数据。 图 5-7 是 上述概念的示 意 图。 送方 发 回 表示 TCP 报 文段 的首 部 匾 应用 进程 曰 表示 序 号 为 x 的数据字节 _ 字 节 流 0-l_2一3一 字节流 _ TCP连接像 一 条管道 , 把字节流可靠地按序 送到 目 的进程 图 5-7 TCP 面 向 字节 流 的 概 念 传 219 为了突出示 意 图的要点, 我 们 只 画出了 一个方向的数据 流。 但请 注 意 , 在 实 际的网络 中 , 一个 TCP 报 文 段包含上千个字节是很常 见的, 而图中的各部分都只画出了几个字节 , 这 仅仅是 为了更方便地说明 面向字节流 的概念。 另 一 点很重要的是: 图 5-7 中的 TCP “ ” 连接是 条虚连接 ( 也就是逻辑连接 ) , 而不是 一条真 正的物理连接。 TCP 报 文 段先要传送 一 到 IP层 , 加上 IP首部 后 , 再传送到数据 链路层;再加上数据 链路层的首部和尾部 后, 才离 开主机发送到物理链路。 从图 5- 7可看出, TCP和 UDP在发送报文 时所 采用的方式完 全不 同 。 TCP并 不关心应 用进程一 次把多长的报文发送到 TCP 的缓存中 , 而是 根据对方给出的窗口值和 当前网络拥 塞 的程度(后面还将 深入讨 论) , 来决定 一个报文段应包含多少个字节 ( UDP 发送的报文 长 度是应用进程给出的)。 如果应用进程传送到 TCP缓存的数据 块太长 , TCP就可 以 把它 划 分 为短 一 些的数据 块 再传送。 如果应用进程 一 次只发来 一个字节 , TCP 也可以等 待 积 累 足够 多的字节后再构成报文 段发送出去。 关千 TCP报 文 段的长度问题, 在后面还要进行讨论。 5.3.2 TCP 的 连接 TCP把连接作为最 基 本 的 抽 象。 TCP的许多特 性都与 TCP是 面向连接的这个基本特 性 有关。 因此我们对 TCP连接需要有更清 楚的了解。 前面 已经讲过, 每 一条 TC P 连接有两个端点。 那么, TCP连接的端点是 什么呢 ? 不是 主机 , 不是主机的 IP地址 , 不是应用进程 , 也不是运输层的协 议 端 口。 TCP连接的端点叫 作套接字( s ocke t 或 ) 插 口 。 根据 RFC 793的定 义: 端 口号 拼接到( concate nate d with ) IP地址即 构成了套接字。 因此 , 套 接字的表示 方法是在点分十进制的 I P 地址 后面写 上端口号 , 中 间 用 冒 号或 逗 号 隔 开。 例如 , 若 IP地址 是 1 92 3..5 而端 口号是 0. 4 8 , 那么得到的套接字就是 ( 192 3. 4..5: 0 8 )。 总 之 , 我们有 套接字 s ocke t = (IP地址: 端口号) ( 5- 1) 每 一 条 TCP 连接唯 一 地被通信 两 端 的 两个端点 (即 套接字对 s ocke t pair ) 所确定。 即 : TCP连接 : : = { s ocke t 1 , s ocke t2 } = { (IP1: p ort 1 ), (IP2: port2 )} ( 5- 2 ) 这 里 IP1 和 IP2 分别 是两个端点主机的IP地址 , 而 port 1 和 p ort2 分别 是 两个端点主机中 的端口号。 因此, TCP连接就是 两个套接字 s ocke t 1 和 s ocke t2 之 间的连接。 套 接字 s ocke t 是 个很抽 象的概念 , 在下 一 章的 6. 8 节还要对套接字进行更 多的介绍。 总 之 , TCP 连接就是 由协 议 软件 所提供的 一种抽 象。 虽 然 有时为了方便, 我们也可以 说 , 在 一个应用进程和另 一个应用进程之 间 建立了 一条 TCP连接, 但 一 定 要记住: TCP 连 接 的 端点 是个很抽 象 的 套 接字 , 即 ( IP 地址 : 端 口 号)。 也还应记住: 同 一个 IP 地址可以 有多个不 同的 TCP连接, 而 同 一个端 口号 也可以出现在多个不 同的 TCP连接中。 本来 s ocke t 的意 思就是 插座(或插 口 )。 选用 s ocke t 这个名 词是相 当准确的。 其实 条 一 TCP 连接就像 一条 电 缆 线 , 其两端 都各带有 一个插 头。 把每一 端的插 头 插入位千主机的应 ) , 两个主机之 间 的进程就可以通过这条 电 缆 线进行可靠 用层和运输层之 间 的插 座 ( s ocke t后 通信 了。 但插座这个 名 词很容易 让 人 想起来 是个硬件 , 而 s ocke t 是个软 件 名 词 , 这样 套 " 接字 就成为 s ocke t 的标 准 译 名 了。 ” 请 注 意 , s ocke t 这个名 词有时容易使人把 一 些 概 念 弄 混淆 , 因为随 着 互联网的不断发展 2 20 以及网络技术的进 步, 同 一 个名 词 socket 却可表 示 多 种 不 同的意思。 例如: (1 ) 允 许 应用 程序访问连网协议的应 用 编程接 口 API (Application Program m ingInterface), 即运输 层和应用 层之间的一 种 接口, 称为 socketAPI, 并 简 称为socket。 (2) 在 socketAPI 中使用的一个函 数名 也叫作 socket。 “ ” (3) 调用 s ocket 函 数的端点 称为socket, 如 创 建 一个数据 报 socket 。 (4) 调用 socket 函 数时,其返 回 值 称为socket 描述符, 可简 称为socket。 (5) 在操作系 统 内 核中连网协议的Berkeley 实现, 称为socket 实现。 上 面的这些 socket 的意 思 都 和本章所引 用的 RFC 793 定义的 socket ( 指端 口号 拼 接到 I P地址) 不 同。 请读者加 以注意。 5.4 可靠传输 的 工作原理 我们知道, TCP发送的报 文 段是交给IP层传送的。 但IP层只能提供尽最大努力 服务, 也就是说 , TCP 下 面的网络所提供的是不可靠的传 输。 因此, TCP必须采用适当的措施 才 能 使得 两个运输 层之间的 通信 变 得 可靠。 理想的传输条件 有 以下 两个特点 : (1) 传输信道不产生差错。 (2) 不管发送方 以多 快的速 度发送数据 , 接收方总是来得及 处理收到的数据 。 在这样的理想传输条件下, 不需要采取 任何措施就能够 实现可靠传输。 然 而实际的网络 都 不具备 以上 两个理想 条件。 但我们 可 以 使用 一 些可靠传 输 协 议, 当 出现差错时让发送方重传出现差错的数据 , 同时在 接收 方来 不及 处理收 到的数据时, 及时告 诉发送方适当降低发送 数据 的速率。 这样一来, 本来不可靠的传输信道就能够 实现可靠传输 了。 下面从最简 单的停止等待 协议 气 井起。 5.4. 1 停止等待协议 全双 工 通信 的双 方 既是发送方也是接收方。 下面为了讨论问题的方便, 我们仅考 虑 A 发送 数据 而B 接收 数据 并 发送确认。 因此A 叫作发送方, 而 B 叫作接收方。 因为这 里是讨 论可靠传输的原理, 因此把传送的数据 单元都称为分组, 而 并 不考虑 数据 是在哪一个 层次上 “ ” 传送的气 停 止等待 就是每发送完 一个分组就停 止发送, 等待 对方的确认。 在收到确认 后再发送下一个分组。 1. 无差错情况 停 止等待协议可用 图 5-8 来 说 明。 图 5-8(a)是最简 单的无差错情况。 A发送分 组M l , 发 完就暂停发送, 等待 B的确认。 B收到了M 1 就 向 A 发送确认。 A 在收到了对M 1 的确认后, O 注 : 在 计算 机 网 络 发展初期 , 通信 链 路 不 太可靠, 因 此在链路层传送数 据 时 都要 采 用 可 靠 的 通信 协议。 其 中 最简 单 的 协 “ ” 议就是这种 停止等待协议 。 在运输层 并 不 使 用 这 种 协议 , 这里 只 是为 了 引 出 可靠传输 的 问 题才从最简 单 的 概念讲起 。 在 运 输 层 使 用 的可靠传输协 议 要 复 杂 得 多 ( 见后 面 5.6 节 )。 @ 注 : 运输层传 送 的 协 议 数据 单 元 叫 作 报文段 , 网络层传 送 的 协议数据单元 叫 作 IP 数据报 。 但在 一 般讨论 问 题 时 , 都 可 把 它 们 简 称 为 分组。 221 就再发送下 一个分组 M2 。 同样 , 在收到 B 对 M2 的确认后, 再发送 M狂 I A 8 A B 发送 M 1 k M 确认 M1 . - . 一 _一 、 _ _一X_ 一_ _-一 ___- _- . 丁- 发 送 M 2 巨- 确认 M 2 , 发 送 M., 4它 超时 重传 J | / 确认 M1 发送 M 3 巨. 发送 M2 确认 M 3 lt (a) 无差错情况 (b) 超时重传 图5-8 停止等待协议 2. 出 现差错 图 5-8( b) 是分组在传输过程中出现 差 错 的情况。 B 接收 M ] 时检测出了差 错 , 就丢弃 M, 1 其 他什么也不做 ( 不通知A 收到有差错的分组) 。 也可能是 M ] 在传输过程中丢 失了, 这 印 时 B 当 然 什么都不知道。 在 这 两种情况下 , B 都不会发送任 何信 息 。 可 靠传输协 议是 这样 设计的: A 只要超过了一 段时间仍然 没有收到 确认, 就认为刚 才发送的分组丢 失了, 因而重 传前面发送过的分组。 这 就叫作超时重传。 要实现超时重传, 就要在每发送完 一个分组时设 置 一个超 时计时器。 如果在超时计时器到 期之前收到了对方的确认, 就撤销 己设置的超时计 时器。 其 实 在 图 5-8( a)中, A 为每 一个 已发送的分组都设置了 一个超时计时器 。 但A 只要在 超时计时器到 期 之前收到 了相 应的确认, 就撤销 该超时计时器。 为简单起见, 这 些细节在图 5-8( a)中都省 略了。 这 里 应注意 以下 三点 第 一 , A 在发送完 一个分组 后 , 必须 暂 时保 留 已 发 送 的 分组 的 副 本 ( 在发生超时重传时 使 用 ) 。 只有在收到相 应的确认后才能清 除 暂 时保 留 的分组副本。 第 二 , 分组和 确认分组都必须进行编 号 气 这样才能明确是 哪 一个发送出去的分组收到 了确认, 而哪 一个分组还没有收到确认。 第 三 , 超 时计时器设置的重传时 间 应 当 比 数 据在 分组传输 的 平 均 往 返 时 间 更 长 一 些 。 图 5-8( b)中的一 段虚线表示 如果 M ] 正 确 到达 B 同 时A 也正确收到确认的过程。 可见重传时 间应设定为比平均往返时间更长 一 些 。 显然 , 如果重传时间设定得很长 , 那么通信的效率就 CD 注 : 在可靠传输的协议中 , 也 可 以 在检测 出 有差错时 发送 " 否认报又 “ 给对方。 这样做 的好处是能够让发送方及早知道 出 现 了 差错 。 不过 由 于这样处理会使协议复杂化, 现在实 用 的 可靠传输协议都不 使 用 这种 否认报文 了 。 @ 注 : 编 号 并不是 一 个非常 简 单 的 问 题 。 分组编号使用 的位数总是有限 的 , 同 一 个号码会重复使用 。 例 如 , 1 0 位的编号 范 围 是 0 - 1 023 。 当编号增加到 1 023 时 , 再增加 一 个 号 就 又 回 到 O , 然后重复使用 这些号码 。 我们 的家用 电 表 、 水表 , 以及汽 车 中 的里程表 , 都有类似 的 问 题 。 因 此 , 在所发送的分组 中 , 必须能够区分开哪些是新发送的 , 哪些是重传 的 。 对千简单链路上 传送的帧 , 如采用 停止等 待协议 , 只 要用 1 位编号 即 可 , 也就是发送完 0 号 帧 , 收到确认后, 再发送 l 号 帧 , 收到确认后 , 再发 送 0 号 帧 。 但是在运输层 , 这种编号方法有时并不能保证可靠传输 ( 见 习 题 5- 1 8 ) 。 222 会 很低 。 但 如果重传 时 间 设 定得太短, 以致产生 不必要的重传 , 就浪 费 了网络资源。 然而 , 在运输 层重传 时 间的准确设 定是非常复杂的, 这 是 因 为已发送出的分组到底会经过哪 些 网 络 , 以及 这 些网络将 会产生 多 大 的 时延 ( 这 取 决 千 这 些网络当 时的拥 塞情况 ) , 这 些都是不确定 因 素 。 图 5-9 中把往 返 时 间当作固 定的 (这 显 然 不符合网络的实 际情况), 只是为了 讲述原 理的方便。 关 千 重 传 时间应 如何 选择, 在后面的 5.6.3 节 还 要进 一 步讨论。 3. 确认丢失和确认迟到 图 5-9(a) 说明的是另一种情况 。 B 所发送的对 M 1 的确认丢 失 了 。 A 在设 定的超 时 重 传 时 间 内 没有收 到确认, 并 无法知道是自 已发送的分组出错 、 丢 失 , 或者是 B 发送的确认丢 失 了 。 因 此 A 在超时计 时 器到期 后就 要重 传 M 1 。 现在应注意 B 的动 作。假定 B 又收 到了 重 传的分组M 1 。 这时应采取 两 个行动 。 第一 , 丢弃这个重 复的分组M 1 , 不向 上 层重 复 交付。 第二 , 向 A 发送 确认。 不能认为已经发送过确认就 不再发送 , 因 为A 之所以 重传 M 1 : 就表 示A 没有收 到对M 1 的确认。 B A, B A 丁3 发 送 MI 发送 M l l 确认 MI L l - - - -_ 超 时 重 传 M 超时重 MI— 传 送 M2 送 M2 发 发 收下迟 到 的 确 认 但什么 也 不 做 (a) 确 认 丢 失 (b) 确 认 迟 到 图5-9 确 认 丢 失和 确 认 迟 到 图5-9(b)也是一种可能出现的情 况 。 传 输过程中 没有出现差错, 但 B 对分组 M ] 的确认 迟到了 。 A 会收 到重 复的确认。 对重 复的确认的处理很简 单: 收 下 后就丢 弃 , 但 什么也 不做 。 B 仍然会收到重 复的M 1 , 并 且 同样 要 丢 弃 重 复的M j , 并 重传确认分组。 通常A 最终总是可 以收到对所有发出的分组的确认 。 如果 A 不断重传 分组但总是收 不 到确认, 就 说明通信 线 路太差 , 不能进 行 通 信 。 使用上述的确认和 重 传 机制, 我们就可 以在不可靠的传输网络上实现可靠的通信 。 像上述的这种可靠 传输协议常称 为 自 动 重传请求 ARQ (Automatic Repeat reQuest ) 。 意 思 是重传的请求是自 动进 行的, 因 此也可见到自 动请求重传这样的译 名 。 接收方不需要请求发 送方重传 某 个出错的分组 。 4. 信道利 用 率 停 止等待 协议的优点是简 单 , 但缺点 是信道利用率太低 。 我们 可 以用图 5-10 来 说明这 一 个问题。 为简 单起 见 , 假定在A 和 B之间有 条直通的信道来传送分组。 223 图 5- 1 0 停 止 等 待 协 议的信 道 利 用 率太低 假定 A 发送分组需 要的时间是 TD 。 显 然, 几等千分组长度 除 以 数据 率 。 再 假定 分组 正 确到达 B 后,B 处理分组的时间可 以 忽 略不计, 同时立 即发 回 确认 。假定 B发送确认分组 需 要时间 TA 。 如果A 处理确认分组的时间也 可 以 忽 略不计, 那么A 在经过时间(To + RTT + 一 八)后就可 以 再发送下 个分组, 这 里的 RTT 是往返 时 间。 因 为仅仅是在时间 几 内 才用来 传送 有用的数据 ( 包括 分组的首部), 因此信道的利用率 U 可用 下式计算 : U= TD LD + RTT + TA (5-3) 请注意 , 更细致的计 算 还可 以 在上式分子的时间 几 内 扣 除传送 控制信 息( 如首部) 所 花 费的时间。 但 在进行粗略计算时, 用近似的式(5-3)就可 以 了 。 我们知道, 式(5-3 )中的往返时间RTT 取 决 千所使用的信道。 例如,假定 1200 km 的信 道的往返 时间RTT = 20 m s , 分组长度是1200 bit , 发送速率是1 Mbit/s 。 若 忽 略 处理时间和 TA ( TA 一 般 都远小千 T矿, 则 可算出信道的利用率 U = 5.66% 。 但若把发送速率 提 高到 10 Mbit/s , 则 U = 5.96X 10-3 。 信道在绝 大 多 数 时间内 都是空 闲 的。 从图 5-10 还可看出, 当往返时间RTT 远 大 于分组发送时间 几 时, 信道的利用率就会 非常低 。 还应注意 的是, 图 5-10 并 没有考虑出现差错后的分组重传 。 若出现重传, 则 对传 送 有用的数据 信 息来说, 信道的利用率就 还 要 降低 。 为了提 高传 输 效 率, 发送方可 以 不使用低 效 率 的停 止等待 协议, 而是采用流水线传输 (如图5-11 所示) 。 流水线传输就是发送方可连续发送 多个分组, 不必每发完 一个分组就停 顿 下来等待 对方的确认 。 这 样可 使信道上 一 直有数据 在不间断 地传送 。 显 然, 这种传输方式 可 以 获得 很高的信道利用率 。 //饕荨鬟 : 图 5- 1 1 流水线传输可提高信 道 利 用 率 当使用流水线传输时, 就 要 使用下面介绍 的连续ARQ 协议 和滑动 窗 口 协议 。 5.4.2 连续 ARQ 协 议 滑 动 窗 口协议 比较复杂, 是TCP协议的精髓所在 。 这 里先给出连续ARQ 协议最基本的 概念, 但不涉及许 多 细节问题 。 详细的滑动 窗 口协议将 在后面的 5.6节中讨论。 图 5-12(a)表 示发送方维 持的发送 窗 口 , 它 的意 义是: 位 千发送窗 口内 的 5 个分组都可 224 连续发送出去, 而不需要等待对方的确认。 这样, 信 道利 用率就 提高了。 在讨 论 滑 动 窗 口时, 我们应当注 意 到 , 图中还有 一个时间坐 标 ( 但以后 往 往 省 略 这样 的时间坐标)。 按照习惯, 向前 是 指 向着时间增大的方向 , 而 向后 则是 向着时 “ ” “ “ “ ” “ 二二 间 减少的方向 。 分组发送是按照分组序 号从小到大发送的。 ” 分 的序号 送窗 口 发 I I I | 7 | 8 | 9 | 10 | l l I 1 2 | 组 6 (a) 送窗 口 是 5 发 送 口 窗 一向前 发 3 8 2 4 5 6 7 9 10 11 12 伽 t 一 ( b) 收 到 个确 认 后 送 窗 口 向 前滑动 发 图 5- 1 2 连续 ARQ 协议 的 工 作 原理 连续 A RQ 协 议 规 定 , 发送方每收到 一 个确认, 就把发送窗口向前滑动 一个分组的位置。 图 5-1 2( b )表示发送方 收到 了对第 1 个分组的确认, 千是把发送窗 口 向前移动 一个分组的位 置。 如果 原 来 已经发送 了前5个分组, 那么现在就可以发送窗口内 的第 6 个分组了。 接收 方 一 般 都 是 采用 累 积 确 认的方 式。 这 就是说, 接收 方 不必对收 到的分组逐个发送 确认, 而是在收到 几个分组后 , 对按 序 到 达 的 最 后 — 个分组发送确认, 这 就表示: 到 这个分 组为止的所有分组都 已 正 确 收到了。 累 积确认有优点也有缺点。 优点是 容 易 实现, 即 使确认丢 失 也不必重传 ; 但缺点是不 能向发送方及时反 映 接收 方 已 经 正 确收到 所有分组的信 息。 例如, 如果发送方发送了前 5 个分组, 而中间的第 3 个分组丢 失 了。 这 时接收方只能 对前两个分组发出确认。 发送方无法知 道后 面三个分组的下落, 而只好把后 面的三个分组都 再重传一次。 这 就 叫作 Go-back-N ( 回 退 N), 表示需要再退 回 来 重传已发送过的 N 个分组。 可见当通信 线路质 量 不好时, 连续A RQ 协 议会带 来 负 面的影 响。 在深入讨 论 TCP的可靠传输问题之前, 必须先了解 TCP的报文段首部的格式。 5.5 TCP 报文段 的 首 部格式 TCP 虽然 是 面向字节流的, 但 TCP传送的数据单元 却 是 报文 段。 一个 TCP 报 文 段分为首部和数据 两部分, 而 TCP的全部功能都体现在它首部中 各 字段的作用。 因此, 只有弄清 TCP首部各 字段的作用才能掌握 TCP的工 作 原 理。 下面讨 论 TCP报 文段的首部格 式。 TCP报文段首部的前 02 个字节是 固定的( 如图 5- 1 3 所 示), 后 面有4n 字节是 根据需要 而增加的选项 ( n 是 整数)。 因此 TCP首部的最小长度是 02 字节。 ?