传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据包协议UDP(User Datagram Protocol)。
TCP是一种面向连接的传输层协议,可提供可靠的传输服务
TCP位于TCP/IP模型的传输层,它是一种面向连接的端到端协。TCP作为传输控制协议,可以为主机提供可靠的数据传输。
在本例中,两台主机在通信之前,需要TCP在它们之间建立可靠的传输通道。
TCP通常使用IP作为网络层协议,这时TCP数据段被封装在IP数据包内。
TCP数据段由TCP Header(头部)和TCP Data(数据)组成。TCP最多可以有60个字节的头部,如果没有Options字段,正常的长度是20字节。
字段 | 含义 |
---|---|
16位源端口号 | 源主机的应用程序使用的端口号。 |
16位目的端口号 | 目的主机的应用程序使用的端口号。每个TCP头部都包含源和目的端的端口号,这两个值加上IP头部中的源IP地址和目的IP地址可以唯一确定一个TCP连接。 |
32位序列号 | 用于标识从发送端发出的不同的TCP数据段的序号。数据段在网络中传输时,它们的顺序可能会发生变化;接收端依据此序列号,便可按照正确的顺序重组数据。 |
32位确认序列号 | 用于标识接收端确认收到的数据段。确认序列号为成功收到的数据序列号加1。 |
4位头部长度 | 表示头部占32bit字的数目,它能表达的TCP头部最大长度为60字节。 |
16位窗口大小 | 表示接收端期望通过单次确认而收到的数据的大小。由于该字段为16位,所以窗口大小的最大值为65535字节,该机制通常用来进行流量控制。 |
16位校验和 | 校验整个TCP报文段,包括TCP头部和TCP数据。该值由发送端计算和记录并由接收端进行验证。 |
TCP通过三次握手建立可靠连接
TCP是一种可靠的,面向连接的全双工传输层协议。
TCP连接的建立是一个三次握手的过程。如图所示:
TCP的可靠传输还体现在TCP使用了确认技术来确保目的设备收到了从源设备发来的数据,并且是准确无误的。
确认技术的工作原理如下:
目的设备接收到源设备发送的数据段时,会向源端发送确认报文,源设备收到确认报文后,继续发送数据段,如此重复。
如图所示,主机A向服务器A发送TCP数据段,为描述方便假定每个数据段的长度都是500个字节。
当服务器A成功收到序列号是M+1499的字节以及之前的所有字节时,会以序列号M+1499+1=M+1500进行确认。另外,由于数据段N+3传输失败,所以服务器A未能收到序列号为M+1500的字节,因此服务器A还会再次以序列号M+1500进行确认。
TCP滑动窗口技术通过动态改变窗口大小来实现对端到端设备之间的数据传输进行流量控制。
如图所示,主机A和服务器A之间通过滑动窗口来实现流量控制。(为方便理解,此例中只考虑主机A发送数据给服务器A时,服务器A通过滑动窗口进行流量控制。)
主机A向服务器发送4个长度为1024字节的数据段,其中主机的窗口大小为4096个字节。服务器A收到第3个数据段后,缓存区满,第4个数据段被丢弃。服务器以ACK 3072响应,窗口大小调整为3072,表明服务器的缓冲区只能处理3072个字节的数据段。于是主机A改变其发送速率,发送窗口大小为3072的数据段。
主机在关闭连接之前,要确认收到来自对方的ACK
TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。
在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。
TCP连接的建立是一个三次握手的过程,而TCP连接的终止则要经过四次握手。
UDP是一种面向无连接的传输层协议,传输可靠性没有保证
特点:
UDP头部仅占8字节,传输数据时没有确认机制
UDP报文分为UDP报文头和UDP数据区域两部分。报头由源端口、目的端口、报文长度以及校验和组成。UDP适合于实时数据传输,如语音和视频通信。相比于TCP,UDP的传输效率更高、开销更小,但是无法保障数据传输的可靠性。
UDP头部的标识如下:
字段 | 含义 |
---|---|
16位源端口号 | 源主机的应用程序使用的端口号。 |
16位目的端口号 | 目的主机的应用程序使用的端口号。 |
16位UDP长度 | 是指UDP头部和UDP数据的字节长度。因为UDP头部长度为8字节,所以该字段的最小值为8。 |
16位UDP校验和 | 该字段提供了与TCP校验字段同样的功能;该字段是可选的。 |
使用UDP传输数据时,由应用程序根据需要提供报文到达确认、排序、流量控制等功能
主机A发送数据包时,这些数据包是以有序的方式发送到网络中的,每个数据包独立地在网络中被发送,所以不同的数据包可能会通过不同的网络路径到达主机B。这样的情况下,先发送的数据包不一定先到达主机B。因为UDP数据包没有序号,主机B将无法通过UDP协议将数据包按照原来的顺序重新组合,所以此时需要应用程序提供报文的到达确认、排序和流量控制等功能。通常情况下,UDP采用实时传输机制和时间戳来传输语音和视频数据。