📑对应
本笔记对应教材《计算机网络(第7版)》,谢希仁编著,电子工业出版社
运输层协议概述
运输层作用
网络层与运输层
网络层是为主机之间提供逻辑通信,
而运输层为应用进程之间提供端到端的逻辑通信。
运输层功能
- 复用(multiplexing)
- 分用 (demultiplexing)
运输层协议
-
无连接的 用户数据报协议 UDP (User Datagram Protocol)
-
面向连接的 传输控制协议 TCP (Transmission Control
Protocol)
用户数据报协议 UDP
提供无连接服务,不提供可靠交付。
在传送数据之前不需要先建立连接。
传送的数据单位协议是 UDP 报文或用户数据报。
对方的运输层在收到 UDP 报文后,不需要给出任何确认。
传输控制协议 TCP
TCP 提供可靠的、面向连接的运输服务。
TCP 不提供广播或多播服务。
传送的数据单位协议是 TCP 报文段 (segment)。
运输层端口
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
端口类别
- 服务器端使用的端口号
- 熟知端口,数值一般为 0~1023
- 登记端口号,数值为 1024~49151
- 客户端使用的端口号
- 短暂端口号,数值为 49152~65535
用户数据报协议 UDP
- UDP 是无连接的
- UDP 使用尽最大努力交付
- UDP 是面向报文的
- UDP 没有拥塞控制
- UDP 支持一对一、一对多、多对一和多对多的交互通信。
- UDP 的首部开销小
- UDP协议适合对传输协议的可靠性要求不高、需要传送的数据不多、使用频率不高,或者对实时性要求较高的应用。
传输控制协议 TCP
-
TCP 是面向连接的运输层协议。
-
每一条 TCP 连接只能有两个端点 (endpoint),每一条TCP 连接只能是点对点的(一对一)。
-
TCP 提供可靠交付的服务。
-
TCP 提供全双工通信。
-
TCP 面向字节流
TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节。
TCP 连接的端点叫做套接字 (socket) 或插口,端口号拼接到 (contatenated with) IP 地址即构成了套接字。
可靠传输的工作原理
停止等待协议
无差错情况
发送方发送完毕后暂停发送,直至收到确认,在收到确认后再发送下一个分组。
出现差错
发送方超时重传
确认丢失
发送方超时重传
确认迟到
接收方丢弃重复分组并再发送一个确认
自动重传请求 ARQ
自动重传请求 ARQ (Automatic Repeat reQuest),使用确认和重传机制,就可以在不可靠的传输网络上实现可靠的通信。
信道利用率
当往返时间 RTT 远大于分组发送时间 T D T_{D} TD 时,信道的利用率就会非常低
连续 ARQ 协议
发送方维持发送窗口,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
流水线传输
流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认,从而提高信道利用率。
累积确认
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认。
Go-back-N(回退 N)
遇到某个分组丢失的情况,需要再退回来重传已发送过的 N 个分组。
TCP 可靠通信的具体实现
TCP 连接的每一端都必须设有两个窗口——一 个发送窗口和一个接收窗口。
TCP 的可靠传输机制用字节的序号进行控制。TCP 所有的确认都是基于序号而不是基于报文段。
TCP 报文段
格式
连接
- TCP的每条连接都有发送序号和确认号。
- 序号字段是期望收到对方的下一个报文段的数据的第一个字节的序号。
- 确认号字段是期望收到对方的下一个报文段的数据的第一个字节的序号。
- TCP 连接的一端根据缓存空间大小确定自己的窗口大小,利用窗口字段控制对方发送的数据量。
TCP 可靠传输的实现
以字节为单位的滑动窗口
TCP 的滑动窗口是以字节为单位的。
TCP连接的一端根据另一端给出的窗口值构造自己的发送窗口。
TCP连接的一端可以连续把发送窗口内的数据都发送出去,而不需要等待对方的确认。
收到新的确认号,发送窗口向前滑动。
- 发送缓存用来暂时存放
- 发送应用程序传送给发送方 TCP 准备发送的数据;
- TCP 已发送出但尚未收到确认的数据。
- 接收缓存用来暂时存放。
- 按序到达的、但尚未被接收应用程序读取的数据;
- 不按序到达的数据。
超时重传时间的选择
TCP 采用了一种自适应算法,记录报文段的往返时间 RTT
加权平均往返时间 R T T S RTT_{S} RTTS
TCP 保留了 RTT 的一个加权平均往返时间 R T T S ∗ ∗ RTT_{S}** RTTS∗∗(这又称为平滑的往返时间**)。
超时重传时间 RTO
RTO (Retransmission Time-Out) 应略大于上面得出的加权平均往返时间 R T T S RTT_{S} RTTS。
R T T D RTT_{D} RTTD 是 RTT 的偏差的加权平均值。
Karn 算法
选择确认 SACK
选择确认 SACK (Selective ACK),接收方收到了和前面的字节流不连续的两个字节块。接收方就先收下这些数据。
TCP 的流量控制
**流量控制 (flow control)**就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
TCP利用滑动窗口机制实现流量控制。
TCP 为每一个连接设有一个持续计时器 (persistence timer) ,用于解决互相等待的死锁的问题。
TCP 的拥塞控制
拥塞原因:Σ 对资源需求 > 可用资源
拥塞控制:防止过多的数据注入到网络中,使网络中的路由器或链路不致过载,
拥塞控制与流量控制
- 拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
- 流量控制往往指点对点通信量的控制,是个端到端的问题(接收端控制发送端)。
拥塞控制方法
TCP 采用基于窗口的方法进行拥塞控制。该方法属于闭环控制方法。
TCP发送方维持一个拥塞窗口 CWND (Congestion Window)
- 拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。
- 发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量。
拥塞判断
- 重传定时器超时
- 收到三个相同(重复)的 ACK
TCP 拥塞控制算法
- 慢开始 (slow-start)
- 拥塞避免 (congestion avoidance)
- 快重传 (fast retransmit)
- 快恢复 (fast recovery)
慢开始
在慢开始阶段,拥塞窗口按指数规律增长。
在每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个 SMSS 的数值。
使用慢开始算法后,每经过一个传输轮次 (transmission round),拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间 RTT。
拥塞避免
在拥塞避免阶段,拥塞窗口按线性规律增长。
让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长。
有**“加法增大”(Additive Increase)** 的特点。
快重传
快重传FR (Fast Retransmission) 算法可以让发送方尽早知道发生了个别报文段的丢失。
快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传(即“快重传”)。
快恢复
快恢复算法FR (Fast Recovery) 算法。
把门限值设置为当前拥塞窗口值的一半,并大大减小拥塞窗口的数值。即**“乘法减小”MD (Multiplicative Decrease)。**
主动队列管理 AQM
路由器的队列通常都是按照**“先进先出”FIFO (First In First Out)** 的规则处理到来的分组
当队列已满时,采用尾部丢弃策略 (tail-drop policy)。
全局同步 (global syncronization):许多 TCP 连接在同一时间突然都进入到同一状态(如慢开始状态)
随机早期检测 RED
TCP 的运输连接管理
运输连接的管理就是使运输连接的建立和释放都能正常地进行。
运输连接阶段
- 连接建立
- 数据传送
- 连接释放
客户服务器方式
主动发起连接建立的应用进程叫做客户 (client)
被动等待连接建立的应用进程叫做服务器 (server)
连接建立
TCP 建立连接的过程叫做握手。
握手需要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手。
采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误。
连接释放
TCP 连接释放过程是四报文握手
TCP 有限状态机
粗实线箭头表示对客户进程的正常变迁。
粗虚线箭头表示对服务器进程的正常变迁。
细线箭头表示异常变迁。