UDP(User Data Protocol)---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况
TCP要三次握手, 每次传输都会检查包回执有重发机制, 用于可靠性要求高, 性能要求不高的传输.
UDP会丢包, 丢包后不重发, 所以在可靠性要求低, 性能要求高的地方使用.
大多数情况下TCP已经满足需求了, 但总有对性能欲求不满的地方.
例如流媒体相关, 时延较大的卫星通讯方面, 铁路信息上报及交互系统, 城市交通信息上报及交互系统等等, UDP作用也是巨大, 而且UDP和TCP并非公用一套端口, 合理运用也能起到意想不到的作用.
udp处理数据报,tcp处理网络流。
读udp socket 一次返回一个报文
读TCP socket不一定能读到一个完整的报文
udp不保证报文到达的先后顺序,不保证是否有报文丢失
tcp保证写入流的数据按顺序被读出来
tcp可靠性高,效率低
关于TCP和UDP的区别和概念上面都有人写过了。我这里写一个UDP的应用。
在多人网络游戏中,人物的移动可以用UDP来发。因为人物一直处于移动当中,会频繁发出位置信息的包。由于发的比较频繁,而且后面的位置信息会覆盖掉前面的位置信息,所以丢不丢包不重要。就可以用UDP来发。每个UDP包的数据里面加个时间戳,那么进来的包你判断下时间,如果是已经过期的包,就可以直接丢掉。这样,即使udp包过来的顺序不一样都无所谓了
般使用tcp,可靠性传输。但用udp也可以做的很完美,比如qq就是使用udp
TCP是面向流字符的,数据流间无边界;UDP是面向分组的,分组间有明确的边界。
对于TCP,发送一串数字(1,2,3,4,5),接收时有可能变成两次(1,2)和(2,4,5),或者变成任意接收方式,协议栈只保证接收顺序正确;UDP发送一个分组,接收方或者接收完全失败,如果成功整个分组都会接收到。
1、TCP是面向连接的,UDP是无连接的。类比于打电话和发电报的关系。
UDP 的使用范围很窄,而且编程比 TCP 难多了:
从设计目的来看,udp的发送方是不知道接受方是否收到数据,而tcp是要求发送方确定的知道接受方
可以看出,UDP与TCP的主要区别在于:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。