报文交换 vs 分组交换:串行与并行如何决定传输效率
前阵子帮朋友调一个内网传输的老问题同样的百兆链路同时传二十个小文件居然比传一个几百兆的大文件还要快。乍一听不合直觉小文件多路并发在网络里是典型的“分组并行”大文件虽然被TCP拆成了段但应用层一旦一次性提交太大块或者中间环节配置不当被强制整包处理传输节奏就会滑向“串行搬运”的泥潭。报文交换串行和分组交换并行这对概念正好把这两种命运解释得清清楚楚。这篇文章我会从“为什么必须要有交换”讲起把报文交换为什么串行、分组交换为什么并行、同样数据两种交换到底差多少时间用算例一笔一笔算给你看最后聊聊抓包工具里能观察到的分组交换细节。适合正在啃计算机网络教材的学生、做网络开发或者运维的工程师以及所有被“大文件慢、小文件快”折磨过的人。看完你至少能回答三个问题中间节点为什么要存储转发、分组头到底值不值得付、为什么今天互联网几乎全是分组交换的天下。1. 为什么会有交换从直连到存储转发的必然选择1.1 N个端点两两直连是场灾难先往回退一步。如果世界上只有两台设备要通信拉一根网线就完事。但设备一多问题立刻来了三台设备两两直连需要3条线四台需要6条五台需要10条。N台设备两两直连需要的线路数量是N(N-1)/2这个数字增长得极快——100台设备就要4950条线路1000台就是差不多50万条。每个设备还得配上对应的接口线的成本、接口的成本、机房里缠绕成意大利面的物理线路这些直接让全网状直连的方案彻底破产。所以网络必须引入一个中间角色交换节点。每个设备只连到最近的交换节点由节点帮你把数据转交给目标设备。这就好比一个镇上所有人家都把信送到邮局邮局再按地址分发而不是每家人都直接修一条路通到别人家门口。有了交换节点数据从源设备出发经过一个个中间节点最终到达目的设备。这个“经过”的过程就叫转发或者交换。中间节点扮演的角色不同交换的方式也就有了本质区别。早期电话网用的是电路交换先拨号建立一条从源到目的地的专用线路通话期间这条线路被一对用户独占挂断才释放后来数据通信发展起来人们发现数据是突发的不是像语音那样持续占用于是报文交换和分组交换相继登场。1.2 三种交换方式一次说清电路、报文、分组先说电路交换最典型的例子就是老式电话。通话前要“占线”建立连接建立好之后两个人说话中间的线路资源就固定分配了不管你有没有说话带宽都留着给你。好处是延迟稳定、没有排队坏处是线路利用率低——你沉默的时候那段带宽就浪费了。数据通信追求效率所以后面两种方式都改成了“存储转发”思路中间节点先把数据收下来再往下一个节点发不用提前占路。报文交换Message Switching和分组交换Packet Switching都属于存储转发但关键区别在于报文交换以“整条报文”为存储转发单位分组交换先把报文“切片”以“小分组”为存储转发单位。只看教科书定义容易觉得这两者只是颗粒度不同但正是这一个颗粒度差异让它们在延迟、带宽利用率、容错能力上走向了完全不同的方向——也就是标题里说的“串行”和“并行”的分野。补充一点报文交换今天在日常网络里已经很少以纯粹形态出现但在理解分组交换为什么先进时它是最好的对照组。当年的电报网络、早期的某些消息系统就是典型的报文交换思路。2. 报文交换的串行本性整包占路、后车排队2.1 收满再走中间节点是“完整接收”的搬运工报文交换的工作方式特别像货运列车一整列火车从始发站出发到中间站之后必须等整列车都停稳、货物清点完毕再整列发往下一站没有任何一节车厢可以提前走。对应到网络里就是一个应用要发送一大段数据可能几兆甚至几十兆中间节点必须把这整段数据完整接收下来存到缓冲区里校验没问题再整体转发到下一跳。这里的关键词是“完整接收”。假设链路速率是1Mbps你要传一个10Mb的报文那中间节点收完这个报文就需要整整10秒。在这10秒里这个报文的头还没到下一站呢它“占据”了从源到当前节点这一段链路。哪怕下一个报文已经等在源节点的发送队列里也得老老实实等着因为链路是共享的现在全被这个巨无霸报文占着。我的一个体会很多刚从“应用层编程”视角看网络的人天然以为数据是像水管里的水一样流过去的源端一边发、目的端一边收。报文交换打破这个直觉——存储转发的本质就是“收一批、走一批”中间节点像一个检查站不允许有任何一辆车没到齐就先发车。2.2 排队等待与链路浪费串行不是慢一点而是慢很多“串行”在这里有两层含义。第一层在一个节点的输出链路上报文是一个接一个排队发送的谁先到谁先走不存在同时发送的情况这是最朴素的串行第二层更关键——因为一个报文在中间节点要整体等待“收满”它占住链路的时间非常长其他报文只能串行累积等待。一个10秒的报文堵在前面后面排100个正常的小报文每个哪怕只要0.1秒串行下来也要额外等10秒这种排队延迟会迅速放大。链路浪费也是报文交换的一大毛病。报文交换的源端发送是间歇的中间节点收报文的10秒里源端发完后其实没事干了源到节点一的链路空闲等节点一转发时源到节点一的链路还是空闲的。你发现了吗一整条端到端的路径上同一时刻几乎只有一段链路在干活其他链路都在等。用经济学的话说资源利用率极低。2.3 报文交换的算例10Mb数据走5跳链路的50秒做一道很简单的算术题感受一下。假设数据量是10Mb链路速率是1Mbps从源到目的地需要经过4个中间节点也就是总共5段链路5跳。报文交换方式下每一跳的传输时间 数据量 / 链路速率 10Mb / 1Mbps 10秒端到端传输时间 5跳 × 10秒 50秒加上少量传播时延和处理时延结果还是约50秒为什么是跳数乘以单跳时间因为报文交换是“整包收完再发”第1跳花10秒第2跳花10秒……每一跳都要完整重传一次整报文。50秒这个数字非常直观慢不是因为链路速率低而是同一个10Mb报文被重复发送了5次。中间节点越多报文越大这个重复惩罚就越致命。3. 分组交换的并行基因切片、交织与独立选路3.1 切片是并行性的来源分组头和载荷分组交换的做法就激进多了先把大报文切成一堆小分组每个分组只带一小段有效载荷然后给每个分组加上一个头部Header头部里写着目的地址、源地址、序号这些控制信息最后这些小分组独立地在网络里穿行。分组的大小有上限。在今天的以太网环境里典型的上层分组要适配MTU最大传输单元1500字节也就是说一个分组最大约1.5KB。一个10Mb的报文切成传统大小的分组能切出几千个。切完以后发送端像流水线一样一个接一个地把分组发到链路上第一个分组还在中间节点转发时第二个分组已经在第一段链路上跑了第三个分组已经在源设备网卡里准备发送了。这里有个特别重要的点分组交换的“并行”不是说多个分组同时占住同一段链路物理链路上同一时刻仍然只有一个分组在传输而是说——整个报文被切片之后不同分组可以处于整个路径的不同位置、不同链路上彼此不阻挡地“流水线式”前进。这就像搬家公司把一车货物拆成多个小箱一辆小货车先出发送第一箱第二辆紧跟其后送第二箱车队在路上首尾相接、不停歇地跑而不是非得等第一辆到了再让第二辆装车出发。3.2 分组级流水线节点同时收发链路不再空等你可能要问中间节点不是也要“收满一个分组再转发”吗怎么就不等了关键在分组够小。节点转发一个小分组只需要极短时间比如一个10Kb的分组在1Mbps链路上只花10毫秒。源端持续不断地把分组喂进来节点一边收一个、一边发前一个只要输出链路没有被更长的包堵死它的接收和转发是可以装配线一样重叠进行的。再算一遍同样的数据量。10Mb数据拆成1000个10Kb分组忽略头部开销简化链路依然是1Mbps单跳传输时间变成10Kb/1Mbps 10毫秒。第一个分组从源到终点要经过5跳也就是5×10毫秒50毫秒但这期间源端没有闲着它每10毫秒发出一个新分组。到第9.99秒最后一个分组才从源端发出它再经过5跳的50毫秒大约10.04秒到达终点。看出来差别了吗报文交换是50秒分组交换是10.04秒将近5倍的差距。本质原因是报文交换里这10Mb数据每次都是从起点完整重发到终点重复搬运5次分组交换里只有第一个分组真正经历了“逐跳完整传输”的起步延迟后续分组全靠流水线跟上来整个10Mb数据的“传输时间”基本就是发送时间本身和跳数无关了。3.3 独立选路真正意义上的多路并行分组交换还有一层更强的并行每个分组头部都带着完整的目的地址可以独立选择路径。这意味着同一批分组不一定走相同的路由——某个分组走A路线另一个分组走B路线它们在物理上是真正并行的共享网络的总带宽而不是都挤在同一条链路上排队。独立选路的直接好处是容错和负载均衡。某条链路断了或者堵了后续分组可以自动绕道多条路径同时传数据整体吞吐能被拉高。代价是分组会乱序到达先发的分组绕了远路后发的分组抄了近路到达顺序就不一定是发送顺序了。这件事恰恰解释了为什么互联网的传输层需要TCPTCP用序号把这些乱序的分组重新排好应用层看到的数据才是有序的。所以“分组交换的并行”可以概括为三层一是分组级流水线让同一报文的不同分组在不同链路上串行接力却不互相等待二是源端连续注入让链路利用率最大化三是独立选路让大批分组在网络里多路径并发。而报文交换只有一条路走到黑每个节点都必须等整包收完这就是串行与并行最本质的分野。4. 同样一段数据两种交换差出几倍算给你看4.1 分组交换的端到端延迟推导把上面的例子写成通用公式方便你以后遇到自己的场景直接套用。设报文大小为Mbit分组大小为Pbit链路速率为Rbit/s端到端经过H跳忽略传播时延和处理时延。报文交换端到端延迟T_message H × (M / R)分组交换端到端延迟分组个数 n M / P单跳传输一个分组的时间 t P / RT_packet ≈ (n H - 1) × t用之前的数字验证M10MbP10KbR1MbpsH5T_message5×10s50sn1000t10msT_packet(10005-1)×10ms10.04s。两个公式都能对上。注意分组交换公式里“H-1”的含义第一个分组要多走H跳的流水线建立时间剩下的分组基本就是排队跟着走所以跳数的影响只被算了一次而不是每一跳都重复整个数据量。这套公式在真实网络调优里非常有用。比如你看视频卡顿如果抓包发现是带宽低加带宽立竿见影但如果是RTT往返时间大、又有大量小分组要传那瓶颈其实是“起步延迟”被反复计算加再多带宽也没有用。这两种情况对应公式里的哪一项一眼就能判断。4.2 报文与分组的全面对比表把两种方式从几个关键维度拉出来对比对比维度报文交换串行分组交换并行转发单位整条报文大小可很大小分组长度有上限如以太网MTU 1500字节中间节点动作完整收完整个报文再转发收完一个小分组即可转发流水线重叠端到端延迟≈ 跳数 × 整报文传输时间≈ 数据量/链路速率 第一个分组的逐跳延迟链路利用率低同一时刻只有一段链路在传输高全网链路可同时处于传输状态缓存需求节点需要大缓存装整个报文节点缓存只需容纳若干分组排队现象大报文占住链路后车成倍等待分组小排队粒度细延迟更可控容错性报文整体转发路径变化代价大分组独立选路自动绕开故障和拥塞头部开销相对小每个分组都要带头部存在固定开销顺序保证整包到达有序性天然成立分组可能乱序需要上层协议重组结论很清楚分组交换几乎在所有衡量指标上都赢唯一输的就是头部开销。但互联网选择它正因为那点头部开销换来了延迟、利用率、容错三方面的巨大收益。4.3 为什么“分组头开销”是值得付的保费每个分组头部占用一些字节以太网常见的开销是20字节左右的IP头加上20字节左右的TCP头。一个1500字节的帧里头部占了40字节大约2.7%的额外开销。有人会觉得这是浪费但换个角度想这相当于每个包裹都贴了张写着地址和序号的快递单。没有这张单子包裹就不能独立运输、不能走不同路线、不能在中间节点掉头重发。网络里没有集中式的中央调度分组头就是让每个分组“自动驾驶”的地图和导航。而且头部开销在实际网络里几乎可以忽略——传输的数据量一旦变大固定开销就被摊薄了链路一旦到千兆万兆2.7%的开销远小于串行等待带来的几十倍延迟放大。这是一笔非常划算的“保险费”。5. 在真实网络里看分组交换抓包与分片现场5.1 MTU与分片以太网帧1500字节的切片很多人学完分组交换还是觉得它很抽象其实打开抓包工具看一次就懂了。你发一个普通网页请求抓包工具里能看到一条条TCP流被切成了无数个分组数据包每个分组在网络层都有一个IP头里面带着源地址、目的地址、标识符、分片偏移量和DF标志。以太网链路的MTU是1500字节大于这个数值的上层大包会被IP协议切分成多个分片每个分片都保持独立的IP头到目的地后再按“分片偏移”重组。把这个现象对应到原理上IP分片就是分组交换“切片”概念的最直接体现。大块数据无法塞进一个帧就拆成多个分组分别传输每个分片都是独立路由的可能在网络里走不同路径到达。以前我调试一个跨网传输问题抓包看到一批分片包的序号是交错的目的端要等凑齐了才重组——那一刻我才真正理解“分片是分组交换的常态”而不是异常。注意具体网络里追求性能时大多数场景会尽量避免IP层分片。TCP会通过MSS协商把段大小控制在有效载荷1460字节左右正好适配1500字节的MTU。这就是为什么TCP建立连接时要协商MSS——它本质上是一次“预切片”避免真实数据在IP层再被二次分片。二次分片浪费带宽且一旦丢一个分片就得重传整组性能很吃亏。5.2 乱序、重复ACK与重组独立选路的代价被TCP接住抓包时另一个常见现象就是乱序和重复确认Dup ACK。一个TCP连接在传输大量数据时如果你看到目标主机的接收端回复的ACK序号没有按顺序增长比如收到了seq1000的段之后没有马上收到seq2000而是先收到seq1800就说明这两个分组走了不同的路径或者经历了不同的排队时延先发的不一定先到——这就是分组独立选路的直接证据。分组丢失了怎么办接收端会连续发送重复的ACK告诉发送端“我还在等某个序号”发送端连续收到三个重复ACK就快速重传不需要傻等超时。这套机制和分组交换“不保证有序、不保证不丢”的底层特性是对应着的网络层本身就是“尽力而为”靠TCP的序号、ACK、重传、重组把上层的数据重新变成可靠有序的字节流。我特别推荐做一次完整的抓包实验用浏览器下载一个大文件同时抓包你能看到成千上万个分组以近乎均匀的时间间隔被确认偶尔出现一两个乱序包TCP层波澜不惊地把它重排回去。这比背十遍“分组交换是存储转发的”都管用。6. 实操中的几条体会聊完原理说点这几年实际调网络攒下的体会。第一中间节点的缓冲区根本不是越大越好。分组交换依赖节点缓存来处理“收组转发”的瞬时冲突但缓冲区太大反而坏事TCP的拥塞控制是靠丢包和延迟信号的路由器缓冲区把临时拥塞全“吞”了发送端感知不到拥塞继续猛发结果就是缓冲区排队的延迟越来越大这就是很多人讲过的“缓冲区膨胀”。报文交换时代那种“整包排队”的原始问题在分组交换里换了一种形态继续存在只不过颗粒度变小了。调试延迟敏感应用时看一眼路由器队列深度经常能发现真相。第二应用层并行下载、多连接传输能提速底层逻辑就是制造更多分组流。多个TCP连接同时下载等于让网络里同时存在多个分组的“流水线”每个连接独立滑动窗口链路利用率就被拉高了。单连接传大文件时如果RTT大、丢包率高滑动窗口经常被打满链路利用率上不去整体速度就慢。这不一定是带宽不够而是“并发流水线”没有被充分建立起来。第三给正在学网络的朋友一个建议不要停留在“记住报文交换慢、分组交换快”这个结论上。把那张传递函数公式写在纸上把10Mb/1Mbps/5跳的例子亲自算一遍再用抓包工具看一次真实的分组流这套概念就再也忘不掉了。很多时候你觉得网络知识虚不是知识假而是没有把抽象的数字和现实中那个一闪一闪的网卡指示灯连起来。报文交换和分组交换的对比表面上是一个教科书考点实质上它是整个互联网设计哲学的一个缩影整包串行是简单但低效切片并行是复杂但高效。复杂度并没有消失它从网络层转移到了传输层TCP负责排序、重传、去重用一点协议开销换来了整个网络的效率和韧性这笔买卖做得值。

