第一百五十三回 如何实现滑动窗口

Flutter实现滑动窗口组件详解,
本文介绍了如何在Flutter中使用SlidingUpPanel第三方包实现滑动窗口效果,包括关键属性如minHeight、maxHeight的控制,以及如何配合Controller进行手动开关。通过示例代码展示了滑动窗口的悬浮和关闭功能。


我们在上一章回中介绍了自定义组件实现游戏摇杆相关的内容,本章回中将介绍 如何实现滑动窗口.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在本章回中介绍的滑动窗口表示在屏幕底部向上滑动时弹出一个窗口,向下滑动时隐藏该窗口。如果有看官不理解的话,可以查看下面的程序运行效果图。图中是个悬浮的窗口效果图,向上滑动弹出窗口,向下滑动关闭窗口。本章回中将介绍如何实现这样的滑动窗口。
在这里插入图片描述

实现方法

我们在这里实现滑动窗口时需要借助sliding_up_panel这个三方包实现,因此我们主要介绍一下这个包的使用方法,掌握这些方法后就可以实现滑动窗口。

包中把滑动窗口封装成了SlidingUpPanel组件,我们可以向使用其它组件一样使用它,因此我主要介绍SlidingUpPanel组件中常用的属性,通过这些属性来控制滑动窗口。

  • minHeight属性:控制滑动窗口收缩时的高度;
  • maxHeight属性:控制滑动窗口展开时的高度;
  • panel属性:该属性是widget类型,用来控制滑动窗口展开时显示的内容;
  • collapsed属性:该属性是widget类型,用来控制滑动窗口收缩时显示的内容;
  • body属性:该属性是widget类型,用来滑动容器上方剩余空间显示的内容;
  • backdropColor属性:用来控制body窗口中的背景色;
  • backdropOpacity属性:用来控制body窗口中的背景色的透明度;
  • backdropTapClosesPanel属性:用来控制点击body窗口时是否关闭滑动窗口,默认值是true,表示可以关闭;
  • onPanelClosed属性:该属性是方法类型,滑动窗口完全关闭时回调这个方法;
  • onPanelOpened属性:该属性是方法类型,滑动窗口完全展开时回调这个方法;
  • controller属性:该属性用来控制滑动窗口,它提供了相关的方法来打开和关闭滑动窗口;

上面是一些常用的属性,SlidingUpPanel组件还有其它的属性,我们在这就不一一介绍了,大家可以参考pub.dev上介绍的内容,作者介绍的非常详细,而且还给出示例程序,比如实现悬浮窗口的程序就很详细,除此之外,作者还介绍几个常用的使用场景。

该包的功能十分强大,而且提供的场景非常适用,稍微有遗憾的地方是很长时间没有更新了,好在还兼容dart3和空安全机制。

示例代码

SlidingUpPanel(
  ///控制panel收缩时的值和展开时的值
  minHeight: 60,
  maxHeight: 500,
  ///控制panel的圆角,边框,阴影
  border: const Border(top:BorderSide(color: Colors.blue,width: 4,),),
  boxShadow:const [
    BoxShadow(
      color: Colors.grey,
      spreadRadius: 4,
    ),
  ],
  ///拉起panel时非panel部分显示的颜色,这个颜色不包含appBar及它顶部的颜色,
  ///如果想要修改需要把该组件的body设置为scaffold,而不是当前的column
  backdropEnabled: true,
  backdropColor: Colors.red,
  ///非panel部分颜色的透明度,默认值是1
  backdropOpacity: 1,
  ///点击非panel部分时是否关闭panel,默认值是true,表示可以关闭
  backdropTapClosesPanel: false,
  ///操作panel时的回调方法
  ///这个参数是panel展开的范围值,从0-1
  onPanelSlide: (position) => debugPrint('onPanelSlide $position'),
  ///panel完全关闭和展开时才回调这两个方法
  onPanelClosed: () => debugPrint('onPanelClosed'),
  onPanelOpened: () => debugPrint('onPanelOpened'),


  ///来源于官方示例:这个值设置为false,同时给panel添加边距可以实现panel悬浮效果
  renderPanelSheet: false,
  ///panel中显示的组件
  panel: Container(
    margin: const EdgeInsets.all(40),
    // color: Colors.yellowAccent,
    ///这个装饰是给悬浮效果用的,这样可以呈现出立体效果,正常的panel不需要,比如下面的代码是一个金光效果
    decoration: const BoxDecoration(
      color: Colors.white,
      borderRadius: BorderRadius.all(Radius.circular(20)),
      boxShadow:[
       BoxShadow(
         color: Colors.yellowAccent,
         spreadRadius: 8,
         blurRadius: 20,
       ),
      ]
    ),
    child:const Text('panel'),),

  ///panel隐藏时显示的组件
  collapsed:Container(
    margin: const EdgeInsets.all(40),
    color: Colors.green,
    alignment: Alignment.center,
    child: const Text('collapsed'),),

  ///展开panel时顶部的内容会向上滑动,因此最上面的内容会被隐藏掉
  body: Column(
    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
    children: [
      const Text('no panel'),
      const Icon(Icons.recommend_outlined),
      ElevatedButton(
        onPressed: showModalPanel,
        child: const Text('Show Modal Bottom Sheet'),
      ),
       ///通过panelControl打开、关闭panel
       ElevatedButton(
        onPressed: openPanel,
        child: const Text('open panel'),
      ),
      ElevatedButton(
        onPressed: closePanel,
        child: const Text('close panel'),
      ),
  ], ),
  controller:panelController ,
),

