传输层是 Linux 网络中的一个基本组成部分,负责不同主机上应用程序之间的端到端通信和可靠数据传输。它以结构化和可管理的方式准备数据以在网络上传输。
数据分段
传输层的主要功能之一是数据分段。它将大量数据分解成更小、更易于管理的数据块,称为段(segments)。这个过程使数据传输更高效、更具弹性。如果在传输过程中丢失或损坏了一个段,只需要重新发送该小块数据,而不是整个数据集。一旦段到达目的地,传输层会按正确的顺序将它们重新组装起来。
理解网络端口
IP 地址用于识别网络上的正确主机,但它们没有指定应该接收数据的应用程序或服务。这就是网络端口发挥作用的地方。像 HTTP(网页流量)或 SMTP(电子邮件)这样的服务会在特定的、众所周知的端口上监听。例如,HTTP 通常使用端口 80。传输层将源端口和目标端口号附加到每个段上,确保数据被传递到接收主机上的正确进程。
核心传输协议 TCP 和 UDP
现代网络中使用两种主要的传输协议:TCP(传输控制协议)和 UDP(用户数据报协议)。我们将简要介绍 UDP,然后重点关注 TCP,因为它是最常用于可靠通信的协议。
UDP(用户数据报协议)
UDP 是一种无连接的协议,提供了一种快速但不一定可靠的数据传输方式。它不保证所有段都能到达,也不保证它们按正确的顺序到达。虽然这看起来像是一个缺点,但对于速度比完美准确性更重要的应用程序(如实时视频流或在线游戏),UDP 非常有效。丢失几帧视频通常是为了获得更流畅、更快的流而可以接受的权衡。
TCP(传输控制协议)
TCP 提供可靠的、面向连接的数据流。在交换任何数据之前,TCP 会在两个主机之间建立一个正式的连接,以确保双方都已准备好通信。
TCP 握手
为了建立连接,TCP 使用一个称为三次握手(three-way handshake)的过程:
- SYN:客户端向服务器发送一个 SYN(同步)段以发起连接。
- SYN-ACK:服务器用一个 SYN-ACK(同步 - 确认)段进行响应,以确认客户端的请求。
- ACK:客户端向服务器发送一个 ACK(确认)段,确认连接已建立。
握手完成后,数据就可以可靠地交换了。TCP 使用序列号来跟踪每个段,允许接收主机按正确的顺序重新组装它们,并请求重新传输任何丢失的段。在我们的电子邮件示例中,传输层会将 SMTP 的目标端口(端口 25)和客户端主机的一个源端口附加到每个段上。