相关新闻

atomcode 内核内部继续(Internal Continuation)自动压缩设计解析:让截断恢复与 Hook 驱动验证循环同样获得上下文压缩机会

atomcode 内核内部继续(Internal Continuation)自动压缩设计解析:让截断恢复与 Hook 驱动验证循环同样获得上下文压缩机会

人工智能AI Agent代码智能体自主智能体MCP ClientsCLI 【免费下载链接】atomcode Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source…

2026/10/14 20:47:12 阅读更多 →
蓝色任务悬赏系统源码:uni-app+PHP完整功能拆解与部署指南

蓝色任务悬赏系统源码:uni-app+PHP完整功能拆解与部署指南

简介:一份基于uni-app PHP MySQL构建的在线悬赏任务平台完整源码,适合熟悉Vue与PHP的开发者快速启动任务发布/接取类APP项目。前端以uni-app实现iOS、Android、H5多端覆盖,包含任务列表、任务详情、注册登录、发布接取等核心模块&#xff1…

2026/10/14 20:47:12 阅读更多 →
openrig编排器:Claude Code与Codex的tmux持久化环境搭建指南

openrig编排器:Claude Code与Codex的tmux持久化环境搭建指南

1. 从 openrig 说起:一个把 Claude Code 和 Codex 装进 tmux 的编排器第一次看到openrig这个名字,我下意识把它拆成了 "open" "rig"。"rig" 在工程语境里指的是"成套装配好的设备",比如一台调试好的…

