什么是 TCP?
TCP 是 Transmission Control Protocol 的首字母缩写词,它是一种传输层协议,允许数据包从一个位置发送到另一个位置。
TCP 是面向连接的协议,也就是说它在网络计算机单元之间的任何通信之前建立连接。由于我们把这个协议与 IP 协议结合使用,我们称其为 TCP/IP。
TCP 是怎么工作的?
TCP 的主要任务是从应用层收集数据。它将数据拆分成多个数据包,为每个数据包分配一个编号,然后将这些数据包发送到它们的目的地。
同样,在将数据包发送到应用层之前,它会重新组合数据包。鉴于 TCP 是面向连接的协议,这个连接将一直保持,直到发送方和接收方完成数据交换。
它是一种可靠的协议。因为,接收方总是会给发送方提供一条关于数据包的确认消息,要么肯定要么否定,因此,发送方总是能知道数据包是否到达它的目的地,还是说需要被重新发送。
它保证了数据能到达其目的地,而且到达的顺序与发送时相同。它有一套内置的错误检查和恢复体系,负责提供端到端通信。TCP 还提供对流量控制和服务质量的访问。
TCP 支持全双工服务器,既可以当接收者,也可以当发送者。它以点对点的客户端/服务器方式运行。
什么是 UDP?
UDP 是 User Datagram Protocol 的首字母缩写词。用户数据报协议(UDP)是 TCP/IP 协议套件的最基本的传输层通信协议。它使用最低限度的通信机制。
UDP 是怎么工作的?
尽管 UDP 被认为是一种不可靠的传输协议,但它通过使用 IP 服务来完成其工作,提供了一种尽力而为的传递方法。
在 UDP 中,接收方不生成数据包的确认,发送方也不等待数据包的确认。正是这个不足,使得该协议虽不可靠但是易于处理。
如果确认是否接收到数据这点并不那么重要,这种情况下,我们使用 UDP。它很适用于单向数据流的场景,最适合基于查询的通信。
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 – 哪个更快?
通常来说,UDP 比 TCP 更快,原因如下:
TCP 与 UDP 报头大小的差异
让我们来分析看看 TCP 数据包和 UDP 数据包各自的报头。
TCP 报头的长度必须至少为 20 字节且不超过 60 字节。
TCP 的报头包括:
- 源端口 – 表示发送设备的源端口。占 16 位。
- 目的端口 – 表示接收设备上的目的端口。占 16 位。
- 序号 – 表示在一个会话中数据段的序号。占 32 位。
- 确认号 – 该编号包括下一个预期的数据字节的序号,并在 ACK 标志被设置时,用作对先前接收到的数据的确认。占 32 位。
- 数据偏移 – 该字段表示整个 TCP 报头的大小(32 位字)以及当前数据包在整个 TCP 段上的数据偏移量。占 4 位。
- 保留 – 供将来使用的位,默认情况下设置为 0。占 3 位。
- 标志 – 为各种标志保留了 1 位,这些标志有助于 TCP 检查各种活动,例如确认。
- 校验和 – 该字段包含校验和。
- 紧急指针 – 如果 URG 标志设置为 1,则指定数据字节。
- 选项 – 指定了在常规报头中不存在的其他选项。
现在让我们来分析一个 UDP 报头。
UDP 的报头包括:
- 源端口 – 表示发送设备的源端口。占 16 位。
- 目的端口 – 表示接收设备上的目的端口。占 16 位。
- 长度 – 指定 UDP 数据包的整体长度。它是一个 16 位的字段,最小值为 8 字节,等于 UDP 报头本身的大小。
- 校验和 – 发送方在发送之前创建的校验和存储在此字段中。该字段在 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 视频中,您可能已经注意到,有多种选项用于设置视频的质量。
当提高质量时,视频会占用更多带宽。这是因为画质较低时,即使某些数据包丢失,我们也会忽略它们。但是如果想要高质量的视频,我们便不能丢失数据包。