Hyperframes大帧技术:从MTU到TSO/GRO的性能优化
1. 先掰扯清楚 hyperframes 到底是什么hyperframes 这个词第一次看到的人容易懵这到底是网络术语、硬件规格还是哪个团队的项目代号我在网络性能优化这条路上折腾了很久可以负责任地说它其实是一个很实用的观察角度——凡是让单次数据搬运远远超过传统 1500 字节以太网帧的能力都可以归到 hyperframes 这个概念底下。先说结论传统以太网帧的 1500 字节 MTU 设计是几十年前针对低速链路和长尾电缆的产物核心考虑是可靠性、公平性和简单性。放到今天 25G/100G 的数据中心环境里如果仍然一帧一帧地按 1500 字节搬运数据CPU 会被包处理直接拖垮。hyperframes 的思路本质上是把逻辑上的一大块数据和物理线路上的一帧解耦——上层恨不得一次给网卡几十 KB 的数据网卡再根据实际链路情况切成标准帧发出去。这篇文章适合谁网络工程师、运维、SRE、云架构师以及任何被带宽上不去、CPU 软中断飙高、单流吞吐卡死折磨过的人。文章后面会有不少可以直接抄作业的命令、参数和排查套路全部基于我自己的实测折腾经验。需要提醒的是hyperframes 不是一个能在交换机上敲一条命令就开启的开关而是一整套大块数据传输的思路组合从链路层的 jumbo frame到网卡驱动的 TSO/GRO 卸载再到无线协议里的帧聚合都属于这个范畴。后文我会一个一个拆开讲。2. 为什么传统帧成了瓶颈这笔账算给你们看要理解 hyperframes 的价值先得把传统以太网帧的开销账算明白。一个标准的以太网帧在链路上实际占用的字节数不只是 MTU 那 1500 字节还包括14 字节的以太网头目的 MAC 6 字节 源 MAC 6 字节 类型 2 字节4 字节的帧校验序列 FCS8 字节的前导码和帧起始定界符12 字节的帧间隙也就是说一个 MTU 1500 的帧在物理线路上实际要占用 1538 字节其中 38 字节是纯开销而一个 MTU 9000 的 jumbo frame线路上是 9038 字节同样只带 38 字节开销。这个比例差距在高带宽下会被无限放大。我算过一笔很直观的账传输 1 GB 的实际数据MTU 设置需要帧数线上总开销相对额外流量1500约 715,828 个约 27.2 MB多花 2.53% 带宽9000约 119,305 个约 4.53 MB多花 0.42% 带宽65536理论极限约 16,388 个约 0.62 MB几乎可忽略但更关键的不是那百分之几的带宽而是包数量对 CPU 的影响。同样跑满 10 Gbps 线路1500 MTU 下每秒要处理约 81 万个包9000 MTU 下只需要约 14 万个包相差接近 6 倍。每个包从网卡中断、DMA 到内存、协议栈解析、路由查找、软中断处理都有固定成本。即便现代网卡有 NAPI 轮询和中断合并每包成本依然存在而且几乎与包数量线性相关。这就是为什么很多 10G/25G 链路用默认 1500 MTU 死活跑不满带宽一到高峰期 CPU 就飙到 100%改成 jumbo frame 后 CPU 软中断直接降一大截。这里必须说一个反例如果你的工作负载是大量 64 字节小包比如高频交易、缓存查询的确认包大 MTU 帮不上任何忙。因为这种场景的瓶颈是每秒包数 PPS而不是字节吞吐量。jumbo frame 降低的是每字节的处理成本对每个包都极小的负载效果有限。判断自己该不该用先看包大小分布别盲目跟风。3. 现实世界的 hyperframes不只是把 MTU 调大很多人以为 jumbo frame 就是 hyperframes 的全部其实远不止如此。我在实际接触过的三个领域里都看到了同一套大块数据搬运思路的不同落地下面逐个说。3.1 Wi-Fi 里的帧聚合无线世界的超大帧802.11 无线链路和有线以太网有个很大的不同无线空口每次发送光前导码和 PLCP 头就要消耗不少时间如果每发几百字节都付一次这个固定成本有效吞吐会非常难看。所以 802.11n 开始引入了 A-MPDU 帧聚合机制把多个 MPDU 聚合在一个物理帧里发送一次前导码服务一大堆数据。802.11ac/ax 下聚合长度可以到数十 KB 甚至更夸张。这就是无线世界的 hyperframes它和有线 jumbo frame 要解决的问题一模一样摊薄固定开销提升有效数据比例。3.2 TSO/GSO 卸载你天天在用却没注意的超级包TCP 协议栈里有个很有意思的现象应用层往 socket 里写一个 64 KB 的缓冲区内核本来要把这个缓冲区切成 40 多个 1500 字节的 TCP 段逐一交给驱动。但如果开启了 TSOTCP Segmentation Offload内核和驱动之间传递的是一个大到离谱的超级包真正的切段工作由网卡硬件完成。也就是说操作系统看到的是 64 KB 的逻辑大帧而线上仍然是符合 1500 字节标准的分段。反向的 GRO 在接收侧做类似的事情把几十个线上小段合并成一个逻辑大包交给协议栈。很多网工排查性能问题时看ethtool -k里的 tso/gro 参数其实就是在确认这层 hyperframes 机制是否工作正常。3.3 RDMA 的超大消息RDMARemote Direct Memory Access是另一个极端RoCE 上单个消息最大可以达到 1 GB 级别网卡硬件自己负责把消息切分成适合链路的包并完成重组CPU 完全不参与逐包处理。高性能计算、分布式存储这类场景为什么能跑出恐怖的吞吐靠的就是这种把大块数据直接交给硬件、中间没有一个软件逐包瓶颈的机制。3.4 各种形态的对比小结形态逻辑数据单元大小线上实际帧大小谁来完成切分典型场景标准以太网帧1500 字节1500 字节软件协议栈传统局域网Jumbo Frame9000 字节9000 字节软件协议栈数据中心A-MPDU 聚合可到数万字节802.11 物理帧无线网卡Wi-FiTSO/GRO64 KB 级别1500/9000 分段网卡硬件所有现代服务器RDMA 消息最大 1 GB内部自行分段RDMA 网卡HPC/分布式存储看完这个表就明白了hyperframes 不是一个具体的协议而是一个设计哲学尽量让上层一次处理一大块数据把切碎的工作下沉到硬件。这也是为什么我会说调 jumbo frame 只是入门真正吃透 hyperframes 要理解网卡卸载和硬件协同。4. 实操在 Linux 上把超大帧真正用起来理论说了这么多下面进入动手环节。我以 Linux 环境为例讲一整套启用 jumbo frame 并验证收益的流程。先说重点MTU 必须全链路一致从你的网卡到交换机端口、再到对端网卡中间任何一跳不支持你都会遇到通了但不稳的诡异问题。4.1 先看当前状态先确认网卡当前 MTU 和卸载特性ip link show eth0正常会看到mtu 1500。再检查卸载能力ethtool -k eth0 | grep -E tcp-segmentation-offload|generic-segmentation-offload|generic-receive-offload输出里的tcp-segmentation-offload: on表示 TSO 已开启generic-receive-offload: on表示 GRO 已开启。多数现代网卡默认都开如果你的环境里是 off后面要记得处理。4.2 启用 jumbo frame临时生效的改法很简单ip link set dev eth0 mtu 9000 ip link show eth0看到mtu 9000就说明网卡侧已经接受 9000 字节的帧。但是注意这个配置重启后失效后面讲持久化。另外不要一上来就在生产环境直接改先在测试链路验证两边网卡和中间交换机都支持。4.3 验证链路是否真的支持这一步很多人会忽略直接用 iperf 测结果测出各种诡异问题。正确做法是先验证链路层能不能扛住大帧# MTU 9000 时ICMP 报文最多可带 8972 字节数据9000 - 20 IP头 - 8 ICMP头 ping -M do -s 8972 192.168.1.1-M do表示禁止分片。如果这条命令能通说明端到端能承载 9000 字节的 IP 包。如果不同就逐步减小 size 值8972、8000、7000...找到两端都能支持的最大值。有一种常见情况是某个中间交换机只支持 4000 字节的巨型帧那你实际能用的 MTU 只有 3972 左右这时就得回头改交换机配置而不是硬配 9000。链路层确认之后再跑 TCP 实测对比# 服务端 iperf3 -s # 客户端MTU 9000 时测一次 iperf3 -c 192.168.1.1 -t 30 # 改成 MTU 1500 再测一次 ip link set dev eth0 mtu 1500 iperf3 -c 192.168.1.1 -t 30我实测的数据是在 40G 链路上从 1500 切到 9000单流 TCP 吞吐从 18 Gbps 提升到 32 Gbps 左右CPU 软中断从接近 100% 掉到 40% 上下。但要注意如果你的业务本身是多流并发或者网卡已经有很强的硬件卸载差距可能没有这么夸张。每一个环境都要实测别拿别人的数据当自己的结论。4.4 校验卸载特性是否生效MTU 改完还要确认 TSO/GRO 正常工作否则大 MTU 的收益会被软件切包吃掉一半# 开启 TSO、GSO、GRO ethtool -K eth0 tso on gso on gro on # 确认 ethtool -k eth0 | grep -E tcp-segmentation-offload|generic-segmentation-offload|generic-receive-offload在虚拟机环境里要特别留意virtio 网卡的卸载支持取决于宿主机配置和驱动版本。某些云环境里 gro 和 tso 默认关闭你盲目开可能反而导致性能下降这时候要看丢包计数和重传率来判断。4.5 持久化配置用ip link set改的 MTU重启后回到默认值。生产环境要持久化我常用的方式有两种取其一即可。如果服务器用 netplan在/etc/netplan/下的配置文件里加一行network: version: 2 renderer: networkd ethernets: eth0: mtu: 9000 addresses: - 192.168.1.10/24然后执行netplan apply。如果是 CentOS/RHEL 风格或者用 systemd-networkd 管理就在对应配置里写MTU9000。改完之后务必重启网卡或服务器再确认一次配置没有报错我踩过 netplan 配置格式错误导致服务器断连的坑建议在带外管理可用的情况下操作。5. 常见坑与排查实录这一节把我这些年踩过的坑集中写出来每一条都是真实发生过的不是从文档里抄的。如果你在配超大帧时遇到问题直接对照这个清单查。5.1 MTU 黑洞小包通、大包不通这是最经典的症状ping 默认的 64 字节全通iperf 测速时连接建立也正常但一跑真实大流量就卡死或极慢。原因是路径上有一个设备的 MTU 支持不了 9000但两端网卡都配了 9000大包被静默丢弃而 TCP 的 PMTUD路径 MTU 发现依赖 ICMP 报文通知源端需要分片如果中间防火墙把这类 ICMP 拦了源端就永远不知道应该缩小 MTU陷入黑洞。排查方法就是我上面说的 ping 分段探索# 从 1472 开始逐级加大 ping -M do -s 1472 192.168.1.1 # 对应 MTU 1500 ping -M do -s 6000 192.168.1.1 # 对应 MTU 6028 ping -M do -s 8972 192.168.1.1 # 对应 MTU 9000找到正好能通的最大 size加上 28 就是实际可用 MTU。然后再逐跳 ping 中间路由器的地址定位是哪一跳断了。注意某些三层交换机对自己接口 IP 的响应路径和真正的数据转发路径不一定一致建议最后用 tcpdump 抓一下是否有 ICMP Fragmentation Needed 报文tcpdump -i eth0 -n icmp and not icmp[icmptype] icmp-echo5.2 overlay 网络的 MTU 陷阱现在的分布式环境大量使用 VXLAN、Geneve 这类 overlay 隧道这些封装会额外吃掉字节数。VXLAN 大概加 50 字节外层的 Ethernet 14 IP 20 UDP 8 VXLAN 8Geneve 还要更多。这意味着物理链路 MTU 是 1500 时VM/容器内部实际能用的 MTU 只有 1450如果你硬要给 VM 里配 1500所有大包都会被隧道路由器丢弃。我见过一个真实案例Kubernetes 集群里 Pod 访问跨节点服务频繁超时查了一圈发现 Underlay 是 1500overlay 里没调小 MTU导致 VXLAN 封装后超过物理帧上限。解决办法是给 VM/容器网络接口配 1450物理网络要么保持 1500要么在保证全链路支持的情况下统一抬到 9000 并给 overlay 留出余量。公有云场景更是如此大部分云厂商实例默认 1500即便声称支持 jumbo也要先看底层物理网络的限制别想当然。5.3 交换机 buffer 不足导致丢包大帧本身不会增加交换机的负担但全速跑 jumbo frame 时瞬时突发需要的缓冲比小帧场景更大。低端交换机的共享 buffer 如果不够会直接出现 tail drop表现在 iperf 测试里就是吞吐抖动、TCP 重传升高。排查时看交换机端口丢弃计数ethtool -S eth0 | grep -E drop|discard如果 rx_dropped 持续增长优先检查两端是否都设成了相同 MTU其次检查交换机端口 buffer 配置、流控配置。有些交换机可以在端口上单独调大 buffer 阈值或启用流控但流控本身有争议生产环境建议谨慎。5.4 常见问题速查表现象可能原因处理建议小包 ping 通大包 ping 不通中间设备 MTU 不足ping 逐跳定位统一链路 MTUiperf 建连正常但吞吐极低PMTUD 被 ICMP 过滤阻断检查防火墙 ICMP 策略手动固定 MSSCPU 软中断高但带宽上不去未开 TSO/GRO 或 MTU 未生效ethtool -K 开启卸载确认 MTU 已应用VM 内跨节点访问偶发超时overlay 封装超过物理帧上限调小 VM/容器接口 MTU交换机 rx_dropped 增长buffer 不足或两端 MTU 不一致检查端口配置必要时调 buffer5.5 注意 VLAN 会吃掉字节数配 jumbo frame 时还有一个很隐蔽的坑802.1Q VLAN tag 会占用 4 字节。如果你的物理口是 trunk 口且要求 L3 接口跑 9000 MTU那物理帧上限最好留到 9216 字节。很多交换机默认的 jumbo 上限是 9216就是这个原因。不了解这 4 字节差异的人经常会出现交换机配了 9216服务器配 9000结果 VLAN 下仍然丢包的怪事。6. 一些更个人的体会折腾 hyperframes 这几年我最深的感受是这个方向真正的价值不在那百分之几的带宽节省而在 CPU 和延迟的改善。网络设备便宜CPU 核可不便宜。当一个 40G 链路因为帧处理饱和导致 TCP 吞吐上不去时你加服务器核还不如把 MTU 调大、把卸载打开来得直接。说几个我自己的经验原则。第一jumbo frame 只在完全可控的路径上部署也就是两端设备都是你的、中间交换机也是你的跨运营商、穿过不明中间设备的网络一律保持默认 MTU别赌。第二三层接口配 9000 时记得把物理帧上限留到 9216 来容纳 VLAN tag 和可能的 QinQ。第三改 MTU 一定要写进变更流程配完先做 ping 探索再做 iperf 回归不要直接切生产。这种改动看起来小一旦中间有一台设备不兼容影响的是整个链路上的所有大流量业务。最后分享一个小技巧排查网络问题时把 MTU 作为一个常规检查项而不是最后才怀疑的对象。我见过太多玄学网络故障最后发现就是某一段链路的 MTU 配置不一致。先用ping -M do -s 8972探一圈能排除一大堆问题省下的时间足够你慢慢查那些真正复杂的疑难杂症。

