传输层协议——UDP
UDP协议端的格式
16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度
如果校验和出错的话,就会直接丢弃
UDP的特点
- 无连接:知道目地IP和端口号就直接传输,不需要建立连接
- 不可靠:没有确认机制,没有重传机制,如果发生网络故障该段无法发送到对方,UDP协议层也不会给应用层返回任何的错误信息
- 面向数据报:不够灵活的控制数据读写的次数和数量
关于面向数据报
应用层交给UDP不管多长的报文,UDP只会原样发送,不会拆分,也不会合并
举个例子:
如果用UDP传输300字节的数据,发送端调用一次sendto,发送300字节,接收端也对应调用一次recvfrom,接收300字节,而不能将数据分成10字节,循环调用30次recvfrom,每次接受10字节。
注意
UDP首部中的16位最大长度,即UDP一次最大能传输的数据长度为64K(包含UDP首部),当传输的数据量超过64K时,需要在应用层手动的分包,分多次发送,并在接收端手动拼装。
UDP的缓冲区
UDP没有发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输。
UDP有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报顺序和发送的UDP报头顺序一致,如果接收缓冲区满了的话,UDP数据就会被丢弃,并且UDP并不知道,也不关心。
UDP的socket是全双工的,既能读也能写
基于UDP的应用层协议
- NFS:网络文件系统
- DHCP:动态主机配置协议
- TFTP:简单文件传输协议
- BOOTP:启动协议(用于无盘设备启动)
-DNS:域名解析协议