什么是 TCP?

TCPTransmission Control Protocol 的首字母缩写词,它是一种传输层协议,允许数据包从一个位置发送到另一个位置。

TCP 是面向连接的协议,也就是说它在网络计算机单元之间的任何通信之前建立连接。由于我们把这个协议与 IP 协议结合使用,我们称其为 TCP/IP

TCP 是怎么工作的?

TCP 的主要任务是从应用层收集数据。它将数据拆分成多个数据包,为每个数据包分配一个编号,然后将这些数据包发送到它们的目的地。

同样,在将数据包发送到应用层之前,它会重新组合数据包。鉴于 TCP 是面向连接的协议,这个连接将一直保持,直到发送方和接收方完成数据交换。

它是一种可靠的协议。因为,接收方总是会给发送方提供一条关于数据包的确认消息,要么肯定要么否定,因此,发送方总是能知道数据包是否到达它的目的地,还是说需要被重新发送。

它保证了数据能到达其目的地,而且到达的顺序与发送时相同。它有一套内置的错误检查和恢复体系,负责提供端到端通信。TCP 还提供对流量控制和服务质量的访问。

TCP 支持全双工服务器,既可以当接收者,也可以当发送者。它以点对点的客户端/服务器方式运行。

什么是 UDP?

UDPUser Datagram Protocol 的首字母缩写词。用户数据报协议(UDP)是 TCP/IP 协议套件的最基本的传输层通信协议。它使用最低限度的通信机制。

UDP 是怎么工作的?

尽管 UDP 被认为是一种不可靠的传输协议,但它通过使用 IP 服务来完成其工作,提供了一种尽力而为的传递方法。

在 UDP 中,接收方不生成数据包的确认,发送方也不等待数据包的确认。正是这个不足,使得该协议虽不可靠但是易于处理。

如果确认是否接收到数据这点并不那么重要,这种情况下,我们使用 UDP。它很适用于单向数据流的场景,最适合基于查询的通信。

UDP 不保证数据包的有序传递。它是无状态的,不提供任何拥塞控制机制。

TCP 与 UDP
TCP 与 UDP

TCP 与 UDP 的区别

UDP 是一种无连接协议,而 TCP 是一种面向连接的协议。TCP 比 UDP 要慢,这是两种协议的主要区别之一。

总的来说,UDP 是一种更快、更简单、更高效的协议。但是只有 TCP 允许对丢失的数据包进行重新传输。

TCP 和 UDP 的另一个区别是 TCP 可以确保数据从用户到服务器的有序传输(反之亦然)。UDP 不是为端到端通信而设计的,并不会检查接收方的准备情况,因此它需要相对更少的开销并占用更少的空间。

TCP 与 UDP 的总结

连接

TCP 要求在发送方和接收方开始通信之前建立一个良好的连接,它是一个面向连接的协议。

UDP 是一种无连接协议。

保持数据传输的顺序

在 TCP 中,由于事先建立了一个良好的连接,接收方以有序的方式接收数据包。

而在 UDP 中,发送方与接收方之间并没有建立良好的连接,接收方将以无序的方式接收数据包。

可靠性

每当通过 TCP 接收到数据包时,接收方都会向发送方发送一条确认。万一失败,它会请求重新传输。

而使用 UDP,在这种情况下不会发送确认,它依赖于高层协议来确保可靠性。

错误检查

TCP 中有广泛的错误检查规则,而 UDP 中只有基本的错误检查技术,例如校验和。

传输方法

在 TCP 中,数据以字节流的形式读取,消息被发送到段边界。

而在 UDP 中,已定义限制的单个 UDP 数据包被发送,在到达接收方时验证其完整性。

广播

TCP 不支持广播。当你使用它时,发送方和接收方必须先建立一条连接,在传输结束后又必须终止这条连接。

UDP 支持广播。

TCP 与 UDP 的用例

TCP 被用于 HTTPS(安全超文本传输协议)、HTTP(超文本传输协议)、SMTP(简单邮件传输协议)、FTP(文件传输协议)等等。

