文章目录
- 五、运输层
-
- [5.1 运输层协议概述](#5.1 运输层协议概述)
- [5.2 UDP 用户数据报协议](#5.2 UDP 用户数据报协议)
- [5.3 TCP 传输控制协议概述](#5.3 TCP 传输控制协议概述)
- [5.4 可靠传输的工作原理](#5.4 可靠传输的工作原理)
- [5.5 TCP报文段的首部格式](#5.5 TCP报文段的首部格式)
- [5.6 TCP可靠传输的实现(重点)](#5.6 TCP可靠传输的实现(重点))
- [5.7 TCP的流量控制](#5.7 TCP的流量控制)
- [5.8 TCP的拥塞控制](#5.8 TCP的拥塞控制)
- [5.9 TCP的运输连接管理](#5.9 TCP的运输连接管理)
介绍
学习计算机网络的过程中,我整理了一些比较关键的、考试可能会考的点,有些具体的点可能没涉及到。后面会持续更新,希望对大家有所帮助!
五、运输层
5.1 运输层协议概述
网络层为主机之间的通信提供服务
而运输层在网络层的基础上,为应用进程之间的通信提供服务
5.2 UDP 用户数据报协议
- 无连接:UDP是无连接的协议,不需要建立连接即可发送数据包。
- 不保证可靠性:UDP不保证数据包的交付顺序和完整性,没有重传机制和确认机制。
- 低延迟:由于没有连接建立和维护的开销,UDP传输延迟较低,适合实时性要求高的应用。
- 轻量级:UDP的头部开销小,仅包含基本的源端口、目的端口、长度和校验和字段。
5.3 TCP 传输控制协议概述
- 连接导向:TCP是面向连接的协议,在发送数据之前需要建立一个连接(三次握手)。
- 可靠传输:TCP提供可靠的数据传输,通过确认(ACK)、重传机制和序列号确保数据包按顺序且无误地到达接收方。
- 流量控制:TCP使用滑动窗口机制来控制发送方的数据发送速率,以防止接收方被数据淹没。
- 拥塞控制:TCP具有拥塞控制机制,如慢启动、拥塞避免、快速重传和快速恢复,以应对网络拥塞。
- 双向通信:TCP支持全双工通信,即数据可以在同一连接中同时进行发送和接收。
5.4 可靠传输的工作原理
(1)首先,采用三次握手 来建立TCP连接,四次挥手来释放TCP连接,从而保证建立的传输信道是可靠的。
(2)其次,相比停止等待协议,换成流水线传输。TCP采用了连续ARQ协议 (回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。(回退N帧协议Plus版?)
(3)最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞。
5.5 TCP报文段的首部格式
端口号:0-65535 ( 2 16 2^{16} 216次方,所以要16位)
5.6 TCP可靠传输的实现(重点)
以字节为单位的滑动窗口
已发送并确认 P1 已发送未确认 P2 允许发送但尚未发送 P3 不允许发送
P3 - P1 = 发送窗口大小
P3 - P2 = 可用窗口(有效窗口)
超时重传时间的选择
RTTS
采用自适应算法,在记录报文段的往返时间RTT的基础上,保留加权平均往返时间RTTs(平滑的往返时间)
新 R T T s = ( 1 − α ) × ( 旧 R T T s ) + α × ( 新 R T T ) 新RTTs = (1-\alpha) \times (旧RTTs) + \alpha \times (新RTT) 新RTTs=(1−α)×(旧RTTs)+α×(新RTT)
α \alpha α 接近于0, 变化不大,RTT更新慢; 接近1,变化接近于新RTT,更新快
超时重传时间RTO
略 > RTTs
R T O = R T T s + 4 × R T T D RTO = RTTs + 4 \times RTT_D RTO=RTTs+4×RTTD RTTD是RTT的偏差的加权平均值
如何判定此确认报文段是对原来的报文段1的确认, 还是对重传的报文段2的确认?
Karn 算法
在计算平均往返时间RTT时,只要报文段重传了, 就不采用其往返时间样本。
这样得出的加权平均平均往返时间 RTTs 和超时重传时间 RTO 就较准确。 但是,这又引起新的问题。当报文段的时延突然增大了很多时,在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但根据 Karn算法,不考虑重传的报文段的往返时间样本。这样, 超时重传时间就无法更新。
报文段每重传一次,就把 RTO增大一些:
新 R T O = γ × 旧 R T O 新RTO = \gamma \times 旧RTO 新RTO=γ×旧RTO
系数γ的典型值是2 。 当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时延 RTTs 和超时重传时间 RTO 的数值。
选择确认SACK
SACK允许接收方在单个确认中指示已成功接收的非连续数据段,而不仅仅是下一个期望的序列号。
SACK选项包含一个或多个SACK块,每个SACK块指定了一个已成功接收的非连续数据段的起始和结束序列号。格式如下:
Kind | Length | Left | Right |
---|---|---|---|
5 | 18 | 1000 | 2000 |
3000 | 4000 |
-
Kind:1字节,表示SACK选项的类型,值为5。
-
Length:1字节,表示SACK选项的总长度,包括Kind和Length字段。
这里为18字节 = 2个SACK块占用 2*8 = 16 字节 + 2字节的Kind和Length字段。
-
Left Edge:4字节,表示一个SACK块的起始序列号。
-
Right Edge:4字节,表示一个SACK块的结束序列号。
5.7 TCP的流量控制
点到点之间的问题
让发送方慢点,使接收方来得及接收
- 利用滑动窗口实现流量控制
- 考虑传输效率(最大报文段长度MSS,只要达到MSS就发送报文)
5.8 TCP的拥塞控制
全局性的问题
-
慢开始:由小到大逐渐增大拥塞窗口数值(指数增长,得寸进尺)
-
拥塞避免:拥塞窗口cwnd按线性规律缓慢增长
其中,如果检测到拥塞,则减到1,同时更新ssthresh值 = 拥塞窗口的一半
一个cwnd = 一个报文段 = 一个最大报文段长度MSS
一个传输轮次就是一批数据,比如当前传输轮次的cwnd=8,说明该轮次能发送8个报文段(类似窗口大小)
-
快重传:接收方每收到一个失序报文段后立即发出重复确认(当前累计最大ack),连续收到三个重复确认时,立即重传(不用等超时再来重传,提高速度)
-
快恢复:当发送方连续收到三个重复确认时,把慢开始门限减半,预防网络拥塞。然后把cwnd值设为慢开始门限减半后的值,然后执行拥塞避免算法。
5.9 TCP的运输连接管理
就是三次握手 + 四次挥手(网上一堆讲解,所以我没整理哈)
下面是TCP有限状态机图: