UDP 和 TCP 的对比

UDP是无连接协议,客户端和服务器通信之前不需要建立握手连接;

UDP没有应答机制,所以也没有重发机制,很大的可能会造成丢包、收到重复包、乱序的情况;

UDP没有三次握手、4次挥手,适合用在短通信场景,比如DNS;

UDP没有重传,收到应用层的数据包会立马发送,适合用在实时性要求比较高的场合,比如NTP,直播音视频流;

UDP可以实现局域网广播功能,即某个主机可以向所有在同个子网的主机发送数据,TCP不能广播,只能单播;

UDP是面向报文的传输方式,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小;

 

TCP是有连接协议,客户端发送数据给服务器之前需要三次握手;

TCP是有重发机制,当数据从A端传到B端后,B端会发送一个确认包(ACK包)给A端,告知A端数据我已收到!有重传机制,A端超时没有收到确认包会重新发送;

TCP受到Nagle算法(某些场景下为了提高带宽利用率,包长长度达到MSS才会发送,可配置TCP_NODELAY关闭该算法)、确认机制(ACK包不是立马发出,Delayed ACK)的影响,实时性收到影响;

TCP报文段作为IP数据报来传输,而IP数据报的到达可能失序,因此TCP报文段的到达也可能失序。如果有必要,TCP将对收到的数据进行重新排序;

IP数据报可能会发生重复,TCP的接收端会丢弃重复的数据;

TCP提供流量控制,TCP连接的每一方都有固定大小的缓冲区,TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这将防止较快主机致使减慢主机的缓冲区溢出;

TCP是面向字节流的传输方式,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序发过来的数据看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它分段传输,TCP头的MSS小于MTU,所以不需要IP分片。

 

 当网络差到一定程度了,TCP的优势反而会成为劣势,比如客户端和服务器要进行频繁的连接,重发。UDP对应用层的干预较少,灵活性大,可以有针对性的解决TCP在网络差的时候表现出的问题。

对于实时性要求比较高的时候,肯定是udp,因为实时性中传输大量的数据,丢一些包不妨碍实时性;

如果是网络非常好的情况,并且要数据完整的只能说优先考虑tcp,udp也是可以做到的,但是就比较麻烦需要去做拆包分包的帧的验证和判断,但是做好了绝对比tcp好,这是在公司人力资源允许的情况下; 

因此综上所述:外网的传输优先考虑udp,实时性高的只能用udp,tcp开发相对简单,为了开发效率可以考虑;

如果是局域网的传输,想都别想就用tcp,无论是实时的还是大文件的都用tcp,因为局域网的网速是不用质疑的。

posted @ 2018-04-23 19:46  流水灯  阅读(299)  评论(0编辑  收藏  举报