传输层为两台主机上的应用程序提供端到端(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:域名解析协议