Download presentation
Presentation is loading. Please wait.
Published bySudomo Sugiarto Modified 6年之前
1
第十讲 TCP协议 协议概述 报文段格式 差错控制 流控和拥塞控制 TCP连接管理 TCP性能问题 TCP软件设计 2018/12/7
2
引言 高层应用的需求 TCP 传输大量的数据,要求可靠的通信服务 自身的可靠性机制弱 底层网络和IP网络是不可靠、无连接投递
提供通用的、可靠的通信服务 提供统一的数据流投递服务接口 2018/12/7 第十讲 TCP协议
3
两种通信方式 报文流 Datagram stream 数据流 Data stream 投递单位:报文 可靠性:报文按序接收
投递单位:byte 可靠性:byte按序接收 连续字节流、无边界 接收的字节:顺序严格与发送方发送顺序相同 发送:数据块或逐字节,前后可合并 接收:数据块或逐字节 2018/12/7 第十讲 TCP协议
4
可靠投递服务特点 面向数据流的传输 虚电路连接 无起点、无终点的byte(8位位组)流
尽管IP网络是无连接的,但在TCP的端点上,却可看作是面向连接的通信 —— 端到端连接 IP网络 TCP TCP 2018/12/7 第十讲 TCP协议
5
可靠投递服务特点(续) 有缓冲的传送 —— 提高传输效率 无结构数据流 全双工服务
应用进程:使用自己认为适宜的任何大小的数据片(最小1字节) TCP协议软件:根据网络情况选择适当的收发缓冲区(合并/分割) Push:强制滞留数据的发送 无结构数据流 TCP认为数据流没有边界,内容任意 可以任意点作为分片的边界 全双工服务 2018/12/7 第十讲 TCP协议
6
数据流、报文段、序号 Data stream Sending Receiving Incising Sending buffer
Receiving buffer Recovering Segment A segment’s sequence number is the number assigned to the first byte of data in this segment. 2018/12/7 第十讲 TCP协议
7
序号 依据数据流中的字节序号(流序号) 报文序号为报文段中第一个字节的流序号 特点 如:流序号=X,长度=L的报文段
则:报文的序号为X,下一报文序号为X+L 特点 报文的顺序关系 指示了数据流的位置,更便于流的复原 较大的序号空间(32bit,4Gbyte) 序号不连续,n1<n2<n3… 2018/12/7 第十讲 TCP协议
8
TCP可靠性保证 采用面向连接的通信方式 滑动窗口协议,以提高通信性能 捎带确认方式 TCP只有一种报文格式,完成
未使用显式确认,减少报文种类 TCP只有一种报文格式,完成 建立、拆除连接 数据传输 确认、流控、窗口滑动 捎带 Piggybacking Data Acknowledgment 2018/12/7 第十讲 TCP协议
9
TCP端口、端点、连接 端口、端点概念与方式与UDP完全一样 连接:TCP上通信双方抽象的虚电路连接 80 16250 Port: 80
Endpoint: ( , 80) Connection: ( , 80) and ( , 16250) 2018/12/7 第十讲 TCP协议
10
10.1 协议概述 Transmission Control Protocol,TCP RFC 793,传输控制协议
10.1 协议概述 Transmission Control Protocol,TCP RFC 793,传输控制协议 Application Layer Transport Layer TCP UDP ICMP IGMP Network Layer IP ARP RARP Network Access Layer LANs MANs WANs 2018/12/7 第十讲 TCP协议
11
10.2 报文段格式 完成所有操作 Segment 标识应用进程 差错控制 以字节为单位 控制字段 流控 同UDP
10.2 报文段格式 完成所有操作 Segment 标识应用进程 差错控制 以字节为单位 控制字段 流控 同UDP (0 ~ 40 bytes) 2018/12/7 第十讲 TCP协议
12
10.2.1 控制字段 报文类型、流控、连接建立和拆除 URG ACK PSH RST SYN FIN
控制字段 报文类型、流控、连接建立和拆除 URG ACK PSH RST SYN FIN URG: Urgent pointer is valid RST: Reset the connection ACK: Acknowledgment is valid SYN: Synchronize sequence numbers PSH: Request for push FIN: Terminate the connection 2018/12/7 第十讲 TCP协议
13
10.2.2 紧急指针与带外数据 带外数据(out-of-band data,urgent data) 紧急指针
紧急指针与带外数据 带外数据(out-of-band data,urgent data) 位于数据字段的开始,例如:ctrl-c 不在数据流中排队,直接递交上层 提供快速传递数据的功能 紧急指针 指向带外数据的最后一个字节 urgent 接收缓冲区 2018/12/7 第十讲 TCP协议
14
10.2.3选项 无操作 No operation 单字节 Single-byte 选项结束 End of option 选项 Option
2018/12/7 10.2.3选项 无操作 No operation 单字节 Single-byte 选项结束 End of option 选项 Option 最大报文段长度 Max segment size 多字节 Multiple-byte 窗口比例因子 Window scale factor 时间戳 Timestamp RFC 1323 2018/12/7 第十讲 TCP协议
15
最大报文段长度(MSS) MSS影响网络传输性能 最佳MSS 通信双方在连接建立时用MSS选项进行MSS值的协商 默认值:536
Code:2 Length:4 MSS 2 bytes MSS影响网络传输性能 太小:降低网络利用率(报文开销) 太大:降低网络性能(分片降低成功传输概率) 最佳MSS 理论:尽可能长而不分片 实际:不存在 通常:发送端按发送接口的MTU来确定MSS 通信双方在连接建立时用MSS选项进行MSS值的协商 接收方不能处理较长的报文时(如资源有限等) 默认值:536 2018/12/7 第十讲 TCP协议
16
窗口比例因子 针对高吞吐量和高时延传输介质上的数据传输,增大窗口大小 窗口大小可在数据传输阶段改变,窗口比例因子只能在连接建立阶段确定
Code:3 Length:3 比例因子 (1 byte) 针对高吞吐量和高时延传输介质上的数据传输,增大窗口大小 新窗口大小 = 首部中定义的窗口大小 * 2 比例因子 比例因子的最大值是16 最大窗口大小 = 216 * 216 = 232 窗口大小可在数据传输阶段改变,窗口比例因子只能在连接建立阶段确定 2018/12/7 第十讲 TCP协议
17
时间戳 用来测量往返时间,动态定义超时时间 Code:8 00001000 Length:10 00001010
Timestamp value (4 bytes) Timestamp echo reply (4 bytes) 2018/12/7 第十讲 TCP协议
18
10.3 TCP的差错控制 TCP的可靠性 差错控制 按序 无差错 不丢失、不重复 正确投递数据 检测:校验和、确认、超时 纠正:重传
2018/12/7 第十讲 TCP协议
19
TCP的确认机制 确认机制 —— 带重传的肯定确认,Positive acknowledgement with retransmission
发送方重传错误数据(受损报文、丢失报文) 累计确认 ACK number是接收方希望接收的下一个字节 对ACK number以前的所有字节的确认 问题:发送方如何判定错误数据? 没有收到确认 问题:发送方怎样判定没有收到确认? 超时机制 2018/12/7 第十讲 TCP协议
20
超时重传机制 发送方发送数据时启动一个定时器 未确认数据 定时期间,发送方收到确认后,再发送后续数据 定时期满,发送方重传未确认数据
受损的数据 丢失的数据 2018/12/7 第十讲 TCP协议
21
Segment 3, retransmitted
受损报文的超时重传 Sender Receiver Segment 1 Seq: 1201, 200bytes Segment 2 Seq: 1401, 200bytes Segment 3 Ack: 1601 Seq: 1601, 200bytes OK OK 报文段3 受损 Segment 3, retransmitted 超时 Seq: 1601, 200bytes Ack: 1801 OK Time Time 2018/12/7 第十讲 TCP协议
22
Segment 3, retransmitted
丢失报文的超时重传 Sender Receiver Segment 1 Seq: 1201, 200bytes Segment 2 Seq: 1401, 200bytes Segment 3 Ack: 1601 Seq: 1601, 200bytes 报文段3 丢失 OK OK Segment 3, retransmitted 超时 Seq: 1601, 200bytes Ack: 1801 OK Time Time 2018/12/7 第十讲 TCP协议
23
丢失确认 Sender Receiver Segment 1 Seq: 1201, 200bytes Segment 2
Ack: 1601 Ack: 1801 OK OK OK 确认丢失 Time Time 2018/12/7 第十讲 TCP协议
24
问题:重复报文段 原因 解决 关键:精确估计当前的RTT 重传定时器 < 报文往返时间(Round Trip Time)
接收方根据报文段的序号,丢弃重复报文段 重传定时器 >= RTT 自适应超时重传算法 不同的连接传输路径“远近”差异,时延随网络流量变化的差异 —— 固定超时时限只能使TCP性能更糟 超时重传报文时,后续的重传报文“再多等一会儿”,这当中也许就收到了确认(考虑时延的不确定性) 关键:精确估计当前的RTT 自学:教材12.7 2018/12/7 第十讲 TCP协议
25
问题:失序报文段 原因 解决 封装TCP报文段的IP数据报的独立选路,不按序到达 接收方对失序报文段不确认,直到收到所有它以前的报文段为止
若确认晚到,发送方重发失序报文段,接收方丢弃重复的报文段 2018/12/7 第十讲 TCP协议
26
问题:发送方和网络的利用率 原因 解决 等待确认时,发送方和网络处于空闲状态 发送方在等待确认期间,可继续发送多个报文段 —— 滑动窗口机制
2018/12/7 第十讲 TCP协议
27
10.4 TCP的流量控制和拥塞控制 TCP的流控 TCP的拥塞控制 收发速率匹配,防止接收方被数据流淹没
方法:收发速率匹配 —— 滑动窗口协议 TCP的拥塞控制 TCP的拥塞表现为时延增加 超时重传机制会进一步加重网络拥塞 方法:减少报文段的发送量 —— 基于滑窗协议 拥塞避免 2018/12/7 第十讲 TCP协议
28
滑动窗口(Sliding Window) 窗口 滑动 发送方在收到确认前,其发送缓冲区中可以发送的数据流长度 单位:报文或字节
随着确认的不断到达,窗口也不断的向后移动 sender 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 10 11 12 13 14 15 16 Window = 5 ACK1 ACK4 receiver 2018/12/7 第十讲 TCP协议
29
TCP滑动窗口机制——发送窗口 发送窗口 发送窗口随确认过程滑动 发送缓冲区中可以发送的数据流长度
已发未确认 —— 等待确认或重发 可以发送 —— 当前仍未发出,其数据将切割成适当的报文段后发送 Sliding window 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 已发送 并确认 已发送 未确认 可以 发送 不能 发送 指针 2018/12/7 第十讲 TCP协议
30
TCP的接收缓冲区 接收缓冲区 对接收的报文段进行字节流排序 上层可以一次1字节或多字节提取字节流
下层(IP层)一个、一个报文段提交给TCP 接收缓冲区 已提交 已排序 未提交 零散段 部分排序,中间有空缺 可用缓冲区 思考:为什么TCP的接收缓冲区中会有空缺部分? 2018/12/7 第十讲 TCP协议
31
TCP的动态可变窗口 发送窗口大小动态可变 极端情况:接收方通告的可用缓冲区=0 接收方通告当前可用接收缓冲区大小
发送方用该通告值调整发送窗口大小 优点:更加有效的传输,同时还可控制数据流量 极端情况:接收方通告的可用缓冲区=0 发送方停止发送 重新开始发送的条件 收到窗口值不为0的通告 试探性发送 —— 预防通告丢失造成的死锁 带外数据 ACK报文首部的窗口字段值 滑动中调整 2018/12/7 第十讲 TCP协议
32
TCP滑窗讨论:超时重传 发送端重传等待确认的数据 动态可变窗口对重传的影响:重传报文与原报文不一致 接收复原
依据当前发送窗口,重新切割和重传报文段 传输往返时延可变,需动态改变超时时限 动态可变窗口对重传的影响:重传报文与原报文不一致 窗口值缩小,报文长度会减小,反之,会增大 接收复原 离散复原(流序号起重要作用) 2018/12/7 第十讲 TCP协议
33
TCP滑窗讨论:流量控制 发送缓存、发送窗口、接收缓存 发送方不一定要发送整个窗口大小的数据 窗口大小由接收方调整,实现流量控制
大窗口增加流量 小窗口减少流量 零窗口暂停发送 接收方可在任何时候发送确认 可能的问题 窗口机制不会立即起作用(网络缓冲) 无法确切知道和防止网络中间的拥塞 2018/12/7 第十讲 TCP协议
34
窗口管理 Sender Receiver Buffer Segment 1 Seq: 1001, 4000B 4000
Ack: 5001, Win: 0 1000 3000 Ack: 5001, Win: 1000 Seq: 5001, 1000B Segment 2 2018/12/7 第十讲 TCP协议
35
TCP滑窗讨论:拥塞避免(1) 前提 方法一:加速递减(multiplicative decrease) 假定报文的丢失都是由网络拥塞引起的
发送窗口=min(窗口通告值,拥塞窗口) 方法一:加速递减(multiplicative decrease) 一旦出现丢失报文,则拥塞窗口减半 按指数递减 发送窗口内数据超时时限加倍 指数递减重传速率 2018/12/7 第十讲 TCP协议
36
拥塞避免(2) 方法二:慢启动(slow start)、加法增大
连接的开始,拥塞窗口设为最大报文段长度,收到确认后,拥塞窗口即发送窗口增加1个MSS 以后发送端报文段,收到确认,窗口值按指数规律增长 发送窗口到达门限值(0.5*窗口通告值)后,拥塞窗口(即发送窗口)线性增加。(加法增大) 发生了拥塞,拥塞窗口值从1个MSS重新开始,门限值按指数规律减少(乘法减少) 2018/12/7 第十讲 TCP协议
37
慢启动、加法增大、乘法减少策略 2018/12/7 第十讲 TCP协议
38
10.5 TCP连接管理 连接的概念 连接建立 连接拆除 连接复位 由一对端点标识:(IP1,port1)--(IP2,port2)
连接个数受机器内存容量限制,最多65535个 Server Client 1 应用2 Client 2 应用1 应用1 应用3 应用3 应用2 TCP TCP TCP 2018/12/7 第十讲 TCP协议
39
10.5.1 TCP连接建立 主动建立连接(Active open) 被动建立连接(Passive open)
发起建立连接,Clinet 被动建立连接(Passive open) 接受建立连接,Server 被动连接方一般先于主动连接方启动,但不发起连接建立过程,而是在某个端口上等待主动方的连接请求 TCP连接的任意一方都可以主动打开连接 2018/12/7 第十讲 TCP协议
40
初始序号 TCP连接的初始序号值非常关键 TCP使用随机的初始序号值
双方都必须知道对方的初始序号才能正常通信 双方都需确认对方得到了自己的初始序号 确保把初始序号送到对方使得TCP采用三次握手(three-way handshake)方式建立连接 考虑报文丢失、乱序、重复、延迟的因素 2018/12/7 第十讲 TCP协议
41
三次握手:建立连接 Client Server Procedure starts with server Waits for a
passive open Requests for An active open Segment 1: SYN seq : 1200, ack : -- Client’s wish to make a connection Segment 2: SYN+ACK seq : 4800, ack : 1201 Server’s ack. and own request Segment 3: ACK seq : 1201, ack : 4801 Client’s ack. to server’s request Data can be sent with the 3rd packet 2018/12/7 第十讲 TCP协议
42
10.5.2 TCP连接拆除 通信是双向的,但连接的拆除是单向的 连接拆除的发起方只能关闭自己的发送方向 接收方向由对方拆除
网络上两个方向所走的路不同 报文段从网络上陆续到达主机 连接拆除的发起方只能关闭自己的发送方向 不能发送数据,可发送确认,可接收数据, 接收方向由对方拆除 发送方向 接收方向 TCP TCP 接收方向 发送方向 2018/12/7 第十讲 TCP协议
43
四次握手:拆除连接 Client Server Procedure starts with client Segment 1: FIN
Server’s ack. to client’s request Seq: 2500, ack: -- Client’s wish to close the connection Segment 2: ACK Seq: 7000, ack: 2501 Segment 3: FIN Client’s ack. to server’s request Seq: 7001, ack: 2501 Server’s wish to close the connection Segment 4: ACK Seq: 2501, ack: 7002 2018/12/7 第十讲 TCP协议
44
10.5.3 TCP连接复位 连接复位(reset) 发出RST=1的报文,立即中止连接(双向) 收到RST=1的报文,立即中止连接(双向)
异常中断连接 快速关闭连接,无确认 发出RST=1的报文,立即中止连接(双向) 收到RST=1的报文,立即中止连接(双向) 2018/12/7 第十讲 TCP协议
45
10.5.4 TCP状态转换图 CLOSED Active open/SYN Active open/SYN Passive open/--
RST/-- Close/-- SYN/SYN+ACK SYN/SYN+ACK LISTEN Close or time-out /-- Time-out /RST RST/-- Send/SYN SYN-RCVD SYN-SENT SYN/SYN+ACK (simultaneous open) ACK/-- ACK/-- SYN/SYN+ACK SYN/SYN+ACK ESTABLISHED Close/FIN Close/FIN Close/FIN FIN/ACK FIN/ACK FIN/ACK FIN WAIT-1 CLOSING CLOSE WAIT FIN+ACK/ACK ACK/-- ACK/-- ACK/-- Close/FIN Close/FIN FIN/ACK FIN/ACK FIN WAIT-2 TIME-WAIT LAST ACK (Time-out) (Time-out) ACK/-- ACK/-- 2018/12/7 第十讲 TCP协议
46
有限状态机 Finite State Machine 要素 直观、全局、准确的协议描述方法 事件触发状态的转换 某些转换不一定产生动作
事件 / 动作 状态1 状态2 思考:根据TCP状态转换图画以下时序交互图 通信双方同时主动打开连接 通信双方同时关闭连接 2018/12/7 第十讲 TCP协议
47
客户端有限状态机 2018/12/7 第十讲 TCP协议
48
服务器端有限状态机 2018/12/7 第十讲 TCP协议
49
10.6 TCP性能问题 TCP协议软件有较高的性能 实际中发现:通信双方的应用进程以不同速率工作时,会出现严重的性能问题
糊涂窗口综合症(Silly Window Syndrome,SWS) RFC 813 接收方:确认报文通告小窗口 发送方:报文段携带少量数据 2018/12/7 第十讲 TCP协议
50
接收方的SWS避免 推迟窗口通告(Clark解决方法) 推迟确认 通告零窗口之后,在接收窗口显著增加之前,推迟窗口的通告 推迟确认的发送
达到接收缓冲区的一半 或达到最大报文段长度 推迟确认 推迟确认的发送 直到窗口值增大到一定程度,或 有数据要发送,或 超时时限快到 2018/12/7 第十讲 TCP协议
51
推迟确认的特点 优点:降低流量、提高吞吐量 缺点 TCP规定: 收到多个报文段,只需一个确认(累计确认)
应用程序读取数据处理后,可能马上产生新的数据送到对方,短暂延迟正好可用该数据来捎带应答 短暂延迟后,也许接收窗口增大到可以通告的程度 缺点 增加了发送方的超时重传可能性 使RTT估计值增大,重传超时增大(反应变慢) TCP规定: 最大推迟时间=500ms 每隔一个报文就应至少一次正常应答方式 2018/12/7 第十讲 TCP协议
52
发送方的SWS避免 延迟发送 延迟时间 延迟策略:根据当前网络性能而定 收集应用程序的发送数据,聚集合理的数据量
长——反应变慢(如对话应用程序) 短——数据量少,吞吐率下降 延迟策略:根据当前网络性能而定 自适应机制,不计算延迟,使用确认的到达来触发报文的发送( Nagle 算法) 2018/12/7 第十讲 TCP协议
53
10.7 TCP软件设计 2018/12/7 第十讲 TCP协议
54
参考 RFC 2525:Know TCP Implementation Problems 18个问题 2018/12/7 第十讲 TCP协议
55
小结 TCP协议能适应各种性能的网络 TCP协议能适应长、短不同的时延及时延变化范围大的传输路径 应用适应性 TCP的可靠性保证
能与不同处理能力的主机很好的通信 能满足大数据量的传输的要求,较高的吞吐性能 能满足小数据量且要求快捷反应的应用 TCP的可靠性保证 差错控制原理 流量控制原理 拥塞控制原理 2018/12/7 第十讲 TCP协议
Similar presentations