Unit2: The Transport Layer

TCP、UDP 等模型
Published

2024-03-09

Modified

2024-10-23

1 TCP 服务模型

TCP 提供两个应用进程之间顺序、可靠的字节流传输。

1.1 建立连接:三次握手(3-way handshake)

见上一节。在主机 A 和 B 建立联系时,A 会生成一个 ISN(Initial Sequence Number)随 SYN 一同传递给 B,同理,B 也会随 SYN+ACK 一同传输自己的 ISN。ISN 可以一定程度上保证 TCP 在全因特网范围内 ID 的唯一性。

1.2 传输数据

建立完连接后,A 将字节流中的数据放入 TCP 段(TCP Segment)中,交给 IP 层进一步封装,之后交给 B。B 提取 TCP 段并重建字节流,传递给应用层。

1.3 连接拆除(Connection Teardown)

A 向 B 传输 FIN 消息,表示结束(finish)。B 返回 ACK 消息并不再从 A 读取数据,但是 B 仍可以向 A 传输数据。当 B 结束传输数据时,向 A 发送 FIN 消息,A 回复 ACK 消息。此时,连接完全关闭。

1.4 TCP 的特点

  1. 字节流:可靠的字节传输服务。
  2. 可靠传输:
    1. ACK 信息来确认数据传输正确。
    2. 校验和(Checksums)检测损坏数据。
    3. 序列号检测丢失数据。
    4. 流量控制(flow-control)来防止接收方过载。
  3. 按顺序:从 A 发送的数据以相同的顺序倍被 B 的应用层接收。如果 B 接收的 TCP 段是无序的,TCP 层会重新排出正确的顺序。
  4. 拥塞控制(congestion control):TCP 试图将网络上的所有 TCP 连接的负载均衡。后面会细讲。

1.5 TCP 段格式

可以参考这篇文章:TCP 报文段格式

1.6 一个 TCP 连接的唯一 ID

ID 的唯一性由五个属性保证:TCP 段的源端口和目的端口、IP 段的源地址(IPSA)和目的地址(IPDA),以及协议 ID(即 Protocol ID = “TCP”)。主机 A 对每个新连接会增加源端口的编号,同时生成 ISN 来尽量保证唯一性。

2 UDP 服务模型

UDP 提供更简单的传输服务。

2.1 UDP 的特点

  1. 无连接:不保证连接建立。
  2. 数据报:包会以任何顺序传输。
  3. Self-contained datagrams
  4. 不可靠传输:
    1. 没有确认消息。
    2. 没有检测丢失或顺序错乱的机制。
    3. 没有流量控制。

2.2 UDP 段格式

设计 UDP 的意图是为了更快的传输速率,或者应用层自己对数据传输的可靠性做规定,方便扩展。

3 ICMP(Internet Control Message Protocol)服务模型

ICMP 给终端主机和路由器提供网络层的信息,比如错误和诊断信息。ICMP 也属于传输层。pingtraceroute 指令就是使用 ICMP 的例子。

IP 数据报在终端主机间逐跳(hop-by-hop)传递,每个路由器都会生成 forwarding table 来指示数据报的下一个目的地。当出现错误时,比如 forwarding table 上没有对应的 IP 地址,路由器会生成一个 ICMP 包传回主机,表明 “Destination Network Unreachable”。同样,ICMP 也有对应的格式,这里略过。

3.1 ICMP 的特点

  1. 报告消息:self-contained 的报告错误的消息。
  2. 不可靠。不会重新发送。

4 End-to-End Principle

端到端原则:

The function in question can completely and correctly be implemented only with the knowledge and help of the application standing at the end points of the communication system. Therefore, providing that questioned function as a feature of the communication system itself is not possible. (Sometimes an incomplete version of the function provided by the communication system may be useful as a performance enhancement.) We call this line of reasoning … “the end-to-end argument.1

问题中涉及的功能只有在通信系统末端的应用程序的知识和帮助下才能完全且正确地实现。因此,将该功能作为通信系统本身的特性提供是不可能的。(有时,由通信系统提供的该功能的不完整版本可能对性能有所提升。)我们称这种推理为……“端到端论证”。

1 Saltzer, Reed, and Clark, End-to-end Arguments in System Design, 1984

强端到端:

The network’s job is to transmit datagrams as efficiently and flexibly as possible. Everything else should be done at the fringes …2

2 [RFC 1958]

5 错误检测:Checksum,CRC 和 MAC

  • Checksum 把包中每个 16 位的数据加在一起(IP,TCP)

    • 软件计算快速、低开销

    • 不是很健壮

  • 循环冗余校验(CRC,Cyclic Redundancy Check)计算模一个多项式的余数(以太网)

    • 比 Checksum 开销更大,但是在今天的硬件上非常容易实现

    • 保证检测出任意 2 位错误、任意 \(\le c\) 位的突发错误、任意奇数位错误。

  • 消息认证码(MAC,Message Authentication Code)安全传输数据(传输层安全协议(TLS,Transport Layer Security))

    • 检测恶意修改。

    • 任意两条消息有 \(2^{-n}\) 的概率有相同的 MAC。

6 流量控制

6.1 Stop and Wait

如果接收方的吞吐量小于传送方,则需要流量控制。最简单的方式就是 Stop and Wait,即发送方每次只传送一个包,直到收到了 ACK 消息再发送下一个;否则在等待一段时间后认定超时,重新发送这个包。这种方法可能存在问题,这里略过。

6.2 滑动窗口

Stop and Wait 方式效率太低。滑动窗口允许多个包同时在网络上传输,这些包组成了一个“窗口”,当接收到 ACK 消息时,移动这个窗口。具体可以参考《滑动窗口,TCP的流量控制机制》。

根据收发窗口的大小,会发生 go-back-N 或 selective repeat 两种情况。