TCP/UDP区别

TCP(Transport Control Protocol,传输控制协议)

UDP(User Datagram Protocol,用户数据包协议)

首先,两者都是传输层协议。

区别一:TCP是面向连接的、可靠的的传输协议。UDP无连接的协议。

什么是面向连接呢?即在正式收发数据之前,双方必须建立可靠的连接。一个可靠TCP连接的简历需要3次“对话”,也就是我们常说的“三次握手”。然后断开需要“四次挥手”。UDP是面向非连接的,所以在源端与收端通信之前,不需要建立连接。当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

区别二:TCP是面向字节流的,而UDP是面向数据报的。

面向数据报的传输方式是应用层交给UDP多长的报文,UDP就加上自己的头部后转发出去,即一次发送一个报文,所以应用层需要选择合适的报文大小。面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分的短一些再传送。若应用层一次只发送一个字节,TCP也可以等待有足够多的字节后再构成报文段转发出去。

区别三:TCP提供可靠的服务,UDP不保证可靠性。

TCP面向连接、需要确认(ACK)、具有流量控制(滑动窗口)、拥塞控制(慢开始、拥塞避免、快重传、快恢复),通过TCP传输的数据是无差错、无重复、无乱序、无丢包。而UDP无连接、没有流量控制、拥塞控制这些机制,不保证可靠交付。由于TCP提供的可靠性的这些服务,所以TCP头部相关的控制字节比较多,TCP头部一共20字节,而UDP头部只有8字节。基于可靠性,可以得知,TCP适合对可靠性要求高的业务,而UDP适合对可靠性要求不高的、实时性要求高的环境。举一个IP电话进行通话的例子。如果使用TCP,数据在传输过程中如果丢失,会被重发,这样会导致无法流畅地传输通话人的声音,从而无法正常交流。而采用UDP,数据丢失不会进行重发,也就不会有声音大幅度延迟到达的问题。即使有部分数据丢失,也只影响一小部分的通话。qq也是使用UDP传送消息,所以有时候会出现收不到消息的情况。此外,在多播和广播通信中也使用UDP。

猜你喜欢

转载自www.cnblogs.com/whu-2017/p/9198749.html