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


目录


疑问?

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

答案:是的,如果路由器在分组还没有转发出去之前突然故障,这些存储在缓冲区(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)和网络冗余来保证最终可靠。

相关推荐
ward RINL1 小时前
# GPT-5.6-sol vs GPT-5.5 新题实测:非弹性碰撞物理题和稳定路由算法
网络·gpt·算法
wang_shu_mo_ran2 小时前
网络编程(二):UDP数据报在客户端与服务端之间的传输
网络·网络协议·udp
humors2212 小时前
【转帖】关于防范AI编程工具Claude Code安全后门隐患的风险提示
网络·安全·ai编程
深度智能科技2 小时前
IPv6无网络访问权限怎么解决?【图文讲解】Win10/Win11 IPv6无网络访问权限完整修复实操教程
网络·ipv6·深度c盘清理·ipv6协议开启自动获取ip·ipv6无网络访问权限·上不了网怎么办·防火墙拦截ipv6
梦帮科技2 小时前
Rust+Tauri+EVM:构建下一代内存安全级数字版权(DRM)主权音频网络与跨链金融系统的技术实践与全景架构
网络·安全·架构·rust·区块链·音视频·web3.py
mudtools2 小时前
HttpUtils:一个编译时生成的声明式 HTTP 客户端框架
网络·网络协议·http·.net
luj_176810 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
吴懿不在11 小时前
某次热身赛re方向wp WORDS 51,500 READ 172 MIN base64,
网络
小林ixn14 小时前
从“玩具工具”到“跨语言利器”:MCP 协议实战解析
运维·服务器·网络