目录
运输层作用
运输层的两个主要协议
端口号
嵌套字(socket)
无连接工作流程
面向连接工作流程
用户数据报协议 UDP
传输控制协议 TCP
TCP报文段的首部格式(考点△)
可靠传输的工作原理
停止等待协议
自动重传请求 ARQ
连续ARQ协议&滑动窗口协议
Go-back-N(考点△)
S-R 选择重传 ARQ 协议
滑动窗口协议窗口最大值(考点△)
可靠传输总结
TCP的流量控制(考点△)
TCP的拥塞控制
拥塞控制一般原理
拥塞原因
拥塞控制与流量控制的区别(考点△)
开环控制和闭环控制
TCP拥塞控制算法(考点★△)
慢开始
拥塞避免
乘法减小
慢开始和拥塞避免算法的实现举例
快重传
快速恢复
TCP拥塞控制与拥塞窗口变化:例子(考点★△)
TCP 的运输连接管理
TCP连接的建立(考点△)
TCP的连接释放(考点√)
运输层作用
从运输层来看,端到端的通信是应用进程之间的通信。
运输层的两个主要协议
- 用户数据报协议UDP:数据单位协议是 UDP 报文或用户数据报
- 传输控制协议TCP:数据单位协议是 TCP 报文段(segment)
两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。
端口号
我们可以把端口想象是通信 的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口就完成任务了。
嵌套字(socket)
传输层的端点称为插口(socket),或套接字、套接口。
插口和端口、IP 地址的关系是:
无连接工作流程
面向连接工作流程
用户数据报协议 UDP
- UDP 是无连接的,发送数据之前不需要建立连接,因此减 少了开销和发送数据之前的时延。
- UDP 使用尽最大努力交付,即不保证可靠交付,因此主机 不需要维持复杂的连接状态表。UDP 是面向报文的。
- UDP 支持一对一、一对多、多对一和多对多的交互通信。
- UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的 发送速率降低。这对某些实时应用是很重要的。很适合多媒体通信的要求。
- UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节 的首部要短
传输控制协议 TCP
- TCP 是面向连接的运输层协议
- TCP 提供可靠交付的服务。
- 每一条 TCP 连接只能有两个端点 (endpoint)/即一对一
- TCP 提供全双工通信。(即双方可以同时收发信息)
- 面向字节流
TCP报文段的首部格式(考点△)
- 源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务 接口。运输层的复用和分用功能都要通过端口才能实现。
- 序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
- 确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据 的第一个字节的序号。
- 数据偏移(即首部长度)——占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文 段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。
- 保留字段——占 6 位,保留为今后使用,但目前应置为 0。
- 紧急 URG —— 当 URG 1 时,表明紧急指针字段有效。它告诉系统此报 文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
- 确认 ACK —— 只有当 ACK =1 时确认号字段才有效。当 ACK =0 时,确认号无效。
- 推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的报文段,就尽快 地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
- 复位 RST (ReSeT) —— 当 RST=1 时,表明 TCP 连接中出现严重差错(如 由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
- 同步 SYN —— 同步 SYN = 1 表示这是一个连接请求或连接接受报文。
- 终止 FIN (FINish) —— 用来释放一个连接。FIN=1 表明此报文段的发送端 的数据已发送完毕,并要求释放运输连接。
- 窗口字段 —— 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。
- 检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。 在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
- 紧急指针字段 —— 占 16 位,指出在本报文段中紧急数据共有多少个字节( 紧急数据放在本报文段数据的最前面)。
- 选项字段 —— 长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
- 填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。
可靠传输的工作原理
IP网络:不可靠传输
TCP连接:可靠传输
停止等待协议
“停止等待”就是每发送完一个分段就停止发送,等待对方的确认。在收到确认后再发送下一个分段。
确认ACK(n): 确认到序列号n(包含n)的分组均已被正确接收
无差错情况:
差错一:
B遇到以下两种情况不发送任何信息:
- B 接收 M1 时检测出了差错,就丢弃 M1。
- M1在传输中丢失。
但A都必须重发分段,直到B正确接收。
解决方法:超时重传,设置超时计时器。
差错二:
分段正确到达B,但B的确认ACK丢失,因此A超时重发,B需要处理重复的分段。
解决方法:编号。B收到相同编号的分段,就丢弃。同理确认也必须编号。
自动重传请求 ARQ
使用上述的确认和重传机制,就可以在不可靠的传输网络上 实现可靠的通信。
这种传输协议常称为自动重传请求 ARQ (Automatic Repeat reQuest)。
停止等待协议的优点是简单,缺点是信道利用率太低,为了提高传输效率,发送方可以不使用低效率的停止等待协 议,而是采用流水线传输。
流水线传输:
流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不间断地传送。
连续ARQ协议&滑动窗口协议
基本思想:
- 发送方一次可以发出多个分段。
- 使用滑动窗口协议控制发送方和接收方所能发送和接收的分段的数量和编号。
- 滑动窗口协议主要有两类协议:GBN(go-Back-N,回退N重传协议), SR(selective repeat,选择重传协议)
- TCP 连接的每一端都必须设有两个窗口——一个发送窗口 和一个接收窗口。
对于发送窗口:
一次性可以发五个分段,然后每收到一个确认,都向后移一格,发送第六个分段......
对于接收方:
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样 就表示:到这个分组为止的所有分组都已正确收到了。比如发送了5个分组,第三个分组丢失,这时,接收方只能对前两个分组发出确认。发送方不知道后面三个分组的下落只能重传后三个分组,这就叫Go-back-N.
注意对TCP协议而言:
第一,发送窗口并不总是和接收窗口一样大(因为有一定的时间滞后)。
第二,TCP 标准没有规定对不按序到达的数据应如何处理。 通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
第三,TCP 要求接收方必须有累积确认的功能,这样可以减小传输开销。
Go-back-N(考点△)
Go-back-N(回退 N),表示需要再退回来重传已发 送过的 N 个分段。
S-R 选择重传 ARQ 协议
- 可加大接收窗口,先收下发送序号不连续但仍处在接收窗口中 的那些分段。等到所缺序号的分段收到后再一并送交主机。
- 选择重传 ARQ 协议可避免重复传送那些本来已经正确到达接 收端的分段。
- 但付出的代价是在接收端要设置具有相当容量的缓存空间。
滑动窗口协议窗口最大值(考点△)
可靠传输总结
滑动窗口协议(GBN, SR)_编程小熊的博客-CSDN博客_滑动窗口协议
停等(stop-and-wait )协议:发送方发送数据,然后等待接收方通过ACK或者NAK反馈
流水线协议(Pipelined protocols):允许发送方发送多个分组而无需等待确认
解决流水线的差错恢复有两种基本方法(滑动窗口协议):
- 回退N步(Go-Back-N,GBN):回退N步,接收方则是只接受最小的未接受帧,对错序到达帧,都丢弃
- 选择重传(selective repeat,SR):只重传丢失的帧,乱序到达的帧缓存起来
TCP的流量控制(考点△)
流量控制 (flow control) 就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
利用滑动窗口机制可以通过减小窗口很方便地在 TCP 连接上实现流量控制。
发送端要发送 900 字节长的数据,划分为 9 个 100 字节长的报文段,而发送窗口确定为 500 字节。
发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。
现在发送端还可发送 300 字节。
发送端收到了对方对前 400 字节数据的确认,但对方通知发送端必须把窗口减小到 400 字节。
现在发送端最多还可发送 400 字节的数据。
rwnd0=500 -> rwnd1=400
TCP的拥塞控制
拥塞控制一般原理
在某段时间,若对网络中某资源的需求超过了该资源所 能提供的可用部分,网络的性能就要变坏。这种现象称 为拥塞 (congestion)。
拥塞原因
- 点缓存的容量太小;
- 链路的容量不足;
- 处理机处理的速率太慢;
- 拥塞本身会进一步加剧拥塞;
拥塞控制与流量控制的区别(考点△)
开环控制和闭环控制
开环控制:在设计网络时,事先考虑周全,力求工作时不发生拥塞。思路:力争避免发生拥塞。
闭环控制:基于反馈环路的概念。根据网络当前的运行状态采取相应控制措施;思路:在发生拥塞后,采取措施进行控制,消除拥塞。
TCP 采用基于窗口的方法进行拥塞控制。该方法属于闭环 控制方法。
TCP发送方维持一个拥塞窗口 cwnd (Congestion Window)
发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量。
发送窗口大小不仅取决于接收方窗口,还取决于网络的拥塞状况,所以真正的发送窗口值为:
真正的发送窗口值 = Min (接收方窗口值,拥塞窗口值)
TCP拥塞控制算法(考点★△)
四种拥塞控制算法( RFC 5681) :
- 慢开始 (slow-start)
- 拥塞避免 (congestion avoidance)
- 快重传 (fast retransmit)
- 快恢复 (fast recovery)
慢开始
- 目的:用来确定网络的负载能力或拥塞程度。
- 算法的思路:由小到大逐渐增大拥塞窗口数值。
- 两个变量:
拥塞避免
- “加法增大”
- 是指执行拥塞避免后,当收到对所有报文段的确认就将拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
乘法减小
“乘法减小“是指不论在慢开始阶段还是拥塞避免阶段, 只要出现一次超时(即出现一次网络拥塞),就把慢慢开始阈值ssthresh 设置为当前的拥塞窗口值乘以 0.5。
当网络频繁出现拥塞时,ssthresh 值就下降得很快,以 大大减少注入到网络中的分组数。
慢开始和拥塞避免算法的实现举例
方便起见,窗口单位不使用字节而使用报文段
当 TCP 连接进行初始化时,将拥塞窗口置为 1
慢开始阈值 ssthresh=16
发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1, 因此拥塞窗口 cwnd 随着传输次数按指数规律增长。
- cwnd=1,send M0
- receive ack1. cwnd=2,send M1 M2
- receive ack2,ack3. cwnd=2+2=4 send M3 M4 M5 M6
- receive ack4,5,6,7. cwnd=4+4=8......
当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。假定拥塞窗口的数值增长到 24 时,网络出现超时(表明网络拥塞了)。
更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口 再重新设置为 1,并执行慢开始算法。当 cwnd = 12 时改为执行拥塞避免算法。。。。
快重传
快重传算法规定,发送端只要一连收到三个冗余的 ACK 即可断定有分组丢失了,就应立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器的超时。
不难看出,快重传并非取消重传计时器,而是在某些情 况下可更早地重传丢失的报文段。
快速恢复
对新版TCP Reno,增加:一旦收到3个冗余ACK后,取消慢启动并直接转入拥塞避免阶段;这又称快速恢复(fast recovery)方法。
新版TCP已经包括了快速恢复算法。
TCP拥塞控制与拥塞窗口变化:例子(考点★△)
TCP 的运输连接管理
TCP 是面向连接的协议。
- TCP 连接有三个阶段: 1.连接建立 2. 数据传送 3. 连接释放
- TCP 连接的管理就是使 TCP 连接的建立和释放都能正常地进行。
TCP连接的建立(考点△)
TCP 连接的建立采用客户服务器方式。
- 主动发起连接建立的应用进程叫做客户 (client)。
- 被动等待连接建立的应用进程叫做服务器 (server)。
TCP 建立连接的过程叫做握手。
- 握手需要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手(三次握手)。
- 采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误。
- B的 TCP 服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求
- A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
- B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
- B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号 ack = x + 1,自己选择的序号 seq = y。
- A 收到此报文段后向 B 给出确认,其 ACK = 1 ,确认号 ack = y + 1。 A 的 TCP 通知上层应用进程,连接已经建立。
- B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立。
TCP的连接释放(考点√)
数据传输结束后,通信的双方都可释放连接。
TCP 连接释放过程是四报文握手。
- 数据传输结束后,通信的双方都可释放连接。
- 现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。
- A 把连接释放报文段首部的FIN = 1,其序号seq = u, 等待 B 的确认。
- B 发出确认,确认号 ack = u+1,而这个报文段自己的序号 seq = v。
- TCP 服务器进程通知高层应用进程。
- 从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态。B 若发送数据,A 仍要接收。
- 若 B 已经没有要向 A 发送的数据。
- 其应用进程就通知 TCP 释放连接。
- A 收到连接释放报文段后,必须发出确认。在确认报文段中ACK = 1,确认号 ack = w + 1,自己的序号 seq = u + 1。