在上篇的五层协议栈中,我们有提到udp协议,那么这篇文章将具体介绍udp协议,它是什么,它是怎么工作的
介绍
UDP是User Datagram Protocol,中文名是用户数据报协议,上篇我们讲到,为了解决应用程序与应用程序间的通讯,引入了端口,udp协议的数据包就是存储了源端口和目标端口的相关信息,它存在于五层协议栈中的第二层:传输层,数据包包含进了IP协议数据包的数据部分中。不过由于udp协议数据包发出后,并不去确认接收方是否收到了该数据包,所以udp协议是不可靠的,因此才有了tcp协议的诞生
UDP协议的特点:
- 无连接,发送数据前不需要在发送者与接收者之间建立连接
- 尽最大努力交付。(采取一定策略实现可靠的传输)
- 面向报文,UDP对应用程序交付的报文,添加到UDP首部后直接交给IP层,不合并,不拆分
- 没有拥塞机制,网络组赛不会使源主机发送率降低
- UDP支持一对一,一对多,多对一的交互通讯
- UDP首部开销小,8字节(tcp为20字节,ip为20字节)
UDP数据包
UDP的数据包是直接扔进IP数据包的数据部分中的,接下来看看UDP数据包的具体结构: UDP数据包分为首部和数据两部分,其实还有一个伪首部部分,不过它的长度不算进数据包中 首部:源端口 + 目的端口 + 长度 + 校验和
- 源端口:发送程序的端口
- 目的端口:接收程序的端口
- 长度:UDP数据包的长度,最短为8字节(即仅包含首部)
- 校验和:用于检验UDP数据包在传输过程中有无差错,有则丢弃 以上的每个部分都占用16位 = 2字节,总共站8字节
伪首部:
- 伪首部是用来校验的,它必须和首部中的校验和结合起来使用。
- 在计算检验和时临时加上去的,伪首部既不向下传送也不向上提交,而仅仅时为了计算检验和
- 在计算检验和时,需要在UDP用户数据报之前增加12个字节的伪首部。这个伪首部并不是UDP真正的首部,这是在计算检验和时临时和UDP用户数据报连接在一起,得到一个过渡的UDP用户数据报,检验和就是按照这个过渡的UDP用户数据报来计算的。伪首部既不向下传送也不向上提交,而仅仅时为了计算检验和。UDP计算检验和的方法和计算IP数据报首部检验和的方法相似,不同的是,IP数据报的检验和只是检验IP数据报的首部,但是UDP的检验和是将首部和数据部分一起都检验。