目前我们用的大多数应用层的协议都是基于TCP的,例如:telent, ftp, http, https, smtp.很少有基于UDPy协议的应用层的协议。
那么UDP协议到底有什么作用呢?
首先我们比较下TCP与UDP协议的差别
(1)连接与无连接
TCP是面向连接的,UDP是面向无连接的。因此导致TCP更适合于消息的多播发布可以向多个点传送消息(因为没有繁琐的握手机制与挥手机制)同时也导致UDP适用于快速传输的协议,对信息的时实性要求严格的协议。
由于UDP的速度快,所以适合于在线视频媒体,电话视频聊天,qq聊天,电视广播,多人在线游戏这些项目。
(为了时实性牺牲写可靠性,即使有包丢失,可能会导致语音不清楚,视频不清楚等问题,不过没有影响)
(2)可靠性
TCP是可靠的传输协议,UDP是不可靠的。
因此导致UDP不适合金融支付这方面要求可靠性的项目。(因为UDP没有超时重传的机制不能保证可靠性)。
(3)有序性
TCP协议可以保证有序性,UDP协议不保证。
(消息将会以从服务端发出的顺序发送给客户端,尽管消息可能到网络的另一端时是无顺序的,TCP协议会为你排好序)但是即使UDP不可靠,无序,但是我们可以将这些要求转移给上层应用来实现,不仅降低了执行时间,而且使质量得到保证。(例如可以通过给UDP协议使用序列号和重传机制来改善它的这两个缺点)。
(4)重量级与轻量级
TCP协议是重量级,UDP协议是轻量级
因为TCP要保证可靠性和有序性,所以TCP数据报报头的信息量大,报头大小是20个字节,UDP报头的大小是8个字节。所以TCP占用的系统的开销大。
(5)拥塞和流量控制
TCP有流量控制,UDP没有。
TCP通常在发送包之前会测试网络的快慢情况,就好比我们在linux中投的ping命令,通过往返的时间和丢包率来评估网路的状况,来调动滑动窗口的大小。(这项机制增加了TCP的可靠性)。
(6)数据边界
TCP协议没有数据边界,UDP有
因此TCP容易发生粘包的现象。在UDP中数据包是单独发送的,只有当他们到达时才会再次集成,包有明确的界限来判断哪些包已经收到。
总结:
UDP协议被广泛用到对网络数据传输的实时性很高,对数据准确性不是非常高的场合,并且如今网络物理介质的高速提升(光纤)降低了数据丢包的机率,并且当网络状况很好的情况下,UDP的缺点又可以很好的大程度上的被改善。因此UDP协议发展前途无量。