网络原理与协议分析-第3单元-TCP:可靠的数据流传输服务_第1页
网络原理与协议分析-第3单元-TCP:可靠的数据流传输服务_第2页
网络原理与协议分析-第3单元-TCP:可靠的数据流传输服务_第3页
网络原理与协议分析-第3单元-TCP:可靠的数据流传输服务_第4页
网络原理与协议分析-第3单元-TCP:可靠的数据流传输服务_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 要求:要求: 1. 理解可靠性传输问题及解决的基本思路理解可靠性传输问题及解决的基本思路 2. 了解可靠传输的基本特点了解可靠传输的基本特点 3. 掌握滑动窗口机制原理掌握滑动窗口机制原理 4. 了解了解TCP中的端口、端点和连接中的端口、端点和连接 5. 了解了解TCP报文格式报文格式 6. 掌握掌握TCP连接的建立和关闭机制连接的建立和关闭机制 7. 理解理解TCP紧急数据机制、超时重传机制、糊紧急数据机制、超时重传机制、糊 涂窗口问题、拥塞控制机制涂窗口问题、拥塞控制机制 8. 了解了解TCP中的一些基本安全问题中的一些基本安全问题 传输控制协议传输控制协议TCP概述概述 nTCP

2、是是面向连接面向连接的传输层协议。的传输层协议。 nTCP 提供提供可靠交付可靠交付的服务。的服务。 nTCP 提供提供全双工全双工通信。通信。 n好像我们平时打电话一样,说话的同时也能好像我们平时打电话一样,说话的同时也能 够听到对方的声音够听到对方的声音 n面向字节流面向字节流。 2 7 68H TCP 面向流的概念面向流的概念 发送 TCP 报文段 发送方接收方 把字节写入 发送缓存 从接收缓存 读取字节 应用进程 应用进程 1 2 3 0 1817161514 19 20 21 45 131211H109 H 加上 TCP 首部 构成 TCP 报文段 TCPTCP 字节流字节流 H表示

3、 TCP 报文段的首部 x表示序号为 x 的数据字节 TCP 连接 3 应当注意应当注意 nTCP 连接是一条连接是一条虚连接虚连接而不是一条真正的物理连而不是一条真正的物理连 接。接。 nTCP 对应用进程一次把多长的报文发送到对应用进程一次把多长的报文发送到TCP 的的 缓存中是不关心的。缓存中是不关心的。 nTCP 根据对方给出的窗口值和当前网络拥塞的程根据对方给出的窗口值和当前网络拥塞的程 度来决定一个报文段应包含多少个字节(度来决定一个报文段应包含多少个字节(UDP 发发 送的报文长度是应用进程给出的)。送的报文长度是应用进程给出的)。 nTCP 可把太长的数据块划分短一些再传送,也

4、可可把太长的数据块划分短一些再传送,也可 等待积累有足够多的字节后再构成报文段发送出等待积累有足够多的字节后再构成报文段发送出 去。去。 4 5 1. 可靠性:可靠性:我办事,你放心我办事,你放心 防丢失:防丢失: 防重复:防重复: 防乱序:防乱序: 2. 传输效率传输效率 流量控制流量控制 3. 拥塞控制:拥塞控制: 4. 建立连接建立连接 关闭连接关闭连接 要实现要实现可靠的可靠的数据流传输服务,必须解决哪几个问题?数据流传输服务,必须解决哪几个问题? 确认与重传确认与重传 报文段序号报文段序号 报文段序号报文段序号 滑动窗口机制滑动窗口机制 加速递减与慢启动加速递减与慢启动 三次握手协议