UDP 用于视频流、视频电话、IP 语音服务(互联网呼叫)、DNS(域名系统)等。

TCP 对比 UDP - 哪个更快?

Screenshot-2021-05-31-at-10.55.58-AM

通常来说,UDP 比 TCP 更快,原因如下:

TCP 与 UDP 报头大小的差异

让我们来分析看看 TCP 数据包和 UDP 数据包各自的报头。

TCP 报头的长度必须至少为 20 字节且不超过 60 字节。

Screenshot-2021-05-31-at-10.56.59-AM

TCP 的报头包括:

  1. 源端口 - 表示发送设备的源端口。占 16 位。
  2. 目的端口 - 表示接收设备上的目的端口。占 16 位。
  3. 序号 - 表示在一个会话中数据段的序号。占 32 位。
  4. 确认号 - 该编号包括下一个预期的数据字节的序号,并在 ACK 标志被设置时,用作对先前接收到的数据的确认。占 32 位。
  5. 数据偏移 - 该字段表示整个 TCP 报头的大小(32 位字)以及当前数据包在整个 TCP 段上的数据偏移量。占 4 位。
  6. 保留 - 供将来使用的位,默认情况下设置为 0。占 3 位。
  7. 标志 - 为各种标志保留了 1 位,这些标志有助于 TCP 检查各种活动,例如确认。
  8. 校验和 - 该字段包含校验和。
  9. 紧急指针 - 如果 URG 标志设置为 1,则指定数据字节。
  10. 选项 - 指定了在常规报头中不存在的其他选项。

现在让我们来分析一个 UDP 报头。

Screenshot-2021-05-31-at-10.57.27-AM

UDP 的报头包括:

  1. 源端口 - 表示发送设备的源端口。占 16 位。
  2. 目的端口 - 表示接收设备上的目的端口。占 16 位。
  3. 长度 - 指定 UDP 数据包的整体长度。它是一个 16 位的字段,最小值为 8 字节,等于 UDP 报头本身的大小。
  4. 校验和 - 发送方在发送之前创建的校验和存储在此字段中。该字段在 IPv4 中是可选的,因此如果它不包含任何值,则设置为 0,并且其所有位都设置为 0。

我们可以清楚地看到 TCP 报头与 UDP 报头的开销差异。由于 TCP 报头比 UDP 报头大很多, 它需要更多的时间来处理,这使得了 UDP 比 TCP 更快。

TCP 与 UDP 中的确认

在 TCP 中,接收方在接收到的数据段上向发送方发送确认。这确保了数据包已传送到接收方。

如果没有收到确认,发送方会尝试重新传输。这个处理过程使得 TCP 比 UDP 慢得多。别忘了,UDP 不发送任何确认。

规则的例外

在某些情况下,TCP 被证实比 UDP 要快。例如,在一个实验中,在一个最大传输单元为 1500 字节的以太网连接上,发送 300 字节的数据包,TCP 比 UDP 大约快 50%。

这是因为 TCP 会尝试缓存数据,填充到整个网段,从而最大化利用了带宽。而另一边,UDP 立即沿线路发送数据包,这些小数据包很多,堵塞了网络。

结论

TCP 和 UDP 都有各自的用途。如果主要关注数据接收的可靠性和顺序,你会更希望使用 TCP。

另一方面,如果主要关注的是速度,而且某些数据包的受损或丢失并不那么重要,请选择 UDP。

所以可以看到,你不得不在可靠性和速度这两个之间进行妥协。如果提升其中一个,由于前面的限制,另一个会下降。

例如,在 YouTube 视频中,您可能已经注意到,有多种选项用于设置视频的质量。

当提高质量时,视频会占用更多带宽。这是因为画质较低时,即使某些数据包丢失,我们也会忽略它们。但是如果想要高质量的视频,我们便不能丢失数据包。

感谢阅读!希望你对 TCP 与 UDP 有了一个更好的了解。

原文:TCP vs UDP – Which Protocol is Faster?,作者:Prashanth