跳到主要内容

TCP 与 UDP 区别和场景

· 阅读需 5 分钟
素明诚
Full stack development

TCP(Transmission Control Protocol,传输控制协议)

特点

  • 可靠性:TCP 提供可靠的数据传输服务,通过序列号、确认应答、重传机制等确保数据完整性和正确性。
  • 有序性:TCP 保证数据包的顺序,数据将按照发送顺序到达接收端。
  • 流控制:TCP 使用窗口机制进行流控制,根据接收方的接收能力调整发送速率,避免发送方过快发送数据使接收方来不及处理。
  • 拥塞控制:TCP 具有拥塞控制机制,能够根据网络条件调整数据发送速率,减少网络拥塞。

适用场景

  • Web 页面加载:确保网页数据完整无误地传输。
  • 文件传输:如 FTP(文件传输协议)需要可靠地传输大文件。
  • 电子邮件传输:如 SMTP(简单邮件传输协议)要求邮件数据准确无误地送达。
  • 远程服务器访问:如 SSH(安全外壳协议)和 Telnet 依赖于 TCP 的可靠连接。

TCP 滑动窗口

TCP 滑动窗口是一种流量控制机制,用于控制发送方在等待接收方确认之前可以发送的数据量。这个窗口的大小决定了可以发送的未被确认的数据包的数量或大小,这有助于防止接收方被过量的数据淹没。

  • 窗口大小:接收方根据其当前的处理能力和缓冲区的大小来告诉发送方窗口的大小,即发送方在接收方发回确认之前可以发送的数据的最大量。
  • 动态调整:窗口大小会根据网络条件动态调整。如果网络状况良好,窗口会增大,允许发送更多的数据;如果网络状况不佳,窗口会减小,限制数据流量,避免数据丢失。

拥塞控制

拥塞控制是一种网络控制机制,用来防止过多的数据包在网络中同时传输,从而导致网络拥堵。TCP 通过几种算法来实施拥塞控制,这些算法包括慢启动、拥塞避免、快重传和快恢复。

  • 慢启动(Slow Start):连接开始时,拥塞窗口(cwnd)从一个很小的值开始,例如 1 个数据包,随着每次传输轮次的成功完成,窗口大小指数级增长,直到达到一个阈值(ssthresh)。
  • 拥塞避免(Congestion Avoidance):一旦窗口大小达到或超过阈值,增长策略会转变为线性增长,即每个传输轮次只增加一个数据包的大小,以减少引起拥塞的风险。
  • 快重传和快恢复(Fast Retransmit and Fast Recovery):当发送方收到三个重复确认(表示一个数据包可能已丢失),它会立即重传丢失的数据包,而不是等待重传计时器超时。此时,拥塞窗口和阈值会调整以快速恢复传输。

UDP(User Datagram Protocol,用户数据报协议)

特点

  • 无连接:UDP 是无连接的,发送数据之前不需要建立连接,减少了开销和延迟。
  • 高效:UDP 头部开销小,仅有 8 字节,相较于 TCP 的 20 字节更为高效。
  • 不保证可靠性:UDP 不保证数据包的顺序、完整性或者可靠性,不进行错误校正。
  • 无拥塞控制:UDP 不进行拥塞控制,即使网络条件不佳,仍然会以相同的速率发送数据。

适用场景

  • 实时应用:如语音通信、在线游戏和实时视频会议、直播,这些应用需要快速传输,可以容忍一定程度的数据丢失。
  • 广播和多播应用:UDP 支持发送单个数据包到多个接收者(广播)或者选定的多个接收组(多播)。
  • DNS 查询:域名系统(DNS)查询使用 UDP 进行快速查找,通常不需要可靠传输。

FAQ:BT 和 P2P 用的是什么协议?

BT 下载(BitTorrent)和 P2P(Peer-to-Peer)下载通常使用 TCP 协议,这与它们对数据完整性的高要求有关。这些下载方式涉及将大文件分割成多个小片段,并从不同的对等方(peers)下载这些片段,最终在本地组合成完整的文件。以下是对这些协议选择的详细说明

  • TCP 的可靠性:由于 BT 和 P2P 下载的文件往往较大,且来自多个不同的数据源,确保每一个数据片段的完整性和正确顺序对于最终文件的完整性至关重要。TCP 协议通过其内置的错误检查和纠正机制(如数据重传、数据包排序等),保证了数据的可靠传输。
  • 数据完整性:在 BT 或 P2P 下载中,每个文件片段的完整和准确至关重要,因为最终的文件需要所有片段完整无误才能正确组装和使用。TCP 保证每个数据包都将按顺序并完整地到达,如果发生丢包,TCP 将会重新发送丢失的数据包。
  • 拥塞控制:TCP 还具备拥塞控制机制,可以根据网络条件调整数据传输速率,这在多对等方环境中尤其重要,因为网络状况可能因参与者的不同而大相径庭。这有助于优化整体网络性能并避免网络拥塞。

虽然 TCP 是 BT 和 P2P 协议中常用的传输协议,但这并不排除在某些特定场景下使用 UDP。例如,一些 P2P 实时视频流或实时数据广播可能会选择 UDP,以减少延迟。但对于文件下载这类对数据完整性要求极高的应用,TCP 是更常见的选择