UDP
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。当收到应用程序发来的数据时,立刻按照原样发送到网络上。
UDP无法进行流量控制等避免网络拥塞的行为;传输过程中出现丢包,UDP也不负责重发;当包的顺序乱掉时,也没有纠正的功能。由于UDP面向无连接,他可以随时发送数据。
UDP的处理简单高效,所以常用语视频、音频的即时通信(微信电话、视频、直播),广播通信等。
优点
快,比TCP安全
UDP没有TCP的握手,确认窗口,重传,拥塞机制。UDP是一个无状态的传输机制,所以在传输数据时非常快。UDP没有TCP这些机制,相应被利用的漏洞就少一点。但是UDP的攻击也是存在的,比如:UDP 的flood攻击。
缺点
不可靠,不稳定因为UDP没有TCP的那些可靠机制,在网络质量不好的时候容易发生丢包。
TCP
TCP实现了数据传输时各种控制功能,丢包时可以进行重发,还可以对次序乱掉的包进行排序。TCP是面向有连接的协议,只有确认接收端存在时才会发送数据,从而减少通信流量的浪费。
当对数据传输的完整性有要求时,可以使用TCP,比如文件传输、发送和接收邮件。
优点
可靠,稳定
TCP的可靠性体现在传输数据之前,三次握手建立连接(四次挥手断开连接),并且在数据传递时,有确认,窗口,重传,拥塞控制机制,数据传完之后断开连接来节省系统资源。
缺点
慢,效率比较低,占用系统资源,容易被攻击
传输数据之前建立连接,这样会消耗时间,而且在消息传递时,确认机制,重传机制和拥塞机制都会消耗大量的时间,而且要在每台设备上维护所有的传输连接。而且每一个连接都会占用系统的CPU,内存等硬件软件资源。并且TCP的三次握手机制导致TCP容易被人利用,实现DOS,DDOS攻击。
TCP和UDP的区别
- TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的
- TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
- TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
- TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
- TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
- TCP面向的是字节流的服务,UDP面向的是报文的服务。
TCP和UDP的应用,为何如此设计?
多播的信息一定要用udp实现,因为tcp只支持一对一通信。
- 如果一个应用场景中大多是简短的信息,适合用udp实现,因为udp是基于报文段的,它直接对上层应用的数据封装成报文段,然后丢在网络中,如果信息量太大,会在链路层中被分片,影响传输效率。
- 如果一个应用场景重性能甚于重完整性和安全性,那么适合于tcp,比如多媒体应用,缺一两帧不影响用户体验,但是需要流媒体到达的速度快,因此比较适合用udp
- 如果要求快速响应,那么udp比较合适
- 如果又要利用udp的快速响应优点,又想可靠传输,那么只能靠上层应用自己制定规则了。
- 常见的使用udp的例子:ICQ,QQ的聊天模块。
参考
https://blog.csdn.net/hhthwx/article/details/80144582
https://www.cnblogs.com/zmlctt/p/3690998.html