5、三次握手协议 改进的三次握手协议改进的三次握手协议 6 3.1 提供可靠性提供可靠性 1、防丢失、防丢失 确认,超时后重传确认,超时后重传 带重传的肯定确认技术(带重传的肯定确认技术(Positive Acknowledge with Retransmission) 接收方收到数据后向发送方发确认(接收方收到数据后向发送方发确认(ACKACK) 设定时器,发送方在限定时间内未收到设定时器,发送方在限定时间内未收到 ACKACK,则重发,则重发 两个问题两个问题: : 1 1、如何对待重复的数据?、如何对待重复的数据? 2 2、定时器时限设置多长?、定时器时限设置多长? 7 2、防重复、防重复

6、报文段序号报文段序号 为每一报文段赋予序号为每一报文段赋予序号 确认时也指明确认哪个报文段确认时也指明确认哪个报文段 序号同时保证了报文段间的正确顺序(序号同时保证了报文段间的正确顺序(防乱序防乱序) 3 3、确认机制:、确认机制:可捎带的累积确认技术可捎带的累积确认技术 捎带确认:捎带确认: 在发送数据的同时,对接收到的数据进行确认在发送数据的同时,对接收到的数据进行确认 累积确认:累积确认: 报告确认号以前的数据已经正确接收报告确认号以前的数据已经正确接收 优点:优点: 若确认丢失,发送方可若确认丢失,发送方可 能不需要重传。能不需要重传。 100, , 500 , , 10001050

7、, , 2000 成功接收数据丢失成功接收 确认号:确认号:10011001 接收队列: 缺点:缺点: 无法确认所有已接收无法确认所有已接收 的数据,可能导致传的数据,可能导致传 输效率低下。输效率低下。 8 9 核心问题:如何核心问题:如何设置重传定时器设置重传定时器的时限?的时限? 两个概念:两个概念: RTT:往返时间,报文段从发出到收到确认间的:往返时间,报文段从发出到收到确认间的 时间时间 自适应重传算法:监视每个连接的性能,由此推自适应重传算法:监视每个连接的性能,由此推 算出合适的定时时限。当连接的性能变化时,随时算出合适的定时时限。当连接的性能变化时,随时 修改定时时限。修改定

8、时时限。 重传定时时限的计算方法:重传定时时限的计算方法: 早期的方法早期的方法 改进的方法改进的方法 重传算法重传算法:Karn算法和定时器补偿算法和定时器补偿 10 (1)早期的方法)早期的方法 R: RTT的估计值的估计值 M: 本次测量的本次测量的RTT值值 RTO:定时时限定时时限 修改估计值修改估计值: R R + (1-)M (0netstat Active Connections Proto Local Address Foreign Address State TCP WinXP-SP2:1052 0:http ESTABLISHED TCP WinXP

9、-SP2:1415 test.xd.mtn:http ESTABLISHED (用(用 netstat -o、 netstat -na 可列出更详细的信息)可列出更详细的信息) 35 1、报文段和序号、报文段和序号:报文段是:报文段是TCP软件间传输数据的基软件间传输数据的基 本单元,每个报文段都赋予一个序号本单元,每个报文段都赋予一个序号 (1) 选取初始序号选取初始序号 (2) 第第n+1段的序号段的序号 = 第第n段序号段序号 + 第第n段数据区字节数段数据区字节数 (相当于每个字节都有一个序号,段的序号即该段相当于每个字节都有一个序号,段的序号即该段 第一个字节的序号第一个字节的序号)

10、 Network Protocol Analysis, So easy, No worry! 段段1 段段2段段3 序号序号 120 序号序号 133 序号序号 150 TCP 首部 20 字节的 固定首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N 32 位 S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 TCP 数据部分TCP 首部 TCP 报文段 IP 数据部分IP 首部 发送在前 2、段格式(数据结构)段格式(数据结构) 36 TCP 首

11、部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 源端口和目的端口字段各占 2 字节。端口是传输 层与应用层的服务接口。传输层的复用和分解功能都 要通过端口才能实现。 37 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S

12、T P S H A C K U R G 位 0 8 16 24 31 填 充 序号字段占 4 字节。TCP 连接中传送的数据流 中的每一个字节都编上一个序号。序号字段的值则指 的是本报文段所发送的数据的第一个字节的序号。 38 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 确认号字段占 4 字节,是期望收到对方的下一个 报文段的数据的第一个字节的序号。 39 序

13、序 号:号:当前报文段的序号当前报文段的序号 确确 认认 号:号:希望接收的对方下一报文段序号希望接收的对方下一报文段序号 (已成功接收到的数据字节序已成功接收到的数据字节序+1) 说说 明:明: (1) 序号和确认序号在一起使得确认可序号和确认序号在一起使得确认可捎带捎带进行进行 (2) TCP采用采用累积确认累积确认策略策略 (效率高,而且确认丢失也不一定使发送方重传效率高,而且确认丢失也不一定使发送方重传) (3) TCP采用经受时延的确认(时延一般为采用经受时延的确认(时延一般为200ms) 优点:优点:减少报文交互次数减少报文交互次数 缺点:缺点:发送方无法收到所有成功传输的报文段的

14、确认信息,发送方无法收到所有成功传输的报文段的确认信息, 对往返时间样本的精确测量带来影响对往返时间样本的精确测量带来影响 40 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 数据偏移(即首部长度)占 4 位,它指出 TCP 报文 段的数据起始处距离 TCP 报文段的起始处有多远。“数 据偏移”的单位是 32 位字(以 4 字节为计算单位)。 41 TCP 首部

15、 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 保留字段占 6 位,保留为今后使用,但目前 应置为 0。 42 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24

16、 31 填 充 紧急 URG (URGent) 当 URG 1 时,表明紧 急指针字段有效。它告诉系统此报文段中有紧急数 据,应尽快传送(相当于高优先级的数据)。 43 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 确认 ACK (ACKnowledgement) 只有当 ACK 1 时确认号字段才有效。当 ACK 0 时,确认 号无效。 44 TCP 首部 2

17、0 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 推送 PSH (PuSH) 接收 TCP 收到 PSH = 1 的报 文段,就尽快地交付接收应用进程,而不再等到整个 缓存都填满了后再向上交付。 45 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N

18、 S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 复位 RST (ReSeT) 当 RST 1 时,表明 TCP 连 接中出现严重差错(如由于主机崩溃或其他原因),必 须释放连接,然后再重新建立传输连接。 46 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 同步 SYN (SYNchronize) 同步 SYN

19、= 1 表示这 是一个连接请求或连接接受报文。 47 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 终止 FIN (FINish) 用来释放一个连接。FIN 1 表明此报文段的发送端的数据已发送完毕,并要求释 放传输连接。 48 49 URG 紧急紧急 ACK 确认确认 PSH 强迫强迫 RST 连接连接 复位复位 SYN 序号序号 同步同步 FIN 字节流字节

20、流 同步同步 带有确认带有确认建立连接建立连接异常关闭连接异常关闭连接正常关闭连接正常关闭连接 码元比特码元比特(6bit):标识报文段的目的与内容):标识报文段的目的与内容 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 窗口字段 占 2 字节,用来让对方设置发送窗口的 依据,单位为字节。 50 窗口:通告对等端缓冲区大小,使发送方修改窗口 的大小,以便进行收发

21、双方的流量控制 问题:初始窗口大小如何确定? 默认值,在建立连接时互相通告 51 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 检验和 占 2 字节。检验和字段检验的范围包括 首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。 52 校验和的计算:校验和的计算:加入伪首部,加入伪首部,必须校验必须校验(UDP可选)可选) 源

22、源IP 目标目标IP 0协议协议TCP长度长度 53 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 紧急指针字段 占 16 位,指出在本报文段中紧 急数据共有多少个字节(紧急数据放在本报文段数 据的最前面)。 54 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗

23、口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 比特 0 8 16 24 31 填 充 选项字段 长度可变,最长可达40字节。 55 56 早期的早期的TCP:选项表结束(:选项表结束(EOL)、无操作()、无操作(NOP)、)、 MSS(最大报文段长度)(最大报文段长度) 选项表结束:选项表结束: type=0(1byte) MSS MSS选项:选项:type=2(1byte)len=4(1byte)MSS(2 byte) MSS过小:效率低过小:效率低 MSS过大:考虑分片,丢失可能性增大过大:考虑分片,丢失可能性增大 MSS接近路径接近路径

24、MTU时为最佳(由于路径改变,很难)时为最佳(由于路径改变,很难) 说明:说明:只有只有SYN报文能协商报文能协商MSS,默认,默认536字节字节 无操作:无操作:type=1(1byte) 功能:使得选项达到功能:使得选项达到4字节的整字节的整 数倍,类似于填充字段数倍,类似于填充字段 选项选项 标志选项的结束标志选项的结束 57 RFC 1323扩充了扩充了TCP的选项(的选项(1992): 窗口扩大选项、时间戳选项窗口扩大选项、时间戳选项 窗口扩大选项:窗口扩大选项: 功能功能:将:将TCP窗口大小从窗口大小从16bit扩大到扩大到32bit 移位数移位数 = R 窗口大小窗口大小 =

25、65535 2R 说明:说明: 只能出现在一个只能出现在一个SYN报文段中报文段中 主动建立连接的一方发送该选项,主动建立连接的一方发送该选项, 被动方收到该选项后才能发此选项被动方收到该选项后才能发此选项 被动方若无此选项,则主动方也放弃被动方若无此选项,则主动方也放弃 两个方向上的扩大因子可以不同两个方向上的扩大因子可以不同 type=3(1byte)移位数移位数(1byte)len=4(1byte) 选项选项 58 时间戳选项:时间戳选项: type=8 (1byte) len=10 (1byte) 时间戳值时间戳值(4 byte)时间戳回显应答时间戳回显应答(4 byte) 时间戳:时

26、间戳:发送方填发送方填 时间戳回显应答:时间戳回显应答:接收方确认时复制发回接收方确认时复制发回 功能:功能: (1) 更好地估算更好地估算RTT (2) 防止序号绕回防止序号绕回(Protect Against Wrapped Sequence Numbers) 序号只有序号只有32位,而每增加位,而每增加232个序号就会重复使用原来用过个序号就会重复使用原来用过 的序号。的序号。 当使用高速网络时,在一次当使用高速网络时,在一次TCP连接的数据传送中序号很可连接的数据传送中序号很可 能会被重复使用。若用能会被重复使用。若用1Gbps的速率发送数据报文,则不到的速率发送数据报文,则不到4.3

27、 秒钟数据字节的序号就会重复。秒钟数据字节的序号就会重复。 选项选项 TCP 首部 20 字节 固定 首部 目 的 端 口 数据 偏移 检 验 和 选 项 (长 度 可 变 ) 源 端 口 序 号 紧 急 指 针 窗 口 确 认 号 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 填充字段 这是为了使整个首部长度是 4 字节的 整数倍。 60 3.5 TCP连接的建立与关闭连接的建立与关闭 1、建立连接、建立连接 :三次握手:三次握手 功能功能: 1. 同意连接协商,做好传同意连接协商,做好传 输数据的准备输数据的准备 2.

28、 各自报文段各自报文段ISN(初始序初始序 列号列号)协商协商 3. 协商最大报文段长度协商最大报文段长度 MSS(只有(只有SYN报文段能报文段能 协商协商MSS) 说明:说明: SYN报文段占用初始序号,报文段占用初始序号, 发送数据的第一字节序号发送数据的第一字节序号 为为ISN+1 接收接收ACK AB 发送发送SYN seq=x REQUEST 接收接收SYN 发送发送SYN seq=y,ACK x+1 ACCEPTED 接收接收SYN+ACK 发送发送ACK y+1 CONFIRM TCP连接数据实例连接数据实例 61 62 2、关闭连接:、关闭连接:改进的三次握手改进的三次握手

29、说明:说明: FIN报文段占用一个序报文段占用一个序 号;但单纯的号;但单纯的ACK报文段不报文段不 占用序号占用序号 TCP提供了提供了半关闭半关闭能力:能力: 连接的一端在结束它的发送连接的一端在结束它的发送 后还能接收来自另一端数据后还能接收来自另一端数据 有些编程接口提供有些编程接口提供close 来 关 闭来 关 闭 T C P 连 接 , 提 供连 接 , 提 供 shutdown加特殊参数来实现加特殊参数来实现 半关闭半关闭 3、异常时强行关闭连接、异常时强行关闭连接 发起端发发起端发RST报文段报文段 双方立即停止传输,并退出连接双方立即停止传输,并退出连接 网点网点1网点网点

30、2 接收接收ACK 接收接收ACK 发送发送FIN seq=x 接收接收FIN ACK x+1 发送发送FIN seq=y ACK x+1 接收接收FIN +ACK 发送发送ACK y+1 63 4、同时打开和同时关闭、同时打开和同时关闭 同时打开同时打开: 交换交换4个报文段个报文段 同时关闭同时关闭: 交换交换4个报文段个报文段 ESTABLISHEDESTABLISHED 主动打开主动打开SYN_SENT SYN j 主动打开主动打开SYN_SENT SYN k SYN_RCVD SYN j,ACK k+1 SYN_RCVD SYN k,ACK j+1 TIME_WAIT TIME_WA

31、IT 主动关闭主动关闭FIN_WAIT_1 FIN j主动关闭主动关闭FIN_WAIT_1FIN k CLOSING ACK k+1 CLOSING ACK j+1 TCP数据传输完整过程数据传输完整过程 客户机 服务器 10 (1)SYN (2)SYN、ACK (3)ACK 第一阶段:三次第一阶段:三次 握手,建立连接握手,建立连接 (4)(5)(6)数据第二阶段:数据第二阶段:数据 交换阶段交换阶段 (7)FIN (8)ACK (9)FIN (10)ACK 第三阶段:改进第三阶段:改进 三次握手,关闭三次握手,关闭 连接连接 TCP数据分析数据分析 65

32、66 1. 紧急数据发送和带外数据紧急数据发送和带外数据 带外数据带外数据:源站不能按字节流的顺序而需要立即发给:源站不能按字节流的顺序而需要立即发给 接收方并及时处理的数据接收方并及时处理的数据(普通数据流中的紧急数据普通数据流中的紧急数据)。 1 URG位位 数据区数据区 紧急数据紧急数据紧急指针指明紧急指针指明 接收方收到接收方收到URG报文段,立即把紧急数据交应用程报文段,立即把紧急数据交应用程 序处理,然后再处理普通数据流序处理,然后再处理普通数据流 通常,紧急数据从数据区最前端开始。但有些系统通常,紧急数据从数据区最前端开始。但有些系统 只传送只传送1字节紧急数据,可位于数据区任意

33、地方字节紧急数据,可位于数据区任意地方 Telnet中断键中断键 FTP中断传输中断传输 67 2. 强迫数据发送强迫数据发送 应用背景:应用背景: 通常,通常,TCP为提高网络利用率,在缓冲区中积累为提高网络利用率,在缓冲区中积累 够一个最大报文段容量的数据后才发送。够一个最大报文段容量的数据后才发送。 在交互环境或实时性要求高的场合,每条命令在交互环境或实时性要求高的场合,每条命令 (甚至每个字符)希望及时传送。(甚至每个字符)希望及时传送。TCP提供推提供推 (PUSH)操作,以强迫发送当前数据流中的数据而)操作,以强迫发送当前数据流中的数据而 不必等待缓冲区满。不必等待缓冲区满。 应用

34、方式:应用方式: 发送方将发送方将PSH置置“1”,以通知接收方尽快把该报,以通知接收方尽快把该报 文段数据交应用程序。文段数据交应用程序。 68 拥塞:拥塞:交换节点(如路由器)数据报负载过重的现象交换节点(如路由器)数据报负载过重的现象 当发生拥塞时,路由器不得不把大量数据报存在当发生拥塞时,路由器不得不把大量数据报存在 队伍中。由于每个路由器的存储能力有限,在最坏的队伍中。由于每个路由器的存储能力有限,在最坏的 情况下,当到达数据报的总数不断增加,直到路由器情况下,当到达数据报的总数不断增加,直到路由器 的容量饱和时,路由器就会的容量饱和时,路由器就会丢弃丢弃报文。报文。 IP层的拥塞控

35、制技术:层的拥塞控制技术: ICMP源站抑制报文,是一种被动机制源站抑制报文,是一种被动机制 源站抑制要消耗网络带宽,且对于拥塞来说,是源站抑制要消耗网络带宽,且对于拥塞来说,是 一种无效而不公平的调整一种无效而不公平的调整 TCP拥塞控制技术拥塞控制技术 69 TCP拥塞控制的必要性:拥塞控制的必要性: TCP采用了一种采用了一种 预防型的主动控制机制:预防型的主动控制机制: 拥塞窗口拥塞窗口cwnd 拥塞拥塞 时延增加时延增加 超时重传超时重传 控制不当加重控制不当加重 拥塞,可能会拥塞,可能会 造成造成拥塞崩溃拥塞崩溃 TCP拥塞控制技术拥塞控制技术 70 (1)基本机制:)基本机制:拥

36、塞窗口拥塞窗口cwnd 每个连接都有一个拥塞窗口,该窗口大小以每个连接都有一个拥塞窗口,该窗口大小以 字节为单位,但是增加和减少以字节为单位,但是增加和减少以MSS为单位为单位 初始大小:初始大小:1个个MSS 发送窗口发送窗口 = min (接收方窗口通告接收方窗口通告, cwnd) 拥塞控制启动时机拥塞控制启动时机:出现超时重传时:出现超时重传时 1. 拥塞控制技术拥塞控制技术 71 慢启动门限:慢启动门限:ssthresh,初始值一般为初始值一般为16个个MSS 慢启动算法慢启动算法 u 新连接开始或拥塞时,新连接开始或拥塞时,拥塞窗口值设为拥塞窗口值设为1个个MSS u 每收到一个确认

37、每收到一个确认,则拥塞窗口增加,则拥塞窗口增加1个个MSS u 拥塞窗口增长到拥塞窗口增长到ssthresh后后,进入,进入“拥塞避免拥塞避免”状态状态 (2)基本的拥塞控制算法)基本的拥塞控制算法 慢启动、拥塞避免、加速递减慢启动、拥塞避免、加速递减 拥塞避免:拥塞避免:每经过一个每经过一个RTT往返时延,拥往返时延,拥 塞窗口增加塞窗口增加1个个MSS 72 加速递减技术加速递减技术 u 指数级递减:指数级递减:出现超时重传时,减少出现超时重传时,减少 ssthresh=max(FlightSize/2, 2*MSS) u 指数退避:指数退避:对保留在发送窗口中的报文段,对保留在发送窗口中

38、的报文段, 将重传时限加倍将重传时限加倍 u 控制控制:启用:启用“慢启动算法慢启动算法” FlightSize is the amount of data that has been sent but not yet acknowledged. 73 20 超时超时 16ssthresh 10 ssthresh 慢慢 启启 动动 慢慢 启启 动动 进入拥塞避免进入拥塞避免 进入拥塞避免进入拥塞避免 加加 速速 递递 减减 22 16 “乘法减小” 24681012141618200 0 4 8 12 20 24 拥塞窗口 cwnd 新的 ssthresh 值 网络拥塞 指数规律增长 ssth

39、resh 的初始值 慢启动 慢启动 慢启动 拥塞避免 “加法增大” 拥塞避免 “加法增大” 传输轮次 当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗 口单位不使用字节而使用报文段。 慢启动门限的初始值设置为 16 个报文段,即 ssthresh = 16。 74 慢启动和拥塞避免算法的实现举例慢启动和拥塞避免算法的实现举例 假定发送窗口的数值等于拥塞窗口的数值。 22 16 “乘法减小” 24681012141618200 0 4 8 12 20 24 拥塞窗口 cwnd 新的 ssthresh 值 网络拥塞 指数规律增长 ssthresh 的初始值 慢启动 慢启动 慢启动 拥塞避

40、免 “加法增大” 拥塞避免 “加法增大” 传输轮次 在执行慢启动算法时,拥塞窗口 cwnd 的初始值为 1, 发送第一个报文段 M0。 慢启动和拥塞避免算法的实现举例慢启动和拥塞避免算法的实现举例 75 22 16 “乘法减小” 24681012141618200 0 4 8 12 20 24 拥塞窗口 cwnd 新的 ssthresh 值 网络拥塞 指数规律增长 ssthresh 的初始值 慢启动 慢启动 慢启动 拥塞避免 “加法增大” 拥塞避免 “加法增大” 传输轮次 发送端每收到一个确认 ,就把 cwnd 加 1。于是发送 端可以接着发送 M1 和 M2 两个报文段。 慢启动和拥塞避免算

41、法的实现举例慢启动和拥塞避免算法的实现举例 76 22 16 “乘法减小” 24681012141618200 0 4 8 12 20 24 拥塞窗口 cwnd 新的 ssthresh 值 网络拥塞 指数规律增长 ssthresh 的初始值 慢启动 慢启动 慢启动 拥塞避免 “加法增大” 拥塞避免 “加法增大” 传输轮次 接收端共发回两个确认。发送端每收到一个对新报文 段的确认,就把发送端的 cwnd 加 1。现在 cwnd 从 2 增大到 4,并可接着发送后面的 4 个报文段。 慢启动和拥塞避免算法的实现举例慢启动和拥塞避免算法的实现举例 77 22 16 “乘法减小” 2468101214

42、1618200 0 4 8 12 20 24 拥塞窗口 cwnd 新的 ssthresh 值 网络拥塞 指数规律增长 ssthresh 的初始值 慢启动 慢启动 慢启动 拥塞避免 “加法增大” 拥塞避免 “加法增大” 传输轮次 发送端每收到一个对新报文段的确认,就把发送端的 拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输轮次按指 数规律增长。 慢启动和拥塞避免算法的实现举例慢启动和拥塞避免算法的实现举例 78 22 16 “乘法减小” 24681012141618200 0 4 8 12 20 24 拥塞窗口 cwnd 新的 ssthresh 值 网络拥塞 指数规律增长 ssthresh 的

43、初始值 慢启动 慢启动 慢启动 拥塞避免 “加法增大” 拥塞避免 “加法增大” 传输轮次 当拥塞窗口 cwnd 增长到慢启动门限值 ssthresh 时 (即当 cwnd = 16 时),就改为执行拥塞避免算法, 拥塞窗口按线性规律增长。 慢启动和拥塞避免算法的实现举例慢启动和拥塞避免算法的实现举例 79 22 16 “乘法减小” 24681012141618200 0 4 8 12 20 24 拥塞窗口 cwnd 新的 ssthresh 值 网络拥塞 指数规律增长 ssthresh 的初始值 慢启动 慢启动 慢启动 拥塞避免 “加法增大” 拥塞避免 “加法增大” 传输轮次 假定拥塞窗口的数值

44、增长到 24 时,网络出现超时,表 明网络拥塞了。 慢启动和拥塞避免算法的实现举例慢启动和拥塞避免算法的实现举例 80 22 16 “乘法减小” 24681012141618200 0 4 8 12 20 24 拥塞窗口 cwnd 新的 ssthresh 值 网络拥塞 指数规律增长 ssthresh 的初始值 慢启动 慢启动 慢启动 拥塞避免 “加法增大” 拥塞避免 “加法增大” 传输轮次 更新后的 ssthresh 值变为 12(即发送窗口数值 24 的 一半),拥塞窗口再重新设置为 1,并执行慢启动算 法。 慢启动和拥塞避免算法的实现举例慢启动和拥塞避免算法的实现举例 81 22 16 “

45、乘法减小” 24681012141618200 0 4 8 12 20 24 拥塞窗口 cwnd 新的 ssthresh 值 网络拥塞 指数规律增长 ssthresh 的初始值 慢启动 慢启动 慢启动 拥塞避免 “加法增大” 拥塞避免 “加法增大” 传输轮次 当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口 按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。 慢启动和拥塞避免算法的实现举例慢启动和拥塞避免算法的实现举例 82 (3)改进的拥塞控制算法)改进的拥塞控制算法 增加快重传增加快重传( (Fast Retransmit)/ )/快恢复快恢复( (Fast Recov

46、ery) ) 适用于数据丢失适用于数据丢失 比较少的情况!比较少的情况! 数据发送方数据接收方 S1(1-100) S2(101-200) S3(201-300) S4(301-400) ACK(101) ACK(101) ACK(101) 启动重传启动重传 超时时限超时时限 S5(301-400) ACK(101) S2(101-200) 问题分析:问题分析: 快重传快重传:当收到:当收到3个重复的个重复的ACK后,不必后,不必 等待超时就重传可能丢失的报文段等待超时就重传可能丢失的报文段 83 当收到当收到3个重复的个重复的ACK时时, 减少减少 ssthresh=max(FlightSi

47、ze/2, 2*MSS); 重传丢失的报文段;重传丢失的报文段; 设置设置cwnd=ssthresh+3*MSS,若又收到重复的,若又收到重复的ACK, 每收到一个,每收到一个,cwnd增加一个增加一个MSS; 若允许,发送一个报文段;若允许,发送一个报文段; 当收到新报文段的当收到新报文段的ACK时,设置时,设置cwnd=ssthresh。 快恢复算法(与快重传配合)快恢复算法(与快重传配合) 不进入慢启动,而是进入拥塞避免不进入慢启动,而是进入拥塞避免 84 选择确认选择确认( (SACK:Selective ACKnowledgement) 数据发送方数据接收方 S1(1-100) S2

48、(101-200) S3(201-300) S4(301-400) ACK(1,101) ACK(201,301) ACK(301,401) 确认已收到的数据的有关信息:左边界确认已收到的数据的有关信息:左边界+ +右边界右边界 思考讨论思考讨论:如何与累积确认协调工作?如何与累积确认协调工作? 2. 拥塞控制的进一步改进拥塞控制的进一步改进:反馈机制(:反馈机制(1) 通过选通过选 项机制项机制 85 显式拥塞通知显式拥塞通知 (ECN:Explicit Congestion Notification) 数据发送方 S1 Router 发生拥塞数据接收方 S1+拥塞标志拥塞标志 S1+拥塞标

49、志 ACK+拥塞标志ACK+拥塞标志 拥塞控制拥塞控制 收到拥塞通知 思考讨论思考讨论:怎么添加拥塞标志?:怎么添加拥塞标志? 2. 拥塞控制的进一步改进:拥塞控制的进一步改进:反馈机制(反馈机制(2) 利用首部利用首部 中的未用中的未用 空间空间 86 87 3. IP层对改善层对改善TCP性能的支持性能的支持 路由器发生拥塞时,早期的策略是路由器发生拥塞时,早期的策略是尾部丢弃尾部丢弃 当队列满时,丢弃随后到达的每一个数据报当队列满时,丢弃随后到达的每一个数据报 可能会造成可能会造成全局性同步全局性同步:大量大量TCP连接只是被连接只是被 丢弃了一两个报文段而进入慢启动状态丢弃了一两个报文

50、段而进入慢启动状态 解决方案:解决方案:RED(Random Early Discard) 随机随机 早期丢弃早期丢弃 88 方法:方法:设置设置Tmin和和Tmax,通常,通常Tmax=2Tmin 若队列长度若队列长度Tmax,则丢弃新数据报,则丢弃新数据报 若队列长度在若队列长度在Tmin Tmax之间,则以概之间,则以概 率率p丢弃新报。丢弃新报。p是动态变化的,通常正比于队是动态变化的,通常正比于队 列长度列长度 缺陷:缺陷:突发数据时造成丢弃过多突发数据时造成丢弃过多 改进:使用平均队列长度改进:使用平均队列长度 sizequeueCurrentavgOldavg_*_*)1 ( 建

51、议值建议值0.02(保证稳定增长)(保证稳定增长) RED可与显式拥塞通知结合可与显式拥塞通知结合 RED 将路由器的到达队列 划分成为三个区域 从队首 发送 最小门限 Tmin 最大门限 Tmax 分组 到达 平均队列长度 avg 排队丢弃以概率 p 丢弃 丢弃概率 p 与 Tmin 和 Tmax 的关系 最小门限 Tmin 最大门限 Tmax 平均队列长度 avg 分组丢弃概率 p 1.0 0 pmax 瞬时队列长度和 平均队列长度的区别 队列长度 时间 瞬时队列长度 平均队列长度 92 1、TCP的理论模型:的理论模型: TCP有限状态机有限状态机 - 有限自动机有限自动机 3.8 TC

52、P 的有 限状 态机 CLOSED ESTABLISHED LISTEN CLOSE_WAIT FIN_WAIT_1 SYN_RCVD FIN_WAIT_2 CLOSING TIME_WAIT SYN_SENT LAST_ACK 主动打开 被动打开 被动关闭 主动关闭 起点 应用进程:被动打开 主动打开 发送 SYN 同时打开 收到 SYN,发送 SYN, ACK 收到 ACK 数据传送 阶段 关闭 发送 FIN 关闭 发送 FIN 关闭 发送 FIN 收到 RST 收到 SYN 发送 SYN, ACK 关闭 或超时 收到 ACK 收到 SYN, ACK 发送 ACK 收到 ACK 收到 AC

53、K 收到 FIN 发送 ACK 收到 FIN, ACK 发送 ACK 收到 FIN 发送 ACK 同时关闭 收到 FIN 发送 ACK 发送 SYN 定时经过两倍报文段寿命后 关闭 93 粗的红色粗的红色 实线表示实线表示 正常的客正常的客 户端状态户端状态 变迁;变迁; 粗的蓝色粗的蓝色 虚线表示虚线表示 正常的服正常的服 务器状态务器状态 变迁。变迁。 94 建立连接建立连接 :三次握手:三次握手 接收接收ACK AB 发送发送SYN seq=x REQUEST 接收接收SYN 接收接收SYN+ACK 客户端客户端 服务器服务器 主动打开主动打开 SYN_SENT LISTEN 被动打开被

54、动打开 ACCEPTED 发送发送SYN seq=y,ACK x+1 CONFIRM 发送发送ACK y+1 SYN_RCVD ESTABLISHED ESTABLISHED 95 断开连接断开连接 :四次握手:四次握手 接收接收ACK AB 发送发送ACK y+1 接收接收FIN 接收接收ACK 客户端客户端 服务器服务器 主动关闭主动关闭 FIN_WAIT_1 CLOSE_WAIT 被动关闭被动关闭 发送发送ACK x+1 LAST_ACK FIN_WAIT_2 CLOSED 发送发送FIN seq=y, ACK x+1 接收接收FIN+ACK TIME_WAIT 发送发送FIN seq=

55、x 96 2、TCP的定时器:的定时器:有多种定时器,如有多种定时器,如 重传定时器重传定时器 坚持定时器:坚持定时器:在接收方发出在接收方发出0窗口通告后,窗口通告后, 发送方为防止发送方为防止0窗口通告后窗口恢复通告丢失窗口通告后窗口恢复通告丢失 而造成死锁,用一个坚持定时器周期性地向接而造成死锁,用一个坚持定时器周期性地向接 收方发送窗口探测报文收方发送窗口探测报文 保活定时器保活定时器:在服务器端检测半开放连接:在服务器端检测半开放连接(只只 连接不传送数据连接不传送数据 ) 如果一个给定的连接在规定时间内没有任何如果一个给定的连接在规定时间内没有任何 动作,则服务器会向客户端发送探测

56、报文段,动作,则服务器会向客户端发送探测报文段, 根据响应情况进行处理根据响应情况进行处理 97 1、IP欺骗:欺骗:伪造他人伪造他人IP地址而达到蒙混过关的目的地址而达到蒙混过关的目的 TCP攻击举例攻击举例 A:目标机:目标机B:被伪装机:被伪装机 H:攻击机:攻击机 H冒充冒充B连接连接A H冒充冒充B向向A发送发送SYN报文报文 A向向B回应回应SYN+ACK报文报文 B发现错误,向发现错误,向A发发RST A发现错误发现错误 所以所以B必须死!必须死! 信任主机信任主机 DoS冒充冒充B发送发送SYN SYN+ACK丢弃丢弃 冒充冒充B发发ACK? 假设假设B死,攻击步骤:死,攻击步骤: 1. H冒充冒充B向向A发送发送SYN报文,报文,ISNn 2. A向向B回应回应SYN+ACK(ACK ISNn+1,SYN ISNa),白发,白发 3. H假冒假冒B回应回应ACK到到A(ACK ISNa+1) 关键:关键:ISNa=?(难点)?(难点) 解决:解决:掌握掌握ISN增长的规律,或者?增长的规律,或者? 98 RFC793:ISN是是32比特的计数器,每比特的计数器,每4ms

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论