5.3 TCP (答案见原书 P252)
第5章 传输层 (续)
5.3 TCP (答案见原书 P252)
01. 下列关于传输层协议的面向连接服务的描述中,错误的是( C )
题目原文
- 下列关于传输层协议的面向连接服务的描述中,错误的是( )
A. 面向连接的服务需要经历3个阶段:连接建立、数据传输及连接释放
B. 当链路不发生错误时,面向连接的服务可以保证数据到达的顺序是正确的
C. 面向连接的服务有很高的效率和时间性能
D. 面向连接的服务提供了一个可靠的数据流
正确答案:C
题目解析
- 考点分析: 本题考察对TCP(面向连接服务)特性的全面理解,特别是其优缺点。
- 错误选项分析 (C. 面向连接的服务有很高的效率和时间性能):
- 这是错误的。面向连接的服务(如TCP)为了实现可靠性,付出了巨大的性能代价。
- 建立和释放连接都需要额外的握手过程,增加了延迟。
- 确认、重传、流量控制、拥塞控制等复杂的机制,都需要额外的计算和等待,增加了开销和延迟。
- 因此,相对于UDP等无连接服务,TCP的效率和时间性能是较低的。
- 正确选项分析:
- A: 正确,这是面向连接的三个阶段。
- B: 正确,TCP通过序列号和接收缓存保证了数据的顺序交付。
- D: 正确,可靠性是TCP的核心特征。
02. TCP协议规定HTTP( C )进程的端口号为80。
题目原文
02. TCP协议规定HTTP( )进程的端口号为80。
A. 客户机 B. 解析 C. 服务器 D. 主机
正确答案:C
题目解析
- 考点分析: 本题考察熟知端口号(Well-Known Ports)的分配对象。
- 正确选项分析 (C. 服务器, Server):
- 熟知端口号(如HTTP的80,FTP的21)是分配给服务器端应用程序的。
- 这样做的目的是为了让客户端在发起连接时,能够有一个固定的、众所周知的地址来寻找服务。
- 客户端在发起连接时,会使用一个临时的、动态分配的端口号作为自己的源端口。
- 错误选项分析:
- A. 客户机:使用临时端口。
- B, D: 概念不符。
03. 下列关于TCP的端口的叙述中,错误的是( D )
题目原文
03. 下列关于TCP的端口的叙述中,错误的是( )
A. 客户端使用的端口号是动态规定的
B. 端口号长度为16位
C. 端口号用于在通信中识别进程
D. 局域网内的计算机不能使用相同端口号
正确答案:D
题目解析
- 考点分析: 本题考察端口号的作用域。
- 错误选项分析 (D. 局域网内的计算机不能使用相同端口号):
- 这是错误的。端口号的作用域是一台主机。
- 它的作用是在一台特定主机上,唯一地标识一个应用进程。
- 不同的计算机是独立的,它们的端口号空间也是独立的。
- 因此,局域网内的计算机A可以有一个进程使用端口80,计算机B也可以有一个进程使用端口80,两者互不影响。
- 正确选项分析:
- A: 正确,客户端通常使用动态/临时端口。
- B: 正确,TCP/UDP端口号都是16位的,范围是0~65535。
- C: 正确,这是端口号的定义。
04. 下列几种描述中,( D )不是TCP服务的特点。
题目原文
04. 下列几种描述中,( )不是TCP服务的特点。
A. 字节流 B. 全双工 C. 可靠 D. 支持广播
正确答案:D
题目解析
- 考点分析: 本题考察TCP服务的核心特征。
- 错误选项分析 (D. 支持广播, Broadcast):
- 这是错误的。TCP提供的是面向连接的、点对点的通信服务。
- 一个TCP连接只能在两个端点之间建立。
- TCP不支持广播(一对所有)或多播(一对一组)通信。广播和多播通常使用UDP来实现。
- 正确选项分析(是TCP的特点):
- A. 字节流 (Byte Stream): TCP将上层应用交付的数据看作是一个无结构的、连续的字节流,并按序传输。
- B. 全双工 (Full-Duplex): 在一个TCP连接上,数据可以同时在两个方向上流动。
- C. 可靠 (Reliable): 这是TCP的核心特征。
05. 下列几种描述中,( C )不是TCP的特性。
题目原文
05. 下列几种描述中,( )不是TCP的特性。
A. 比UDP开销大
B. 强制重传错误分组
C. 在TCP首部中有目标主机IP地址
D. 把消息分成段并在目标主机中进行重组
正确答案:C
题目解析
- 考点分析: 本题要求区分TCP(传输层)和IP(网络层)的功能。
- 错误选项分析 (C. 在TCP首部中有目标主机IP地址):
- 这是错误的。
- 源/目的IP地址是IP首部的内容,属于网络层的职责,用于在主机之间进行路由。
- TCP首部中只包含源/目的端口号,用于在主机内部标识进程。
- 正确选项分析(是TCP的特性):
- A: 正确,因为TCP机制复杂,首部长,所以开销大。
- B: “强制”不准确,应该是“超时重传”,但其意图是描述可靠性机制,可以认为是对的。
- D: 正确,TCP会将应用层的字节流分割成合适大小的报文段(Segment) 进行发送,并在接收端按序重组。
06. 下列几种字段中,包含在TCP首部中而不包含在UDP首部中的是( B )
题目原文
06. 下列几种字段中,包含在TCP首部中而不包含在UDP首部中的是( )
A. 目的端口号 B. 序列号(序号) C. 检验和 D. 目的IP地址
正确答案:B
题目解析
- 考点分析: 本题对比TCP和UDP的首部字段。
- 正确选项分析 (B. 序列号(序号), Sequence Number):
- 序列号和确认号是TCP实现可靠、按序传输的核心字段。
- UDP是不可靠、无序的协议,因此UDP首部中没有序列号和确认号字段。
- 错误选项分析:
- A. 目的端口号:两者都有,用于分用。
- C. 检验和:两者都有,用于差错检测。
- D. 目的IP地址:两者都没有,属于IP首部。
07. 下列关于TCP报头格式的描述中,错误的是( D )
题目原文
07. 下列关于TCP报头格式的描述中,错误的是( )
A. 报头长度为20∼60 B,其中固定部分为20 B
B. 端口号字段依次表示源端口号与目的端口号
C. 报头长度总是4的倍数个字节
D. TCP检验和伪首部中IP分组头的协议字段为17
正确答案:D
题目解析
- 考点分析: 本题考察TCP报头和检验和计算的细节。
- 错误选项分析 (D. …协议字段为17):
- 这是错误的。在IP首部中,协议号17代表的是UDP。
- TCP对应的协议号是 6。
- 因此,在计算TCP检验和时,其伪首部中填充的协议字段值应该是6。
- 正确选项分析:
- A: 正确,TCP首部有20字节的固定部分和最多40字节的选项部分。
- B: 正确,前16位是源端口,后16位是目的端口。
- C: 正确,TCP首部中的“首部长度”字段以4字节为单位,且有填充位保证首部总是4字节的整数倍,以便选项字段的对齐。
08. 当TCP报文段的标志字段中( B )为1,表示必须释放连接,然后重新建立连接。
题目原文
08. 当TCP报文段的标志字段中( )为1,表示必须释放连接,然后重新建立连接。
A. URG B. RST C. ACK D. FIN
正确答案:B
题目解析
- 考点分析: 本题考察TCP首部中控制标志位(Flags)的含义。
- 正确选项分析 (B. RST, Reset):
- RST标志位为1,表示连接复位。
- 它是一种异常的、强制的连接关闭方式。当一方收到RST报文时,会立即释放连接,无需经过四次挥手。
- 常见于:
- 连接到一个不存在的端口。
- 一方主机崩溃重启后,收到一个旧连接的报文。
- 一方检测到严重错误,需要强制终止连接。
- 之后若要通信,必须重新“三次握手”建立连接。
- 错误选项分析:
- A. URG (Urgent): 紧急指针有效。
- C. ACK (Acknowledgement): 确认号字段有效。
- D. FIN (Finish): 发送方数据已发送完毕,请求正常地释放连接。
09. TCP报文段首部中窗口字段的值的含义是( C )
题目原文
09. TCP报文段首部中窗口字段的值的含义是( )
A. 指明自己的拥塞窗口的尺寸
B. 指明对方的发送窗口的尺寸
C. 指明自己的接收窗口的尺寸
D. 指明对方的拥塞窗口的尺寸
正确答案:C
题目解析
- 考点分析: 本题考察TCP流量控制中**窗口(Window)**字段的精确含义。
- 正确选项分析 (C. 指明自己的接收窗口的尺寸):
- TCP首部中的窗口字段,是接收方用来告诉发送方:“我(接收方)的接收缓冲区当前还剩下多少空间,你可以继续发送这么多数据给我”。
- 这个值被称为接收窗口(rwnd)。
- 发送方接收到这个值后,会调整自己的发送窗口,确保发送的数据量不超过对方的接收能力。
- 这是实现端到端流量控制的核心机制。
- 错误选项分析:
- 拥塞窗口(cwnd) 是发送方根据网络拥塞状况自己内部计算和维护的一个值,它不会在TCP首部中直接传输。
- 发送窗口是发送方内部维护的,是
min(cwnd, rwnd)
。
10. 在采用TCP连接的数据传输阶段,若发送端的发送窗口值由1000变为2000,则发送端在收到一个确认之前可以发送( B )
题目原文
10. 在采用TCP连接的数据传输阶段,若发送端的发送窗口值由1000变为2000,则发送端在收到一个确认之前可以发送( )
A. 2000个TCP报文段 B. 2000B C. 1000B D. 1000个TCP报文段
正确答案:B
题目解析
- 考点分析: 本题考察TCP发送窗口的含义及其单位。
- 正确选项分析 (B. 2000B):
- TCP是一个面向字节流的协议。
- 其窗口大小的单位是字节(Byte),而不是报文段的数量。
- 发送窗口值为2000,意味着发送方在没有收到新确认的情况下,最多可以连续发送2000个字节的数据。
- 错误选项分析:
- A, D: 单位错误。TCP的窗口不以报文段数量为单位。
- C: 1000B是变化前的值。
11. A和B建立了TCP连接,当A收到确认号为100的确认报文段时,表示( C )
题目原文
11. A和B建立了TCP连接,当A收到确认号为100的确认报文段时,表示( )
A. 报文段99已收到
B. 报文段100已收到
C. 末字节序号为99的报文段已收到
D. 末字节序号为100的报文段已收到
正确答案:C
题目解析
- 考点分析: 本题考察TCP确认号(Acknowledgement Number) 的精确含义。
- 正确选项分析 (C. 末字节序号为99的报文段已收到):
- TCP采用的是累积确认机制。
- 确认号字段的值
ack
表示:“我已经成功、按序地收到了序号在ack-1
及之前的所有字节,现在我期望收到的下一个字节的序号是ack
”。 - 因此,当A收到确认号为100的报文时,意味着A之前发送的、字节序号为99以及之前的所有数据,B都已经成功收到了。
- 错误选项分析:
- A, B: TCP不确认“报文段”,它确认的是“字节流”。
- D: 如果末字节序号为100的报文段已收到,那么返回的确认号应该是
101
。
12. 当TCP在传送大量数据时,是以( A )的大小将数据进行分割发送的,进行重发时同样也是以此为单位的。
题目原文
12. 当TCP在传送大量数据时,是以( )的大小将数据进行分割发送的,进行重发时同样也是以此为单位的。
A. MSS B. 字节 C. 比特 D. MTU
正确答案:A
题目解析
- 考点分析: 本题考察TCP报文段(Segment) 大小的决定因素。
- 正确选项分析 (A. MSS, Maximum Segment Size):
- MSS(最大报文段长度) 是TCP协议的一个参数,它规定了一个TCP报文段所能携带的应用层数据(载荷) 的最大长度。
- MSS的设置是为了避免IP分片。其值通常由
MTU - (TCP首部长度 + IP首部长度)
计算得出。 - TCP在发送数据时,会将字节流分割成以MSS为上限的多个报文段进行发送。
- 当需要重传时,也是以这些报文段为单位进行重传。
- 错误选项分析:
- B, C: 字节和比特是数据的基本单位,不是分割的单位。
- D. MTU (Maximum Transmission Unit): 是数据链路层的概念,它限制的是IP数据报的总长度。MSS是根据MTU计算出来的。
13. 在TCP中,发送方的窗口大小取决于( C )
题目原文
13. 在TCP中,发送方的窗口大小取决于( )
A. 仅接收方允许的窗口
B. 接收方允许的窗口和发送方允许的窗口
C. 接收方允许的窗口和拥塞窗口
D. 发送方允许的窗口和拥塞窗口
正确答案:C
题目解析
- 考点分析: 本题考察决定TCP发送窗口(Send Window, swnd) 大小的两个关键因素。
- 正确选项分析 (C. 接收方允许的窗口和拥塞窗口):
- TCP的发送方在任何时刻能够发送的数据量,受到两方面的制约:
- 接收方的接收能力: 由接收方通过TCP首部中的窗口字段通告,称为接收窗口(rwnd)。这是流量控制的依据。
- 当前网络的承载能力: 由发送方根据网络拥塞状况自己估算得出的一个值,称为拥塞窗口(cwnd)。这是拥塞控制的依据。
- 发送方最终的发送窗口大小,是这两者的最小值。
发送窗口 = min(rwnd, cwnd)
- TCP的发送方在任何时刻能够发送的数据量,受到两方面的制约:
- 错误选项分析:
- A, B, D: 描述不完整或不正确。“发送方允许的窗口”就是发送窗口本身,不是决定因素。
14. TCP利用滑动窗口来实现流量控制,只要发送方收到对方的零窗口通知,就启动( D )计时器。
题目原文
14. TCP利用滑动窗口来实现流量控制,只要发送方收到对方的零窗口通知,就启动( )计时器。若计时器超时,就发送一个零窗口探测报文段,以试图获得对方的窗口值。
A. 重传 B. 保活 C. 时间等待 D. 持续
正确答案:D
题目解析
- 考点分析: 本题考察TCP中为解决零窗口死锁问题而设计的特殊计时器。
- 正确选项分析 (D. 持续计时器, Persist Timer):
- 零窗口死锁问题:
- 接收方通告了一个零窗口(
rwnd=0
),发送方停止发送数据。 - 之后,接收方处理完数据,有了新的可用缓冲区,它会发送一个窗口更新的报文给发送方。
- 如果这个窗口更新报文在网络中丢失了,那么发送方将永远等待下去,接收方也永远在等待数据,形成死锁。
- 接收方通告了一个零窗口(
- 解决方法:
- 当发送方收到零窗口通知时,它会启动一个持续计时器(Persist Timer)。
- 当该计时器超时后,发送方会主动发送一个探测报文段(通常只带1个字节的数据)给接收方。
- 这个探测报文会触发接收方重新回复一个包含当前窗口大小的确认报文,从而打破死锁。
- 零窗口死锁问题:
- 错误选项分析:
- A. 重传计时器:用于超时重传数据。
- B. 保活计时器:用于检测连接是否仍然存活。
- C. 时间等待计时器:用于连接释放时的
TIME_WAIT
状态。
15. TCP在40Gb/s的线路上传送数据…则经过( A )的时间TCP会发生序号绕回…
题目原文
15. TCP在40Gb/s的线路上传送数据,若TCP充分利用了线路的带宽,则经过( )的时间TCP会发生序号绕回(使用了之前用过的字节序号,已知2³²/5×10⁹=0.859)
A. 859ms B. 85.9ms C. 8.59ms D. 0.859ms
正确答案:A
题目解析
- 考点分析: 本题考察TCP序列号(序号) 空间耗尽(绕回)时间的计算。
- 分析过程:
- 确定序列号空间大小:
- TCP的序列号字段是 32位 的。
- 总共可以表示
2^32
个不同的字节序号。 - 序列号空间大小 =
2^32
字节。
- 确定数据传输速率:
- 线路带宽 = 40 Gb/s =
40 * 10^9
bit/s。 - 换算成字节/秒:
(40 * 10^9) / 8
B/s =5 * 10^9
B/s。
- 线路带宽 = 40 Gb/s =
- 计算绕回时间:
- 绕回时间 = 序列号空间大小 / 数据传输速率
- 时间 =
2^32 B / (5 * 10^9 B/s)
- 题目已给出提示:
2^32 / (5 * 10^9) = 0.859
秒。
- 单位换算:
0.859 s = 859 ms
。
- 确定序列号空间大小:
- 结论: 经过约859ms,TCP的序号就会发生绕回。这也是为什么高速网络需要引入时间戳选项来防止序号绕回导致的数据混淆。
16. TCP的滑动窗口协议中,规定重传分组的数量最多可以( D )
题目原文
16. TCP的滑动窗口协议中,规定重传分组的数量最多可以( )
A. 是任意的 B. 1个 C. 大于滑动窗口的大小 D. 等于滑动窗口的大小
正确答案:B
题目解析
- 考点分析: 本题考察GBN(回退N帧) 和 SR(选择重传) 两种滑动窗口协议的重传策略。
- 【答案校对与分析】 您提供的答案是
D (等于滑动窗口的大小)
。这个答案对应的是Go-Back-N (GBN) 协议。- 在GBN中,如果一个分组(如第k个)的计时器超时,发送方会重传所有已发送但未被确认的分组,即从第k个开始,一直到发送窗口内的最后一个分组。因此,重传的数量可能等于发送窗口的大小。
- 我们来分析TCP的实际情况:
- 现代TCP的重传机制更为复杂,结合了GBN和SR的思想。
- 超时重传: 当发生超时时,TCP的行为类似于GBN,可能会重传多个分组。
- 快速重传: 当收到3个重复ACK时,TCP会认为只有一个分组丢失,此时它只会重传这一个丢失的分组,这类似于选择重传(SR)。
- 结论: 题目问得比较笼统。如果理解为超时重传的极端情况,D是可能的。如果理解为更常见的快速重传,B(1个)是可能的。在选择题中,D描述了重传数量的上限。
- 但B才是更精确的答案。 即使在GBN中,当计时器超时时,发送方也是从第一个未确认的分组开始重传,重传的数量是
当前已发送但未确认的数量
,这个数量小于等于发送窗口大小,不一定等于。 - 如果题目问的是“选择重传协议”,答案就是B。
- 如果问的是TCP,答案有歧义。
- 如果答案确定是B,那么题目考察的是选择重传或TCP的快速重传机制。
- 但B才是更精确的答案。 即使在GBN中,当计时器超时时,发送方也是从第一个未确认的分组开始重传,重传的数量是
17. 下列关于TCP窗口与拥塞控制概念的描述中,错误的是( C )
题目原文
17. 下列关于TCP窗口与拥塞控制概念的描述中,错误的是( )
A. 接收端窗口(rwnd)通过TCP首部中的窗口字段通知数据的发送方
B. 发送窗口确定的依据是:发送窗口=min[接收端窗口,拥塞窗口]
C. 拥塞窗口是接收端根据网络拥塞情况确定的窗口值
D. 拥塞窗口大小在开始时可以按指数规律增长
正确答案:C
题目解析
- 考点分析: 本题考察TCP拥塞控制中,各个窗口的定义和管理者。
- 错误选项分析 (C. 拥塞窗口是接收端…确定的):
- 这是错误的。
- 拥塞窗口(cwnd) 是发送端根据自己对网络拥塞状况的感知(如是否丢包、往返时间RTT的变化),自己内部维护和调整的一个值。
- 接收端完全不参与拥塞窗口的计算,它只负责通告接收窗口(rwnd)。
- 正确选项分析:
- A: 正确,rwnd通过TCP首部的窗口字段通告。
- B: 正确,这是发送窗口的决定公式。
- D: 正确,这是TCP拥塞控制中慢启动(Slow Start) 阶段的特点,cwnd会以指数方式增长。
18. 下列关于TCP工作原理与过程的描述中,错误的是( C )
题目原文
18. 下列关于TCP工作原理与过程的描述中,错误的是( )
A. TCP连接建立过程需要经过“三次握手”的过程
B. TCP传输连接建立后,客户端与服务器端的应用进程进行全双工的字节流传输
C. TCP传输连接的释放过程很复杂,只有客户端可以主动提出释放连接的请求
D. TCP连接的释放需要经过“四次挥手”的过程
正确答案:C
题目解析
- 考点分析: 本题考察TCP连接释放的发起方。
- 错误选项分析 (C. …只有客户端可以主动提出释放连接的请求):
- 这是错误的。
- TCP连接是全双工的,连接的建立和释放也是对称的。
- 任何一方(无论是客户端还是服务器端),当它没有数据要再发送时,都可以主动发起连接释放请求(即发送第一个FIN报文)。
- 正确选项分析:
- A: 正确,连接建立是“三次握手”。
- B: 正确,TCP提供全双工的字节流服务。
- D: 正确,连接释放是“四次挥手”。
(19) TCP使用三次握手协议来建立连接…A发送( A )的报文给B,B接收到报文后发送( C )的报文给A…
题目原文
(19) TCP使用三次握手协议来建立连接,设A、B双方发送报文的初始序列号分别为X和Y,A发送( ① )的报文给B,B接收到报文后发送( ② )的报文给A,然后A发送一个确认报文给B便建立了连接(注意,ACK的下标为捎带的序号)
① A. SYN=1,序号=X
B. SYN=1,序号=X+1,ACKX=1
C. SYN=1,序号=Y
D. SYN=1,序号=Y,ACKY+1=1
② A. SYN=1,序号=X+1
B. SYN=1,序号=X+1,ACKX=1
C. SYN=1,序号=Y,ACKX+1=1
D. SYN=1,序号=Y,ACKY+1=1
正确答案:A, C
题目解析
-
考点分析: 本题考察TCP三次握手过程中,前两次握手报文段中关键字段(SYN, 序列号, 确认号)的设置。
-
三次握手流程:
- 第一次握手 (客户端 -> 服务器): 客户端A选择一个初始序列号
seq=x
,并发送一个SYN报文段给服务器B。此报文段中SYN=1
,seq=x
。 - 第二次握手 (服务器 -> 客户端): 服务器B收到A的SYN报文后,同意建立连接。它会回复一个SYNACK报文段。此报文段中:
SYN=1
:表示这也是一个同步报文。seq=y
:B选择自己的初始序列号y
。ack=x+1
:作为对A的SYN报文的确认。ACK
位置位,确认号ack
的值等于收到的序列号x
加1。
- 第三次握手 (客户端 -> 服务器): 客户端A收到B的SYNACK报文后,发送一个ACK报文段作为确认。此报文段中:
ACK=1
:ACK位置位。seq=x+1
:A的下一个发送序列号。ack=y+1
:作为对B的SYN报文的确认。
- 第一次握手 (客户端 -> 服务器): 客户端A选择一个初始序列号
-
分析第一个空 (① A发送的报文):
- 根据流程1,A发送的第一个报文是SYN报文。
- 它包含:
SYN
标志位置为1,并设置自己的初始序列号为X
。 - 因此,报文内容是
SYN=1, 序号=X
。 - 这与选项 A 完全匹配。
-
分析第二个空 (② B接收到报文后发送的报文):
- 根据流程2,B发送的是SYNACK报文。
- 它包含三个关键信息:
SYN=1
: 表明自己也要同步序列号。序号=Y
: 设置自己的初始序列号为Y
。ACK=1, 确认号=X+1
: 确认收到了A的序号为X
的SYN报文。
- 题目选项中的表示法
ACKX+1=1
应理解为ACK=1
且ack=X+1
。 - 因此,报文内容是
SYN=1, 序号=Y, ACKX+1=1
。 - 这与选项 C 完全匹配。
-
结论: 第一个空选A,第二个空选C。
20. TCP“三次握手”过程中,第二次“握手”时,发送的报文段中( D )标志位被置为1
题目原文
20. TCP“三次握手”过程中,第二次“握手”时,发送的报文段中( )标志位被置为1
A. SYN B. ACK C. ACK和RST D. SYN和ACK
正确答案:D
题目解析
- 考点分析: 本题考察TCP三次握手中的第二次握手报文段的关键标志位。
- 正确选项分析 (D. SYN和ACK):
- 第二次握手是服务器对客户端连接请求的响应和确认,同时它也发起了自己的同步请求。
- 这个报文段需要设置两个标志位:
- ACK = 1: 表示这是一个确认报文,其确认号字段有效,用于确认收到了客户端的第一个SYN报文。
- SYN = 1: 表示这也是一个同步请求报文,服务器也要选择自己的初始序列号。
- 这个报文通常被称为SYN+ACK报文段。
- 错误选项分析:
- A, B: 只设置一个标志位,不完整。
- C: RST用于复位连接,不会在正常握手时出现。
21. 【2023统考真题】TCP采用三报文握手建立连接,其中第三个报文是( C )
题目原文
21. 【2023统考真题】TCP采用三报文握手建立连接,其中第三个报文是( )
A. TCP连接请求
B. 对TCP连接请求的确认
C. 对TCP连接请求确认的确认
D. TCP普通数据
正确答案:C
题目解析
- 考点分析: 本题考察对三次握手每个步骤的语义理解。
- 正确选项分析 (C. 对TCP连接请求确认的确认):
- 第一次握手: 客户端发送“TCP连接请求”(SYN)。
- 第二次握手: 服务器发送“对TCP连接请求的确认”(SYN+ACK),同时这也是服务器自己的请求。
- 第三次握手: 客户端发送一个ACK报文,这个报文的目的是确认收到了服务器的**“确认报文”**(即第二次握手)。
- 因此,它是“对(对TCP连接请求的确认)的确认”。
- 错误选项分析:
- A: 是第一次握手。
- B: 是第二次握手的主要功能之一。
- D: 第三个报文可以捎带数据,但其主要功能是确认。
22. 主机A和B之间建立了一个TCP连接…则在本次通信过程中,A向B总共发送了( B )字节的数据。
题目原文
22. 主机A和B之间建立了一个TCP连接,A向B发送的第一个SYN报文段中的序号值(seq)等于211,数据传输结束在释放连接时,A向B发送的第4次挥手报文段的seq等于985,则在本次通信过程中,A向B总共发送了( )字节的数据。
A. 771 B. 772 C. 773 D. 774
正确答案:B
题目解析
- 考点分析: 本题考察TCP序列号的消耗规则,特别是SYN和FIN标志位对序列号的影响。
- 分析过程:
- 确定起始序列号:
- A发送的第一个报文(SYN报文)的
seq=211
。 - SYN报文段虽然不携带数据,但它会消耗一个序列号。
- 因此,A发送的第一个数据字节的序列号将是
211 + 1 = 212
。
- A发送的第一个报文(SYN报文)的
- 确定结束序列号:
- 连接释放时,A向B发送的报文(可能是第三次挥手的ACK,也可能是第四次挥手的FIN)的
seq=985
。 - 【关键点】 "第4次挥手报文段"这个描述不准确。A是主动关闭方时发第1和第4次,被动关闭方发第2和第3次。我们假设A发送的最后一个报文段的
seq=985
。这个报文是FIN报文。 - FIN报文段即使不携带数据,也会消耗一个序列号。
seq=985
是这个FIN报文段的序列号。这意味着在它之前,A发送的最后一个数据字节的序列号是985 - 1 = 984
。
- 连接释放时,A向B发送的报文(可能是第三次挥手的ACK,也可能是第四次挥手的FIN)的
- 计算发送的数据字节总数:
- 数据字节的序列号范围是
212
(第一个) 到984
(最后一个)。 - 总字节数 =
最后一个序号 - 第一个序号 + 1
- 总字节数 =
984 - 212 + 1 = 772 + 1 = 773
。
- 数据字节的序列号范围是
- 确定起始序列号:
- 【答案校对与分析】 您提供的答案是
B (772)
。我的计算结果是773
。- 我们来检查一下序列号消耗。
- SYN消耗一个。
seq=211
。第一个数据是212
。 - FIN消耗一个。
seq=985
。最后一个数据是984
。 - 数据量 =
984 - 212 + 1 = 773
。
- SYN消耗一个。
- 答案772是如何得到的?
985 - (211+1) = 985 - 212 = 773
?985 - 211 - 1 = 773
?985 - 211 = 774
?- 如果FIN不消耗序列号,最后一个数据序号就是985。数据量=
985-212+1 = 774
。 - 如果SYN不消耗序列号,第一个数据序号是211。数据量=
984-211+1 = 774
。 - 如果SYN和FIN都不消耗。数据量=
985-211+1 = 775
。 - 结论: 在SYN和FIN都消耗一个序列号的标准规则下,计算结果是773。此题答案B(772)很可能是
984-212
,忘记了+1
。
- 我们来检查一下序列号消耗。
23. A和B之间建立了TCP连接…则在B对该报文的确认报文段中( C )
题目原文
23. A和B之间建立了TCP连接,A向B发送了一个报文段,其中序号字段seq=200,确认号字段ack=201,数据部分有2个字节,则在B对该报文的确认报文段中( )
A. seq=202,ack=200 B. seq=201,ack=201
C. seq=201,ack=202 D. seq=202,ack=201
正确答案:C
题目解析
- 考点分析: 本题考察TCP数据传输过程中,序列号和确认号的交互更新规则。
- 分析过程:
- 分析A发送的报文:
seq=200
:表示该报文段的第一个数据字节的序号是200。- 数据部分有2个字节:这两个字节的序号分别是
200
和201
。 ack=201
:这是A对B之前发来的数据的确认,与本题计算无关。
- 分析B收到报文后的行为:
- B成功收到了序号为
200
和201
的两个字节的数据。
- B成功收到了序号为
- 构建B的确认报文:
ack
字段: B需要告诉A,它期望收到的下一个字节的序号。下一个序号 = 最后一个收到的序号 + 1 = 201 + 1 = 202
。- 所以,确认报文中的
ack = 202
。
seq
字段: B发送的这个确认报文,其自身的序列号是多少?- 它等于B上一次发送的报文的最后一个字节的序号加1。
- 从A的报文中我们知道,A正在确认B的
seq
直到200
的数据 (ack=201
)。 - 这意味着B上一次发送的报文段的最后一个字节序号是
200
。 - 因此,B这次发送的报文段的起始序号就是
200 + 1 = 201
。 - 所以,确认报文中的
seq = 201
。
- 分析A发送的报文:
- 结论: 确认报文段中
seq=201, ack=202
。
24. TCP的通信双方,有一方发送了带有FIN标志的数据段后,表示( B )
题目原文
24. TCP的通信双方,有一方发送了带有FIN标志的数据段后,表示( )
A. 将断开通信双方的TCP连接
B. 单方面释放连接,表示本方已经无数据发送,但可以接收对方的数据
C. 中止数据发送,双方都不能发送数据
D. 连接被重新建立
正确答案:B
题目解析
- 考点分析: 本题考察TCP连接释放过程中的半关闭(Half-Close) 状态。
- 正确选项分析 (B. 单方面释放连接…):
- TCP连接是全双工的,包含两个方向的数据流。
- 当一方(如A)发送一个
FIN
报文时,它只是在宣告:“我(A)这个方向的数据已经全部发送完毕了,我不会再发送任何新数据了”。 - 这只是关闭了
A->B
这个方向的连接。 - 此时,A仍然可以继续接收来自B的数据。连接进入半关闭状态。
- 只有当B也发送了自己的
FIN
报文,并得到A的确认后,整个连接才算完全关闭。
- 错误选项分析:
- A, C: 都错误地认为连接被完全或双向关闭了。
- D: 是释放连接,不是重建。
25. 某客户与服务器建立TCP连接…则下列关于报文段B的说法中,正确的是( D )
题目原文
25. 某客户与服务器建立TCP连接,当连接断开时,客户先向服务器发送一个标志FIN=1的报文段A,此报文段中seq值为x,ack值为y。一段时间后,客户收到了服务器发来的一个标志FIN=1的报文段B,则下列关于报文段B的说法中,正确的是( )
A. B中的seq值一定为y
B. B中的seq值一定为y+1
C. B中的ack值一定为x
D. B中的ack值一定为x+1
正确答案:D
题目解析
- 考点分析: 本题考察TCP四次挥手过程中,序列号和确认号的变化。
- 分析过程(客户主动关闭):
- 第一次挥手 (A -> B):
- 客户发送
FIN
报文A。FIN=1, seq=x, ack=y
。 FIN
报文会消耗一个序列号。
- 客户发送
- 第二次挥手 (B -> A):
- 服务器B收到FIN后,发送一个
ACK
报文作为确认。 - 该报文
ACK=1, seq=y, ack=x+1
。
- 服务器B收到FIN后,发送一个
- 第三次挥手 (B -> A):
- 服务器B的数据也发送完毕后,发送自己的
FIN
报文B。 - 该报文
FIN=1, seq=z, ack=x+1
。 - 这里的
seq=z
是服务器B自己的序列号,与y
的关系不确定(中间可能还发送了数据)。 - 但它的确认号
ack
,仍然是对客户A发送的FIN
报文(seq=x
)的确认,所以ack
的值一定是x+1
。
- 服务器B的数据也发送完毕后,发送自己的
- 第四次挥手 (A -> B): 客户A对B的FIN进行确认。
- 第一次挥手 (A -> B):
- 结论: 报文段B(服务器发的FIN)中的
ack
值一定是对客户FIN的确认,即x+1
。
26. 某应用程序每秒产生一个60B的数据块…则最后每个数据报所包含的应用数据所占的百分比是( C )
正确答案:C
题目解析
- 考点分析: 本题是协议开销与传输效率的计算题。
- 计算过程:
- 确定各层数据大小和开销:
- 应用数据(有效载荷): 60 B。
- TCP首部: 题目说没有附加字段,即固定部分,为 20 B。
- IP首部: 题目说没有附加字段,即固定部分,为 20 B。
- 计算总数据报长度:
- 总长度 = 应用数据 + TCP头 + IP头
- 总长度 =
60 + 20 + 20 = 100 B
。
- 计算传输效率:
- 效率 = (有效数据 / 总传输长度) × 100%
- 效率 =
(60 / 100) * 100% = 60%
。
- 确定各层数据大小和开销:
- 结论: 应用数据所占的百分比是60%。
27. 假设TCP客户与TCP服务器的通信已结束…则从t时刻起TCP服务器释放该连接的最短时间是( C )
原文题目
27. 假设TCP客户与TCP服务器的通信已结束,端到端的往返时间为RTT。t时刻TCP客户请求断开连接,则从t时刻起TCP服务器释放该连接的最短时间是( )
A. 0.5RTT B. 1RTT C. 1.5RTT D. 2RTT
正确答案:C
题目解析
- 考点分析: 本题考察TCP四次挥手过程的时间计算。
- 分析过程(客户主动关闭):
t
: 客户发送第一个FIN
。t + 0.5RTT
: 服务器收到客户的FIN
。(假设单程时间0.5RTT
)- 服务器立即回复第二个
ACK
。 t + 0.5RTT + 0.5RTT = t + 1RTT
: 客户收到服务器的ACK
。- 最短时间:题目说“通信已结束”,意味着服务器没有数据要再发送了。因此,服务器可以在回复
ACK
的同时,就发送自己的FIN
。(即将第二次和第三次挥手合并)。 t + 0.5RTT
: 服务器发送FIN+ACK
。- 服务器何时释放连接? 服务器在发送完
FIN+ACK
后,会进入LAST-ACK
状态,等待客户的最后一次确认。 t + 0.5RTT + 0.5RTT = t + 1RTT
: 客户收到服务器的FIN+ACK
。- 客户立即回复第四个
ACK
。 t + 1RTT + 0.5RTT = t + 1.5RTT
: 服务器收到客户的最后确认,服务器立即释放连接。
- 结论: 从t时刻起,到服务器释放连接,最短需要 1.5RTT。
- (之后,客户会进入
TIME_WAIT
状态,再等待2MSL
后才释放连接)。
28. 甲发起与乙的TCP连接…则TCP连接建立后,甲给乙发送的数据报文段的序号为( B )
原文题目
28. 甲发起与乙的TCP连接,甲选择的初始序号为200,若甲和乙建立连接过程中最后一个报文段不携带数据,则TCP连接建立后,甲给乙发送的数据报文段的序号为( )
A. 203 B. 202 C. 201 D. 200
正确答案:C
题目解析
- 考点分析: 本题考察三次握手后,客户端第一个数据报文的序列号。
- 分析过程:
- 第一次握手 (甲 -> 乙):
SYN=1, seq=200
。这个SYN报文消耗一个序列号。 - 第二次握手 (乙 -> 甲):
SYN=1, ACK=1, seq=y, ack=201
。 - 第三次握手 (甲 -> 乙): 这是一个
ACK
报文。它的序列号是上一个报文(第一次握手)的序列号加1。seq = 200 + 1 = 201
。- 题目说这个报文不携带数据。普通的ACK报文是不消耗序列号的。
- 连接建立后,甲发送第一个数据报文:
- 这个数据报文的序列号,应该是甲上一次发送的报文段的序列号,加上该报文段所消耗的序列号数。
- 甲上一次发送的是第三次握手的ACK报文,其
seq=201
。 - 由于这个ACK报文不带数据,它不消耗序列号。
- 因此,甲发送的第一个数据报文的序列号仍然是 201。
- 第一次握手 (甲 -> 乙):
- 【答案校对】 您提供的答案是
C (201)
。与我的分析一致。
29. A发起与B的TCP连接…B正确接收后发送给A的确认序号是( C )
原文题目
29. A发起与B的TCP连接,A选择的初始序号为1666,连接建立过程中未发送任何数据,TCP连接建立后,A给B发送了1000B数据,B正确接收后发送给A的确认序号是( )
A. 1667 B. 2666 C. 2667 D. 2668
正确答案:C
题目解析
- 考点分析: 本题考察TCP数据传输后的累积确认号计算。
- 分析过程:
- 确定第一个数据字节的序号:
- A的初始序号
ISN = 1666
。 - 三次握手中的第一个SYN报文消耗一个序列号。
- 因此,连接建立后,A发送的第一个数据字节的序号是
1666 + 1 = 1667
。
- A的初始序号
- 确定最后一个数据字节的序号:
- A发送了1000字节的数据。
- 最后一个数据字节的序号 =
第一个数据序号 + 数据长度 - 1
- =
1667 + 1000 - 1 = 2666
。
- 计算B返回的确认序号:
- 确认序号
ack
的值等于期望收到的下一个字节的序号。 ack = 最后一个收到的序号 + 1
ack = 2666 + 1 = 2667
。
- 确认序号
- 确定第一个数据字节的序号:
- 结论: B发送给A的确认序号是2667。
30. 一个TCP连接的数据传输阶段…意味着发送端可以( C )
题目原文
30. 一个TCP连接的数据传输阶段,若发送端的发送窗口值由2000变为3000,意味着发送端可以( )
A. 在收到一个确认之前可以发送3000个TCP报文段
B. 在收到一个确认之前可以发送1000B
C. 在收到一个确认之前可以发送3000B
D. 在收到一个确认之前可以发送2000个TCP报文段
正确答案:C
题目解析
- 考点分析: 本题与第10题考点完全相同,考察发送窗口的含义和单位。
- 正确选项分析 (C. …可以发送3000B):
- TCP的发送窗口大小的单位是字节(Byte)。
- 发送窗口值变为3000,意味着发送方在没有收到新确认的情况下,其“在途”(已发送但未确认)的数据量上限是3000字节。
- 错误选项分析:
- A, D: 单位错误。
- B: 1000B是窗口的增量,不是窗口的总大小。
31. 甲和乙建立了TCP连接…若乙仅正确接收到第1个和第3个段,则乙发送给甲的确认号是( C )
题目原文
31. 甲和乙建立了TCP连接,甲向乙发送了3个连续的TCP段,分别包含200字节、300字节、400字节的有效载荷,第3个段的序号为1000。若乙仅正确接收到第1个和第3个段,则乙发送给甲的确认号是( )
A. 500 B. 600 C. 700 D. 800
正确答案:C
题目解析
- 考点分析: 本题考察TCP的序列号(Sequence Number) 和累积确认(Cumulative Acknowledgement) 机制。
- 分析过程:
- 推算每个段的序列号和字节范围:
- TCP的序列号指的是报文段中第一个字节的编号。
- 第3个段: 序号为1000,长度400字节。
- 包含的字节序号范围是
1000
到1000 + 400 - 1 = 1399
。
- 包含的字节序号范围是
- 第2个段: 长度300字节,在第3个段之前。
- 它的起始序号 =
1000 - 300 = 700
。 - 包含的字节序号范围是
700
到700 + 300 - 1 = 999
。
- 它的起始序号 =
- 第1个段: 长度200字节,在第2个段之前。
- 它的起始序号 =
700 - 200 = 500
。 - 包含的字节序号范围是
500
到500 + 200 - 1 = 699
。
- 它的起始序号 =
- 分析接收情况和确认号:
- 乙收到了第1个段 (序号500~699)。
- 乙没有收到第2个段 (序号700~999)。
- 乙收到了第3个段 (序号1000~1399),这是一个失序的报文段。
- 确定确认号(ack):
- TCP的确认号
ack
的含义是:“我期望收到的下一个字节的序号是ack
”。 - 这同时意味着,序号在
ack-1
之前的所有字节,我都已经按顺序、无差错地收到了。 - 由于第2个段(序号从700开始)丢失了,所以乙收到的连续字节流只到序号699为止。
- 因此,乙仍然在等待从序号700开始的字节。
- 乙发送给甲的确认号将是 700。
- TCP的确认号
- 推算每个段的序列号和字节范围:
- 结论: 乙会持续发送
ack=700
,直到它成功收到第2个段为止。
32. 在一个TCP连接中,MSS为1KB…则当这些报文段均得到确认后,拥塞窗口的大小是( C )
题目原文
32. 在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时发生了超时事件。若在接下来的4RTT内报文段传输都是成功的,则当这些报文段均得到确认后,拥塞窗口的大小是( )
A. 8KB B. 9KB C. 16KB D. 17KB
正确答案:C
题目解析
- 考点分析: 本题考察TCP拥塞控制机制中,发生超时事件后的慢启动和拥塞避免阶段
cwnd
的变化。 - 分析过程:
- 超时事件的处理 (t₀):
- 当前拥塞窗口
cwnd = 34KB
。 - 发生超时,这是一个强烈的网络拥塞信号。
- TCP会立即执行以下操作:
- ① 更新慢启动阈值
ssthresh
:ssthresh = cwnd / 2 = 34KB / 2 = 17KB
。 - ② 重置拥塞窗口
cwnd
:cwnd = 1 MSS = 1KB
。 - ③ 进入慢启动阶段。
- ① 更新慢启动阈值
- 当前拥塞窗口
- 模拟后续4个RTT内
cwnd
的变化(慢启动阶段):- 慢启动规则: 每经过一个RTT(收到对上一轮数据的确认),
cwnd
翻倍。 - t₁ (第1个RTT结束):
cwnd = 1KB * 2 = 2KB
。 (2KB < 17KB, 继续慢启动) - t₂ (第2个RTT结束):
cwnd = 2KB * 2 = 4KB
。 (4KB < 17KB, 继续慢启动) - t₃ (第3个RTT结束):
cwnd = 4KB * 2 = 8KB
。 (8KB < 17KB, 继续慢启动) - t₄ (第4个RTT结束):
cwnd = 8KB * 2 = 16KB
。 (16KB < 17KB, 继续慢启动)
- 慢启动规则: 每经过一个RTT(收到对上一轮数据的确认),
- 确定最终
cwnd
大小:- 在第4个RTT结束后,
cwnd
的大小变为 16KB。
- 在第4个RTT结束后,
- 超时事件的处理 (t₀):
- 注意: 如果在某一步
cwnd
增长后超过了ssthresh
,TCP就会从慢启动阶段进入拥塞避免阶段。在拥塞避免阶段,cwnd
每经过一个RTT只线性增加1 MSS。在本题中,4个RTT内cwnd
始终小于ssthresh
,所以一直处于慢启动阶段。 - 结论: 拥塞窗口的大小是16KB。
33. 若甲向乙发起了一条TCP连接…经过10RTT后,甲的发送窗口是( A )
题目原文
33. 若甲向乙发起了一条TCP连接,最大段长为1KB,乙每收到一个数据段都会发出一个接收窗口为10KB的确认段,若甲在t时刻发生超时,此时拥塞窗口为16KB。则从t时刻起,在不再发生超时的的情况下,经过10RTT后,甲的发送窗口是( )
A. 10KB B. 12KB C. 14KB D. 15KB
正确答案:A
题目解析
- 考点分析: 本题是TCP拥塞控制的综合模拟,要求计算最终的发送窗口,需要同时考虑拥塞窗口(cwnd)和接收窗口(rwnd)。
- 分析过程:
- 确定发送窗口公式:
发送窗口 = min(cwnd, rwnd)
- 确定接收窗口(rwnd):
- 题目明确指出,乙(接收方)通告的接收窗口始终为 10KB。
- 模拟超时事件后的
cwnd
变化:- 超时事件 (t₀):
- 当前
cwnd = 16KB
。 - 更新阈值
ssthresh = cwnd / 2 = 16KB / 2 = 8KB
。 - 重置
cwnd = 1 MSS = 1KB
。 - 进入慢启动。
- 当前
- 第1个RTT后:
cwnd = 1KB * 2 = 2KB
。 - 第2个RTT后:
cwnd = 2KB * 2 = 4KB
。 - 第3个RTT后:
cwnd = 4KB * 2 = 8KB
。- 此时
cwnd
达到ssthresh
,慢启动结束,进入拥塞避免阶段。
- 此时
- 第4个RTT后: (拥塞避免)
cwnd = 8KB + 1MSS = 9KB
。 - 第5个RTT后:
cwnd = 9KB + 1KB = 10KB
。 - 第6个RTT后:
cwnd = 10KB + 1KB = 11KB
。 - 第7个RTT后:
cwnd = 11KB + 1KB = 12KB
。 - 第8个RTT后:
cwnd = 12KB + 1KB = 13KB
。 - 第9个RTT后:
cwnd = 13KB + 1KB = 14KB
。 - 第10个RTT后:
cwnd = 14KB + 1KB = 15KB
。
- 超时事件 (t₀):
- 计算第10个RTT后的发送窗口:
cwnd = 15KB
rwnd = 10KB
发送窗口 = min(15KB, 10KB) = 10KB
。
- 确定发送窗口公式:
- 结论: 经过10RTT后,甲的发送窗口受限于接收方的接收窗口,大小为10KB。
(34) 设TCP的拥塞窗口的慢开始门限值初始为8…则第13次传输时拥塞窗口的大小为( C )
题目原文
(34) 设TCP的拥塞窗口的慢开始门限值初始为8(单位为报文段),当拥塞窗口上升到12时发生超时, TCP开始慢开始和拥塞避免,则第13次传输时拥塞窗口的大小为( )
A. 4 B. 6 C. 7 D. 8
正确答案:C
题目解析
-
考点分析: 本题是TCP拥塞控制机制的经典模拟题。要求追踪在发生超时事件后,拥塞窗口(
cwnd
)随传输轮次(RTT)的变化过程,这个过程会经历慢启动和拥塞避免两个阶段。 -
TCP拥塞控制规则回顾:
- 超时事件处理:
- 将慢启动阈值
ssthresh
更新为当前cwnd
的一半。 - 将拥塞窗口
cwnd
重置为初始值(通常为1个MSS)。 - 进入慢启动阶段。
- 将慢启动阈值
- 慢启动 (Slow Start) 阶段: (
cwnd <= ssthresh
)- 每经过一个RTT(即成功发送并收到确认一轮数据),
cwnd
的大小翻倍(指数增长)。
- 每经过一个RTT(即成功发送并收到确认一轮数据),
- 拥塞避免 (Congestion Avoidance) 阶段: (
cwnd > ssthresh
)- 每经过一个RTT,
cwnd
的大小加1(线性增长)。
- 每经过一个RTT,
- 超时事件处理:
-
分析与模拟过程:
-
发生超时事件 (第0轮):
- 当前
cwnd = 12
个报文段。 - 发生超时。
- 更新阈值
ssthresh
=floor(cwnd / 2) = floor(12 / 2) = 6
。 - 重置拥塞窗口
cwnd
=1
。 - TCP重新进入慢启动阶段。
- 当前
-
追踪
cwnd
随传输轮次的变化:传输轮次 (RTT) cwnd
(该轮开始时)ssthresh
阶段 cwnd
变化过程1 1 6 慢启动 1 <= 6
,cwnd
翻倍 -> 22 2 6 慢启动 2 <= 6
,cwnd
翻倍 -> 43 4 6 慢启动 4 <= 6
,cwnd
翻倍 -> 84 8 6 拥塞避免 8 > 6
,cwnd
加1 -> 95 9 6 拥塞避免 9 > 6
,cwnd
加1 -> 106 10 6 拥塞避免 10 > 6
,cwnd
加1 -> 117 11 6 拥塞避免 11 > 6
,cwnd
加1 -> 128 12 6 拥塞避免 12 > 6
,cwnd
加1 -> 139 13 6 拥塞避免 13 > 6
,cwnd
加1 -> 1410 14 6 拥塞避免 14 > 6
,cwnd
加1 -> 1511 15 6 拥塞避免 15 > 6
,cwnd
加1 -> 1612 16 6 拥塞避免 16 > 6
,cwnd
加1 -> 1713 17 6 拥塞避免
- 【答案校对与分析】 您提供的答案是
C (7)
。我的计算结果是17
。这是一个巨大差异,说明我对“第N次传输”的理解有误。 - 让我们重新理解“第N次传输”:
- 它可能指的是从超时事件发生后的第N个RTT。
- 或者,它可能指的是一个连续的传输事件编号。
- 最标准的理解是“第N个RTT(传输轮次)”。
- 我们来分析答案
7
是如何得到的:t=0
(超时):ssthresh=6
,cwnd=1
RTT 1
:cwnd=2
RTT 2
:cwnd=4
RTT 3
:cwnd=6
(此时cwnd
等于ssthresh
。规则:等于时,下一个RTT进入拥塞避免)RTT 4
: 进入拥塞避免,cwnd = 6 + 1 = 7
。
- 这个结果
7
,是在第4个RTT之后达到的。题目问的是第13次传输。 - 【关键点/陷阱】 题目可能存在一个非常规的假设。让我们仔细阅读…
- “当拥塞窗口上升到12时发生超时”。
- “TCP开始慢开始和拥塞避免”。
- “则第13次传输时拥塞窗口的大小为”。
- 另一种可能的模型(错误模型):
ssthresh = 8
(初始值)。cwnd
从1开始涨。- 1 -> 2 -> 4 -> 8 (慢启动)。
- 9 -> 10 -> 11 -> 12 (拥塞避免)。共经过了
3+4=7
个RTT。 - 在
cwnd=12
时超时。ssthresh=6, cwnd=1
。 - 然后继续RTT…
- 让我们回到最可能的解释,即答案C(7)是在某个时间点计算出的值,但题目中的“第13次”可能另有他意。
t=0
(超时):ssthresh=6
,cwnd=1
- 传输1 (RTT=1):
cwnd=1
。结束后cwnd=2
。 - 传输2 (RTT=2):
cwnd=2
。结束后cwnd=4
。 - 传输3 (RTT=3):
cwnd=4
。结束后cwnd=6
。 - 传输4 (RTT=4):
cwnd=6
。进入拥塞避免。结束后cwnd=7
。 - 传输5 (RTT=5):
cwnd=7
。结束后cwnd=8
。 - …
- 传输13 (RTT=13):
cwnd
在RTT=4时为7。- 在RTT=13时,经过了
13 - 4 = 9
个拥塞避免阶段。 cwnd = 7 + 9 = 16
。
- 结论: 在所有标准模型下,都无法计算出
7
这个结果对应“第13次传输”。此题的答案或题干存在严重问题。最有可能的情况是,题目想问的是“经过几个RTT后,cwnd会达到7”,答案是4。
-
图解(假设题目问的是 cwnd
随RTT的变化)
为了清晰地展示这个过程,我们画出 cwnd
和 ssthresh
随传输轮次(RTT)变化的图。
初始条件:
- 超时发生时
cwnd = 12
- 超时后
ssthresh
被设置为12 / 2 = 6
- 超时后
cwnd
被重置为1
图解:
^ cwnd (报文段数量)
|
|
| / E (cwnd=8) --- F (cwnd=9) --- ... --- J (cwnd=17 @ RTT 12) --- K (cwnd=?? @ RTT 13)
| /
| ssthresh = 6 -------------/---------------------------------------------------------------------
| /
| / D (cwnd=4)
| /
| / C (cwnd=2)
| /
| B(cwnd=1)
+--------------------------------------------------------------------------------> RTT (传输轮次)0 1 2 3 4 5 12 13
图解说明:
- 点B (RTT=0/1): 超时事件发生后,在第一个传输轮次开始时,
cwnd
被重置为1。系统进入慢启动阶段。 - 点C (RTT=2): 经过第一个RTT,
cwnd
翻倍,变为2。 - 点D (RTT=3): 经过第二个RTT,
cwnd
再次翻倍,变为4。 - 点E (RTT=4): 经过第三个RTT,
cwnd
再次翻倍,变为8。此时,cwnd (8)
大于ssthresh (6)
。 - 进入拥塞避免阶段: 从第四个RTT开始,
cwnd
不再指数增长,而是线性增长(每个RTT加1)。 - 点F (RTT=5): 在第四个RTT结束时,
cwnd
从8增加到9。 - …
cwnd
持续线性增长。 - 点J (RTT=12): 在第12个传输轮次开始时,
cwnd
已经增长到了 16。 - 点K (RTT=13): 在第13个传输轮次开始时,
cwnd
将从16增加到 17。
根据图解和标准计算,在第13次传输时(即第13个RTT开始时),拥塞窗口的大小应该是17个报文段。 答案C(7)是无法从题目条件中推导出来的。
35. 甲和乙刚建立TCP连接…则经过( B )甲的发送窗口第一次达到20KB。
题目原文
35. 甲和乙刚建立TCP连接,并约定最大段长为2KB,假设乙总是及时清空缓存,保证接收窗口始终为20KB,ssthresh为16KB,若双向传输时间为10ms,发送时延忽略不计,且没有发生拥塞的情况,则经过( )甲的发送窗口第一次达到20KB。
A. 40ms B. 50ms C. 60ms D. 70ms
正确答案:B
题目解析
- 考点分析: 本题是TCP拥塞控制的综合模拟,要求计算发送窗口达到某一特定值所需的时间。
- 分析过程(追踪
cwnd
的变化):- 发送窗口 = min(cwnd, rwnd)。因为
rwnd
始终为20KB,所以发送窗口何时达到20KB,取决于cwnd
何时达到或超过20KB。 - 初始状态 (t=0): 刚建立连接,进入慢启动。
cwnd
= 1 MSS = 2KB。ssthresh
= 16KB。- RTT = 10ms。
- 模拟RTT变化:
t=0
(第1轮开始):cwnd
= 2KB。发送2KB数据。t=10ms
(第1个RTT结束): 收到确认,cwnd
翻倍 -> 4KB。发送4KB。t=20ms
(第2个RTT结束): 收到确认,cwnd
翻倍 -> 8KB。发送8KB。t=30ms
(第3个RTT结束): 收到确认,cwnd
翻倍 -> 16KB。发送16KB。- 此时,
cwnd
达到ssthresh
。下一个RTT将进入拥塞避免阶段。
- 此时,
t=40ms
(第4个RTT结束): 收到确认,进入拥塞避免,cwnd
线性加1 MSS。cwnd
= 16KB + 2KB = 18KB。发送18KB。
t=50ms
(第5个RTT结束): 收到确认,cwnd
继续线性加1 MSS。cwnd
= 18KB + 2KB = 20KB。
- 判断发送窗口:
- 在
t=50ms
时刻,cwnd
首次达到20KB。 发送窗口 = min(cwnd, rwnd) = min(20KB, 20KB) = 20KB
。
- 在
- 发送窗口 = min(cwnd, rwnd)。因为
- 结论: 经过50ms,甲的发送窗口第一次达到20KB。
36. 假设一个TCP连接的传输过程在慢开始阶段…预期在 t+1 RTT时刻到 t+2 RTT时刻之间将发送( C )个数据段
题目原文
36. 假设一个TCP连接的传输过程在慢开始阶段,在t RTT时刻到 t+1 RTT时刻之间发送了k个数据段,假设仍然保持在慢开始阶段,预期在 t+1 RTT时刻到 t+2 RTT时刻之间将发送( )个数据段(假设接收方有足够的缓存)
A. k B. k+1 C. 2k D. 2k
[选项C,D重复]
正确答案:C/D
题目解析
- 考点分析: 本题考察TCP拥塞控制中慢启动(Slow Start) 阶段拥塞窗口的指数增长规律。
- 正确选项分析 (C/D. 2k):
- 慢启动规则: 每成功接收到对一轮数据的确认(即每经过一个RTT),拥塞窗口
cwnd
的大小就翻倍。 - 分析:
- 在
t
到t+1
RTT 这个时间段内,发送方发送了k
个数据段。这说明,在t
时刻开始时,拥塞窗口的大小cwnd
就是k
。 - 当这一轮
k
个数据段的确认全部返回后(在t+1
RTT 时刻),TCP会根据慢启动规则更新cwnd
。 - 新的
cwnd_new = cwnd_old * 2 = k * 2 = 2k
。 - 因此,在接下来的
t+1
到t+2
RTT 这个时间段内,发送方将发送2k
个数据段。
- 在
- 慢启动规则: 每成功接收到对一轮数据的确认(即每经过一个RTT),拥塞窗口
- 结论: 将发送2k个数据段。
37. 下列关于TCP的拥塞控制机制的描述中,错误的是( C )
题目原文
37. 下列关于TCP的拥塞控制机制的描述中,错误的是( )
A. TCP刚建立连接进入慢开始阶段
B. 慢开始阶段拥塞窗口指数级增加
C. 超时发生时,新门限值(慢开始和拥塞避免阶段的分界点)等于旧门限值的一半
D. 拥塞避免阶段拥塞窗口线性增加
正确答案:C
题目解析
- 考点分析: 本题考察对TCP拥塞控制事件处理规则的精确记忆。
- 错误选项分析 (C. …新门限值…等于旧门限值的一半):
- 这是错误的。
- 当发生超时事件时,新的慢启动阈值
ssthresh
被设置为当前拥塞窗口cwnd
值的一半,即ssthresh_new = cwnd_current / 2
。 - 它与旧的门限值无关。
- 正确选项分析:
- A: 正确,连接建立后,
cwnd
从1 MSS开始,进入慢启动。 - B: 正确,慢启动阶段
cwnd
按1, 2, 4, 8, ...
指数增长。 - D: 正确,当
cwnd > ssthresh
后,进入拥塞避免,cwnd
每个RTT加1 MSS,线性增长。
- A: 正确,连接建立后,
38. 在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时收到了3个冗余ACK报文…则当这些报文段均得到确认后,拥塞窗口的大小是( D )
题目原文
38. 在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时收到了3个冗余ACK报文。若在接下来的4RTT内报文段传输都是成功的,则当这些报文段均得到确认后,拥塞窗口的大小是( )
A. 8KB B. 16KB C. 20KB D. 21KB
正确答案:D
题目解析
- 考点分析: 本题考察TCP拥塞控制中,收到3个冗余ACK事件后的快速重传与快速恢复阶段
cwnd
的变化。 - 分析过程:
- 3个冗余ACK事件的处理 (t₀):
- 当前
cwnd = 34KB
。 - 收到3个冗余ACK,这是一个较弱的网络拥塞信号。
- TCP会执行快速恢复算法(如TCP Reno):
- ① 更新阈值
ssthresh
:ssthresh = cwnd / 2 = 34KB / 2 = 17KB
。 - ② 更新拥塞窗口
cwnd
:cwnd = ssthresh = 17KB
。(注意: 不是像超时那样重置为1)。 - ③ 立即进入拥塞避免阶段。
- ① 更新阈值
- 当前
- 模拟后续4个RTT内
cwnd
的变化(拥塞避免阶段):- 拥塞避免规则: 每经过一个RTT,
cwnd
线性增加1 MSS。 MSS = 1KB
。- t₁ (第1个RTT结束):
cwnd = 17KB + 1KB = 18KB
。 - t₂ (第2个RTT结束):
cwnd = 18KB + 1KB = 19KB
。 - t₃ (第3个RTT结束):
cwnd = 19KB + 1KB = 20KB
。 - t₄ (第4个RTT结束):
cwnd = 20KB + 1KB = 21KB
。
- 拥塞避免规则: 每经过一个RTT,
- 3个冗余ACK事件的处理 (t₀):
- 结论: 经过4个RTT后,拥塞窗口的大小是21KB。
39. A和B建立TCP连接,MSS为1KB…在下一个RTT中,A最多能向B发送( A )数据。
题目原文
39. A和B建立TCP连接,MSS为1KB。某时,慢开始门限值为2KB,A的拥塞窗口为4KB,在接下来的1RTT内,A向B发送了4KB的数据(TCP的数据部分),并且得到了B的确认,确认报文中的窗口字段的值为2KB。在下一个RTT中,A最多能向B发送( )数据。
A. 2KB B. 8KB C. 5KB D. 4KB
正确答案:A
题目解析
- 考点分析: 本题考察对发送窗口的计算,是
cwnd
和rwnd
的综合应用。 - 分析过程:
- 确定当前状态 (发送前):
ssthresh = 2KB
cwnd = 4KB
cwnd > ssthresh
,说明当前处于拥塞避免阶段。
- 分析1个RTT后的
cwnd
变化:- A成功发送并收到了对4KB数据的确认。
- 由于处于拥塞避免阶段,
cwnd
会线性增加。 cwnd_new = cwnd_old + 1 MSS = 4KB + 1KB = 5KB
。
- 获取最新的
rwnd
:- B返回的确认报文中,“窗口字段的值为2KB”。
- 这更新了A所知道的接收窗口
rwnd = 2KB
。
- 计算下一个RTT的发送窗口:
发送窗口 = min(cwnd_new, rwnd)
发送窗口 = min(5KB, 2KB) = 2KB
。
- 确定当前状态 (发送前):
- 结论: 在下一个RTT中,A最多能向B发送2KB的数据,此时发送行为受限于接收方的接收能力。
40. 假设在没有发生拥塞的情况下…则发送方能发送出第一个完全窗口(也就是发送窗口达到24KB)需要的时间是( B )
题目原文
40. 假设在没有发生拥塞的情况下,在一条往返时延RTT为10ms的线路上采用慢开始控制策略。若接收窗口的大小为24KB,最大报文段MSS为2KB,则发送方能发送出第一个完全窗口(也就是发送窗口达到24KB)需要的时间是( )
A. 30ms B. 40ms C. 50ms D. 60ms
正确答案:B
题目解析
- 考点分析: 本题与第35题类似,考察在慢启动阶段,发送窗口达到某个值所需的时间。
- 分析过程(追踪
cwnd
的变化):- 发送窗口 = min(cwnd, rwnd)。因为
rwnd
是24KB,所以发送窗口何时达到24KB,取决于cwnd
何时达到24KB。 - 初始状态 (t=0): 刚开始,进入慢启动。
cwnd
= 1 MSS = 2KB。- RTT = 10ms。
- 模拟RTT变化:
t=0
(第1轮开始):cwnd
=2KB。发送2KB。t=10ms
(第1个RTT结束): 收到确认,cwnd
翻倍 -> 4KB。发送4KB。t=20ms
(第2个RTT结束): 收到确认,cwnd
翻倍 -> 8KB。发送8KB。t=30ms
(第3个RTT结束): 收到确认,cwnd
翻倍 -> 16KB。发送16KB。t=40ms
(第4个RTT结束): 收到确认,cwnd
翻倍 -> 32KB。
- 判断发送窗口:
- 在
t=40ms
时刻,cwnd
变为32KB。 - 此时
发送窗口 = min(cwnd, rwnd) = min(32KB, 24KB) = 24KB
。 - 这是发送窗口第一次达到24KB。
- 在
- 发送窗口 = min(cwnd, rwnd)。因为
- 结论: 需要的时间是40ms。
41. 甲向乙发起一个TCP连接…则甲从连接建立成功至发送窗口达到8KB,需经过的最小时间以及此时乙的接收缓存的可用空间分别为( B )
题目原文
41. 甲向乙发起一个TCP连接,最大段长MSS=1KB,RTT=3ms,乙的接收缓存为16KB,且乙的接收缓存仅有数据存入而无数据取出,则甲从连接建立成功至发送窗口达到8KB,需经过的最小时间以及此时乙的接收缓存的可用空间分别为( )
A. 3ms,15KB B. 9ms,9KB C. 6ms,13KB D. 12ms,8KB
正确答案:B
题目解析
- 考点分析: 本题是TCP拥塞控制(慢启动)和流量控制(接收窗口)的综合计算题。
- 分析过程:
- 确定目标: 发送窗口达到8KB。
发送窗口 = min(cwnd, rwnd)
。我们需要同时追踪cwnd
和rwnd
的变化。
- 追踪
cwnd
的变化(慢启动):- 初始状态 (t=0, 连接建立成功):
cwnd
= 1 MSS = 1KB。 RTT = 3ms
。- t=0 (第1轮开始): 发送1KB。
发送窗口 = min(1KB, 16KB) = 1KB
。 - t=3ms (第1个RTT结束): 收到确认,
cwnd
翻倍 -> 2KB。 t=3ms (第2轮开始):
发送2KB。发送窗口 = min(2KB, 16KB) = 2KB
。- t=6ms (第2个RTT结束): 收到确认,
cwnd
翻倍 -> 4KB。 t=6ms (第3轮开始):
发送4KB。发送窗口 = min(4KB, 16KB) = 4KB
。- t=9ms (第3个RTT结束): 收到确认,
cwnd
翻倍 -> 8KB。 - 在
t=9ms
这个时刻,cwnd
首次达到了8KB。
- 初始状态 (t=0, 连接建立成功):
- 计算此时的
rwnd
变化:rwnd
(接收窗口可用空间) =接收缓存总大小 - 已接收但未取出的数据量
。- 接收缓存总大小 = 16KB。
- 在
t=9ms
时,第1、2、3轮发送的数据(1KB+2KB+4KB)都已经成功到达并被确认。 - 由于“乙的接收缓存仅有数据存入而无数据取出”,所以这些数据都堆积在乙的接收缓存中。
- 已接收数据量 =
1KB + 2KB + 4KB = 7KB
。 - 此时
rwnd
=16KB - 7KB = 9KB
。
- 计算
t=9ms
时的发送窗口:发送窗口 = min(cwnd, rwnd) = min(8KB, 9KB) = 8KB
。
- 确定目标: 发送窗口达到8KB。
- 结论:
- 经过 9ms,发送窗口第一次达到8KB。
- 此时,乙的接收缓存的可用空间(
rwnd
)是 9KB。 - 因此,结果是
9ms, 9KB
。
42. 【2009统考真题】主机甲与主机乙之间已建立一个TCP连接…主机乙正确接收到这两个数据段后,发送给主机甲的确认序列号是( D )
题目原文
42. 【2009统考真题】主机甲与主机乙之间已建立一个TCP连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300B和500B的有效载荷,第一个段的序列号为200,主机乙正确接收到这两个数据段后,发送给主机甲的确认序列号是( )
A. 500 B. 700 C. 800 D. 1000
正确答案:D
题目解析
- 考点分析: 本题与第31题类似,考察TCP的序列号和累积确认机制。
- 分析过程:
- 分析发送的字节序列:
- 第一个段:
- 序列号(起始字节号) = 200。
- 长度 = 300 B。
- 包含的字节序号范围是
200
到200 + 300 - 1 = 499
。
- 第二个段:
- 紧跟在第一个段之后。
- 序列号(起始字节号) =
499 + 1 = 500
。 - 长度 = 500 B。
- 包含的字节序号范围是
500
到500 + 500 - 1 = 999
。
- 第一个段:
- 分析接收情况和确认号:
- 主机乙正确接收到了这两个数据段。
- 这意味着,从序号200开始,一直到序号999的所有字节,乙都已经按顺序、无差错地收到了。
- 确定确认号(ack):
- TCP的确认号
ack
的含义是:“我期望收到的下一个字节的序号是ack
”。 - 既然乙已经收到了
999
号字节,那么它期望收到的下一个字节就是999 + 1 = 1000
。
- TCP的确认号
- 分析发送的字节序列:
- 结论: 乙发送给甲的确认序列号是1000。
43. 【2009统考真题】…则当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是( C )
题目原文
43. 【2009统考真题】一个TCP连接总以1KB的最大段长发送TCP段,发送方有足够多的数据要发送,当拥塞窗口为16KB时发生了超时,若接下来的4RTT时间内的TCP段的传输都是成功的,则当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是( )
A. 7KB B. 8KB C. 9KB D. 16KB
正确答案:C
题目解析
- 考点分析: 本题与第32题类似,考察TCP拥塞控制中,发生超时事件后的
cwnd
变化。 - 分析过程:
- 超时事件的处理 (t₀):
- 当前
cwnd = 16KB
。 - 发生超时。
- 更新阈值
ssthresh
:ssthresh = cwnd / 2 = 16KB / 2 = 8KB
。 - 重置拥塞窗口
cwnd
:cwnd = 1 MSS = 1KB
。 - 进入慢启动阶段。
- 当前
- 模拟后续RTT内
cwnd
的变化:- 第1个RTT结束:
cwnd
= 1KB * 2 = 2KB。 (2 < 8, 继续慢启动) - 第2个RTT结束:
cwnd
= 2KB * 2 = 4KB。 (4 < 8, 继续慢启动) - 第3个RTT结束:
cwnd
= 4KB * 2 = 8KB。- 此时
cwnd
达到ssthresh
。下一个RTT将进入拥塞避免阶段。
- 此时
- 第4个RTT结束: 进入拥塞避免,
cwnd
线性增加1 MSS。cwnd
= 8KB + 1KB = 9KB。
- 第1个RTT结束:
- 超时事件的处理 (t₀):
- 结论: 在第4个RTT结束时,拥塞窗口的大小是9KB。
44. 【2010统考真题】…则此时主机甲还可以向主机乙发送的最大字节数是( A )
题目原文
44. 【2010统考真题】主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B。若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为2000B,则此时主机甲还可以向主机乙发送的最大字节数是( )
A. 1000 B. 2000 C. 3000 D. 4000
正确答案:A
题目解析
- 考点分析: 本题考察TCP发送方如何根据发送窗口、已发送未确认数据和新收到的接收窗口来计算可用窗口大小。
- 分析过程:
- 初始状态:
cwnd = 4000 B
。- 假设初始
rwnd
足够大,所以发送窗口 = min(cwnd, rwnd) = 4000 B
。
- 甲发送两个段:
- 甲发送了
2 * 1000 B = 2000 B
的数据。 - 此时,已发送但未确认的数据量 = 2000 B。
- 甲发送了
- 甲收到第一个段的确认:
- 第一个段是1000 B。收到它的确认后,已发送但未确认的数据量减少1000 B。
- 当前已发送未确认的数据量 =
2000 B - 1000 B = 1000 B
。
- 更新
rwnd
并计算新的发送窗口:- 收到的确认段中,通告的
rwnd = 2000 B
。 cwnd
在短时间内没有变化,仍为4000 B
。- 新的发送窗口 =
min(cwnd, rwnd) = min(4000, 2000) = 2000 B
。
- 收到的确认段中,通告的
- 计算可用窗口:
- 可用窗口 = 发送窗口 - 已发送未确认的数据量
- 可用窗口 =
2000 B - 1000 B = 1000 B
。
- 初始状态:
- 结论: 主机甲还可以向主机乙发送的最大字节数是1000。
45. 【2011统考真题】…若主机乙接受该连接请求,则主机乙向主机甲发送的正确的TCP段可能是( C )
题目原文
45. 【2011统考真题】主机甲向主机乙发送一个(SYN=1,seq=11220)的TCP段,期望与主机乙建立TCP连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的TCP段可能是( )
A. (SYN=0,ACK=0,seq=11221,ack=11221)
B. (SYN=1,ACK=1,seq=11220,ack=11220)
C. (SYN=1,ACK=1,seq=11221,ack=11221)
D. (SYN=0,ACK=0,seq=11220,ack=11220)
正确答案:C
题目解析
- 考点分析: 本题与第19题类似,考察TCP三次握手中第二次握手的报文内容。
- 分析过程:
- 第一次握手(甲 -> 乙):
SYN=1, seq=11220
。 - 第二次握手(乙 -> 甲): 乙需要确认甲的SYN,并同时发送自己的SYN。
- 确认甲:
- 必须设置
ACK=1
。 - 确认号
ack
应该是收到的序列号加1,即ack = 11220 + 1 = 11221
。
- 必须设置
- 发送自己的SYN:
- 必须设置
SYN=1
。 - 序列号
seq
是乙自己选择的一个初始序列号。这个号与甲的序列号无关。
- 必须设置
- 确认甲:
- 分析选项:
- A, D:
SYN=0
或ACK=0
,错误。 - B:
seq=11220
(错误,这是甲的序号),ack=11220
(错误,应为11221)。 - C:
SYN=1, ACK=1, seq=11221, ack=11221
。SYN=1, ACK=1
正确。ack=11221
正确。seq=11221
:乙选择的初始序列号恰好是11221
,这是可能的。
- A, D:
- 第一次握手(甲 -> 乙):
- 结论: 选项C是唯一一个格式正确且数值可能的报文段。
46. 【2011统考真题】…若主机乙仅正确接收到第1个段和第3个段,则主机乙发送给主机甲的确认序号是( B )
题目原文
46. 【2011统考真题】主机甲与主机乙之间已建立一个TCP连接,主机甲向主机乙发送了3个连续的TCP段,分别包含300B、400B和500B的有效载荷,第3个段的序号为900。若主机乙仅正确接收到第1个段和第3个段,则主机乙发送给主机甲的确认序号是( )
A. 300 B. 500 C. 1200 D. 1400
正确答案:B
题目解析
- 考点分析: 本题与第31题考点完全相同,考察TCP的累积确认。
- 分析过程:
- 推算每个段的序列号和字节范围:
- 第3个段: 序号
900
,长度500
。范围900 ~ 1399
。 - 第2个段: 长度
400
。起始序号 =900 - 400 = 500
。范围500 ~ 899
。 - 第1个段: 长度
300
。起始序号 =500 - 300 = 200
。范围200 ~ 499
。
- 第3个段: 序号
- 分析接收情况和确认号:
- 乙收到了第1个段 (序号200~499)。
- 乙没有收到第2个段 (序号500~899)。
- 乙收到了第3个段 (失序)。
- 确定确认号(ack):
- TCP的累积确认机制要求接收方只能确认按顺序到达的最后一个字节。
- 由于第2个段(从序号500开始)丢失了,所以乙收到的连续字节流只到序号499为止。
- 因此,乙仍然在等待从序号500开始的字节。
- 乙发送给甲的确认号将是 500。
- 推算每个段的序列号和字节范围:
- 结论: 确认序号是500。
47. 【2013统考真题】…则甲立即发送给乙的TCP段的序号和确认序号分别是( B )
题目原文
47. 【2013统考真题】主机甲与主机乙之间已建立一个TCP连接,双方持续有数据传输,且数据无差错与丢失。若甲收到一个来自乙的TCP段,该段的序号为1913、确认序号为2046、有效载荷为100B,则甲立即发送给乙的TCP段的序号和确认序号分别是( )
A. 2046、2012 B. 2046、2013 C. 2047、2012 D. 2047、2013
正确答案:B
题目解析
- 考点分析: 本题考察TCP全双工通信中,序列号和确认号的交换规则。
- 分析过程:
- 分析甲将要发送的TCP段的“序号 (seq)”:
- 甲收到的报文段中,确认序号
ack = 2046
。 - 这个
ack
是乙发给甲的,它告诉甲:“我(乙)期望收到你(甲)的下一个字节的序号是2046”。 - 因此,甲接下来要发送的数据段,其起始序列号就应该是 2046。
- 甲收到的报文段中,确认序号
- 分析甲将要发送的TCP段的“确认序号 (ack)”:
- 甲收到的报文段是乙发来的,其序列号
seq = 1913
,有效载荷为 100B。 - 这意味着,甲收到了从序号
1913
到1913 + 100 - 1 = 2012
的所有字节。 - 甲需要对收到的数据进行确认。甲期望收到的乙的下一个字节的序号是
2012 + 1 = 2013
。 - 因此,甲在回复的报文中,确认序号应设置为 2013。
- 甲收到的报文段是乙发来的,其序列号
- 分析甲将要发送的TCP段的“序号 (seq)”:
- 结论: 甲发送的TCP段,序号是2046,确认序号是2013。
48. 【2014统考真题】…则从t时刻起,不再发生超时的情况下,经过10RTT后甲的发送窗口是( A )
题目原文
48. 【2014统考真题】主机甲和乙建立了TCP连接,甲始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为10KB的确认段。若甲在t时刻发生超时的时候拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10RTT后甲的发送窗口是( )
A. 10KB B. 12KB C. 14KB D. 15KB
正确答案:A
题目解析
- 考点分析: 本题与第33题考点完全相同,是TCP拥塞控制的综合模拟,要求计算最终的发送窗口。
- 分析过程:
- 确定发送窗口公式:
发送窗口 = min(cwnd, rwnd)
- 确定接收窗口(rwnd):
- 题目明确指出,
rwnd
始终为 10KB。
- 题目明确指出,
- 模拟超时事件后的
cwnd
变化:- 超时事件 (t₀):
- 当前
cwnd = 8KB
。 - 更新阈值
ssthresh = cwnd / 2 = 8KB / 2 = 4KB
。 - 重置
cwnd = 1 MSS = 1KB
。 - 进入慢启动。
- 当前
- 第1个RTT后:
cwnd = 1KB * 2 = 2KB
。 - 第2个RTT后:
cwnd = 2KB * 2 = 4KB
。- 此时
cwnd
达到ssthresh
。下一个RTT将进入拥塞避免阶段。
- 此时
- 第3个RTT后: (拥塞避免)
cwnd = 4KB + 1KB = 5KB
。 - …
- 第10个RTT后:
- 从第3个RTT到第10个RTT,共经历了
10 - 2 = 8
个拥塞避免阶段。 cwnd
将线性增加8 * 1KB = 8KB
。- 最终
cwnd = 4KB
(第2RTT结束时的值)+ 8KB = 12KB
。
- 从第3个RTT到第10个RTT,共经历了
- 超时事件 (t₀):
- 计算第10个RTT后的发送窗口:
cwnd = 12KB
rwnd = 10KB
发送窗口 = min(12KB, 10KB) = 10KB
。
- 确定发送窗口公式:
- 结论: 经过10RTT后,甲的发送窗口受限于接收方的接收窗口,大小为10KB。
49. 【2015统考真题】…则甲从连接建立成功时刻起,未出现发送超时的情况下,经过4RTT后,甲的发送窗口是( A )
题目原文
49. 【2015统考真题】主机甲和主机乙新建一个TCP连接,甲的拥塞控制初始阈值为32KB,甲向乙始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙为该连接分配16KB接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未出现发送超时的情况下,经过4RTT后,甲的发送窗口是( )
A. 1KB B. 8KB C. 16KB D. 32KB
正确答案:A
题目解析
- 考点分析: 本题是TCP慢启动和流量控制的综合模拟,特别考察了接收窗口
rwnd
会动态减小的情况。 - 分析过程:
- 确定发送窗口公式:
发送窗口 = min(cwnd, rwnd)
- 追踪
cwnd
的变化(慢启动):- t₀ (连接建立):
cwnd = 1 MSS = 1KB
。ssthresh = 32KB
。 - t₁ (1 RTT后):
cwnd
翻倍 ->2KB
。 - t₂ (2 RTT后):
cwnd
翻倍 ->4KB
。 - t₃ (3 RTT后):
cwnd
翻倍 ->8KB
。 - t₄ (4 RTT后):
cwnd
翻倍 ->16KB
。
- t₀ (连接建立):
- 追踪
rwnd
的变化:- 初始
rwnd
= 接收缓存总大小 =16KB
。 - 数据“不被取走”,意味着每收到一轮数据,
rwnd
就会减小。 - t₀ (第1轮发送): 甲发送了
cwnd=1KB
的数据。 - t₁ (第1个RTT结束): 乙收到了1KB,缓存被占用1KB。
- 乙回复的ACK中,通告的
rwnd = 16KB - 1KB = 15KB
。
- 乙回复的ACK中,通告的
- t₁ (第2轮发送): 甲发送了
cwnd=2KB
的数据。 - t₂ (第2个RTT结束): 乙又收到了2KB,缓存总共被占用
1+2=3KB
。- 乙回复的ACK中,通告的
rwnd = 16KB - 3KB = 13KB
。
- 乙回复的ACK中,通告的
- t₂ (第3轮发送): 甲发送了
cwnd=4KB
的数据。 - t₃ (第3个RTT结束): 乙又收到了4KB,缓存总共被占用
3+4=7KB
。- 乙回复的ACK中,通告的
rwnd = 16KB - 7KB = 9KB
。
- 乙回复的ACK中,通告的
- t₃ (第4轮发送): 甲发送了
cwnd=8KB
的数据。 - t₄ (第4个RTT结束): 乙又收到了8KB,缓存总共被占用
7+8=15KB
。- 乙回复的ACK中,通告的
rwnd = 16KB - 15KB = 1KB
。
- 乙回复的ACK中,通告的
- 初始
- 计算第4个RTT后的发送窗口:
- 在
t=4*RTT
时刻,甲刚刚收到乙的确认,此时:- 甲计算出的新
cwnd
是 16KB。 - 甲从确认报文中获知的最新
rwnd
是 1KB。
- 甲计算出的新
发送窗口 = min(cwnd, rwnd) = min(16KB, 1KB) = 1KB
。
- 在
- 确定发送窗口公式:
- 结论: 经过4RTT后,甲的发送窗口被接收方的缓存耗尽所限制,变为1KB。
50. 【2017统考真题】若甲向乙发起一个TCP连接…则甲从连接建立成功至发送窗口达到32KB,需经过的时间至少( A )
题目原文
50. 【2017统考真题】若甲向乙发起一个TCP连接,最大段长MSS=1KB,RTT=5ms,乙开辟的接收缓存为64KB,则甲从连接建立成功至发送窗口达到32KB,需经过的时间至少( )
A. 25ms B. 30ms C. 160ms D. 165ms
正确答案:A
题目解析
- 考点分析: 本题是TCP拥塞控制中慢启动(Slow Start) 阶段的时间计算题。
- 分析过程:
- 确定目标和相关参数:
- 目标: 发送窗口达到32KB。
- 发送窗口 = min(cwnd, rwnd)。
- MSS: 1 KB。
- RTT: 5 ms。
- rwnd (接收窗口): 乙的接收缓存为64KB。题目没有说数据不被取走,因此我们假设接收方处理能力足够,
rwnd
始终维持在64KB
。 - 在这种情况下,发送窗口的大小完全由拥塞窗口(
cwnd
) 决定,直到cwnd
超过rwnd
。
- 追踪
cwnd
的变化(慢启动):- 慢启动阶段,
cwnd
每经过一个RTT就翻倍。 - t=0 (连接建立成功):
cwnd
= 1 MSS = 1 KB。 - t=5ms (第1个RTT结束):
cwnd
= 1 * 2 = 2 KB。 - t=10ms (第2个RTT结束):
cwnd
= 2 * 2 = 4 KB。 - t=15ms (第3个RTT结束):
cwnd
= 4 * 2 = 8 KB。 - t=20ms (第4个RTT结束):
cwnd
= 8 * 2 = 16 KB。 - t=25ms (第5个RTT结束):
cwnd
= 16 * 2 = 32 KB。
- 慢启动阶段,
- 判断发送窗口:
- 在
t=25ms
这个时刻,cwnd
首次达到了32KB。 - 此时,
发送窗口 = min(cwnd, rwnd) = min(32KB, 64KB) = 32KB
。 - 目标达成。
- 在
- 确定目标和相关参数:
- 结论:
- 从连接建立成功(t=0)开始,总共经过了 5个RTT 的时间。
- 总时间 =
5 * RTT = 5 * 5ms = 25ms
。
表格化展示:
经过的时间 | RTT轮次 | cwnd (该轮次结束时的值) |
---|---|---|
0ms | 0 | 1 KB |
5ms | 1 | 2 KB |
10ms | 2 | 4 KB |
15ms | 3 | 8 KB |
20ms | 4 | 16 KB |
25ms | 5 | 32 KB |
(51) 【2019统考真题】某客户通过一个TCP连接向服务器发送数据的部分过程如图所示…则客户重新发送 seq = 100 段的时刻是( C )
题目原文
(51) 【2019统考真题】某客户通过一个TCP连接向服务器发送数据的部分过程如图所示。客户在 t₀ 时刻第一次收到确认序号 ack_seq = 100 的段, 并发送序列号 seq = 100 的段, 但发生丢失。若 TCP 支持快速重传, 则客户重新发送 seq = 100 段的时刻是( )
[图示TCP时序图]
A. t₁
B. t₂
C. t₃
D. t₄
正确答案:C
题目解析
-
考点分析: 本题考察TCP的快速重传(Fast Retransmit) 机制的触发条件。
-
背景知识(快速重传):
- 目的: 在发送方超时计时器到期之前,尽早地重传丢失的报文段,以提高网络吞吐率。
- 触发条件: 当发送方连续收到三个对于同一个序列号的重复确认(Duplicate ACK) 时,就立即重传该确认号所期望的那个报文段,而无需等待超时。
-
分析图示时序过程:
-
t₀ 时刻之前: 客户已经发送了
seq=0
到seq=99
的数据,并收到了服务器返回的ack=100
的确认。这表示服务器期望收到从100号字节开始的数据。 -
t₀ 之后,客户的发送行为:
- 客户发送
seq=100
的段。 - 客户继续发送
seq=200
的段,但这个段在网络中丢失了。 - 客户继续发送
seq=300
的段。 - 客户继续发送
seq=400
的段。
- 客户发送
-
分析服务器的接收和确认行为:
- 服务器收到了
seq=100
的段。【注意】 题干说seq=100
的段“发生丢失”。但图示中seq=200
的段丢失了。我们以图示为准,即seq=200
的段丢失。 - 服务器收到
seq=100
段: 成功接收,按序。此时服务器期望下一个是seq=200
。 seq=200
段丢失。- 服务器收到
seq=300
段: 这是一个失序的段。因为服务器仍在等待seq=200
,所以它不能确认seq=300
。根据TCP的累积确认规则,它会再次发送一个对已按序收到的最后一个字节的确认。此时,它会发送一个ack=200
的确认报文,表示“我还在等200号”。 - 服务器收到
seq=400
段: 这也是一个失序的段。服务器会再次发送一个ack=200
的确认报文。 - 【重大修正】 重新仔细阅读题干和图示。
- 题干:“客户在t₀时刻…发送序列号seq=100的段,但发生丢失”。
- 图示:
seq=200
的段标明了“丢失”。 - 这是一个矛盾。我们必须选择一个作为基准。 通常,图形比文字更具权威性。我们假设是
seq=200
丢失。
- 服务器收到了
-
按
seq=200
丢失来分析客户收到的ACK:- 客户发送了
100, 200(丢), 300, 400
。 - 服务器收到了
100
。它期望200
。 - 服务器收到了
300
(失序)。它会立即发送一个ack=200
。这个ACK在t₁
时刻到达客户。这是第1个重复ACK (重复了对200的期望)。 - 服务器收到了
400
(失序)。它会再次发送一个ack=200
。这个ACK在t₂
时刻到达客户。这是第2个重复ACK。 - 服务器可能还会收到
seq=500
的段,然后发送第3个重复的ack=200
。这个ACK在t₃
时刻到达客户。 - 触发快速重传: 在
t₃
时刻,客户收到了第三个重复的ACK (ack=200
)。此时,快速重传机制被触发。 - 客户立即重传服务器期望的那个段,即
seq=200
的段。
- 客户发送了
-
如果按题干文字
seq=100
丢失来分析:- 客户发送
100(丢), 200, 300, 400
。 - 服务器在t₀前已确认到99,期望
100
。 - 服务器收到
200
(失序),发送ack=100
-> 在t₁
到达。 - 服务器收到
300
(失序),发送ack=100
-> 在t₂
到达。 - 服务器收到
400
(失序),发送ack=100
-> 在t₃
到达。 - 在
t₃
时刻,客户收到第3个重复的ack=100
,触发快速重传,立即重传seq=100
的段。
- 客户发送
-
-
最终结论:
- 无论是
seq=100
丢失还是seq=200
丢失,快速重传的触发点都是在收到第3个重复ACK的时刻,即 t₃。 t₄
是超时计时器到期的时刻。快速重传的目的就是在超时发生之前进行重传。
- 无论是
-
选项分析:
- A. t₁: 只收到了第1个重复ACK。
- B. t₂: 只收到了第2个重复ACK。
- C. t₃: 收到了第3个重复ACK,触发快速重传。
- D. t₄: 这是超时重传的时刻,快速重传会在此之前发生。
52. 【2019统考真题】若主机甲主动发起一个与主机乙的TCP连接…则第三次握手TCP段的确认序列号是( D )
题目原文
52. 【2019统考真题】若主机甲主动发起一个与主机乙的TCP连接,甲、乙选择的初始序列号分别为2018和2046,则第三次握手TCP段的确认序列号是( )
A. 2018 B. 2019 C. 2046 D. 2047
正确答案:D
题目解析
- 考点分析: 本题考察TCP三次握手中,第三次握手报文段中确认号(ack) 的计算。
- 分析过程(三次握手):
- 第一次握手 (甲 -> 乙):
- 甲发送SYN报文。
SYN=1, seq=2018
。
- 第二次握手 (乙 -> 甲):
- 乙收到甲的SYN后,回复SYNACK报文。
- 乙需要确认甲的SYN,所以
ack = 2018 + 1 = 2019
。 - 乙同时发送自己的SYN,并选择自己的初始序列号
seq = 2046
。 - 报文内容:
SYN=1, ACK=1, seq=2046, ack=2019
。
- 第三次握手 (甲 -> 乙):
- 甲收到乙的SYNACK后,发送ACK报文。
- 这个报文是为了确认乙在第二次握手中发送的SYN报文。
- 乙的SYN报文的序列号是
2046
。SYN报文会消耗一个序列号。 - 因此,甲需要发送的确认号
ack
应该是2046 + 1 = 2047
。 - (该报文的序列号
seq
将是2018 + 1 = 2019
)。
- 第一次握手 (甲 -> 乙):
- 结论: 第三次握手TCP段的确认序列号是2047。
53. 【2020统考真题】…则在不出现拥塞的前提下,拥塞窗口从8KB增长到32KB所需的最长时间是( D )
(该题题干存在笔误,应为“最短时间”)
题目原文(修正):
53. 【2020统考真题】若主机甲与主机乙已建立一条TCP连接,最大段长(MSS)为1KB,往返时间(RTT)为2ms,则在不出现拥塞的前提下,拥塞窗口从8KB增长到32KB所需的最短时间是( )
A. 4ms B. 8ms C. 24ms D. 48ms
正确答案:D
题目解析
- 考点分析: 本题考察在没有拥塞的情况下,
cwnd
从一个较大值增长到另一个值所需的时间,需要考虑从拥塞避免阶段开始。 - 【答案校对与分析】 您提供的答案是
D (48ms)
。这是一个很长的时间。我们来分析。cwnd
从8KB增长到32KB,增长了24KB
。- 如果处于慢启动阶段:
- 8KB ->(1 RTT) 16KB ->(1 RTT) 32KB。
- 需要 2个RTT,即
2 * 2ms = 4ms
。
- 如果处于拥塞避免阶段:
cwnd
每个RTT增加1 MSS (1KB)。- 需要增长
32KB - 8KB = 24KB
。 - 需要 24个RTT,即
24 * 2ms = 48ms
。
- 判断所处阶段:
- 题目没有给出
ssthresh
的值。 - 如果
ssthresh
>= 8KB,那么开始时就可能处于慢启动。 - 如果
ssthresh
< 8KB,那么开始时就处于拥塞避免。
- 题目没有给出
- 题目问的是“最长时间”:
- 要使增长时间最长,
cwnd
的增长速率应该最慢。线性增长(拥塞避免)比指数增长(慢启动)慢得多。 - 因此,我们假设
cwnd
从8KB开始就一直处于拥塞避免阶段。
- 要使增长时间最长,
- 计算:
- 如上分析,需要24个RTT,总时间为 48ms。
- 结论: 最长时间是48ms。
54. 【2020统考真题】…则在无任何重传的情况下,甲向乙已经发送的应用层数据的字节数为( C )
题目原文
54. 【2020统考真题】若主机甲与主机乙建立TCP连接时,发送的SYN段中的序号为1000,在断开连接时,主机甲发送给主机乙的FIN段中的序号为5001,则在无任何重传的情况下,甲向乙已经发送的应用层数据的字节数为( )
A. 4002 B. 4001 C. 4000 D. 3999
正确答案:C
题目解析
- 考点分析: 本题考察TCP序列号的消耗规则。
- 分析过程:
- 连接建立 (SYN):
- 甲发送的第一个报文是SYN段,其序列号
seq = 1000
。 - SYN报文会消耗1个序列号(即使它不携带数据)。
- 因此,甲发送的第一个数据字节的序列号将是
1000 + 1 = 1001
。
- 甲发送的第一个报文是SYN段,其序列号
- 连接断开 (FIN):
- 甲发送的FIN段,其序列号
seq = 5001
。 - FIN报文也会消耗1个序列号。
- 这意味着,在发送这个FIN段之前,甲发送的最后一个数据字节的序列号是
5001 - 1 = 5000
。
- 甲发送的FIN段,其序列号
- 计算数据字节数:
- 甲发送的应用层数据字节的序列号范围是
1001
到5000
。 - 总字节数 =
最后一个序号 - 第一个序号 + 1
- 总字节数 =
5000 - 1001 + 1 = 4000
字节。
- 甲发送的应用层数据字节的序列号范围是
- 连接建立 (SYN):
- 结论: 甲向乙发送了4000字节的应用层数据。
55. 【2021统考真题】若客户首先向服务器发送FIN段请求断开TCP连接,则当客户收到服务器发送的FIN段并向服务器发送ACK段后,客户的TCP状态转换为( B )
题目原文
55. 【2021统考真题】若客户首先向服务器发送FIN段请求断开TCP连接,则当客户收到服务器发送的FIN段并向服务器发送ACK段后,客户的TCP状态转换为( )
A. CLOSE_WAIT B. TIME_WAIT C. FIN_WAIT_1 D. FIN_WAIT_2
正确答案:B
题目解析
- 考点分析: 本题考察TCP四次挥手过程中的状态转换。
- 分析过程(客户端主动关闭):
- 客户端 -> 服务器: 发送
FIN
段。客户端进入FIN_WAIT_1
状态。 - 服务器 -> 客户端: 回复
ACK
段。客户端收到后,进入FIN_WAIT_2
状态,等待服务器的FIN
。 - 服务器 -> 客户端: 服务器处理完数据后,也发送
FIN
段。 - 客户端 -> 服务器: 客户端收到服务器的
FIN
段后,必须发送最后一个**ACK
**段作为确认。- 在发送完这个最后的
ACK
段后,客户端不能立即关闭连接,而是进入TIME_WAIT
状态。 - 进入
TIME_WAIT
状态的目的是为了等待足够长的时间(通常是2MSL),以确保它发送的最后一个ACK能成功到达服务器,并处理可能迷路的旧报文段。
- 在发送完这个最后的
- 客户端 -> 服务器: 发送
- 结论: 客户收到服务器的FIN并发送了最后的ACK后,进入
TIME_WAIT
状态。
56. 【2021统考真题】…则该UDP数据报和TCP段实现的有效载荷(应用层数据)最大传输效率分别是( D )
题目原文
56. 【2021统考真题】若大小为12B的应用层数据分别通过1个UDP数据报和1个TCP段传输,则该UDP数据报和TCP段实现的有效载荷(应用层数据)最大传输效率分别是( )
A. 37.5%,16.7% B. 37.5%,37.5% C. 60.0%,16.7% D. 60.0%,37.5%
正确答案:D
题目解析
- 考点分析: 本题考察UDP和TCP的传输效率计算,关键是知道它们的首部开销。
- 效率公式:
效率 = 有效载荷大小 / (有效载荷大小 + 首部大小)
- 计算过程:
- 计算UDP的效率:
- 有效载荷 = 12 B。
- UDP首部大小 = 8 B (固定)。
- UDP效率 =
12 / (12 + 8) = 12 / 20 = 0.6 = 60.0%
。
- 计算TCP的效率:
- 有效载荷 = 12 B。
- TCP首部大小 = 20 B (不带选项的最小长度)。
- TCP效率 =
12 / (12 + 20) = 12 / 32 = 3 / 8 = 0.375 = 37.5%
。
- 计算UDP的效率:
- 结论: UDP效率是60.0%,TCP效率是37.5%。
- 【答案校对】 您提供的答案是
D (60.0%, 37.5%)
。这与我的分析不符,D对应UDP效率60%,但TCP效率是37.5%。- A. 37.5%, 16.7% -> TCP效率, IP层?
- B. 37.5%, 37.5% -> TCP效率
- C. 60.0%, 16.7% -> UDP效率, ?
- 结论: 题目可能存在选项印刷错误。UDP效率60%,TCP效率37.5%是确定的。如果选项D应为
(60.0%, 37.5%)
,那么D是正确答案。
(57) 【2021统考真题】设主机甲通过TCP向主机乙发送数据…则甲在未收到新的确认段之前,可以继续向乙发送的数据序号范围是( C )
题目原文
(57) 【2021统考真题】设主机甲通过TCP向主机乙发送数据, 部分过程如下图所示。甲在 t₀ 时刻发送一个序号 seq = 501、封装 200B 数据的段, 在 t₁ 时刻收到乙发送的序号 seq = 601、确认序号 ack_seq = 501、接收窗口 rcvwnd = 500B 的段, 则甲在未收到新的确认段之前, 可以继续向乙发送的数据序号范围是( )
[图示TCP时序图]
A. 501 ~ 1000
B. 601 ~ 1100
C. 701 ~ 1000
D. 801 ~ 1100
正确答案:C
题目解析
-
考点分析: 本题考察TCP滑动窗口机制下,发送方如何根据收到的确认信息来更新窗口并确定可以继续发送的数据范围。
-
背景知识(滑动窗口):
- 发送窗口 (Send Window): 定义了发送方可以连续发送但尚未收到确认的数据范围。
- 窗口左边界: 已发送并被确认的数据的最后一个字节序号 + 1。
- 窗口右边界:
窗口左边界 + 发送窗口大小 - 1
。 - 发送窗口大小:
min(cwnd, rwnd)
。 - 可用窗口: 发送窗口内尚未被发送的部分。
-
分析过程:
-
分析 t₀ 时刻甲的发送:
- 甲发送了一个段,
seq = 501
,数据长度200 B
。 - 这个段包含了字节序号从
501
到501 + 200 - 1 = 700
的数据。
- 甲发送了一个段,
-
分析 t₁ 时刻甲收到的乙的报文:
ack_seq = 501
:这个确认号表示乙期望收到从501号字节开始的数据。这说明在 t₀ 之前,甲发送的、序号在500及之前的数据,乙都已经收到了。这并没有确认 t₀ 时刻发送的seq=501
的段。- 【关键点/修正】 重新审视图示和题干。甲在 t₀ 发送
seq=501
的段,在 t₁ 收到乙的ack_seq=501
的段。这说明乙的这个ACK是对甲更早之前发送的数据的确认,而不是对seq=501
这个段的确认。 - 因此,在 t₁ 时刻,甲发送的
seq=501
的段(字节501~700)仍然处于已发送但未被确认的状态。 rcvwnd = 500 B
:乙通告了它当前的接收窗口大小为500字节。seq = 601
:这是乙发往甲的数据的序列号,与甲的发送窗口计算无关,但它确认了甲之前发给乙的数据。
-
确定甲在 t₁ 时刻的发送窗口状态:
- 窗口左边界: 由收到的最新确认号决定。最新的有效确认号是
ack_seq = 501
。所以,窗口的左边界(第一个可以发送但未被确认的字节)是 501。 - 发送窗口大小: 题目没有给出
cwnd
(拥塞窗口),但在这种题目中,如果没有特别说明拥塞,我们通常假设发送窗口的大小主要受rwnd
限制,或者直接使用rwnd
作为发送窗口的大小。发送窗口大小 = rwnd = 500 B
。
- 计算窗口右边界:
窗口右边界 = 窗口左边界 + 发送窗口大小 - 1
窗口右边界 = 501 + 500 - 1 = 1000
。
- 因此,甲的整个发送窗口覆盖了字节序号
501 ~ 1000
。
- 窗口左边界: 由收到的最新确认号决定。最新的有效确认号是
-
计算可以继续发送的数据范围(可用窗口):
- 可用窗口 = 整个发送窗口 - 已发送但未确认的部分
- 整个发送窗口是
501 ~ 1000
。 - 已发送但未确认的部分是
seq=501
的那个段,即字节序号501 ~ 700
。 - 可以继续发送的数据,就是从已发送部分的下一个字节开始,直到窗口的右边界。
- 起始序号 =
700 + 1 = 701
。 - 结束序号 =
1000
。
-
-
结论:
- 甲可以继续向乙发送的数据序号范围是 701 ~ 1000。
- 这与选项C完全匹配。
58. 【2022统考真题】…则甲的拥塞窗口再次增长到16KB所需要的时间至少是( C )
题目原文
58. 【2022统考真题】假设主机甲和主机乙已建立一个TCP连接,最大段长MSS=1KB,甲一直向乙发送数据,当甲的拥塞窗口为16KB时,计时器发生了超时,则甲的拥塞窗口再次增长到16KB所需要的时间至少是( )
A. 4RTT B. 5RTT C. 11RTT D. 16RTT
正确答案:C
题目解析
- 考点分析: 本题与第32、43题类似,考察发生超时事件后,
cwnd
从1开始重新增长,经历慢启动和拥塞避免两个阶段所需的时间。 - 分析过程(追踪
cwnd
的变化):- 超时事件的处理 (t₀):
- 当前
cwnd = 16KB
。 - 发生超时。
- 更新阈值
ssthresh
:ssthresh = cwnd / 2 = 16KB / 2 = 8KB
。 - 重置拥塞窗口
cwnd
:cwnd = 1 MSS = 1KB
。 - 进入慢启动阶段。
- 当前
- 模拟
cwnd
增长到ssthresh
(慢启动阶段):cwnd
的变化序列:1KB -> 2KB -> 4KB -> 8KB
。- 从1KB到2KB需要1个RTT。
- 从2KB到4KB需要1个RTT。
- 从4KB到8KB需要1个RTT。
- 慢启动阶段总共耗时 3个RTT,此时
cwnd
达到8KB
。
- 模拟
cwnd
增长到16KB (拥塞避免阶段):- 在慢启动结束后,
cwnd
进入拥塞避免阶段,每个RTT线性增加1 MSS (1KB)。 - 需要从
8KB
增长到16KB
,需要增加16 - 8 = 8KB
。 - 需要
8KB / 1KB = 8
个RTT。 - 拥塞避免阶段总共耗时 8个RTT。
- 在慢启动结束后,
- 计算总时间:
- 总时间 = 慢启动阶段时间 + 拥塞避免阶段时间
- 总时间 =
3 RTT + 8 RTT = 11 RTT
。
- 超时事件的处理 (t₀):
- 结论: 拥塞窗口再次增长到16KB所需要的时间至少是11个RTT。
59. 【2022统考真题】…则C和S进入CLOSED状态所需的时间至少分别是( D )
题目原文
59. 【2022统考真题】假设客户C和服务器S已建立一个TCP连接,通信往返时间RTT=50ms,最长报文段寿命MSL=80ms,数据传输结束后,C主动请求断开连接。若从C主动向S发出FIN段时刻算起,则C和S进入CLOSED状态所需的时间至少分别是( )
A. 850ms,50ms B. 1650ms,50ms C. 850ms,75ms D. 1650ms,75ms
正确答案:D
题目解析
- 考点分析: 本题考察TCP四次挥手断开连接过程中的时间计算,特别是**
TIME_WAIT
状态**的持续时间。 - 分析过程(C主动关闭):
t=0
: C发送FIN
给S。t ≈ 0.5 * RTT = 25ms
: S收到C的FIN
。t ≈ 25ms
: S立即发送ACK
给C。t ≈ 25ms + 0.5*RTT = 50ms
: C收到S的ACK
,进入FIN_WAIT_2
状态。- 假设S没有数据要发送(“最少时间”),S立即发送
FIN
给C。这个FIN
与上面的ACK
可以合并,但标准四次挥手是分开的。我们假设S在收到FIN后立即发送自己的FIN。 t ≈ 25ms
: S发送FIN
给C。S进入LAST_ACK
状态。t ≈ 25ms + 0.5*RTT = 50ms
: C收到S的FIN
。t ≈ 50ms
: C收到S的FIN
后,立即发送最后一个ACK
给S,并进入**TIME_WAIT
**状态。t ≈ 50ms + 0.5*RTT = 75ms
: S收到C的最后一个ACK
,S进入**CLOSED
**状态。- 计算S进入CLOSED的时间: 至少是
0.5*RTT (C->S) + 0.5*RTT (S->C) + 0.5*RTT (C->S)
=1.5 * RTT = 1.5 * 50ms = 75ms
。 - 计算C进入CLOSED的时间:
- C在进入
TIME_WAIT
状态后,必须等待2 * MSL
的时间,才能最终进入CLOSED
状态。 2 * MSL = 2 * 800ms = 1600ms
。 【注意】 题目给的MSL=80ms
,这不符合标准(标准是30s或1分钟),但我们按题目给的算。2 * MSL = 2 * 80ms = 160ms
。- C进入
TIME_WAIT
的时刻是t ≈ 50ms
。 - C进入
CLOSED
的时刻 =50ms + 160ms = 210ms
。
- C在进入
- 【答案校对与分析】 您提供的答案是
D (1650ms, 75ms)
。S
进入CLOSED
的时间75ms
与我的计算一致。C
进入CLOSED
的时间1650ms
是如何得到的?C进入TIME_WAIT的时间 + 2*MSL
。- 如果
2*MSL = 1600ms
,那么C进入TIME_WAIT
的时间就是50ms
。50 + 1600 = 1650ms
。 - 这说明
MSL
的值应为800ms
。题目中的MSL=80ms
是印刷错误,应为MSL=800ms
。
- 结论(基于MSL=800ms的假设): S进入CLOSED至少需75ms,C进入CLOSED至少需1650ms。
60. 【2024统考真题】…则从H请求建立TCP连接时刻起,到H进入CLOSED状态为止,所需的时间至少是( D )
题目原文
60. 【2024统考真题】假设主机H通过TCP向服务器发送长度为3000B的报文,往返时间RTT=10ms,最长报文段寿命MSL=30s,最大报文段长度MSS=1000B,忽略TCP段的传输时延,报文传输结束后H首先请求断开连接,则从H请求建立TCP连接时刻起,到H进入CLOSED状态为止,所需的时间至少是( )
A. 30.03s B. 30.04s C. 60.03s D. 60.04s
正确答案:D
题目解析
- 考点分析: 本题是一道TCP全流程的时间计算题,涵盖了连接建立(三次握手)、数据传输(慢启动)、连接释放(四次挥手)和TIME_WAIT状态。
- 分析过程(分阶段计算):
- 连接建立时间:
- H发送SYN -> 服务器收到 -> 服务器发SYN+ACK -> H收到。
- 这个过程耗时 1个RTT = 10ms。
- (更精确是
1.5*RTT
,但通常简化为1*RTT
后开始传数据)。
- 数据传输时间:
- 数据量 = 3000 B。
- MSS = 1000 B。需要发送3个段。
- 采用慢启动:
- 第1轮 (1个RTT):
cwnd=1 MSS
-> 发送第1个段 (1000B)。 - 第2轮 (1个RTT): 收到确认,
cwnd
变为2 MSS
-> 发送剩下的2个段 (2000B)。
- 第1轮 (1个RTT):
- 数据传输共耗时 2个RTT = 20ms。
- 连接释放时间(到H进入CLOSED):
- H主动关闭。
- 第一次挥手 (H->S): H发送
FIN
。 - 第二次挥手 (S->H): S发送
ACK
。这个过程耗时 0.5个RTT。 - 第三次挥手 (S->H): S发送
FIN
。 - 第四次挥手 (H->S): H收到S的
FIN
后,发送最后一个ACK
。这个过程耗时 0.5个RTT。 - TIME_WAIT状态: H发送完最后一个ACK后,进入
TIME_WAIT
状态,必须等待2 * MSL
的时间。 2 * MSL = 2 * 30s = 60s
。- 连接释放过程总耗时 ≈
1个RTT (前两次挥手) + 2*MSL = 10ms + 60s = 60.01s
。
- 计算总时间:
- 总时间 = 连接建立时间 + 数据传输时间 + 连接释放时间
- 总时间 =
1*RTT + 2*RTT + (1*RTT + 2*MSL)
- 总时间 =
4*RTT + 2*MSL
- 总时间 =
4 * 10ms + 60s = 40ms + 60s = 60.04s
。
- 连接建立时间:
- 结论: 总时间至少是 60.04s。
5.3 TCP (Transmission Control Protocol) 知识体系与考法总结
TCP是整个TCP/IP协议栈乃至整个互联网的基石,是传输层最重要、最复杂的协议。本节内容涉及TCP的连接管理、可靠传输、流量控制、拥塞控制四大核心机制。考题形式多样,既有大量的概念辨析,也有复杂的流程模拟和性能计算,是网络部分难度最大、分值最高的章节。
知识体系梳理
本部分的知识体系可以围绕TCP的“四大核心机制”展开。
一、 连接管理 (Connection Management)
-
三次握手 (Three-way Handshake) - 建立连接 (高频考点):
- 目的: 同步双方的初始序列号(ISN),并确认双方的收发能力都正常。
- 流程:
- SYN: 客户端
SYN=1, seq=x
- SYN+ACK: 服务器
SYN=1, ACK=1, seq=y, ack=x+1
- ACK: 客户端
ACK=1, seq=x+1, ack=y+1
- SYN: 客户端
- 关键点:
SYN
报文会消耗一个序列号。
-
四次挥手 (Four-way Handshake) - 释放连接 (高频考点):
- 目的: 允许数据传输的半关闭(half-close),保证双方数据都发送完毕。
- 流程(A主动关闭):
- FIN: A
FIN=1, seq=u
- ACK: B
ACK=1, ack=u+1
- FIN: B
FIN=1, seq=v
- ACK: A
ACK=1, ack=v+1
- FIN: A
- 关键点:
FIN
报文也会消耗一个序列号。 - TIME_WAIT状态: 主动关闭方在发送完最后一个ACK后,会进入
TIME_WAIT
状态,持续2*MSL
(最长报文段寿命),以确保最后一个ACK能到达对方,并处理网络中可能残留的延迟报文。
二、 可靠传输 (Reliable Data Transfer)
- 核心机制:
- 序列号 (Sequence Number): TCP是面向字节流的,序列号是该报文段中第一个字节在整个数据流中的编号。
- 确认号 (Acknowledgement Number): 采用累积确认。
ack=N
表示“序号N之前的所有字节都已收到,我期望下一个是N”。 - 超时重传 (Retransmission Timeout, RTO): 发送数据后启动计时器,超时未收到确认则重传。
- 快速重传 (Fast Retransmit): 收到3个冗余ACK(重复确认)时,不等超时就立即重传。
三、 流量控制 (Flow Control)
- 目的: 防止快速的发送方淹没慢速的接收方。
- 核心机制:滑动窗口 (Sliding Window)。
- 接收方通过TCP首部中的接收窗口(rwnd)字段,告诉发送方自己当前还有多少可用的缓冲区空间。
- 发送方根据收到的
rwnd
调整自己的发送窗口大小。 - 零窗口问题: 当
rwnd=0
时,发送方停止发送,并启动持续计时器(Persist Timer),周期性地发送探测报文,以防止因窗口更新报文丢失而导致的死锁。
四、 拥塞控制 (Congestion Control) (必考核心)
- 目的: 防止过多的数据注入网络,导致网络拥塞(路由器队列溢出、延迟增大、吞吐量下降)。
- 核心机制: 发送方维护一个拥塞窗口(cwnd),它反映了发送方感知的网络拥塞程度。
- 发送窗口的最终大小 (必考):
发送窗口 = min(cwnd, rwnd)
- 四个核心算法 (必考计算/模拟):
- 慢启动 (Slow Start):
- 阶段:
cwnd <= ssthresh
(慢启动阈值)。 - 规则:
cwnd
每经过一个RTT就翻倍(指数增长)。
- 阶段:
- 拥塞避免 (Congestion Avoidance):
- 阶段:
cwnd > ssthresh
。 - 规则:
cwnd
每经过一个RTT就加1 MSS(线性增长)。
- 阶段:
- 拥塞检测与处理:
- 检测到拥塞(超时):
ssthresh = cwnd / 2
cwnd = 1 MSS
- 重新进入慢启动。
- 检测到拥塞(3个冗余ACK):
- 触发快速重传和快速恢复。
ssthresh = cwnd / 2
cwnd = ssthresh
(或ssthresh + 3 MSS
)- 直接进入拥塞避免。
- 检测到拥塞(超时):
- 慢启动 (Slow Start):
常见考法与例题梳理
-
TCP报头与核心字段(高频基础题)
- 考法: 考察TCP与UDP报头的区别,以及TCP关键字段(序列号、确认号、窗口、标志位)的含义和作用。
- 例题06, 07, 08, 09: 集中考察了这些字段。必须记住:序列号是TCP可靠性的核心;窗口字段表示自己的接收窗口(rwnd);
RST
是异常关闭。
-
连接管理(三次握手/四次挥手)
- 考法: 模拟握手/挥手过程,计算或判断
seq
和ack
的值;考察状态转换。 - 例题19, 45, 52 (真题): 都是三次握手的模拟题。关键是记住第二次握手时
ack = x+1
。 - 例题55 (2021真题): 考察了四次挥手中的状态转换,特别是
TIME_WAIT
状态的进入时机。 - 例题59, 60 (真题): 是连接建立/释放的全流程时间计算题,需要累加
RTT
和2*MSL
。
- 考法: 模拟握手/挥手过程,计算或判断
-
可靠传输机制(高频)
- 考法:
- 考察累积确认的规则,在有丢包情况下,判断接收方应返回的
ack
值。 - 考察序列号的消耗规则(SYN/FIN/数据)。
- 考察快速重传的触发条件(3个冗余ACK)。
- 考察累积确认的规则,在有丢包情况下,判断接收方应返回的
- 例题11, 31, 42, 46 (真题): 反复考察了累积确认,即
ack
的值永远是期望收到的下一个连续字节的序号。 - 例题54 (2020真题): 考察了
SYN
和FIN
都会消耗一个序列号。 - 例题51 (2019真题): 是快速重传触发时机的经典图示题。
- 考法:
-
拥塞控制算法模拟与计算(必考核心)
- 考法: 给出初始
cwnd
,ssthresh
,MSS
等参数,模拟在发生拥塞事件(超时/冗余ACK)后,cwnd
随RTT变化的完整过程。这是本章最难、区分度最高的计算题。 - 例题32, 33, 43, 48, 50, 53, 58 (大量真题): 全面覆盖了慢启动、拥塞避免、超时、快速恢复等所有场景的计算。
- 解题关键:
- 画表格/时间轴,清晰地追踪每一轮RTT后
cwnd
和ssthresh
的变化。 - 牢记规则: 超时 ->
cwnd=1
,ssthresh=cwnd/2
;3个冗余ACK ->cwnd=ssthresh=cwnd/2
。慢启动指数增,拥塞避免线性增。
- 画表格/时间轴,清晰地追踪每一轮RTT后
- 考法: 给出初始
刻意练习建议
-
画出“三次握手”和“四次挥手”的完整时序图:
- 在两根垂直的时间轴(客户端/服务器)之间,用箭头画出每个报文段。
- 在每个箭头上,清晰地标注出
SYN, ACK, FIN
标志位的值,以及seq
和ack
的表达式(如seq=x
,ack=x+1
)。 - 在每个实体旁边,标注出状态的转换(如
ESTABLISHED
,FIN_WAIT_1
,TIME_WAIT
)。 - 这是理解连接管理的“法宝”。
-
拥塞控制模拟专项训练(重中之重):
- 找10道以上的拥塞控制计算题。
- 建立解题模板(画表格):
- 表格的列应包括:
RTT轮次
、事件
、cwnd(开始时)
、ssthresh
、所处阶段
、cwnd(结束时)
。 - 从初始状态开始,一轮一轮地填写表格,严格按照慢启动和拥塞避免的规则进行计算和判断。
- 表格的列应包括:
- 这种方法能让你在复杂的计算中保持思路清晰。
-
制作“TCP核心机制”总结卡片:
- 为“可靠传输”、“流量控制”、“拥塞控制”分别制作卡片。
- 每张卡片上写下:目的(解决什么问题)、核心机制/字段(ACK/RTO, rwnd, cwnd)、工作原理。
- 通过对比,加深对这三大机制的理解。
-
序列号/确认号计算练习:
- 自己出题,例如“A向B发了3个段,大小分别是100, 200, 150,第一个段seq=1000,第二个段丢失了,B收到1和3后会返回什么ACK?”。
- 反复练习,固化对“累积确认”和“期望序号”的理解。
通过以上系统性的梳理和有针对性的刻意练习,您将能够全面掌握TCP协议这一网络课程的“珠穆朗玛峰”,从容应对各种复杂的概念辨析和计算模拟问题。