小工具知识网

当前位置: 首页 > 行业知识 > 计网Lesson16 - TCP选择重传和流量控制

行业知识

计网Lesson16 - TCP选择重传和流量控制

2026-10-30 12:14:43 来源:互联网转载

文章目录

  • 1. 选择性确认(SACK)
  • 2. TCP流量控制
    • 2.1 基本情况
    • 2.2 ���殊情况

      1. 选择性确认(SACK)

      TCP通信中,发送序列中的某一包丢失(1,2,3,4,5 中 3 丢失),如果全部重传消耗太大,接收方会确认 2 ,然后窗口划过去,将3,4,5重传,但是由于4,5传过了,造成重复。

      • 创立SACK(Selective acknowledgment,选择性确认)技术
        • 告知发送方哪些数据收到,哪些数据丢失。
        • 不用重复传输。
        • SACK是TCP协议头中选项的一部分
          • Kind:1字节。kind == 5 代表这是SACK选项。
          • Length:1字节。代表SACK选项长度(字节)。
          • Left Edge:4字节。左边界。
          • Right Edge:4字节。右边界。
          • 区间左闭右开[…, …)
          • SACK选项
            • 最多携带4组边界信息。
            • 最大占用字节数:4 * 8 + 2 = 34B
            • 但是我们会发现问题:选项长度最大为40字节,左右边界占8字节,那么最多可以表示的区间只有4个,如果不止要重传4个区间怎么办呢?
              • 如果需要重传的区间超过4个,TCP协议的SACK(Selective Acknowledgment)选项可能无法完全表示所有的区间。在这种情况下,SACK选项通常会选择最重要的区间进行报告,例如最早丢失的区间或者数据量最大的区间。

                然后,当发送方收到SACK选项后,它会立即重传那些被报告为丢失的区间。同时,接收方会继续发送新的SACK选项,来报告其他的丢失区间。

              • 为什么选择在传输层将数据分成多个段,而不是等到网络层分片传递给数据链路层?
                • 如果出错,直接整段重传,浪费资源。

                  2. TCP流量控制

                  TCP为应用程序提供了 流量控制(Flow Control) 机制,以解决因发送方发送数据太快而导致接收方来不及接收,造成接收方的接收缓存溢出的问题。

                  2.1 基本情况

                  • 流量控制基本方法:接收方根据缓存区状况来控制发送方的发送速率。
                    • 通过报文中的窗口来控制。
                    • 发送方的窗口不能大于接收方给出的窗口大小。
                    • 接收方给出窗口大小为0时,发送方停止发送。

                      2.2 特殊情况

                      发送方给出窗口为0,之后又有了一些缓存,想让发送方继续发送数据,发送非0窗口报文,结果这个报文丢失了,改如何解决?

                      • 解决方案:
                        • 当发送方收到0窗口报文时停止发送数据。
                        • 同时开启一个计时器,每隔一段时间发送测试报文询问新窗口大小。
                        • 如果还是0,重新启动定时器。

                          解析:

                          • 窗口有4段报文:1,2,3,4;先发了1,2,结果只确认了1。
                          • 那么接下来窗口滑到2,大小调整为2,那么窗口内就是2,3两段报文。
                          • 由于之前发过了2,又没有说明要重发2,所以不发,只需要发3即可。

                            答案选A

上一篇:淘宝信誉背后的真相,揭秘刷信誉平台源码内幕!

下一篇:揭秘二维码查询秘籍,轻松获取关键信息!