传输层(Transport Layer),负责端到端(end-to-end)的通信。

UDP

header-UDP

User Datagram Protocol

是不可靠的传输协议。

虽然不可靠,但是没有建立连接的延迟,header 只有 8 bytes,所以在多媒体流式传输等场景中会被使用。

TCP

header-TCP

Transmission Control Protocol

可靠的传输协议,面向连接。具有 flow control 和 congestion control。

为保证可靠性,TCP 使用了 checksum 和 sequence number 等手段。

Three-Way Handshake

建立连接需要进行“三次握手”:

  1. A 向 B 发送一个 SYN

  2. B 返回一个 SYN ACK 来告知收到 SYN

  3. A 向 B 发送 ACK 来告知收到 SYN ACK

在这个过程中双方获知对方的 ISN(initial sequence number)。

关闭连接使用 FIN 或 RST。使用 FIN 会接收剩余的字节,使用 RST 则不会。

Retransmission

关于 ARQ 和 Sliding Window,参见 计算机网络:Flow Control 和 Reliable Transmission

Congestion Control

Fast-retransmission

Timeout-based retransmission 不太有效率。使用 fast-retransmission,会在收到三次 duplicate ACK 之后进行重传。

Slow Start

慢启动在初始时设置窗口大小为 1,在每接收到一个 ACK 时将窗口大小增加 1。理论上来说窗口大小是指数增长的,会快速到达阈值。

AIMD

在 timeout 之后,把 CW 重设为 1 重新开始慢启动,并且 ssthresh(slow start threhold)会被设为当 congestion 发生时的 CW 的一半。当 packet loss 发生时 CW 减小为 1/2,即乘性降低(Multiplicative Decrease)。慢启动到达 ssthresh 之后,CW 将不再指数增长,而是和性增长(Additive Increase)。