传输层(Transport Layer)
传输层负责在网络中的通信节点之间提供端到端的数据传输服务,包括了数据的可靠传输、流量控制和拥塞控制等功能。
TCP
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。它是 TCP/IP 协议族中最重要的协议之一,用于在网络上可靠地传输数据。
以下是 TCP 协议的主要特点和工作原理:
面向连接:
- TCP 是一种面向连接的协议,通信双方在通信之前需要先建立连接,然后在连接上进行数据传输,传输完成后再释放连接。
可靠性:
- TCP 提供可靠的数据传输服务,通过序号、确认和重传机制来确保数据的可靠性。
- 发送方将每个发送的数据包标记上序号,并等待接收方发送确认响应。如果发送方未收到确认响应,将会重新发送数据包。
流量控制:
- TCP 使用流量控制机制来避免发送方发送过多数据导致接收方无法处理的情况。
- 接收方可以通过 TCP 报文中的窗口大小来告知发送方自己的接收能力,发送方根据接收方的窗口大小调整发送速率。
拥塞控制:
- TCP 使用拥塞控制机制来避免网络拥塞,保证网络的稳定性和公平性。
- TCP 发送方通过监测网络拥塞情况,动态调整自己的发送速率,以避免造成网络拥塞。
字节流传输:
- TCP 使用字节流传输模式,将数据视为连续的字节流而不是消息或数据包的集合。
- TCP 在发送端将数据划分为合适大小的数据块,然后在接收端重新组装成完整的数据流。
三次握手和四次挥手:
- TCP 在建立和释放连接时采用三次握手和四次挥手的握手协议。
- 三次握手用于建立连接,四次挥手用于释放连接。
TCP 三次握手
TCP 三次握手(Three-way Handshake)是建立可靠 TCP 连接的过程,其主要目的是交换初始序列号(ISN)并确认双方的接收能力。具体过程如下:
第一次握手
- 客户端:发送一个 SYN 包(同步报文段),其中包含客户端的初始序列号(ISN)。
- 作用:表明客户端希望建立连接。
第二次握手
- 服务器:收到客户端的 SYN 包后,回复一个 SYN+ACK 包。
- ACK 部分:确认客户端的 SYN(即对方的 ISN+1);
- SYN 部分:同时发送服务器的初始序列号。
第三次握手
- 客户端:收到服务器的 SYN+ACK 包后,回复一个 ACK 包,确认服务器的初始序列号(服务器的 ISN+1)。
此时,双方都确认对方已经准备好通信,TCP 连接建立成功。
TCP 的流量控制和拥塞控制
流量控制(Flow Control):
- 目的: 防止发送方的数据发送速度超过接收方的处理能力,避免接收方因数据积压而崩溃。
- 实现方式: 利用滑动窗口机制。
- 原理: 接收方在每个 ACK 报文中告知可接受的数据量(窗口大小),发送方根据窗口大小调整数据发送量,从而确保数据传输不会超出接收端的处理能力。
拥塞控制(Congestion Control):
- 目的: 防止过多数据涌入网络,导致网络中出现拥塞(数据包丢失、延时增加)。
- 实现方式: 采用一系列算法来动态调整发送窗口大小,如:
- 慢启动(Slow Start): 连接初始阶段以指数级增长窗口,但一旦发现丢包,切换到线性增长。
- 拥塞避免(Congestion Avoidance): 在网络状况较好时逐步增加窗口,遇到拥塞迹象则降低发送速率。
- 快速重传与快速恢复(Fast Retransmit & Fast Recovery): 当检测到丢包时,立即重传丢失数据,并适当调整窗口,避免网络长时间停顿。
UDP
UDP(用户数据报协议)是一种无连接的、不可靠的传输层协议,用于在网络上以简单、高效的方式传输数据。UDP 与 TCP(传输控制协议)相比,更加轻量级,适用于一些对实时性要求较高且容忍少量数据丢失的应用场景,如语音通话、视频直播等。
以下是 UDP 协议的一些特点和工作原理:
无连接:
- UDP 是一种无连接的协议,通信的双方在发送和接收数据之前不需要建立连接。这意味着 UDP 不维护连接状态,也不保证数据的可靠性和顺序性。
不可靠性:
- UDP 不提供数据可靠性保证,数据传输过程中可能会丢失、重复或者乱序。因为 UDP 不涉及确认、重传等复杂的机制,所以它更加轻量级,传输效率更高。
简单性:
- UDP 协议设计简单,头部开销小,适合用于传输对实时性要求较高的数据,如实时视频、音频等。
适用场景:
- UDP 适用于一些对实时性要求高、丢失少量数据可以接受的应用场景,如在线游戏、语音通话、视频直播等。在这些场景下,UDP 可以提供更低的延迟和更快的传输速度。
无拥塞控制:
- UDP 没有拥塞控制机制,因此在网络拥塞时可能会出现丢包现象。对于 UDP 来说,网络的拥塞控制是由应用程序自行处理的。
尽管 UDP 具有以上特点,但在某些应用场景下,UDP 的特性是有价值的。例如,在需要快速传输数据且对数据的实时性要求较高的场景下,UDP 可以提供更好的性能。但需要注意的是,由于 UDP 不保证数据的可靠性,因此在使用 UDP 时,应用程序需要自行处理数据的丢失和重传等问题。
TCP 和 UDP 的区别
TCP(传输控制协议)和 UDP(用户数据报协议)是两种互联网协议,它们在数据传输时有几个重要的区别:
连接性:
- TCP:提供面向连接的通信,通信双方在传输数据前需要建立连接,通过三次握手协议建立连接,然后进行数据传输,传输完成后释放连接。
- UDP:是面向无连接的通信,通信双方在传输数据前不需要建立连接,直接将数据发送到目标地址,接收方收到数据后立即进行处理。
可靠性:
- TCP:提供可靠的数据传输,通过序列号、确认和重传机制来确保数据的可靠性,保证数据按顺序到达且不丢失。
- UDP:不保证数据的可靠性,发送的数据可能丢失、重复或者乱序到达,因为 UDP 没有重传机制、确认机制和流量控制。
数据传输方式:
- TCP:提供字节流服务,将数据分割成 TCP 报文段进行传输,保证数据的完整性和顺序性,在接收端重新组装成完整的数据。
- UDP:将数据封装成 UDP 数据包进行传输,每个数据包独立处理,没有数据分割和重组,可以实现低延迟的数据传输。
流量控制和拥塞控制:
- TCP:提供流量控制和拥塞控制机制,通过滑动窗口和拥塞避免算法来调整发送和接收数据的速率,防止网络拥塞。
- UDP:不提供流量控制和拥塞控制,发送端的数据发送速率可能超过接收端的处理能力,容易导致网络拥塞和数据丢失。
适用场景:
- TCP:适用于要求数据传输可靠性和有序性的应用,如文件传输、电子邮件、网页浏览等。
- UDP:适用于对数据传输实时性要求较高,可以容忍一定的数据丢失的应用,如实时音视频传输、在线游戏、DNS 查询等。
滑动窗口机制
- 滑动窗口机制:是一种用于控制数据传输量的流量控制技术。
工作原理:
- 发送端: 在等待确认(ACK)的同时,可以连续发送多个数据包,但总量不能超过一个预定的窗口大小。
- 接收端: 告知发送端其接收缓冲区剩余的空间(窗口大小),以便发送端调整发送速度。
- 窗口“滑动”: 当接收端确认收到数据后,窗口会向前移动,允许发送更多数据。
在 TCP 中的作用:
- 保证高效的数据传输:允许连续发送数据,提高网络利用率。
- 防止接收方因处理不过来而丢失数据:通过动态调整窗口大小,使得发送速率与接收能力匹配,从而实现稳定可靠的通信。