- 1、本文档共87页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]TCP协议
SACK-Permitted Left Edge of Block 不连续块的第一个数据的序列号 Right Edge of Block 不连续块的最后一个数据的序列号之后的序列号。 表示(Left Edge - 1)和(Right Edge)处序列号的数据没能接收到。 慢开始和拥塞避免算法的实现举例 2 4 6 8 10 12 14 16 18 20 22 0 0 4 8 12 16 20 24 传输次数 拥塞窗口 cwnd 进入拥塞避免 发生超时 指数规律增长 线性规律增长 ssthresh = 16 慢开始 慢开始 拥塞避免 拥塞避免 更新后的 ssthresh = 12 进入拥塞避免 发送端收到 ACK1 (确认 M0,期望收到 M1)后,将 cwnd 从 1 增大到 2,于是发送端可以接着发送 M1 和 M2 两个报文段。 用三次握手建立 TCP 连接 SYN, SEQ = x 主机 B SYN, ACK, SEQ = y, ACK= x + 1 ACK, SEQ = x + 1, ACK = y ? 1 被动打开 主动打开 确认 确认 主机 A 连接请求 7.3 TCP的连接管理 A 的 TCP 向 B 发出连接请求报文段,其首部中的同步比特 SYN 应置为 1,ACK控制位置0,选择初始序号 x。 B 的 TCP 收到连接请求报文段后,如同意,则发回确认。B 在确认报文段中应将 SYN 和ACK均置为 1,其确认号为 x ? 1,同时也为自己选择初始序号 y。 A 收到此报文段后,向 B 给出确认,其SYN置为0,ACK置为1,序号为x+1,确认号为 y ? 1。 A 的 TCP 通知上层应用进程,连接已经建立。 当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。 * 7.3 TCP的连接管理 注意: 连接请求报文中的控制位SYN应置1,ACK应置0 连接请求应答报文中的控制位SYN和ACK均应该设置为1 连接请求应答报文的确认报文的控制位SYN应置为0,ACK应置为1 SYN为1的报文要消耗一个序号,数据字段的序号是初始序号+1 * TCP 连接释放的过程 FIN, SEQ = x ACK, SEQ = y, ACK= x + 1 ACK, SEQ = x + 1, ACK = y ? 1 应用进程 释放连接 A 不再发送报文 FIN, ACK, SEQ = y, ACK = x + 1 主机 B 主机 A 通知主机 应用进程 ① 应用进程 释放连接 B 不再发送报文 ② 确认 确认 从 A 到 B 的连接就释放了,连接处于半关闭状态。 相当于 A 向 B 说: “我已经没有数据要发送了。 但你如果还发送数据,我仍接收。” 至此,整个连接已经全部释放。 7.4 顺序号和确认 TCP 协议是面向字节的。TCP 将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。 在连接建立时,双方要商定初始序号。TCP 每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。 TCP 的确认是对接收到的数据的最高序号表示确认。接收端返回的确认号是已收到的数据的最高序号加 1。因此确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。 * 顺序号 顺序号的最大值为 232 -1 。当数据过大,顺序号超过此数,则顺序号对232 取模。 * 接收端对接收数据的确认 * SACK-Permitted 在A→B的报文段发送过程中,B只会对连续接收到的报文段发送ACK信息。 若其中某一报文段没有被B正确接收,即使后续的报文段被接收到,B也不会向A发回确认报文段。 这样在A超时重传时,会把已正确发送给B的数据重新再发送一遍。 SACK-Permitted 比如: A向B发送了4个长度均为100字节的报文段,其中0~99、200~299、300~399的报文段正确到达B,而100~199的报文段没有到达B,这时,B也不会向A发送ACK报文段。 因此,当A由于接收不到ACK报文而超时重传时,将会把200~299、300~399重新发送给B。 解决该问题的方法是使用:SACK-Permitted和SACK功能。 SACK-Permitted 在建立连接阶段,使用选项码4来通知对方本机允许使用SACK功能(SACK-Permitted)。该选项只用于SYN置位的报文。即只可在建立连接阶段使用该选项。 在通信阶段,通过在ACK位被置位的报文段中使用选项码为5(SACK)的选项,来通知发送方已经接收到并缓存的不连续的数据块。 SACK-Permitted SACK选项格式: 选项码:5 长度 Left Edge of 1st B
文档评论(0)