2026/10/14 20:46:08 阅读更多 →

最新新闻

AI辅助开发实战:用Python重做一个mini版Photoshop

AI辅助开发实战:用Python重做一个mini版Photoshop

最近技术社区和设计圈都在讨论一件事:Adobe 更新应用内许可条款后,不少开发者担心“用 AI 辅助开发软件”会撞上版权红线;随后 Adobe 官方人员在社区公开回应,表示不会对使用 AI 辅助开发的非商业开源替代品采取法律行动&#xff…

2026/10/14 21:38:32 阅读更多 →
ASO优化实力品牌怎么选:从关键词到转化闭环的筛选指南

ASO优化实力品牌怎么选:从关键词到转化闭环的筛选指南

做应用推广这些年,我接触最多的词就是ASO优化。不管你的产品是新上架还是已经跑了一年,应用商店的搜索结果、榜单位置、详情页转化,都直接决定自然量的大小。很多人一听说某个品牌擅长ASO优化,第一反应是“那家能帮我冲榜吗”&…

2026/10/14 21:38:32 阅读更多 →
无人自助拼豆系统核心逻辑实现与全流程部署实战操作指南

无人自助拼豆系统核心逻辑实现与全流程部署实战操作指南

无人自助拼豆系统概述 无人自助拼豆系统是一种基于物联网与软件开发技术的智能设备管理系统,旨在为用户提供便捷的拼豆服务。该系统通常包括用户端、管理后台及硬件设备之间的交互逻辑,实现从用户操作到数据处理的全流程自动化。通过结合Spring Boot、My…

