TCP 丢包与重传模拟器
即使网络丢包,TCP 也能让数据完整送达。 设定丢包率和超时时间,运行模拟,看数据包如何丢失、超时并被反复重发,直到成功到达。
即使网络丢包,TCP 也能让数据完整送达。 设定丢包率和超时时间,运行模拟,看数据包如何丢失、超时并被反复重发,直到成功到达。
这个模拟器演示一条可靠连接如何应对不可靠的网络。发送方一次交出一个数据包,网络可能悄悄丢掉一些,而接收方对每个成功到达的包回一个简短的确认,也就是 ACK。
因为发送方听不到「沉默」,它只能靠计时器:如果在超时重传时间内没有收到 ACK,就认定这个包丢了,把同样的数据再发一次——这正是 TCP 可靠性的核心。
两个滑块对应两个真实的取舍。丢包率决定网络有多恶劣,超时时间决定发送方多有耐心。超时太短恢复快,却会无谓地触发重传;超时太长,则在真正丢包后要白等很久才发现。
用不同参数运行模拟并观察日志:它按顺序记录每一次发送、丢包、超时和 ACK,你能直观看到丢包是如何转化为延迟的。
发送方从发送队列取出下一个数据包放到网络上,并记录它的序号,好让每一次尝试都能区分开。
按你设定的丢包率,数据包要么穿过网络,要么被丢掉。丢失会画成数据包变红并停在半路:它根本没有到达接收方。
丢失的包不会带来任何确认,发送方于是只能等待。直到超时重传时间到期,它才断定这个包是丢了,而不仅仅是慢了。
发送方沿用同一个序号把同样的数据再发一次。必要时会重复很多次:接收方能够识别重复包,只保留一份。
当数据包终于到达,接收方把它存下、回一个 ACK,发送方随即推进到下一个序号。即使个别包丢过,整个数据流依然保持完整。
它表示任一数据包被网络丢弃的概率,从 0 到 100%。设为 20% 时,大约每五个包就有一个到不了接收方,必须重发。
它是发送方等待确认的时间,超过这段时间没收到 ACK,就认为数据包丢失并重发。RTO 短反应快,但可能过于急切地重发;RTO 长则在恢复前白白等待。
如果迟迟等不到确认,发送方无法分辨包是丢了还是慢了,于是按最坏情况重传。它沿用同一个序号,接收方就能识别出重复包。
ACK(确认)是接收方回给发送方的一个小回复,用来告诉对方这个包已经收到。ACK 回到发送方,就说明这个包安全了,可以发下一个。
不会。丢包就是根本没有到达。真正有风险的是包在传输中被损坏而非丢失,所以 TCP 还带校验和,会丢弃被破坏的包。
并不完全一样。真实 TCP 会一次流水发送多个包,使用滑动窗口和自适应计时器。本模型一次只发一个包、用固定超时,是教学简化。