无连接、不可靠、面向数据报
面向数据包:应用层使用UDP协议的时候,不管是从UDP发送缓冲区中拷贝数据,还是应用层将数据拷贝到UDP接收缓冲区,
都是整条数据拷贝,不存在两条数据并存在缓冲区当中。
UDP头部
UDP报头:
源端口(2字节)+目的端口(2字节)+ 数据长度(最大表示65536)+校验和
当应用层数据大于2^16时,应该在应用层进行分片传输。分多次使用UDP协议进行传输。对于接收端UDP来说从协议栈当中接收的UDP数据对于应用层可能不是完整的,所以数据收发双方需要在应用层定制自定制协议,标识应用层数据长度是否和数据完整。
校验和:
1.作用:校验UDP数据在传输过程是否有损坏
如果有损坏。则不会提交给应用层,而直接丢弃
如果没有损坏,应用层调用recvfrom的时候,将数据提交给应用层
2.使用:
2.1除了16位校验和外,将UDP报头相加,如果加到17位那么回卷
2.2将和取反放进校验和中
2.3接收到UDP,将所有的比特位相加位11111111 11111111则数据没有损坏
UDP缓冲区
1.对于应用层的数据是整条发送和接收的
2.对于发送,应用层使用sendto接口将数据提交给传输层当中的UDP的发送缓冲区,在发送缓冲区当中,打上UDP包头之后,就直接提交给网络层进行下一步传输
3.对于接收,应用层使用recvfrom接口将数据从接收缓冲区拷贝到应用层,UDP结束缓冲区是不保证数据有序到达,也不保证可靠,当接收缓冲区满的时候,从网卡当中接收的UDP数据也就直接丢弃了
UDP应用
DHCP动态主机协议通过udp广播来获取ip地址的
目的ip地址255.255.255.255
DNS:域名解析协议
将域名转换为ip地址的时候,使用udp协议