2026/10/14 21:38:32 阅读更多 →
深入解析 CMake 缓存机制:删掉 CMakeCache.txt 与 CMakeFiles/ 的正确时机

深入解析 CMake 缓存机制:删掉 CMakeCache.txt 与 CMakeFiles/ 的正确时机

先说一个近乎人人遇过的场景:白天还好好的 CMake 工程,下午一改CMakeLists.txt,再一编译就开始闹脾气——头文件找不到、链接器报一堆 undefined reference、甚至改动完全没有生效。这时候老手多半会不动声色抛出千古名句:“把 CM…

2026/10/14 21:38:32 阅读更多 →
教务系统后端实战:MySQL 8.0 + Spring Boot 3.2 工程化搭建指南

教务系统后端实战:MySQL 8.0 + Spring Boot 3.2 工程化搭建指南

简介:本资源是一份面向高校计算机专业学生的数据库课程设计实践材料,聚焦教务管理系统的完整开发流程,以MySQL为数据存储核心、Java为应用实现语言,帮助初学者掌握需求分析、ER建模、SQL脚本编写、JDBC连接、前后端基础交互等关键…

2026/10/14 21:38:32 阅读更多 →
48V输入LDO稳压芯片方案:PW8600 80V耐压/70V宽压/1.8μA低功耗电路详解

48V输入LDO稳压芯片方案:PW8600 80V耐压/70V宽压/1.8μA低功耗电路详解

LDO 稳压芯片 选型助手 面向硬件工程师与电子研发人员,通过输入电压 / 输出电压快速匹配合适的 LDO 型号, 并提供完整参数查阅、外围器件建议与型号清单,让选型一步到位。 传统 LDO 耐压不足 5V/6V LDO 无法直连 24V/36V/48V 总线&#xff0c…

2026/10/14 21:37:29 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →