TCP和UDP是两个传输层协议,在Internet中广泛用于在一个主机与另一个主机之间传输数据。 对TCP和UDP的工作原理有充分的了解对于任何程序员都至关重要。 这就是为什么TCP和UDP之间的差异是一个受欢迎的Java编程面试问题 。 我在各种Java访谈中都多次看到这个问题,尤其是对于服务器端Java开发人员的职位。 由于FIX(金融信息交换)协议也是基于TCP的协议,因此许多投资银行,对冲基金和交换解决方案提供商都希望Java开发人员具有TCP和UDP的丰富知识。 为高速电子交易平台编写FIX引擎和服务器端组件,需要有能力的开发人员对数据结构,算法和网络等基础知识有深入的了解。
顺便说一下,TCP和UDP的使用不仅限于一个区域,它是Internet的核心。 作为Internet核心的协议,HTTP基于TCP。 Java开发人员应详细理解这两个协议的另一个原因是,Java被广泛用于编写多线程,并发和可伸缩服务器。 Java还为基于TCP和UDP的通信提供了丰富的Socket编程API。 在本文中,我们将学习TCP和UDP协议之间的主要区别。 首先,TCP代表传输控制协议,UDP代表用户数据报协议,并且两者都广泛用于构建Internet应用程序。
我喜欢在不同点上比较两件事,这不仅使它们易于比较,而且使人们容易记住差异。 当我们将TCP与UDP进行比较时,我们了解到TCP和UDP的工作方式有所不同,我们了解到哪一种提供了可靠且有保证的传递,而哪种没有提供。 哪种协议快速,为什么使用,最重要的是,在构建自己的分布式应用程序时,何时选择通过UDP的TCP。 在本文中,我们将在9个点上看到UDP和TCP之间的区别 ,例如连接设置,可靠性,排序,速度,开销,报头大小,拥塞控制,应用,基于TCP和UDP的不同协议以及它们如何传输数据。
- 面向连接vs较少连接
它们之间的首要差异是TCP是面向连接的协议,而UDP是无连接协议。 这意味着在客户端和服务器之间可以通过TCP发送数据之前先建立连接。 连接建立过程也称为TCP握手,其中控制消息在客户端和服务器之间交换。 此处的图像描述了TCP握手的过程,其中控制消息在客户端和服务器之间交换。 客户端是TCP连接的发起者,它向正在侦听TCP端口的服务器发送SYN消息。 服务器接收并发送SYN-ACK消息,客户端再次接收并使用ACK进行响应。 服务器收到此ACK消息后,即建立TCP连接并准备进行数据传输。 另一方面,UDP是一种较少连接的协议,并且在发送消息之前未建立点对点连接。 这就是为什么UDP更适合消息的多播分发,单次传输中数据的一对多分发的原因。
- 可靠性
TCP提供传递保证,这意味着可以保证使用TCP协议发送的消息传递给客户端。 如果消息在传输过程中丢失,则使用重新发送将其恢复,这由TCP协议本身处理。 另一方面,UDP是不可靠的,它不提供任何传递保证。 数据报包可能会在传输中丢失。 这就是为什么UDP不适合要求保证交付的程序的原因。
- 定购
除了传递保证之外,TCP还保证消息的顺序。 消息将按照服务器发送消息的顺序传递给客户端,尽管它们可能会乱序到达网络的另一端。 TCP协议将为您完成所有排序和排序。 UDP不提供任何排序或排序保证。 数据报包可以以任何顺序到达。 这就是为什么TCP适用于需要按顺序交付的应用程序的原因,尽管也存在基于UDP的协议,这些协议通过使用序列号和重新交付来提供排序和可靠性,例如TIBCO Rendezvous ,它实际上是基于UDP的应用程序。
- 数据边界
TCP不保留数据边界,而UDP保留。 在传输控制协议中,数据以字节流的形式发送,并且不向信号消息(段)边界发送任何区分性指示。 在UDP上,数据包是单独发送的,只有到达时才检查完整性。 数据包具有确定的边界,在接收时会遵守这些边界,这意味着在接收方套接字上进行的读取操作将产生原始发送的完整消息。 尽管TCP也会在组装完所有字节后传递完整的消息。 消息在发送前已存储在TCP缓冲区中,以最佳利用网络带宽。
- 速度
一言以蔽之,TCP慢而UDP快。 由于TCP必须创建连接,因此要确保有保证和有序的传递,因此它的功能远远超过UDP。 就速度而言,这要花费TCP,这就是为什么UDP更适合关注速度的原因,例如在线视频流,电视广播或在线多人游戏。
- 重量较轻
由于上述开销,与轻量级UDP协议相比,传输控制协议被认为是较重的。 UDP的简单要求是传递消息,而不会承担创建连接和保证传递或顺序保证的任何开销。 这也反映在其标头大小中,该标头大小用于承载元数据。
- 标头大小
TCP具有比UDP更大的头。 TCP数据包的标头大小通常为20字节,是UDP数据报数据包标头大小8字节的两倍多。 TCP标头包含序列号,确认号,数据偏移量,保留,控制位,窗口,紧急指针,选项,填充,校验和,源端口和目标端口。 UDP标头仅包含长度,源端口,目标端口和校验和。 这是TCP和UDP标头的样子:
- 拥塞或流量控制
TCP进行流控制。 在发送任何用户数据之前,TCP需要三个数据包来建立套接字连接。 TCP处理可靠性和拥塞控制。 另一方面,UDP没有用于流控制的选项。
- 用法与应用
互联网在哪里使用TCP和UDP? 了解了TCP和UDP之间的关键区别之后,我们可以轻松得出结论,哪种情况适合它们。 由于TCP提供了传递和排序保证,因此它最适合要求高可靠性的应用程序,并且传输时间的要求相对较低。 UDP更适合需要快速,高效传输的应用程序,例如游戏。 UDP的无状态性质对于回答来自大量客户端的小查询的服务器也很有用。 实际上,TCP在金融领域中使用,例如FIX协议是基于TCP的协议,而UDP在游戏和娱乐场所中大量使用。
- 基于TCP和UDP的协议
基于TCP的高端协议的最佳示例之一是HTTP和HTTPS,它们在Internet上无处不在。 实际上,您所熟悉的大多数常见协议(例如Telnet,FTP和SMTP)都基于传输控制协议。 UDP没有HTTP受欢迎,但它也广泛用于DHCP和DNS等协议中。 其他基于用户数据报协议的协议包括简单网络管理协议(SNMP),TFTP,BOOTP和NFS(早期版本)。
总是要记住提到TCP是面向连接的,可靠的,慢速的,可以保证消息的传递和保留顺序,而UDP的连接较少,不可靠,没有顺序保证,而是一种快速的协议。 TCP开销也比UDP高得多,因为它每个数据包比UDP传输更多的元数据。 值得一提的是,传输控制协议的标头大小为20字节,而用户数据报协议的标头大小为8字节。 如果您不能丢失任何消息,请使用TCP,而UDP更适合用于高速数据传输,在这种情况下,可以丢失单个数据包,例如视频流或在线多人游戏。 在Linux上基于TCP / UDP的应用程序中工作时,最好记住基本的网络命令,例如telnet和netstat,它们可以极大地调试或排除任何连接问题。