当前位置: 首页 > news >正文

分组交换的可靠性来自哪里?


目录

    • 疑问?
    • 谁保证了可靠性?
      • 分组交换为什么要存储转发?
      • 如果这时候路由器坏了包会丢吗?
      • 为什么互联网还能正常通信?
      • 那是谁保证可靠?
      • 整个路由器坏了后面传输又怎么办?
    • 其他疑问?
      • 路由器为什么不把Packet写磁盘?
      • 如果路由器Buffer满了怎么办?
    • 结论

疑问?

我们都知道分组交换采用存储转发的技术,路由器收到相关分组后,会先存储到其内存中,然后查询路由表后再进行转发,如果此时路由器发生故障(如突然断电),那是不是我这个路由器上的存储的分组就丢失了呢?

答案:是的,如果路由器在分组还没有转发出去之前突然故障,这些存储在缓冲区(Buffer)中的分组通常就会丢失。

那实际生产中分组交换的可靠性来自哪里呢?接着往下看。

谁保证了可靠性?

分组交换为什么要存储转发?

假设有一个数据包

PC A │ │ IP Packet ▼ Router1 │ ▼ Router2 │ ▼ Server

Router1收到完整的数据包以后,会经历几个步骤:

① 接收整个数据包 ② 放入缓存(Buffer) ③ 检查IP头 ④ 查询路由表(FIB) ⑤ 找到下一跳 ⑥ 放入发送队列 ⑦ 发出去

所以它确实要"存储",且这个存储一般不是硬盘,而是内存 RAM(Buffer),通常就是几十MB、几百MB甚至更大的高速缓存。

如果这时候路由器坏了包会丢吗?

答案:一定会丢。

例如:

PC │ ▼ Router1 ↑ Packet 正在Buffer里面

突然:

Router1 Power Off

那么RAM里的Buffer全部没了

因为RAM断电即失,所以这个Packet真的丢了。

这就是 Packet Loss(丢包),互联网允许发生丢包。

为什么互联网还能正常通信?

答案:IP协议本身就是不可靠协议(Best Effort)。

IP协议只保证:尽力帮你送达。

它不会保证:

  • 一定送到
  • 一定按顺序
  • 一定不重复
  • 一定不丢

所以RFC里面把IP叫:Best Effort Delivery(即尽力而为)。

那是谁保证可靠?

答案:主要是 TCP。

例如:

发送100个Packet 1 2 3 4 5 ... 100

Router2坏了,导致:

Packet 45 46 47 丢失

接收端收到:

1 2 3 ... 44 48 49 ... 100

TCP就会马上发现:

45呢? 没收到

于是:

ACK 一直ACK 44 或者发送SACK信息。

发送端发现:

哦 45没到

重新发送:

45 46 47

因此应用层感觉不到,因为TCP帮你补发了。

UDP怎么办?

答案:UDP没有重传,是一种不可靠的传输协议。

如果 Packet 丢了,就是真的没了。

例如:视频会议第324帧丢了,就直接播放下一帧,不会补,因为补回来已经晚了。

整个路由器坏了后面传输又怎么办?

答案:动态路由

例如:

R2 / PC--R1 \ R3

正常:

PC ↓ R1 ↓ R2 ↓ Server

R2坏了,路由协议会重新收敛:

PC ↓ R1 ↓ R3 ↓ Server

这就是动态路由,设计到的相关协议为:

  • OSPF
  • IS-IS
  • RIP
  • BGP

路由器会根据这些协议重新计算最短路径,于是后续Packet就会走另一条路。

注意:已经在R2缓冲区里的那些Packet还是会丢,只是之后的新Packet改走别的路,最终通过 TCP 可靠传输协议对丢失部分的数据进行重传。

其他疑问?

路由器为什么不把Packet写磁盘?

答案:因为磁盘的读写速率太慢。

也许你会想:既然RAM会丢,为什么不存SSD?

原因很简单,磁盘读写速度太慢(即便是 SSD)。