我们在上面的示例代码中添加中了注释,这样方便大家理解代码。编译并且运行上面的程序就可以得到一个悬浮的滑动窗口。

此外,我们还可以通过controller属性来打开和关闭滑动窗口,这样就可以通过按钮来打开和关闭窗口,相当于在滑动打开关闭窗口的基础上多了一种选择。

看官们,与"如何实现滑动窗口"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

2025-11-25 15:26:36,647 [INFO] [发送方] ARQ轮次 8 | 滑动窗口 [147, 151) | 待确认块 36 | 已确认块 147 | 总块数 183 2025-11-25 15:26:36,647 [INFO] [发送方] 本轮发送 4 个块:[[147], [148], [149], [150]] ARQ窗口[147,151): 100%|██████████| 4/4 [00:00<00:00, 5.04it/s] 2025-11-25 15:26:37,441 [INFO] ARQ窗口[147,151)完成:发送4包 → 实际接收到数据包4包(丢包率0.00%) 2025-11-25 15:26:37,441 [INFO] [接收方] 成功接收块 147(窗口:[147, 151) | 数据长度:1400) 2025-11-25 15:26:37,441 [INFO] [接收方] 接收窗口滑动:147 → 148 2025-11-25 15:26:37,441 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:37,441 [INFO] [接收方] 成功接收块 148(窗口:[148, 152) | 数据长度:1400) 2025-11-25 15:26:37,442 [INFO] [接收方] 接收窗口滑动:148 → 149 2025-11-25 15:26:37,442 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:37,442 [INFO] [接收方] 成功接收块 149(窗口:[149, 153) | 数据长度:1400) 2025-11-25 15:26:37,442 [INFO] [接收方] 接收窗口滑动:149 → 150 2025-11-25 15:26:37,442 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:37,442 [INFO] [接收方] 成功接收块 150(窗口:[150, 154) | 数据长度:1400) 2025-11-25 15:26:37,442 [INFO] [接收方] 接收窗口滑动:150 → 151 2025-11-25 15:26:37,442 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:37,442 [INFO] [发送方] 接收方反馈 | 缺失块:[151, 152, 153, 154] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150] 2025-11-25 15:26:37,443 [INFO] [发送方] 发送窗口滑动:147 → 148 2025-11-25 15:26:37,443 [INFO] [发送方] 发送窗口滑动:148 → 149 2025-11-25 15:26:37,443 [INFO] [发送方] 发送窗口滑动:149 → 150 2025-11-25 15:26:37,443 [INFO] [发送方] 发送窗口滑动:150 → 151 2025-11-25 15:26:37,493 [INFO] [发送方] ARQ轮次 9 | 滑动窗口 [151, 155) | 待确认块 32 | 已确认块 151 | 总块数 183 2025-11-25 15:26:37,494 [INFO] [发送方] 本轮发送 4 个块:[[151], [152], [153], [154]] ARQ窗口[151,155): 100%|██████████| 4/4 [00:00<00:00, 15.57it/s] 2025-11-25 15:26:37,751 [INFO] ARQ窗口[151,155)完成:发送4包 → 实际接收到数据包1包(丢包率75.00%) 2025-11-25 15:26:37,751 [INFO] [接收方] 成功接收块 151(窗口:[151, 155) | 数据长度:1400) 2025-11-25 15:26:37,751 [INFO] [接收方] 接收窗口滑动:151 → 152 2025-11-25 15:26:37,751 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:37,752 [INFO] [发送方] 接收方反馈 | 缺失块:[152, 153, 154, 155] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151] 2025-11-25 15:26:37,752 [INFO] [发送方] 发送窗口滑动:151 → 152 2025-11-25 15:26:37,803 [INFO] [发送方] ARQ轮次 10 | 滑动窗口 [152, 156) | 待确认块 31 | 已确认块 152 | 总块数 183 2025-11-25 15:26:37,804 [INFO] [发送方] 本轮发送 4 个块:[[152], [153], [154], [155]] ARQ窗口[152,156): 100%|██████████| 4/4 [00:00<00:00, 4.97it/s] 2025-11-25 15:26:38,610 [INFO] ARQ窗口[152,156)完成:发送4包 → 实际接收到数据包4包(丢包率0.00%) 2025-11-25 15:26:38,610 [INFO] [接收方] 成功接收块 152(窗口:[152, 156) | 数据长度:1400) 2025-11-25 15:26:38,610 [INFO] [接收方] 接收窗口滑动:152 → 153 2025-11-25 15:26:38,610 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:38,610 [INFO] [接收方] 成功接收块 153(窗口:[153, 157) | 数据长度:1400) 2025-11-25 15:26:38,610 [INFO] [接收方] 接收窗口滑动:153 → 154 2025-11-25 15:26:38,610 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:38,610 [INFO] [接收方] 成功接收块 154(窗口:[154, 158) | 数据长度:1400) 2025-11-25 15:26:38,610 [INFO] [接收方] 接收窗口滑动:154 → 155 2025-11-25 15:26:38,610 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:38,610 [INFO] [接收方] 成功接收块 155(窗口:[155, 159) | 数据长度:1400) 2025-11-25 15:26:38,610 [INFO] [接收方] 接收窗口滑动:155 → 156 2025-11-25 15:26:38,611 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:38,611 [INFO] [发送方] 接收方反馈 | 缺失块:[156, 157, 158, 159] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155] 2025-11-25 15:26:38,611 [INFO] [发送方] 发送窗口滑动:152 → 153 2025-11-25 15:26:38,611 [INFO] [发送方] 发送窗口滑动:153 → 154 2025-11-25 15:26:38,611 [INFO] [发送方] 发送窗口滑动:154 → 155 2025-11-25 15:26:38,611 [INFO] [发送方] 发送窗口滑动:155 → 156 2025-11-25 15:26:38,662 [INFO] [发送方] ARQ传输结束 | 成功率:85.2% (已确认 156/总 183)| 统计:超时163次 | 重传7次 | 放弃0块 2025-11-25 15:26:38,663 [INFO] === 全局ARQ轮次 5/8 === 2025-11-25 15:26:38,663 [INFO] [发送方] ARQ轮次 1 | 滑动窗口 [156, 160) | 待确认块 27 | 已确认块 156 | 总块数 183 2025-11-25 15:26:38,663 [INFO] [发送方] 本轮发送 4 个块:[[156], [157], [158], [159]] ARQ窗口[156,160): 100%|██████████| 4/4 [00:00<00:00, 4.79it/s] 2025-11-25 15:26:39,498 [INFO] ARQ窗口[156,160)完成:发送4包 → 实际接收到数据包4包(丢包率0.00%) 2025-11-25 15:26:39,499 [INFO] [接收方] 成功接收块 156(窗口:[156, 160) | 数据长度:1400) 2025-11-25 15:26:39,499 [INFO] [接收方] 接收窗口滑动:156 → 157 2025-11-25 15:26:39,499 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:39,499 [INFO] [接收方] 成功接收块 157(窗口:[157, 161) | 数据长度:1400) 2025-11-25 15:26:39,499 [INFO] [接收方] 接收窗口滑动:157 → 158 2025-11-25 15:26:39,499 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:39,499 [INFO] [接收方] 成功接收块 158(窗口:[158, 162) | 数据长度:1400) 2025-11-25 15:26:39,499 [INFO] [接收方] 接收窗口滑动:158 → 159 2025-11-25 15:26:39,499 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:39,499 [INFO] [接收方] 成功接收块 159(窗口:[159, 163) | 数据长度:1400) 2025-11-25 15:26:39,500 [INFO] [接收方] 接收窗口滑动:159 → 160 2025-11-25 15:26:39,500 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:39,500 [INFO] [发送方] 接收方反馈 | 缺失块:[160, 161, 162, 163] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159] 2025-11-25 15:26:39,500 [INFO] [发送方] 发送窗口滑动:156 → 157 2025-11-25 15:26:39,500 [INFO] [发送方] 发送窗口滑动:157 → 158 2025-11-25 15:26:39,500 [INFO] [发送方] 发送窗口滑动:158 → 159 2025-11-25 15:26:39,501 [INFO] [发送方] 发送窗口滑动:159 → 160 2025-11-25 15:26:39,551 [INFO] [发送方] ARQ轮次 2 | 滑动窗口 [160, 164) | 待确认块 23 | 已确认块 160 | 总块数 183 2025-11-25 15:26:39,552 [INFO] [发送方] 本轮发送 4 个块:[[160], [161], [162], [163]] ARQ窗口[160,164): 100%|██████████| 4/4 [00:00<00:00, 7.30it/s] 2025-11-25 15:26:40,100 [INFO] ARQ窗口[160,164)完成:发送4包 → 实际接收到数据包3包(丢包率25.00%) 2025-11-25 15:26:40,100 [INFO] [接收方] 成功接收块 161(窗口:[160, 164) | 数据长度:1400) 2025-11-25 15:26:40,100 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:25.0%) 2025-11-25 15:26:40,100 [INFO] [接收方] 成功接收块 162(窗口:[160, 164) | 数据长度:1400) 2025-11-25 15:26:40,100 [INFO] [接收方] 成功接收块 163(窗口:[160, 164) | 数据长度:1400) 2025-11-25 15:26:40,101 [INFO] [发送方] 接收方反馈 | 缺失块:[160] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163] 2025-11-25 15:26:40,152 [INFO] [发送方] ARQ轮次 3 | 滑动窗口 [160, 164) | 待确认块 20 | 已确认块 163 | 总块数 183 2025-11-25 15:26:40,152 [INFO] [发送方] 本轮发送 1 个块:[[160]] ARQ窗口[160,164): 100%|██████████| 1/1 [00:00<00:00, 5.57it/s] 2025-11-25 15:26:40,332 [INFO] ARQ窗口[160,164)完成:发送1包 → 实际接收到数据包1包(丢包率0.00%) 2025-11-25 15:26:40,332 [INFO] [接收方] 成功接收块 160(窗口:[160, 164) | 数据长度:1400) 2025-11-25 15:26:40,332 [INFO] [接收方] 接收窗口滑动:160 → 161 2025-11-25 15:26:40,332 [INFO] [接收方] 接收窗口滑动:161 → 162 2025-11-25 15:26:40,332 [INFO] [接收方] 接收窗口滑动:162 → 163 2025-11-25 15:26:40,332 [INFO] [接收方] 接收窗口滑动:163 → 164 2025-11-25 15:26:40,332 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:40,333 [INFO] [发送方] 接收方反馈 | 缺失块:[164, 165, 166, 167] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 160] 2025-11-25 15:26:40,333 [INFO] [发送方] 发送窗口滑动:160 → 161 2025-11-25 15:26:40,333 [INFO] [发送方] 发送窗口滑动:161 → 162 2025-11-25 15:26:40,333 [INFO] [发送方] 发送窗口滑动:162 → 163 2025-11-25 15:26:40,333 [INFO] [发送方] 发送窗口滑动:163 → 164 2025-11-25 15:26:40,384 [INFO] [发送方] ARQ轮次 4 | 滑动窗口 [164, 168) | 待确认块 19 | 已确认块 164 | 总块数 183 2025-11-25 15:26:40,385 [INFO] [发送方] 本轮发送 4 个块:[[164], [165], [166], [167]] ARQ窗口[164,168): 100%|██████████| 4/4 [00:00<00:00, 5.90it/s] 2025-11-25 15:26:41,063 [INFO] ARQ窗口[164,168)完成:发送4包 → 实际接收到数据包4包(丢包率0.00%) 2025-11-25 15:26:41,064 [INFO] [接收方] 成功接收块 164(窗口:[164, 168) | 数据长度:1400) 2025-11-25 15:26:41,064 [INFO] [接收方] 接收窗口滑动:164 → 165 2025-11-25 15:26:41,064 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:41,064 [INFO] [接收方] 成功接收块 165(窗口:[165, 169) | 数据长度:1400) 2025-11-25 15:26:41,064 [INFO] [接收方] 接收窗口滑动:165 → 166 2025-11-25 15:26:41,064 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:41,064 [INFO] [接收方] 成功接收块 166(窗口:[166, 170) | 数据长度:1400) 2025-11-25 15:26:41,064 [INFO] [接收方] 接收窗口滑动:166 → 167 2025-11-25 15:26:41,064 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:41,064 [INFO] [接收方] 成功接收块 167(窗口:[167, 171) | 数据长度:1400) 2025-11-25 15:26:41,064 [INFO] [接收方] 接收窗口滑动:167 → 168 2025-11-25 15:26:41,064 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:41,064 [INFO] [发送方] 接收方反馈 | 缺失块:[168, 169, 170, 171] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 160, 164, 165, 166, 167] 2025-11-25 15:26:41,065 [INFO] [发送方] 发送窗口滑动:164 → 165 2025-11-25 15:26:41,065 [INFO] [发送方] 发送窗口滑动:165 → 166 2025-11-25 15:26:41,065 [INFO] [发送方] 发送窗口滑动:166 → 167 2025-11-25 15:26:41,065 [INFO] [发送方] 发送窗口滑动:167 → 168 2025-11-25 15:26:41,116 [INFO] [发送方] ARQ轮次 5 | 滑动窗口 [168, 172) | 待确认块 15 | 已确认块 168 | 总块数 183 2025-11-25 15:26:41,117 [INFO] [发送方] 本轮发送 4 个块:[[168], [169], [170], [171]] ARQ窗口[168,172): 100%|██████████| 4/4 [00:00<00:00, 5.85it/s] 2025-11-25 15:26:41,801 [INFO] ARQ窗口[168,172)完成:发送4包 → 实际接收到数据包4包(丢包率0.00%) 2025-11-25 15:26:41,801 [INFO] [接收方] 成功接收块 168(窗口:[168, 172) | 数据长度:1400) 2025-11-25 15:26:41,802 [INFO] [接收方] 接收窗口滑动:168 → 169 2025-11-25 15:26:41,802 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:41,802 [INFO] [接收方] 成功接收块 169(窗口:[169, 173) | 数据长度:1400) 2025-11-25 15:26:41,802 [INFO] [接收方] 接收窗口滑动:169 → 170 2025-11-25 15:26:41,802 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:41,802 [INFO] [接收方] 成功接收块 170(窗口:[170, 174) | 数据长度:1400) 2025-11-25 15:26:41,802 [INFO] [接收方] 接收窗口滑动:170 → 171 2025-11-25 15:26:41,802 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:41,802 [INFO] [接收方] 成功接收块 171(窗口:[171, 175) | 数据长度:1400) 2025-11-25 15:26:41,802 [INFO] [接收方] 接收窗口滑动:171 → 172 2025-11-25 15:26:41,802 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:41,803 [INFO] [发送方] 接收方反馈 | 缺失块:[172, 173, 174, 175] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 160, 164, 165, 166, 167, 168, 169, 170, 171] 2025-11-25 15:26:41,803 [INFO] [发送方] 发送窗口滑动:168 → 169 2025-11-25 15:26:41,803 [INFO] [发送方] 发送窗口滑动:169 → 170 2025-11-25 15:26:41,803 [INFO] [发送方] 发送窗口滑动:170 → 171 2025-11-25 15:26:41,803 [INFO] [发送方] 发送窗口滑动:171 → 172 2025-11-25 15:26:41,854 [INFO] [发送方] ARQ轮次 6 | 滑动窗口 [172, 176) | 待确认块 11 | 已确认块 172 | 总块数 183 2025-11-25 15:26:41,854 [INFO] [发送方] 本轮发送 4 个块:[[172], [173], [174], [175]] ARQ窗口[172,176): 100%|██████████| 4/4 [00:00<00:00, 6.66it/s] 2025-11-25 15:26:42,456 [INFO] ARQ窗口[172,176)完成:发送4包 → 实际接收到数据包4包(丢包率0.00%) 2025-11-25 15:26:42,456 [INFO] [接收方] 成功接收块 172(窗口:[172, 176) | 数据长度:1400) 2025-11-25 15:26:42,456 [INFO] [接收方] 接收窗口滑动:172 → 173 2025-11-25 15:26:42,456 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:42,456 [INFO] [接收方] 成功接收块 173(窗口:[173, 177) | 数据长度:1400) 2025-11-25 15:26:42,456 [INFO] [接收方] 接收窗口滑动:173 → 174 2025-11-25 15:26:42,456 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:42,456 [INFO] [接收方] 成功接收块 174(窗口:[174, 178) | 数据长度:1400) 2025-11-25 15:26:42,456 [INFO] [接收方] 接收窗口滑动:174 → 175 2025-11-25 15:26:42,456 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:42,457 [INFO] [接收方] 成功接收块 175(窗口:[175, 179) | 数据长度:1400) 2025-11-25 15:26:42,457 [INFO] [接收方] 接收窗口滑动:175 → 176 2025-11-25 15:26:42,457 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:42,457 [INFO] [发送方] 接收方反馈 | 缺失块:[176, 177, 178, 179] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 160, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175] 2025-11-25 15:26:42,457 [INFO] [发送方] 发送窗口滑动:172 → 173 2025-11-25 15:26:42,458 [INFO] [发送方] 发送窗口滑动:173 → 174 2025-11-25 15:26:42,458 [INFO] [发送方] 发送窗口滑动:174 → 175 2025-11-25 15:26:42,458 [INFO] [发送方] 发送窗口滑动:175 → 176 2025-11-25 15:26:42,508 [INFO] [发送方] ARQ轮次 7 | 滑动窗口 [176, 180) | 待确认块 7 | 已确认块 176 | 总块数 183 2025-11-25 15:26:42,508 [INFO] [发送方] 本轮发送 4 个块:[[176], [177], [178], [179]] ARQ窗口[176,180): 100%|██████████| 4/4 [00:00<00:00, 20.17it/s] 2025-11-25 15:26:42,707 [INFO] ARQ窗口[176,180)完成:发送4包 → 实际接收到数据包1包(丢包率75.00%) 2025-11-25 15:26:42,708 [INFO] [接收方] 成功接收块 176(窗口:[176, 180) | 数据长度:1400) 2025-11-25 15:26:42,708 [INFO] [接收方] 接收窗口滑动:176 → 177 2025-11-25 15:26:42,708 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:42,708 [INFO] [发送方] 接收方反馈 | 缺失块:[177, 178, 179, 180] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 160, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176] 2025-11-25 15:26:42,708 [INFO] [发送方] 发送窗口滑动:176 → 177 2025-11-25 15:26:42,759 [INFO] [发送方] ARQ轮次 8 | 滑动窗口 [177, 181) | 待确认块 6 | 已确认块 177 | 总块数 183 2025-11-25 15:26:42,760 [INFO] [发送方] 本轮发送 4 个块:[[177], [178], [179], [180]] ARQ窗口[177,181): 100%|██████████| 4/4 [00:00<00:00, 8.70it/s] 2025-11-25 15:26:43,220 [INFO] ARQ窗口[177,181)完成:发送4包 → 实际接收到数据包3包(丢包率25.00%) 2025-11-25 15:26:43,220 [INFO] [接收方] 成功接收块 178(窗口:[177, 181) | 数据长度:1400) 2025-11-25 15:26:43,220 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:25.0%) 2025-11-25 15:26:43,220 [INFO] [接收方] 成功接收块 179(窗口:[177, 181) | 数据长度:1400) 2025-11-25 15:26:43,220 [INFO] [接收方] 成功接收块 180(窗口:[177, 181) | 数据长度:1400) 2025-11-25 15:26:43,221 [INFO] [发送方] 接收方反馈 | 缺失块:[177] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 160, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 178, 179, 180] 2025-11-25 15:26:43,271 [INFO] [发送方] ARQ轮次 9 | 滑动窗口 [177, 181) | 待确认块 3 | 已确认块 180 | 总块数 183 2025-11-25 15:26:43,272 [INFO] [发送方] 本轮发送 1 个块:[[177]] ARQ窗口[177,181): 100%|██████████| 1/1 [00:00<00:00, 13842.59it/s] 2025-11-25 15:26:43,273 [INFO] ARQ窗口[177,181)完成:发送1包 → 实际接收到数据包0包(丢包率100.00%) 2025-11-25 15:26:43,273 [INFO] [发送方] 接收方反馈 | 缺失块:[177] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 160, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 178, 179, 180] 2025-11-25 15:26:43,324 [INFO] [发送方] ARQ轮次 10 | 滑动窗口 [177, 181) | 待确认块 3 | 已确认块 180 | 总块数 183 2025-11-25 15:26:43,325 [INFO] [发送方] 本轮无符合条件的发送块(窗口内块未超时) 2025-11-25 15:26:43,336 [INFO] [发送方] ARQ传输结束 | 成功率:98.4% (已确认 180/总 183)| 统计:超时193次 | 重传12次 | 放弃0块 2025-11-25 15:26:43,336 [INFO] === 全局ARQ轮次 6/8 === 2025-11-25 15:26:43,336 [INFO] [发送方] ARQ轮次 1 | 滑动窗口 [177, 181) | 待确认块 3 | 已确认块 180 | 总块数 183 2025-11-25 15:26:43,336 [INFO] [发送方] 本轮无符合条件的发送块(窗口内块未超时) 2025-11-25 15:26:43,347 [INFO] [发送方] ARQ轮次 2 | 滑动窗口 [177, 181) | 待确认块 3 | 已确认块 180 | 总块数 183 2025-11-25 15:26:43,347 [INFO] [发送方] 本轮无符合条件的发送块(窗口内块未超时) 2025-11-25 15:26:43,358 [INFO] [发送方] ARQ轮次 3 | 滑动窗口 [177, 181) | 待确认块 3 | 已确认块 180 | 总块数 183 2025-11-25 15:26:43,358 [INFO] [发送方] 本轮无符合条件的发送块(窗口内块未超时) 2025-11-25 15:26:43,369 [INFO] [发送方] ARQ轮次 4 | 滑动窗口 [177, 181) | 待确认块 3 | 已确认块 180 | 总块数 183 2025-11-25 15:26:43,369 [INFO] [发送方] 本轮无符合条件的发送块(窗口内块未超时) 2025-11-25 15:26:43,380 [INFO] [发送方] ARQ轮次 5 | 滑动窗口 [177, 181) | 待确认块 3 | 已确认块 180 | 总块数 183 2025-11-25 15:26:43,380 [INFO] [发送方] 本轮发送 1 个块:[[177]] ARQ窗口[177,181): 100%|██████████| 1/1 [00:00<00:00, 6.47it/s] 2025-11-25 15:26:43,535 [INFO] ARQ窗口[177,181)完成:发送1包 → 实际接收到数据包1包(丢包率0.00%) 2025-11-25 15:26:43,535 [INFO] [接收方] 成功接收块 177(窗口:[177, 181) | 数据长度:1400) 2025-11-25 15:26:43,535 [INFO] [接收方] 接收窗口滑动:177 → 178 2025-11-25 15:26:43,535 [INFO] [接收方] 接收窗口滑动:178 → 179 2025-11-25 15:26:43,535 [INFO] [接收方] 接收窗口滑动:179 → 180 2025-11-25 15:26:43,535 [INFO] [接收方] 接收窗口滑动:180 → 181 2025-11-25 15:26:43,535 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:43,536 [INFO] [发送方] 接收方反馈 | 缺失块:[181, 182] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 160, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 178, 179, 180, 177] 2025-11-25 15:26:43,536 [INFO] [发送方] 发送窗口滑动:177 → 178 2025-11-25 15:26:43,536 [INFO] [发送方] 发送窗口滑动:178 → 179 2025-11-25 15:26:43,536 [INFO] [发送方] 发送窗口滑动:179 → 180 2025-11-25 15:26:43,536 [INFO] [发送方] 发送窗口滑动:180 → 181 2025-11-25 15:26:43,587 [INFO] [发送方] ARQ轮次 6 | 滑动窗口 [181, 185) | 待确认块 2 | 已确认块 181 | 总块数 183 2025-11-25 15:26:43,588 [INFO] [发送方] 本轮发送 2 个块:[[181], [182]] ARQ窗口[181,185): 100%|██████████| 2/2 [00:00<00:00, 11.64it/s] 2025-11-25 15:26:43,760 [INFO] ARQ窗口[181,185)完成:发送2包 → 实际接收到数据包2包(丢包率0.00%) 2025-11-25 15:26:43,760 [INFO] [接收方] 成功接收块 181(窗口:[181, 185) | 数据长度:1400) 2025-11-25 15:26:43,761 [INFO] [接收方] 接收窗口滑动:181 → 182 2025-11-25 15:26:43,761 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:43,761 [INFO] [接收方] 成功接收块 182(窗口:[182, 186) | 数据长度:216) 2025-11-25 15:26:43,761 [INFO] [接收方] 接收窗口滑动:182 → 183 2025-11-25 15:26:43,761 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:43,761 [INFO] [发送方] 接收方反馈 | 缺失块:[] | 已接收校验通过块:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 160, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 178, 179, 180, 177, 181, 182] 2025-11-25 15:26:43,761 [INFO] [发送方] 发送窗口滑动:181 → 182 2025-11-25 15:26:43,761 [INFO] [发送方] 发送窗口滑动:182 → 183 2025-11-25 15:26:43,812 [INFO] [发送方] ARQ传输结束 | 成功率:100.0% (已确认 183/总 183)| 统计:超时196次 | 重传13次 | 放弃0块从这些代码运行日志里,你能发现什么问题
最新发布
11-26
<think> 根据提供的日志,我们可以分析ARQ传输过程中的行为并识别潜在问题。以下是我发现的关键问题: ### 1. **接收方窗口调整逻辑过于激进** - 日志中频繁出现:`[接收方] 窗口缩小至 4(窗口内接收率:0.0%)` - 问题:接收方在成功接收一个块后立即将窗口缩小到最小值4,导致传输效率低下(每次只能传4个块)。这种调整过于敏感,尤其是在连续成功接收时不应缩小窗口。 ### 2. **接收方窗口滑动逻辑错误** - 示例日志: ``` 成功接收块 147 → 窗口滑动:147 → 148 成功接收块 148 → 窗口滑动:148 → 149 ... ``` - 问题:接收方每收到一个块就滑动窗口一次(即使是非连续块),但实际只有按序接收才能滑动窗口。日志显示接收方在乱序接收时仍滑动窗口(如先收到148再147),这违反了滑动窗口按序确认的原则。 ### 3. **发送方和接收方窗口不协同** - 发送方窗口为`[147, 151)`(4个块),但接收方窗口始终缩小到4,且每次滑动后重置为`[新base, 新base+4)`。这种固定小窗口限制了并行传输能力。 ### 4. **接收方反馈的缺失块列表异常** - 日志中反馈的缺失块连续出现(如`缺失块:[151,152,153,154]`),但发送方已发送这些块。可能原因: - 接收方窗口未及时扩大,导致新块被丢弃(窗口外) - 网络丢包率高(但后续重传成功) ### 5. **接收方窗口内接收率计算错误** - 日志显示:`窗口内接收率:0.0%`,但实际有块被接收(如收到块151时窗口为`[151,155)`)。问题可能在于: - 接收率计算未包含当前收到的块 - 窗口内块的定义错误(未包含当前收到的块) ### 6. **接收方动态窗口调整失效** - 尽管有动态调整机制,但窗口大小始终在4附近波动(日志中多次缩小到4)。这说明调整逻辑未考虑成功接收后的网络状况改善。 ### 7. **全局轮次控制冗余** - 全局轮次(`全局ARQ轮次 5/8`)和内部轮次(`ARQ轮次 1`)嵌套导致传输轮次过多,增加了延迟。 ### 8. **重传效率低下** - 发送方在窗口滑动后,对缺失块(如177)的重传需要等待多次轮询(第6轮全局传输才成功),说明超时机制或重传调度不够优化。 --- ### 改进建议 1. **修复接收方窗口滑动逻辑** 仅当按序接收(`recv_base`对应的块)时才滑动窗口,乱序接收的块应缓存但不滑动窗口。 2. **优化接收方窗口调整算法** 引入稳定性因子(类似发送方),避免因单次接收率低立即缩小窗口。 3. **调整接收率计算时机** 在将新块加入接收缓存后计算窗口内接收率,避免漏计当前块。 4. **增加窗口扩大条件** 当连续多轮接收率>80%时再扩大窗口,避免网络抖动影响。 5. **简化传输轮次结构** 去除全局轮次,仅依赖发送方内部轮次循环,减少延迟。 6. **改进重传触发机制** 对高丢包率的块(如177)采用更短的重传超时时间或优先级重传。 §§相关问题§§ 1. 如何设计更鲁棒的接收方窗口调整算法以防止频繁缩小窗口? 2. 接收方应如何正确处理乱序到达的数据包以避免无效窗口滑动? 3. 在丢包率较高的网络中,如何优化ARQ的重传策略以提升效率? 4. 如何避免发送方和接收方窗口大小不一致导致的传输效率下降? </think> ### 日志分析发现的关键问题 #### 1. **接收方窗口动态调整失效** - **问题表现**:接收方持续缩小窗口到最小值4(`窗口缩小至 4`),即使连续成功接收数据块 - **日志证据**: ```log 2025-11-25 15:26:37,441 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) 2025-11-25 15:26:37,442 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) ... 2025-11-25 15:26:43,761 [INFO] [接收方] 窗口缩小至 4(窗口内接收率:0.0%) ``` - **根本原因**: - 接收率计算逻辑错误(始终显示0.0%) - 窗口调整算法未考虑实际接收情况(即使成功接收也缩小窗口) #### 2. **发送/接收窗口滑动不同步** - **问题表现**:发送方窗口滑动到新位置(如`发送窗口滑动:147 → 148`)后,接收方仍停留在原窗口范围 - **危险后果**: - 发送方发送新块(151-154)时,接收方窗口仍在[147,151),导致新块被判定为"窗口外" - 引发不必要的重传请求(`缺失块:[151,152,153,154]`) #### 3. **接收方窗口滑动逻辑错误** - **问题表现**:接收方在乱序接收时错误滑动窗口 ```log 2025-11-25 15:26:40,100 [INFO] [接收方] 成功接收块 161(窗口:[160, 164)) 2025-11-25 15:26:40,332 [INFO] [接收方] 成功接收块 160(窗口:[160, 164)) ``` - **根本问题**:接收方未实现选择性重传核心特性——**乱序缓存**,而是按接收顺序滑动窗口 #### 4. **NACK反馈机制缺陷** - **问题表现**: - 反馈的缺失块总是连续范围(如`缺失块:[164,165,166,167]`) - 已确认块列表包含大量乱序块(如块15在16之后确认) - **根本原因**: - 接收方未实现精准的选择性重传反馈 - NACK生成未考虑实际接收状态(窗口外块被错误标记为缺失) #### 5. **发送方效率低下** - **问题表现**: ```log 2025-11-25 15:26:43,336 [INFO] [发送方] 本轮无符合条件的发送块(窗口内块未超时) 出现9次空轮询 ``` - **根本原因**: - 超时检测机制过于敏感(0.1秒) - 未实现快速重传机制(需等待固定超时) #### 6. **接收方重组逻辑异常** - **最后块异常**: ```log 2025-11-25 15:26:43,761 [INFO] [接收方] 成功接收块 182(数据长度:216) ``` - **问题**:最后块大小应为`总长度 % 1400 = 216`,但接收方未正确识别最后块,导致窗口继续滑动到183+ --- ### 问题严重性排序 1. **致命级**(影响核心功能) - 接收方窗口调整失效 - 乱序接收处理错误 2. **严重级**(影响性能) - NACK反馈不精准 - 发送方空轮询 3. **一般级** - 最后块识别异常 - 统计信息不准确(超时193次但实际传输正常) --- ### 解决方案建议 1. **接收方重构**: ```python # 修改窗口调整逻辑(添加最低阈值) if received_in_window / self.window_size < 0.3: # 添加稳定性检查 if self.consecutive_low_rates > 2: self.window_size = max(self.window_size - 2, 4) ``` 2. **实现乱序缓存**: ```python # 在接收方添加 self.out_of_order_blocks = {} # 缓存乱序块 ``` 3. **优化NACK生成**: ```python # 仅反馈窗口内缺失块 missing_blocks = [bid for bid in range(self.recv_base, self.recv_base+self.window_size) if bid not in self.received_blocks] ``` 4. **添加快速重传**: ```python # 发送方添加 if block.retransmit_count > 2: # 三次冗余ACK触发快速重传 priority_retransmit(block_id) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值