运输层是两个进程之间的逻辑通信,网络层是为主机之间提供逻辑通信,运输层负责对报文差错检测
- 用户数据报协议 UDP
- 传输控制协议 TCP
- 可靠传输的工作原理
- TCP 报文段的首部格式
- TCP 的流量控制、拥塞控制
- TCP 的运输连接管理
TCP UDP
- 传输的数据单位:运输协议数据单元 TPDU (Transport Protocol Data Unit)
用户数据报协议UDP (User Datagram Protocol)
- 无连接
- ├── 在传送数据之前不需要先建立连接
- ├── 对方的运输层在收到 UDP 报文后,不需要给出任何确认。
- └── 不提供可靠交付
与IP数据报的区别:IP需要经过存储转发过程、UDP在运输层的端到端(进程)的逻辑信道中传送,只比IP数据报服务多了 - 复用分用
- 差错检测
特点
- UDP 是无连接的,发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延
- UDP 使用尽最大努力交付,即不保证可靠交付
- UDP 是面向报文的,UDP 一次交付一个完整的报文。
- UDP 没有拥塞控制
- UDP 支持一对一、一对多、多对一和多对多的交互通信,全双工
- UDP 的首部开销小,只有 8 个字节,比TCP 的 20 个字节的首部要短。
传输控制协议 TCP (Transmission Control Protocol)
- 面向连接的运输层协议
- TCP 连接只能有两个端点
- 提供可靠交付
- 提供全双工通信
- 面向字节流
特点
根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节
(UDP 发送的报文长度是应用进程给出的)
可靠传输
停止等待协议
连续ARQ协议
1
2
3
4
5
6
7
8
9发送方维持的发送窗口,它的意义是:
位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。
这样,信道利用率就提高了。
连续 ARQ 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
接收方一般采用累积确认的方式。
即不必对收到的分组逐个发送确认,而是对按序到达的最
后一个分组发送确认,
这样就表示:到这个分组为止的所有分组都已正确收到了。确认丢失不必重传
不能向发送方反映出接收方已经正确收到的所有分组的信息
GBN重传
可以在连续收到好几个正确的确认帧后,才对最后一个数据帧发确认信息
这就是说,对某一数据帧的确认就表明该数据帧和这以前所有的数据帧均已正确无误地收到了。
后退N帧协议的接受窗口为1,可以保证按序接受数据帧。若采用n个比特对帧编号,则其发送窗口的尺寸Wt应满足:1<=Wt<=2^n-1
ACK(n+1)表示对第n号帧的确认,表明接受方已正确收到第n帧及以前的所有帧
例题:
数据链路层采用了后退N帧(GBN)协议,发送方已经发送了编号为0~7的帧。当计时器超时时,若发送方只收到0、2、3号帧的确认,则发送方需要重发的帧数是( )。
1
解析:根据后退N帧协议,接收方的窗口为“1”,如果发送方收到了3号帧的确认,则说明0、1、2、3号帧都已经发送成功,所以只需要重发4、5、6、7号帧即可。
TCP可靠重传
- 字节为单位的滑动窗口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20发送缓存:存放①发送应用程序传送给发送方 TCP 准备发送的数据
②TCP 已发送出但尚未收到确认的数据
* 超时重传时间
* 选择确认SACK
## TCP流量控制
出现拥塞的原因:
∑对资源需求 > 可用资源
* 增加资源不能解决拥塞,重传也不行,反而可能加剧
* 拥塞控制:为了防止过多数据注入到网络中,一个全局性的过程
* 流量控制:点对通信量的控制,一个端到端的过程,抑制发送端发送数据的速率,以便使接收端来得及接收
开环控制、闭环控制。
### tcp拥塞控制方法(闭环控制
TCP发送方维持一个拥塞窗口 CWND(Congestion Window)
*判断方式 有两个:*
* 使用**重传定时器**定时,若超时,重传;
* 收到三个重复的ACK
算法有四种,慢开始,<blue>拥塞避免</blue>、快重传、快恢复
* 拥塞窗口 cwnd 设置:最大报文段 SMSS 窗口数值
* 慢开始门限 ssthresh(状态变量):防止拥塞窗口cwnd 增长过大引起网络拥塞。
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改
用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也
可使用拥塞避免算法。
* 3ACK 拥塞避免,变成一半,然后拥塞避免,线性增加
* 超时 cwnd=1,慢开始,从1开始增加
### 快重传:让发送方尽早知道发生了个别报文段的丢失
发送方只要一连收到三个重复确认,就知道接
收方确实没有收到报文段,因而应当立即进行
重传(即“快重传”),这样就不会出现超时,
发送方也不就会误认为出现了网络拥塞
{% image /img/FN.png '' '' %}
## TCP三次握手
发送链接请求报文段
* A ---------------------------------------- B
* A发请求报文段,同步位SYN=1,选择序号seq=x表示第一个数据字节的序号为x
* B发确认报文段,同步位SYN=1,确认位ACK=1,确认号ack=x+1,自己的数据序号seq=y
* A发确认报文段,确认位ACK=1,数据序号seq=x+1,确认号ack=y+1
发送链接释放报文段
* A ---------------------------------------- B
* A发请求报文段,FIN=1,选择序号seq=u
* B发确认报文段,ACK=1,确认号ack=u+1,数据序号seq=v,A半关闭
* B发确认报文段,FIN=1,ACK=1,确认号ack=u+1,数据序号seq=w
* A发确认报文段,ACK=1,确认号ack=w+1,数据序号seq=u+1,A关闭
**其中,A 必须等待 2MSL 的时间**
* 保证 A 发送的最后一个 ACK 报文段能够到达 B。
* A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的
时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种
旧的连接请求报文段。