和TCP一样,UDP协议也是传输层使用的核心通信协议之一。UDP发送的数据叫数据报。它不要求在通信前建立通信链路或者数据路径。

RFC 768 UDP使用最小协议机制的无连接通信模型。它的协议真的很小:

UDP协议_数据


Source Port (源端口):这是一个可选字段,当它有意义时,它表示发送进程的端口。如果这个字段没有使用,那么它的值是0.

Destination Port(目的端口):在特定的互联网目的地址中它是有意义。

Length(长度):这个长度是指用户数据报的Header和数据的八位字节数。

Checksum(校验和):这个可以用于检查数据是否出错,和TCP的Checksum类似。

UDP没有三次握手的过程。UDP也没有TCP那样的功能:数据完整传输的保证,数据的顺序、数据重复检查,在UDP中数据的可靠性是没有保证的。如果需要这些功能,那就得使用TCP。

UDP非常适合用在那些对错误检查或纠正都不那么重要的地方。那些对时间敏感的应用通常都用UDP协议,所以UDP是实时系统的一个不错考虑。UDP是面向事务(消息)的协议,事务的特点就是要么全部成功,要么全部失败,适合那种简单的查询-响应的协议,如域服务服务器,网络时间协议。

UDP提供的是数据报传输,非常适合用来模仿其他协议,如IP隧道,远程进程调用、网络文件系统。

UPD也适合用在自举(没有任何外部输入的情况下继续进行或进化)也适合没有完整协议栈的其他用途, 如DHCP、简单文件传输协议(TFTP)

UDP是无状态的,因此它非常适合大量的客户端的应用使用,如流媒体应用,IPTV

因为UDP没有重传延迟(TCP是有的),因此它也常适合实时应用,如IP语音、在线游戏和使用实时流协议(RTSP)的协议

UDP还支持多播(多播就是指一组通信,即数据传输可以同时传送到一组目的计算机上。)因此它也适合做消息广播等。

UDP也有相应的数据报Socket套接字,这个抽象层可以快速上手使用UDP建立主机到主机间的通信。应用程序绑定一个socket到它的数据传输端。这个绑定由IP地址和端口组成,这样就知道要将数据发往哪里了。

因为UDP缺乏可靠性保证,所以使用UDP的应用可能会遇到丢包,重排序、重复。如果需要这些得到纠正或保证,使用UDP的程序需要在应用里提供额外的机制来满足。否则,可以使用TCP来代替UDP。

不过像流媒体、实时多人游戏、IP语音这些使用UDP的应用,数据丢包对它们来并不是什么大问题。所以也就不再加任何的机制去保证数据的可靠性。

原来UDP也被很多协议使用着,如DNS,SNMP(Simple Network Management Protocol)、RIP(Routing Information Protocol,路由信息协议),DHCP(Dynamic Host Configuration Protocol,动态主机配置协议).

传输语音和视频流量也是用UDP协议。实时视频、音频流协议设计用于解决偶尔发生的丢包,因此在质量方面受到的UDP协议本身的影响会很轻微。

OK。这个记录就做这么多先。