Introduction

TCP Flow Control

TCP Congestion Control

Performance of TCP over ATM

TCP Flow Control

Uses a form of sliding window

Differs from mechanism used in LLC, HDLC, X.25, and others:

Decouples acknowledgement of received data units from granting permission to send more

TCP’s flow control is known as a credit allocation scheme:

Each transmitted octet is considered to have a sequence number

TCP Flow Control 的详细解读

TCP 流量控制机制是其核心功能之一,旨在在通信双方之间动态调整数据传输速度,防止接收方因处理能力不足而丢失数据。以下是对描述中各要点的详细解读:

一、TCP 流量控制的基础概念

1. 滑动窗口机制

TCP 流量控制基于滑动窗口机制,发送方和接收方通过协调,动态调整允许发送的数据量。

• 滑动窗口允许发送0方在未收到确认(ACK)的情况下连续发送一定数量的数据,从而提高传输效率。

• 但 TCP 的滑动窗口机制与其他协议(如 LLC、HDLC、X.25)存在一些关键区别。

二、TCP 的流量控制与其他协议的区别

1. Acknowledgement 和 Permission 的解耦

区别之一

传统协议(如 LLC、HDLC、X.25)

• 窗口和确认机制是绑定的:确认接收了数据(ACK)时,同时授予发送更多数据的权限。

TCP

解耦机制:数据接收的确认(ACK)和发送更多数据的权限是分开的。

实现方式

• 接收方通过 TCP 头中的 Window Size 字段告诉发送方,它愿意接收的剩余数据量(即允许的窗口大小)。

• 发送方据此调整自己的窗口大小,而 ACK 仅表明已正确接收了哪些数据。

2. Credit Allocation Scheme(信用分配机制)

• TCP 的流量控制被称为 “信用分配机制”,其中:

每个字节(octet)都有一个序列号,用来唯一标识数据流中的位置。

• 接收方通过 Window Size 告诉发送方其 “信用额度”,即接收方当前能接收的最大字节数。

• 发送方根据接收方提供的信用额度决定是否发送新的数据。

三、TCP 流量控制的工作原理

1. 关键字段

TCP 头部中与流量控制相关的字段:

序列号(Sequence Number)

• 标识每个字节在数据流中的位置。

• 例如,如果序列号为 1000,表明当前帧携带的是从第 1000 个字节开始的数据。

确认号(Acknowledgment Number)

• 接收方告知发送方它期望的下一个字节序列号。

• 例如,如果确认号为 1500,表明接收方已经成功接收到 0 到 1499 的字节。

窗口大小(Window Size)

• 接收方通知发送方它还能接收的剩余数据量(以字节为单位)。

• 例如,窗口大小为 3000 表示接收方目前可以接受 3000 个字节的数据。

2. 工作步骤

TCP 流量控制的核心流程如下:

(1) 初始窗口的协商

• 在连接建立的过程中(通过三次握手),双方交换初始窗口大小(Window Size)。

• 发送方以接收方的窗口大小为依据,限制未被确认的最大字节数。

(2) 数据传输阶段

发送数据

• 发送方连续发送数据帧(字节流),每个字节都有一个序列号。

• 发送数据的总量不能超过接收方当前提供的窗口大小。

接收确认(ACK)

• 接收方接收数据后,向发送方发送确认号(ACK),表明已正确接收到哪些数据。

• 同时,接收方更新窗口大小(Window Size),告诉发送方新的接收能力。

(3) 动态窗口调整

窗口缩小

• 如果接收方的缓冲区接近满负载(如应用层处理速度跟不上),它可以将窗口大小减少为更小的值,甚至为 0(暂停发送)。

窗口增大

• 如果接收方缓冲区变得空闲,它可以增大窗口大小,允许发送方发送更多的数据。

3. 窗口滑动的动态性

滑动窗口的更新

• 发送方根据接收方提供的窗口大小和已确认的数据动态调整其发送范围。

• 窗口滑动的原理:

• 当接收方发来 ACK 后,窗口的起始点右移(因为确认的字节已经被接收)。

• 接收方通过 Window Size 决定窗口的终止点是否右移(即接收能力是否增加)。

四、TCP 流量控制的优点

1. 高效性

独立的确认机制:ACK 和窗口更新分离,发送方可以更灵活地控制数据流,而不是被严格绑定。

连续性:通过滑动窗口机制,TCP 可以保持链路的高利用率。

2. 动态适应性

• TCP 的窗口大小根据接收方的缓冲区状态动态调整:

• 当接收方负载较低时,窗口增大,提高传输速度。

• 当接收方负载较高时,窗口缩小,防止数据溢出。

3. 精细的控制粒度

• TCP 使用字节序列号而非帧序列号,使得流量控制更加精细,适合字节流传输。

五、与其他协议的对比

特性 TCP LLC/HDLC/X.25
确认机制(ACK) ACK 与窗口大小更新解耦 ACK 同时用于确认和窗口更新
窗口粒度 基于字节序列号,精细控制 基于帧序列号,控制粒度较粗
动态调整 接收方动态更新窗口大小 较少动态调整
灵活性 更灵活,适用于多种网络环境 机制简单,但灵活性不足

六、TCP 流量控制中的问题和优化

1. 窗口调整问题

窗口冻结问题

• 当接收方将窗口大小设置为 0 时,发送方需要暂停发送,但仍需定期发送 “窗口探测” 包,询问接收方是否可以恢复接收。

2. 优化措施

窗口扩大选项(Window Scaling Option)

• 默认的 TCP 窗口大小最大为 65,535 字节(16 位)。

TCP Header Fields for Flow Control

Sequence number (SN) of first octet in data segment

Acknowledgement number (AN)

Window (W)

Acknowledgement contains AN = i, W = j:

Octets through SN = i - 1 acknowledged

Permission is granted to send W = j more octets, i.e., octets i through i + j - 1

TCP Header Fields for Flow Control 的详细解读