传输层的两个主要协议:
(1) TCP:transmission control protocol,传输控制协议
(2) UDP:user datagram protocol,用户数据报协议
传输层实现的是主机内进程之间的通信,通信时传递的数据单位叫做协议数据单元。TCP传输时称为TCP报文,UDP协议传输时称为UDP用户数据报。
UDP:无连接的传输层协议,不提供流量控制功能。
TCP:面向连接的传输层协议,提供流量控制和差错检测功能。
下面列举一些应用层协议及其所使用的传输层协议:
UDP的特点:
(1) 无连接的。发送数据不需要建立连接,减小了开销和时延。
(2) 使用最大努力交付,不保证可靠交付。
(3) 面向报文的。UDP对应用层交给的报文,既不合并也不拆分,而是直接将报文作为UDP用户数据报的数据部分,并且在数据部分前面加上UDP首部。如果UDP用户数据报过大,则会在IP层进行拆分。
(4) UDP没有拥塞控制和流量控制。网络的阻塞不会使得源主机的发送速率降低。
(5) 首部开销很小,只有8个字节,不像TCP首部至少有20个字节。
(6) 支持一对一,一对多,多对一,多对多的交互通信。
UDP的首部由8个字节组成,分为4个字段,每个字段占2个字节,具体如下:
(1) 源端口号。在需要对方回送信息时用,否则可以用全0填充。
(2) 目的端口号。
(3) 长度。UDP用户数据报的总长度,包括首部和数据部分。最小值为8(仅包含首部)。
(4) 检验和。检测用户数据报在传输时是否有错。有错则丢弃。
在上图中可以看出,在UDP首部的前面还要加上一个伪首部,伪首部由12个字节组成。伪首部即不向下传送,也不向上提交,只是在计算校验和时才会用到。
UDP计算校验和和计算IP数据报首部校验和的方法类似,不同的是,IP数据报的校验只针对首部,而UDP数据报的校验还包括数据部分。校验的方法很简单,那就是将伪首部和整个UDP用户数据报看成整体,首先将校验和的字段填0,以16位为单位(如果长度不是16位的整数倍,则补0)进行二进制相加,并将相加和的反码填入到校验和的字段。在目的主机的传输层收到这个UDP数据报后,采用同样的方式进行相加,如果所加的和的反码为0,则表示没有差错,否则表示出错,这个数据报将会丢弃。
目的主机在传输层收到UDP用户数据报,会根据目的端口号,将UDP数据报的数据部分通过分用提交给相应端口的应用进程。如果这个端口号不正确,则会向源主机发送一个ICMP端点不可达报文。