相关新闻

twemproxy 测试体系全指南:基于 nosetests 的 Redis/Memcached 集成测试与 C 单元测试实战

twemproxy 测试体系全指南:基于 nosetests 的 Redis/Memcached 集成测试与 C 单元测试实战

后端 【免费下载链接】twemproxy A fast, light-weight proxy for memcached and redis 项目地址: https://gitcode.com/gh_mirrors/twe/twemproxy 点击查看 免费下载 导读 本文以仓库 tests/README.rst 为骨架,系统讲解 twemproxy(nutcrac…

2026/10/7 6:15:37 阅读更多 →
功率因数 0.70 被罚 3617 元:一张 5.97 万元电费账单的三层根因与治理路径

功率因数 0.70 被罚 3617 元:一张 5.97 万元电费账单的三层根因与治理路径

上月接到一个施工项目部的电话,说电费太贵让我帮忙看看。账单我按流程做了三步复算:表计示数对得上、功率因数算得出、力调金额分毫不差。然后问题就很清楚了。 账单的核心数据是这样的:本期有功电量 57060 kWh,无功电量 58020 kv…

2026/10/7 6:15:37 阅读更多 →
打造个人效率超能力:从命令行到自动化脚本的完整实战

打造个人效率超能力:从命令行到自动化脚本的完整实战

