传输层为两台主机上的应用程序提供端到端(end to end)的通信。与网络层使用的逐跳通信方式不同,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。
传输层的协议主要有三个:
- TCP协议(Transmission Control Protocol,传输控制协议)
- UDP协议(User Datagram Protocol,用户数据报协议)
- SCTP协议(Stream Control Transmission Protocol,流量传输控制协议),这是一种相对较新的协议,暂不讨论。
UDP协议
UDP协议为用户提供不可靠的,无连接和基于数据报的服务。
下面是UDP报文的格式

- 16位UDP长度,表示整个数据包(UDP首部+UDP数据)的最大长度,所以能用UDP传输的数据大小非常有限,最多只有2^16=64K,差不多是65535
- 16位UDP检验和,计算整个数据包的大小,如果校验和出错,就会直接丢弃
UDP的特点
- 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接
- 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息
- 面向数据报: 不能够灵活的控制读写数据的次数和数量(应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并)
UDP的缓冲区
- UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层进行后续的传输动作
- UDP具有接收缓冲区,但是这个缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一样;如果缓冲区满了,再到达的UDP数据就会被丢弃。
UDP的使用注意事项
UDP协议首部的16位UDP长度限制了UDP能够传输的最大长度,能够传输的最大长度是64K,这是一个很小的数字,如果超过,就需要手动分包,多次发送,并在接收端手动接收。
基于UDP的应用层协议
- NFS:网络文件系统
- TFTP:简单文件传输协议
- DHCP:动态主机配置协议
- BOOTP:启动协议(用于无盘设备启动)
- DNS:域名解析协议