二者的区别在于TCP接收的是一堆数据,而每次取多少由主机决定;而UDP发的是数据报,客户发送多少就接收多少。网络
拥有这些区别的缘由是因为TCP和UDP的特性不一样而决定的。TCP是面向链接的,也就是说,在链接持续的过程当中,socket中收到的数据都是由同一台主机发出的,所以,知道保证数据是有序的到达就好了,至于每次读取多少数据本身看着办。 而UDP是无链接的协议,也就是说,只要知道接收端的IP和端口,且网络是可达的,任何主机均可以向接收端发送数据。这时候,若是一次能读取超过一个报文的数据,则会乱套。好比,主机A向发送了报文P1,主机B发送了报文P2,若是可以读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一块儿,这样的数据是没有意义的。数据结构
TCP是面向链接的、可靠的流协议。流就是指不间断的数据结构。TCP为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具有“流控制(流量控制)”、“拥塞控制”、提升网络利用率等众多功能。 此外,TCP做为一种面向有链接的协议,只有在确认通讯对端存在才会发送数据,从而能够控制通讯流量的浪费。socket
UDP是不具备可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在UDP的状况下,虽然能够确保发送信息的大小,却不能保证信息必定会到达。所以,应用有时会根据本身的须要进行重发处理。 UDP不提供复杂的控制机制,利用IP提供面向无链接的通讯服务。因为UDP面向无链接,它能够随时发送数据。再加上UDP自己的处理既简单又高效,所以常常用于如下方面:tcp
包总量较少的通讯(DNS、SNMP等)视频
视频、音频等多媒体通讯(即时通讯)get
限定于LAN等特定网络中的应用通讯io
广播通讯(广播、多播)音频
可能有人会认为,鉴于TCP是可靠的传输协议,那么它必定优于UDP。其实否则。TCP和UDP的优缺点没法简单地、绝对地去作比较。那么,对这两种协议应该如何加以区分使用呢?下面作一简单说明。udp
TCP用于在传输层有必要实现可靠传输的状况。因为它是面向有链接并具有顺序控制、重发控制等机制的,因此它能够为应用提供可靠传输。cpu
而在一方面,UDP主要用于那些对高速传输和实时性有较高要求的通讯或广播通讯。举一个IP电话进行通话的例子。若是使用TCP,数据在传送途中若是丢失会被重发,但这样没法流畅地传输通话人的声音, 会致使没法进行正常交流。而采用UDP,它不会进行重发处理。从而也就不会有声音大幅度延迟到达的问题。即便有部分数据丢失,也只是会影响某一小部分的通话。此外, 在多播与广播通讯中也使用UDP而不是TCP。 所以,TCI和UDP应该根据应用的目的按需使用。
原文连接:http://www.aintnot.com/2015/01/01/TCP-and-UDP-difference/