确认与重传:没有回音怎么办
约 10 分钟
发送方把数据发出去,可能在路上丢失;接收方的「收到」也可能丢失。可靠通信不能靠猜,需要一套确认与重传规则。
给每个包编号
发送方先发编号 1 的数据包,接收方校验通过后回复 ACK 1。发送方在规定时间内没等到确认,就重新发送编号 1。编号非常重要:如果确认丢了,接收方会再次收到同一包,看到编号重复就知道不应把篮球数量加两次。
超时时间不能乱定
等一毫秒就重传,在远距离网络里太急,会制造大量重复包;等一分钟才重传,用户又会觉得卡死。超时要比正常往返时间稍长,并根据网络情况调整。这里体现了通信工程的常见取舍:更快发现失败,可能带来更多误判和重传。
什么时候不值得重传
下载文件时一个字节都不能错,重传很合适。实时视频通话中,半秒前的一小块画面即使补回来也过时了,系统可能选择跳过,优先传最新画面。可靠性不是越高越好,要看消息能否迟到、能否丢失。
防止无限重试
如果对方断电,一直重传会浪费电和频道。系统应规定最多次数,并把失败清楚报告给使用者。好的错误提示不是「未知错误」,而是「已尝试三次,未收到器材室确认,请检查接收端」。
把协议写成双方都懂的步骤
谁先发、确认写什么、多久超时、重复包怎么办,这些共同规则叫协议。协议让不同设备不必互相猜心思。
练一练:画出「发送数据包 3 → 确认丢失 → 超时重传 → 接收方识别重复」的时序图。
小纸条
为什么数据包要编号?