例如:一个100G接口 ≈ 12.5GB/s

如果每个Packet都:

写SSD ↓ 读SSD ↓ 发送

延迟会暴涨,而互联网要求延迟几十微秒、甚至几微秒,SSD根本来不及。

因此,所有高性能路由器都是:

Packet ↓ ASIC ↓ Buffer(RAM) ↓ 发送

而不会落盘。

如果路由器Buffer满了怎么办?

答案:路由器主动丢包

例如:出口1G,入口10G

瞬间:100万个Packet进入

Buffer 放不下,于是直接Drop,这叫 Tail Drop 或 RED(Random Early Detection),即主动提前丢一些包。

TCP看到丢包以后降低发送速度,形成TCP拥塞控制。

所以,丢包并不是异常,而是互联网正常运行的一部分。

结论

互联网并不是依靠路由器保证数据不丢,而是依靠端到端协议(主要是 TCP)和网络冗余来保证最终可靠。

http://www.jsqmd.com/news/1172609/

相关文章:

  • 软件工程 3 大 UML 动态图对比:时序图、活动图、状态图的 5 个应用场景解析
  • 工业机器人系统集成竞赛实战:PLC与MES数据交互的3种通信方案对比
  • AI教育咨询底层逻辑:教育行业从流量收割到精准匹配的智能化转型
  • QtScrcpy终极指南:如何用电脑键盘鼠标控制安卓手机
  • NUBIS 3体素云系统:实时体积云渲染核心技术解析
  • YOLO11模型C++部署实战:从ONNX导出到NMS后处理全流程解析
  • 2026婚恋十大热门工作室真实横评,实力测评选定再拍不花冤枉钱 - mypinpai
  • C++ 默认拷贝构造函数 5 大陷阱:浅拷贝与指针成员内存泄漏
  • Python资深开发者必知的8个底层冷知识
  • C++封装RabbitMQ客户端:基于AMQP-CPP实现线程安全与延迟队列
  • 2026年国内质量好的pph管加工厂家大盘点 - 品牌排行榜
  • 软件容错技术解析:N版本与恢复块方法在微服务架构中的5个应用场景
  • Nginx listen 指令 5 种高级参数实战:backlog、rcvbuf、sndbuf 性能调优指南
  • iOS设备激活锁解锁方案:applera1n工具全面解析与实战指南
  • 5分钟搞定英雄联盟智能助手:免费战绩查询与BP决策终极指南
  • 2026年7月比较好的电梯定制厂家找哪家,复式电梯/伺服电梯/自建房电梯/家用电梯/螺杆电梯,电梯源头厂家怎么选择 - 品牌推荐师
  • 人形机器人隐形冠军:10家核心零部件企业的硬核技术解析
  • 聊聊最近很火的Codex
  • Keil C51 中断号限制:3种官方方案与1个补丁的深度对比评测
  • Anaconda 2024.10 镜像源配置:3步解决 CondaHTTPError 与超时问题
  • VS Code 远程调试 C++:CMake 项目实战与 launch.json 的 4 种高级配置
  • 2026代理记账资深企业口碑推荐强势出炉,零套路不踩坑,价格透明实力测评看这篇就够 - mypinpai
  • CSP-J/S 2025 入门组真题解析:3类高频算法考点与代码模板
  • 5G 核心网 5GC 架构解析:AMF/UPF/SMF 等 8 大网元功能与 4G EPC 对比
  • LaTeX PDF图片裁剪3种方案对比:原生trim、pdfcrop工具与draw.io导出优化
  • TPA3128D2音频放大器与PIC18F4610控制方案详解
  • 2026年7月最新济南宝玑官方售后服务热线与网点地址查询 - 亨得利钟表维修中心
  • Go语言Zap日志库入门与实践:从基础到高级用法
  • 3ds Max 2026 渲染引擎选择指南:Arnold vs V-Ray vs Corona 3方案实测
  • GBFR-Logs深度解析:高效DPS监控方案与内存注入技术实践