UDP报文结构
如图,UDP报文结构分为
- 16位源端口:用于记录发送端的端口号(占用两个字节)
- 16位目的端口:用于记录接收端的端口号(占用两个字节)
- 16位UDP校验和:接收端会首先知道即将发送来的数据的报文总长度,等数据来了之后,将数据的UPD校验和和已经知道的正确的报文总长度对比,如果不相同,直接丢掉UDP数据。(占用两个字节)
- 16位UDP长度:确定UDP报文总长度,(占用两个字节)
UDP协议的特点
- 无连接:接收方与发送方无需建立连接,发送方知道接收方的IP地址和端口号直接发送
- 不可靠:假如发送方传输的数据因为某种原因被中断了,接收方也完全不知道,也不会返回异常,就跟陌生人寄给你个快递,快递丢了你也不知道。
- 面向数据报:传输的形式都是以数据报,不可分割也不可合并,发送端发送什么样的数据报,接收端就原样拿过来,加入发送端一次发了100个字节的数据报,接收端就要一次性拿完,不能分几次拿
- 全双工:可以同时双向发送数据,在A向B传输时,B也可以同时向A传输数据。
并且UDP数据报一次最大只能穿64KB数据
但是随着互联网发展,数据越来越大,64K显然太小于是有了以下方案(过于麻烦,被否决了,但是作为一个了解):
将一个大数据分开传输,一次传64K然后拼接起来。(注意:这里指的数据分开传输是将一个数据分为多个数据报传输,并不是将一个数据报分开传,不要混淆了)
但是网络传输具有一个特点:先发后至
例如:
1比2先发送,但是2先到了,1后到。这样一来,拼接上的数据就是错误的
所以,可以给数据引入序列号,在接收方收到全部数据后,根据序列号进行整理,保证数据正确。
但这样显然太麻烦了,于是这个方案就给否决了
现实中应用的解决这个问题的方案就是:换用TCP传输协议。