UDP报文结构
UDP特点
无连接 , 不可靠传输 , 面向数据报 , 全双工
- 无连接: 知道对端的 IP 和端口号就直接进行传输,不需要建立连接.
- 不可靠传输:没有确认机制,没有重传机制;如果因为网络故障导致该段无法发送对方,UDP协议层也不会给应用层返回任何错误信息.
- 面向数据报:不能灵活的控制读写数据的次数和数量
- 全双工:在通信过程中,双方可以同时进行双向的数据传输,即可以同时发送和接收数据,而且双方之间的传输是独立的
UDP协议端格式
-
源端口号:占16位,表示发送端的端口号。
-
目的端口号:占16位,表示接收端的端口号。
-
UDP长度:占16位,表示UDP报文的总长度,包括首部和数据部分。单个UDP数据报的最大长度为 64KB (不能超过64KB,超过会导致数据被截断等问题)
-
UDP校验和:占16位,用来检验UDP报文的完整性。计算校验和时,不仅要考虑UDP首部的内容,还要包括UDP数据部分。
-
数据:占n个字节,表示应用层传输的数据。
关于校验和
在网络传输过程中, 是非常容易出现错误的(电信号/光信号/电磁波受到外界的干扰,使里面传输的信号发生改变)
校验和,存在的目的,就是为了能够 "发现" 或者 "纠正" 网络传输过程中出现的错误.
通过对数据进行计算,生成一个校验和值,然后将该校验和值附加在数据中一起传输。接收方在接收到数据后,同样对数据进行计算,生成一个校验和值,并与传输过来的校验和值进行比较。如果两者相等,则说明数据在传输过程中没有发生改变或丢失,可以认为数据是有效的;如果两者不相等,则说明数据可能发生了错误或损坏。
校验和算法通常采用的是简单的数学操作,如加法或异或运算。具体的计算方式取决于校验和算法的设计。常见的校验和算法包括累加和校验和(Checksum)、循环冗余校验(CRC),MD5,SHA1等。
这里简单介绍一下MD5算法
MD5算法,本质上是一个"字符串hash算法",MD5算法的输入可以是任意长度的数据,输出是一个128位的哈希值。
特点:
- 它是一个单向函数,即无法从哈希值逆推出原始数据。
- 对于不同的输入,得到的哈希值几乎是唯一的,不同的输入可以得到不同的哈希值。
- 即使输入数据只有微小的差异,其哈希值也会有很大的不同。
- MD5算法的哈希值是固定长度的,不受输入数据长度的影响。
注意:校验和并不能检测出所有的错误,它只能帮助检测某些特定类型的错误。如果校验和不匹配,说明数据有错误,但如果校验和匹配,不能保证数据完全没有错误。
基于UDP的应用层协议
-
DNS:用于将域名映射为IP地址的分布式数据库系统,使用UDP协议进行域名解析。
-
SNMP:用于网络设备的监控和管理,包括获取设备状态、配置设备等操作,使用UDP协议进行数据传输。
-
TFTP:用于简单的文件传输,如固件更新、配置文件传输等,使用UDP协议进行数据传输。
-
NTP:用于同步网络中各个设备的时间,使用UDP协议进行时间同步。
-
DHCP:用于自动分配IP地址、网关、DNS服务器等网络配置信息给客户端设备,使用UDP协议进行数据传输。
-
RIP:用于路由器之间的路由信息交换,使用UDP协议传输路由表信息。
-
RTP:用于实时的音视频传输,如IP电话、视频会议等,使用UDP协议进行数据传输。
-
NFS : 网络文件系统
这些基于UDP的应用层协议通常选择UDP作为传输层协议,因为UDP具有低延迟和高效率的特点,适用于实时和轻量级的数据传输。
当然,也可以自定义应用层协议