Transport Layer -- 传输层
传输层服务
传输层协议为运行在不同主机上的应用进程之间提供了逻辑连接
传输层协议运行在端系统上:
- 发送端将应用层报文分解成报文段(segment),传输给网络层
- 接收端将报文段重组为报文段传输给应用层
传输层协议:TCP、UDP
传输层与网络层关系
网络层提供了主机之间的逻辑通信,传输层提供了进程之间的逻辑通信
传输层概述
- UDP--用户数据报协议
提供不可靠、无连接的服务 - TCP--传输控制协议
可靠的、面向连接的服务- 拥塞控制
- 流量控制
- 面向连接
运输层分组被称为数据报
网际协议--IP
英特网网络层协议一个名字叫IP,为主机之间提供了逻辑通信。IP的服务模型为尽力而为交付服务(best-effort delivery service),该模型:
- 不确保报文段的交付
- 不保证报文段按序交付
- 不保证报文段中数据的完整性
因此IP被称为不可靠服务
多路复用与多路分解
作用&原理
在一个主机上运行的多个进程中,每个进程都有着一个或多个套接字,主机需要将到达传输层的报文段定向到合适的套接字,为此,每个报文段中具有几个字段
- 接收端检查这些字段,标识出对应的接收套接字,进而将报文段定向到该套接字,这一过程叫多路分解
- 发送端从不同套接字中收集数据块,并为每个数据块封装上首部信息,从而生成报文段并将其传递到网络层,这一过程为多路复用
实际工作方式
运输层复用的要求
- 套接字有唯一标识符
- 报文段有特殊字段来指示要被交付到的套接字
这些特殊字段是指源端口号字段和目的端口号字段
端口号为以16bits的数,0 ~ 1023为周知端口号,使用受限,专门留给HTTP等周知的应用层协议
无连接的多路复用与多路分解
UDP套接字由一个二元组全面标识,该二元组包含一个目的IP地址和一个目的端口号。两个有不同源IP地址或端口号的UDP报文段,如果有相同的目的IP地址与目的端口号,则它们将通过相同的目的套接字定位到相同进程。
源端口号可被当做“返回地址”的一部分
面向连接的多路复用与多路分解
TCP套接字由一个四元组标识:
- 源IP地址
- 源端口号
- 目的IP地址
- 目的端口号
接收端使用全部的四个值将报文段定向到适当的套接字,与UDP不同,TCP会将不同源IP地址或端口号而具有相同目的IP与端口号的报文段定向到不同的套接字,除非TCP报文段携带了初始创建连接的请求
线程化处理
如今的高性能Web服务器通常只使用一个进程,但会为每个新的用户连接创建一个具有新的连接套接字的线程(可被看作是一个轻量级的子进程)。
UDP(User Datagram Protocol):无连接传输
无连接
基于UDP的应用程序直接与IP“打交道”。UDP从应用程序得到数据,附加上用于多路复用/分解的源和目的端口号字段以及其他两个小字段,将行程的报文段交给网络层,网络层将其封装到一个数据报中后尽力将其交付给接受主机。若报文传到,UDP将数据交付给相应进程。
在这一过程中,发送方与接收方的实体都没有进行握手,因此,UDP被称为是无连接的
UDP应用场景
部分应用更适合用UDP:
- UDP关于发送什么数据以及何时发送数据的应用层上的控制更加精细
- 无需建立连接
- UDP的无连接状态
- UDP分组首部开销更小
UDP报文结构
UDP检验和(checksum)
UDP检验和提供了差错检测的功能,用于确定当UDP报文段从源到达目的地移动时,其中的比特是否发生了改变。
发送方
- 对报文段中所有16bits的字求和
- 求和中若溢出进行回卷
- 求反码
接收方
- 对接收到的段内容进行补码和计算
- 检查计算结果是否与收到的校验和相等
UDP提供差错检验,但对差错恢复没有能力,仅能在差错出现时提供警告