UDP的格式
载荷存放的是:应用层完整的UDP数据报
报头结构:
- 源端口号:发出的信息的来源端口
- 目的端口号:信息要到达的目的端口
- UDP长度:2个字节(16位),即UDP总长度为:2^16bit = 2^10bit * 2^6bit = 1KB * 64 = 64KB.所以一个UDP的最大长度为64KB
- UDP校验和:网络的传输并非稳定传输,还有很多额外的因素.校验和可以在一定程度上判断传输的信息是否正确
UDP的特点
- 无连接:对目的IP与端口号直接传输,不要建立连接(类似于寄信)
- 不可靠:只负责发送,如果发送失败也不会给发送端返回任何错误信息(只负责发,发完就不管了)
- 面向数据报:应用层交给UDP的报文不会被进行拆分,UDP按照原样进行发送.同样也不会进行合并.
- 只有接收缓冲区:发送的信息会直接交给内核.在接收缓冲区中不能保证收到信息的顺序与发送的一致,缓冲区满后丢弃新的UDP数据.
- 全双工:UDP的socket既能发送也能接收
拓展
基于UDP怎样实现可靠传输 :
针对不可靠,可引入确认应答.确保接收端收到信息后返回应答.
针对信息接收与发送的顺序不一致,可引入序列号.给每一个发送的UDP加上一个序列号,接收端对序列号进行一定的排序可得到发送时的UDP数据顺序
还可额外引入一个超时重传,可能发送端因为网络阻塞信息没能发送到接收端,接收端无法接收信息也不会应答.当一定时间后,发送端没有收到答应可以进行信息的重传
基于UDP发送大于64KB的数据:
既然无法在传输层对数据报进行分拆,程序员可以在应用层对要发送的数据报进行手动一定的拆分.拆分成多个包后,通过多个UDP进行发送出去