5.1 传输层服务、UDP 与 TCP 连接管理
传输层的功能,端口与套接字,复用与分用;UDP 的特点、首部与检验和;TCP 的特点、报文段首部格式,三次握手建立连接与四次挥手释放连接。
传输层提供的服务
从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。传输层的主要功能:
- 传输层提供应用进程之间的逻辑通信(端到端的通信)。与网络层的区别是,网络层提供的是主机之间的逻辑通信;
- 复用和分用:复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程;
- 传输层还要对收到的报文进行差错检测(首部和数据部分)。而网络层的 IP 数据报首部中的检验和字段只检验首部是否出现差错而不检查数据部分;
- 提供两种不同的传输协议,即面向连接的 TCP 和无连接的 UDP。
端口:端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。端口是传输层的服务访问点(TSAP),它是软件端口(不同于路由器或交换机上的硬件端口),用 16 位端口号标识,端口号只具有本地意义。
- 服务器端使用的端口号:熟知端口号 0 ~ 1023,登记端口号 1024 ~ 49151;
- 客户端使用的端口号(短暂端口号):49152 ~ 65535,仅在客户进程运行时才动态选择。
| 应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP | HTTPS |
|---|---|---|---|---|---|---|---|---|
| 熟知端口号 | 21(控制)/ 20(数据) | 23 | 25 | 53 | 69 | 80 | 161 | 443 |
| 传输层协议 | TCP | TCP | TCP | UDP | UDP | TCP | UDP | TCP |
套接字:在网络中采用发送方和接收方的套接字组合来识别端口,套接字唯一地标识了网络中的一台主机和其上的一个应用(进程):套接字 Socket = (主机 IP 地址, 端口号)。一条 TCP 连接由两端的套接字唯一确定。
用户数据报协议 UDP
UDP 仅在 IP 的数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测。UDP 的主要特点:
- UDP 无须建立连接,因此 UDP 不会引入建立连接的时延;
- UDP 不维护连接状态,因此一台服务器在运行某个特定的应用程序时,通常能支持更多的活动客户机;
- UDP 分组首部开销小,只有 8 B,而 TCP 有 20 B 的首部开销;
- UDP 没有拥塞控制,因此网络中的拥塞也不会影响主机的发送效率——某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而 UDP 正好满足这些应用的需求;
- UDP 支持一对一、一对多、多对一和多对多的交互通信;
- UDP 是面向报文的:发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付给 IP 层,一次发送一个报文,既不合并,也不拆分,而是保留这些报文的边界。
传输控制协议 TCP
TCP 是在不可靠的 IP 层之上实现的可靠的数据传输协议,主要特点如下:
- TCP 是面向连接(虚连接)的传输层协议;
- 每条 TCP 连接只能有两个端点,每条 TCP 连接只能是点对点的(一对一);
- TCP 提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序;
- TCP 提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,为此 TCP 连接的两端都设有发送缓存和接收缓存;
- TCP 是面向字节流的:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅视为一连串的无结构的字节流。
TCP 报文段首部
| 字段 | 说明 |
|---|---|
| 源端口、目的端口 | 各 2 B,端口是传输层与应用层的服务接口 |
| 序号 seq | 4 B,TCP 是面向字节流的,所传送的字节流的每个字节都按顺序编号,序号字段的值指的是本报文段所发送的数据的第一个字节的序号 |
| 确认号 ack | 4 B,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为 N,则表明到序号 N − 1 为止的所有数据都已正确收到 |
| 数据偏移 | 4 位,表示 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,即首部长度,单位为 4 B |
| URG | 紧急位,为 1 时表明紧急指针字段有效,紧急数据插到报文段数据的最前面 |
| ACK | 确认位,ACK = 1 时确认号字段才有效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1 |
| PSH | 推送位,接收方尽快地交付接收应用进程,而不再等到整个缓存都填满后再向上交付 |
| RST | 复位位,RST = 1 时表明 TCP 连接中出现严重差错,必须释放连接,然后再重新建立运输连接 |
| SYN | 同步位,SYN = 1 表示这是一个连接请求或连接接受报文 |
| FIN | 终止位,用来释放一个连接,FIN = 1 表明此报文段的发送方的数据已发送完毕,并要求释放传输连接 |
| 窗口 | 2 B,指出现在允许对方发送的数据量,接收方的数据缓存空间是有限的,因此用窗口值作为接收方让发送方设置其发送窗口的依据 |
| 检验和 | 检验首部和数据两部分,计算时同样要加上 12 B 的伪首部(协议号为 6) |
| 选项 | 最常用的是最大报文段长度 MSS:TCP 报文段中的数据字段的最大长度 |
TCP 连接管理
TCP 是面向连接的协议,因此每个 TCP 连接都有三个阶段:连接建立、数据传送和连接释放。TCP 连接的管理就是使运输连接的建立和释放都能正常进行。TCP 连接的建立采用客户/服务器方式,主动发起连接建立的应用进程称为客户,而被动等待连接建立的应用进程称为服务器。
动画演示TCP 的连接建立与释放
1/13服务器进程先创建传输控制块 TCB,进入 LISTEN(收听)状态,等待客户的连接请求
即时练习
即时练习5 题
点击选项即可作答
- 1(408 真题 2009)主机甲和主机乙间已建立一个 TCP 连接,主机甲向主机乙发送了两个连续的 TCP 段,分别包含 300 字节和 500 字节的有效载荷,第一个段的序列号为 200,主机乙正确接收到两个段后,发送给主机甲的确认序列号是( )。
- 2(408 真题 2011)主机甲与主机乙之间已建立一个 TCP 连接,主机甲向主机乙发送了 3 个连续的 TCP 段,分别包含 300 字节、400 字节和 500 字节的有效载荷,第 3 个段的序号为 900。若主机乙仅正确接收到第 1 和第 3 个段,则主机乙发送给主机甲的确认序号是( )。
- 3(408 真题 2011)主机甲向主机乙发送一个(SYN = 1,seq = 11220)的 TCP 段,期望与主机乙建立 TCP 连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的 TCP 段可能是( )。
- 4(408 真题)若主机甲与主机乙建立 TCP 连接时,发送的 SYN 段中的序号为 1000,在断开连接时,甲发送给乙的 FIN 段中的序号为 5001,则在无任何重传的情况下,甲向乙已经发送的应用层数据的字节数为( )。
- 5(408 真题 2014)下列关于 UDP 协议的叙述中,正确的是( )。
Ⅰ. 提供无连接服务
Ⅱ. 提供复用/分用服务
Ⅲ. 通过差错校验,保障可靠数据传输
学完了吗?
标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。