1、UDP协议的基本属性
- 什么是udp协议
udp也是传输层特别重要的协议;它提供一种无连接的、不可靠的、数据报传输服务。
- udp协议的技术特性
无连接:发送端与接收端传输数据时不用建立连接;因此udp的传输速度快。
不可靠:这个不可靠是相对于tcp来说的,由于udp协议不用维护连接状态,没有TCP的确认机制、重传机制,如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息;网络中的拥塞也不影响主机的发送速率,因此udp没有拥塞控制。
基于报文传输:传输的数据是以整包的形式;比如sendto发送一包数据(100k),recvfrom就必须把这一整包数据一次性全部接受完。
- udp协议的应用
当程序对数据的传输速度要求远高于传输可靠性时,传输层的数据转发可以使用udp。
比如视频通话,网络直播,实时网游等,对实时性要求特别高的,即使过程中丢失一些数据,对整体效果影响不大的应用场景。
2、udp协议头简介
16位源端口号:源主机的应用程序使用的端口号。
16位目的端口号:目的主机的应用程序使用的端口号。
16位UDP长度:udp数据包的总长度,udp协议头+数据。因为UDP头部长度为8字节,所以该字段的最小值为8。
16位UDP校验和:检测udp数据报中是否有错,有错就丢弃;该字段是可选的。(UDP校验)
3、UDP的工作原理
udp协议与ip协议非常类似,可以将udp看作是ip协议暴露在传输层的接口,但是udp与ip协议的区别就是,ip协议中没有端口(port)的概念,他只负责两台主机(ip地址)之间的数据传输,而udp协议引入了端口(可以精确到主机上的某一个应用程序)。
正因为udp协议是不面向连接的,所以它才可以实现一对一单播,一对多的广播,组播等数据传输。
- 一对一单播原理
- 单播:两个主机间单对单的通信。
udp协议也是通过套接字编程实现基于TCP/IP协议的面向无连接的通信,因此也可分为客户端和服务端,由于它是无连接的,所以服务器端并不需要listen或accept函数,bind函数看去求,也可不用。具体流程如下图:
- 单播:两个主机间单对单的通信。
- 一对多的广播原理
- 广播:一个主机对整个局域网上所有主机上的数据通信(网络地址全1),传输层只有udp可以广播。
单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网的主机进行通信
-
广播地址:在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。
-
广播的具体实现可以参考udp实现广播。
- 广播:一个主机对整个局域网上所有主机上的数据通信(网络地址全1),传输层只有udp可以广播。
-
特定主机的组播
- 组播:实际情况下,经常需要对一组特定的主机进行通信,而不是所有局域网上的主机。
- 组播地址:IP 组播通信必须依赖于 IP 多播地址,在 IPv4 中它是一个 D 类 IP 地址,范围从 224.0.0.0 到 239.255.255.255,并被划分为局部链接多播地址、预留多播地址和管理权限多播地址3类:
局部链接多播地址范围在 224.0.0.0~224.0.0.255,这是为路由协议和其它用途保留的地址,路由器并不转发属于此范围的IP包;
预留多播地址为 224.0.1.0~238.255.255.255,可用于全球范围(如Internet)或网络协议;
管理权限多播地址为 239.0.0.0~239.255.255.255,可供组织内部使用,类似于私有 IP 地址,不能用于 Internet,可限制多播范围。
4、TCP协议与UDP协议的技术特点对比
- 相同点:TCP和UDP都是传输层协议,都能都能保护网络层的传输,双方的通信都需要开放端口,TCP和UDP中都存在复用和分用技术。
- 不同点:
- 最主要的区别就是TCP可靠,UDP不可靠。
- 传输数据的格式,TCP是字节流,UDP数据报。
对于TCP:TCP不关心应用程序一次性把多长的数据报文发送到TCP缓存中,而是根据对方给出的窗口值和网络拥塞程度决定报文段应该包含多少字节。
对于UDP:一次交付一个完整的报文,报文长度由应用程序给出。
- 最主要的区别就是TCP可靠,UDP不可靠。
5、如何克服UDP的缺点
虽然UDP协议有不可靠等缺点,但是因为它那传输速度,依旧无法被替代,因此工程师们想尽办法在应用层对UDP进行完善,进而实现可靠的UDP传输协议——KCP。