传输层(第四层)
在 端到端通信 中,真正进行通信的是两端主机上的 应用进程,下三层(网络层、数据链路层、物理层)能够把数据传送至 目的主机,但是并没有交付给主机上的应用进程。
网络层为主机之间提供逻辑通信,传输层为应用进程之间提供端到端的逻辑通信;
1. 概述
从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层;
运输层提供应用进程间的逻辑通信,它向应用层屏蔽了下层细节(如网络拓扑,所采用的路由协议等),在应用进程的感知中,就好像是两个运输层实体之间有一条端到端的逻辑通信信道;
1.1. 运输层协议
TCP/IP 运输层有两个主要协议:
- 用户数据报协议 UDP(User Datagram Protocol),它在传送数据之前不需要先建立连接,即不提供可靠交付,由于较为简单,某些场景下十分有效;
- 传输控制协议 TCP(Transmission Control Protocol),提供 面向连接的服务,传送数据前要先建立连接,传送结束后要关闭连接;
OSI 术语定义:两个对等运输实体在通信时传送的数据单位叫做 运输协议数据单元 TPDU(Transport Protocol Data Unit)。但在 TCP/IP 体系中:
- 使用 TCP 协议时,称为 TCP 报文段(segment)
- 使用 UDP 协议时,称为 UDP 用户数据报
1.2. 复用与分用
- 复用: 应用层所有的应用进程都可以通过运输层再传送到 IP 层(网络层);
- 分用: 运输层从 IP 层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程;
1.3. 端口
端口: 在应用层与运输层之间加入一个 协议端口(protocol port),作为通信的抽象端点,一般简称为 端口(port);
在协议栈层间的抽象的协议端口是软件端口,是应用层的各种协议进程与运输实体进行层间交互的地点;
TCP/IP 的运输层用一个 16 位(即 1 ~ 65535 之间)的 端口号 来标志一个端口,端口号只具有本地意义,是为了标志 本计算机 应用层中的各个进程在和运输层交互时的层间接口。
端口号分为以下两类:
- 服务器端使用的端口号:
- 熟知端口号: 又称 全球通用端口号, 0 ~ 1023
- 登记端口号: 1024 ~ 49151
- 客户端使用的端口号:又称 短暂端口号,49152 ~ 65535
2. UDP
用户数据报协议 UDP 只在 IP 数据报上增加了 复用、分用 和 差错检测 的功能;
2.1. UDP 特点
UDP 的特点如下:
-
UDP 是无连接的;
-
UDP 尽最大努力交付;
-
UDP 是 面向报文的;
- 发送方:对于应用层的报文,既不合并也不拆分,添加 UDP 首部后就交付给 IP 层;
- 接收方:将 IP 层上交的 UDP 数据报去掉首部后 原封不动 的交付给上层的应用进程;
-
UDP 没有阻塞控制,网络出现的阻塞不会使源主机的发送速率降低
-
UDP 支持一对一、一对多、多对一和多对多的交互通信
-
UDP 的首部开销小,UDP 的首部只有 8 个字节;
2.2. UDP 首部格式
UDP 首部共有 4 个字段,每个字段各 2 字节,共 8 字节:
- 源端口: 源端口号
- 目的端口: 目的端口号,在终点交付报文时使用;
- 长度: UDP 用户数据报的长度,最小值是 8 (仅有首部)
- 检验和: 检测 UDP 用户数据包在传输是是否有错,有错就丢弃;
- 在计算检验和时,要在 UDP 用户数据报之前增加 12 个字节的 伪首部(为了让 UDP 包接收者确定发送和接受的 UDP 包是来自正确的源且是发给自己的) ,伪首部既不向下传送也不向上帝教,仅仅为了计算检验和;
- UDP 检验和与 IP 数据报首部检验和方法类似,不同的是 UDP 的检验和是把首部和数据部分一起都检验;
3. TCP
3.1. TCP 特点
TCP 的特点如下:
- TCP 是 面向连接的运输层协议,通信前要建立连接,通信后要释放连接;
- TCP 连接是 点到