| HowItWorksLab · 模拟器
简体中文

TCP 丢包与重传模拟器

即使网络丢包,TCP 也能让数据完整送达。 设定丢包率和超时时间,运行模拟,看数据包如何丢失、超时并被反复重发,直到成功到达。

发送方 待发送队列 接收方 已接收 网络(可能出现丢包)
准备就绪... 点击“开始模拟”
发生的顺序 发送 → 丢包? → 超时 → 重传 → ACK
显示模式

详细说明

什么是丢包模拟器?

这个模拟器演示一条可靠连接如何应对不可靠的网络。发送方一次交出一个数据包,网络可能悄悄丢掉一些,而接收方对每个成功到达的包回一个简短的确认,也就是 ACK。

因为发送方听不到「沉默」,它只能靠计时器:如果在超时重传时间内没有收到 ACK,就认定这个包丢了,把同样的数据再发一次——这正是 TCP 可靠性的核心。

为什么要调它?

两个滑块对应两个真实的取舍。丢包率决定网络有多恶劣,超时时间决定发送方多有耐心。超时太短恢复快,却会无谓地触发重传;超时太长,则在真正丢包后要白等很久才发现。

用不同参数运行模拟并观察日志:它按顺序记录每一次发送、丢包、超时和 ACK,你能直观看到丢包是如何转化为延迟的。

部件及其作用

1. 发送方发出数据包

发送方从发送队列取出下一个数据包放到网络上,并记录它的序号,好让每一次尝试都能区分开。

2. 网络可能丢弃它

按你设定的丢包率,数据包要么穿过网络,要么被丢掉。丢失会画成数据包变红并停在半路:它根本没有到达接收方。

3. 发送方等待超时

丢失的包不会带来任何确认,发送方于是只能等待。直到超时重传时间到期,它才断定这个包是丢了,而不仅仅是慢了。

4. 发送方重传

发送方沿用同一个序号把同样的数据再发一次。必要时会重复很多次:接收方能够识别重复包,只保留一份。

5. 接收方回 ACK

当数据包终于到达,接收方把它存下、回一个 ACK,发送方随即推进到下一个序号。即使个别包丢过,整个数据流依然保持完整。

丢包率是什么意思?

它表示任一数据包被网络丢弃的概率,从 0 到 100%。设为 20% 时,大约每五个包就有一个到不了接收方,必须重发。

超时重传时间(RTO)是什么?

它是发送方等待确认的时间,超过这段时间没收到 ACK,就认为数据包丢失并重发。RTO 短反应快,但可能过于急切地重发;RTO 长则在恢复前白白等待。

为什么同一个数据包要发多次?

如果迟迟等不到确认,发送方无法分辨包是丢了还是慢了,于是按最坏情况重传。它沿用同一个序号,接收方就能识别出重复包。

ACK 是什么?

ACK(确认)是接收方回给发送方的一个小回复,用来告诉对方这个包已经收到。ACK 回到发送方,就说明这个包安全了,可以发下一个。

丢包会损坏数据吗?

不会。丢包就是根本没有到达。真正有风险的是包在传输中被损坏而非丢失,所以 TCP 还带校验和,会丢弃被破坏的包。

这和真实的 TCP 完全一样吗?

并不完全一样。真实 TCP 会一次流水发送多个包,使用滑动窗口和自适应计时器。本模型一次只发一个包、用固定超时,是教学简化。

常见误区

丢包会损坏数据。 人们以为丢失意味着收到的内容会乱掉。
丢包只是没到达。 被丢弃的包就是缺了,靠重发补上这一格。
发送方立刻知道包丢了。 包一消失,网络马上通知发送方。
发送方只能从沉默中判断。 没有回复,唯一的线索就是计时器到期。
超时越短越好。 反应最快就能最快恢复。
太短会导致无谓重发。 超时必须长于正常往返时间,否则会对根本没丢的包误判。
重传会改变数据。 重发的包带着新的或部分信息。
重传是完全相同的副本。 同样的序号和内容再发一遍,接收方只保留一份。
免责声明:本图解为教学目的做了大幅简化,真实系统变量与复杂度远超此处。不可用于工程生产用途,也不构成金融、政治或专业建议。