修正的Karn算法 ·报文段每重传一次,就把RTO增大一些: 新的RTO=Y×(旧的RTO) ·系数y的典型值是2。 ·当不再发生报文段的重传时,才根据报文段的往 返时延更新平均往返时延RTT和超时重传时间 RTO的数值。 ·实践证明,这种策略较为合理。 运输层(1) 22
修正的 Karn 算法 • 报文段每重传一次,就把 RTO 增大一些: • 系数 的典型值是 2 。 • 当不再发生报文段的重传时,才根据报文段的往 返时延更新平均往返时延 RTT 和超时重传时间 RTO 的数值。 • 实践证明,这种策略较为合理。 新的 RTO (旧的 RTO) 运输层(1) 22
5.6.3选择确认SACK 问题:若收到的报文段无差错,只是未按序号, 中间还缺少一些序号的数据,那么能否设法只传 送缺少的数据而不重传已经正确到达接收方的数 据? ·答案是可以的。 选择确认 SACK (Selective ACK)就是一种可行的处理方法。 运输层(1) 23
5.6.3 选择确认 SACK • 问题:若收到的报文段无差错,只是未按序号, 中间还缺少一些序号的数据,那么能否设法只传 送缺少的数据而不重传已经正确到达接收方的数 据? • 答 案 是 可 以 的 。 选 择 确 认 SACK (Selective ACK) 就是一种可行的处理方法。 运输层(1) 23
接收到的字节流序号不连续 TCP的接收方在接收对方发送过来的数据字节流的序号 不连续,结果就形成了一些不连续的字节块。 连续的字节流 第一个字节块 第二个字节块 1000 。f501 3000 4500… 确认号=1001L1=1501 R1=3001L2=3501 R1=4501 和前后字节不连续的每一个字节块都有两个边界:边界和右边界。 ● 第一个字节块的左边界L1=1501,但右边界R1=3001。左边界指 出字节块的第一个字节的序号,但右边界减1才是字节块中的最 后一个序号。 第二个字节块的左边界L2=3501,而右边界R2=4501。 运输层(1) 24
接收到的字节流序号不连续 1 1000 1501 3000 3501 4500 确认号 = 1001 L1 = 1501 L R1 = 3001 2 = 3501 R1 = 4501 … … 连续的字节流 … … … 第一个字节块 第二个字节块 和前后字节不连续的每一个字节块都有两个边界:边界和右边界。 第一个字节块的左边界 L1 = 1501,但右边界 R1 = 3001。左边界指 出字节块的第一个字节的序号,但右边界减 1 才是字节块中的最 后一个序号。 第二个字节块的左边界 L2 = 3501,而右边界 R2 = 4501。 TCP 的接收方在接收对方发送过来的数据字节流的序号 不连续,结果就形成了一些不连续的字节块。 运输层(1) 24
5.6.3选择确认SACK 。子 接收方收到了和前面的字节流不连续的两个字节 块。 如果这些字节的序号都在接收窗口之内,那么接 收方就先收下这些数据,但要把这些信息准确地 告诉发送方,使发送方不要再重复发送这些已收 到的数据。 运输层(1) 25
5.6.3 选择确认 SACK • 接收方收到了和前面的字节流不连续的两个字节 块。 • 如果这些字节的序号都在接收窗口之内,那么接 收方就先收下这些数据,但要把这些信息准确地 告诉发送方,使发送方不要再重复发送这些已收 到的数据。 运输层(1) 25
RFC2018的规定 。1 如果要使用选择确认,那么在建立TCP连接时,就 要在TCP首部的选项中加上“允许SACK”的选项, 而双方必须都事先商定好。 。1 如果使用选择确认,那么原来首部中的“确认号字 段”的用法仍然不变。只是以后在TCP报文段的首 部中都增加了SACK选项,以便报告收到的不连续 的字节块的边界。 由于首部选项的长度最多只有40字节,而指明一个 边界就要用掉4字节,因此在选项中最多只能指明 4个字节块的边界信息。 运输层(1) 26
RFC 2018 的规定 • 如果要使用选择确认,那么在建立 TCP 连接时,就 要在 TCP 首部的选项中加上“允许 SACK”的选项, 而双方必须都事先商定好。 • 如果使用选择确认,那么原来首部中的“确认号字 段”的用法仍然不变。只是以后在 TCP 报文段的首 部中都增加了 SACK 选项,以便报告收到的不连续 的字节块的边界。 • 由于首部选项的长度最多只有 40 字节,而指明一个 边界就要用掉 4 字节,因此在选项中最多只能指明 4 个字节块的边界信息。 运输层(1) 26