超级英雄电影里,主角觉醒“超能力”往往需要一场意外。而在现实世界的数字工作流里,想要获得“superpowers”,通常只需要一套组合得当的工具链和一份肯折腾的决心。我最近花了不少时间梳理自己桌面上的“超能力体系”,包括命令行的…

2026/10/7 6:15:37 阅读更多 →

最新新闻

FPGA高扇出网络时序优化:从XDC约束到RTL寄存器复制的完整实战

FPGA高扇出网络时序优化:从XDC约束到RTL寄存器复制的完整实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 6:38:59 阅读更多 →
Agent-Reach:轻量级 DeepSeek CLI 调用工具

Agent-Reach:轻量级 DeepSeek CLI 调用工具

1. 项目概述:一个轻量级、开箱即用的智能体调用 CLI 工具Agent-Reach 不是一个抽象概念,也不是某个大厂闭源平台的代号——它是一个真实存在的、托管在 GitHub 上的开源命令行工具,核心目标非常朴素:让开发者能像敲curl一样&#…

2026/10/7 6:38:59 阅读更多 →
大模型多轮对话的上下文模式设计:从选型到状态机实战

大模型多轮对话的上下文模式设计:从选型到状态机实战

1. 先看三个翻车现场:没有上下文模式会怎样context-mode这个词,最近在 LLM 应用开发的圈子里被频繁提起。我最早看到它的时候,以为只是一个简单的开关——开一下,AI 就能记住对话,关一下,就是普通的单轮问答…

