TCP和UDP两种传输层的协议,它被广泛地用于在互联网发送一个主机之间的数据到另一个。很好的了解TCP和UDP的工作方式是任何程序员必不可少的。这就是为什么TCP和UDP之间的差异是一个流行的Java编程面试问题。我已经看到了这个问题很多次在不同的Java面试,尤其是对于服务器端的Java开发人员的位置。由于FIX(金融信息交换)协议也是基于TCP的协议,几家投资银行,对冲基金和外汇解决方案提供商寻求Java开发人员都必须很好的了解TCP和UDP知识。写的FIX引擎和服务器端组件的高速电子交易平台,需要开发者能够对基本面,包括数据结构,算法和网络有深刻的理解。
顺便说一句,使用TCP和UDP不仅限于一个领域,它在互联网的心脏。它是因特网的核心协议,HTTP是基于TCP。还有一个原因,为什么一个Java开发者应该详细了解这两个协议是Java被广泛用于编写多线程,并行和可扩展的服务器。 Java还提供了丰富的Socket编程的API基于TCP和UDP通信。在本文中,我们将了解TCP和UDP协议的主要区别。要下手时,TCP代表传输控制协议和UDP代表用户数据报协议,双方被广泛用于构建互联网应用。
TCP与UDP协议之间的差异
我喜欢比较不同点的两件事情,这不仅使他们容易比较,但也使得它容易记住的差异。当我们比较TCP与UDP,我们学会了如何在TCP和UDP的比较中,我们学习哪一个提供可靠和有保证的交付并没有区别。这协议是快速,所以,最重要的时,选择TCP 超过UDP,同时建立自己的分布式应用程序。在这篇文章中,我们将看到在9点,如UDP和TCP之间的区别连接建立,可靠性,排序,速度,开销,报头大小,拥塞控制,应用,基于TCP和UDP,以及它们如何传输数据不同的协议。
面向连接与无连接
他们之间的第一个和最重要的区别是,TCP是一个面向连接的协议,而UDP是无连接的协议。这意味着建立客户端和服务器之间的连接,才可以通过TCP传送数据。连接建立过程也被称为TCP握手,其中控制消息是客户机和服务器之间交换。该图像在这里介绍了TCP握手,在控制消息的客户端和服务器之间交换的过程。客户端,它是TCP连接的发起方,发送一个SYN消息给服务器,这是监听一个TCP端口上。服务器接收和发送一个SYN-ACK报文,这是接收客户端再次使用ACK回应。一旦服务器接收该ACK消息,在TCP连接建立和准备好进行数据传输。在另一方面,UDP是无连接协议,点对点连接发送消息之前,是不成立的。这就是为什么,UDP是更适合多播信息,一个以数据的单次传输的许多分发组播分发。
可靠性
TCP提供的交付保证,这意味着使用TCP协议发送的消息是保证交付给客户。如果邮件在运输途中丢失,然后它是用重发,这是由TCP协议本身处理回收。在另一方面,UDP是不可靠的,它不提供任何保证交付。数据报包可能在运输过程中丢失。这就是为什么UDP是不适合用于要求有保证的递送方案。
顺序性
除了交期保证,TCP还保证了订单的消息。该消息将被递送到客户端以相同的顺序,该服务器发送它们,尽管其可能的话,有可能达到不按顺序到网络的另一端。 TCP协议将尽一切的排序和顺序为您服务。 UDP不提供任何顺序或序列的保证。数据报的报文可以到达任何顺序。这就是为什么TCP是适合于应用程序,它需要交付的排序方式,但也有基于UDP的协议以及其使用的序列号和还船,例如提供订购和可靠性TIBCO会合,这实际上是一种基于UDP的应用程序。
数据边界
TCP不保留数据边界,UDP呢。在传输控制协议,数据被发送的字节流,并传送无显着迹象显示信号消息(段)的边界。在UDP报文将被单独发送,并进行完整性检查,只有当他们到达了。包有哪些??是在收到荣幸,这意味着在接收端套接字进行读操作将产生一个完整的消息,因为它最初发出明确的界限。虽然TCP还将装配的所有字节后提供完整的信息。消息存储在TCP发送缓冲区,以最大限度地利用网络带宽之前。
速度
总之,TCP是缓慢和UDP是快的。由于TCP确实有创建的连接,保证担保,有序传递,但它确实比很多的UDP多。该花费的TCP在速度方面,这就是为什么UDP是更适合对速度是一个问题,例如在线视频流媒体,电视节目或在线多玩家游戏。
重量级与轻量级
因为上面提到的开销,传输控制协议被认为是重重量相比重量轻UDP协议。 UDP的简单的是提供信息不承建立连接,并保证交付或为了保证任何开销。这也反映在其报头的大小,它是用于承载的元数据。
Header的大小
TCP比UDP的有更大的头部。 TCP数据包的报头通常大小为20字节,这是两倍以上的8个字节,UDP数据报分组的报头大小。 TCP报头中包含序列号,确认号,数据偏移,保留,控制位,窗,紧急指针,选择,填充,校验和,源端口和目的端口。而UDP报头只包含长度,源端口,目的端口,校验和。下面是TCP和UDP报头的样子:
拥塞与流量控制
TCP做流量控制。 TCP要求三包建立socket连接,任何用户都可以将数据发送之前。 TCP处理可靠性和拥塞控制。另一方面,UDP不具有用于流控制的选项。
使用与应用
TCP和UDP那个会用于上网?知道TCP和UDP之间的关键区别后,我们就可以很容易地得出结论,这情况适合他们。因为TCP提供递送和测序担保的,而且最适合用于需要高可靠性的应用程序,并传输时间是相对不那么重要。而UDP是更适合于应用程序,需要快速,有效的传输,比如游戏。 UDP的无状态特性也是服务器回答客户的大批小疑问是有用的。在实践中,使用TCP在金融领域如FIX协议是基于TCP的协议,而UDP是大量使用在游戏和娱乐网站。
基于TCP和UDP协议
一个基于TCP的高端协议的最好的例子是HTTP和HTTPS,它是无处不在的网络连接。其实大多数常用的协议,你所熟悉的,例如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的,它们大大帮助调试或解决任何连接问题。