2026/10/7 6:38:59 阅读更多 →
AI Agent从零搭建实战:任务拆解、工具调用与状态管理全复盘

AI Agent从零搭建实战:任务拆解、工具调用与状态管理全复盘

做了半年AI Agent,我把踩过的坑和最终跑通的方案写下来。如果你正打算从零搭建一个自己的智能体,或者已经在折腾却总感觉差一口气,这篇内容应该能让你少走不少弯路。先说清楚“Agent-Reach”是个什么东西。它的名字拆开看就挺直白&#xff1a…

2026/10/7 6:38:58 阅读更多 →
广告传媒AI Agent落地实践:从素材整理到方案生成

广告传媒AI Agent落地实践:从素材整理到方案生成

广告传媒公司的AI Agent落地,我前后折腾了三个月,从最初的素材管理痛点到最后的方案辅助智能体上线,中间踩过的坑和想明白的事情,今天一次性说清楚。这事儿得从一次比稿说起。凌晨两点,项目组在赶一个快消客户的提案&a…

2026/10/7 6:38:58 阅读更多 →
中文电子病历NER实战:BERT-wwm + BiLSTM-CRF完整复现指南

中文电子病历NER实战:BERT-wwm + BiLSTM-CRF完整复现指南

简介:一套面向中文电子病历命名实体识别(NER)的深度学习实验系统,基于CCKS2019评测数据构建,专注解决医疗文本中疾病、临床表现、治疗方案等医学实体的自动抽取问题,适合医疗NLP研究者、算法工程师以及相关…

2026/10/7 6:37:58 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 6:26:51 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 4:21:51 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →