
1) 【一句话结论】:为军工设备短距离通信设计可靠传输协议,核心采用带确认的滑动窗口机制(优化版),结合短距离链路质量优的特点,优化超时时间与窗口大小,以实现低延迟与高可靠性,复杂度适中,适用于近距离、低干扰的军工设备间通信。
2) 【原理/概念讲解】:可靠传输的核心是解决数据包丢失、顺序错误问题。短距离通信(如设备间几米到几十米)链路质量高(干扰少、误码率低),但需保证数据可靠。关键机制包括:
3) 【对比与适用场景】:
| 机制 | 定义 | 特性 | 复杂度 | 适用场景 | 注意点 |
|---|---|---|---|---|---|
| 停止等待 | 发送一个数据包后等待ACK | 单包传输,效率低 | 低 | 链路质量极差、短距离低流量 | 适用于极低速率、短距离 |
| GoBackN | 滑动窗口,重传未确认的包 | 需要重传整个窗口的包 | 中 | 链路质量较好,延迟中等 | 适用于中等速率,延迟可接受 |
| 优化滑动窗口(短距离) | 滑动窗口+小超时+快速重传 | 窗口大小2-4,超时短,快速重传 | 中低 | 军工设备短距离通信(低延迟高可靠) | 需根据链路RTT调整超时时间 |
4) 【示例】(伪代码):
发送端流程:
def send_data(data_list, window_size, timeout):
for i in range(0, len(data_list), window_size):
send_batch(data_list[i:i+window_size])
for _ in range(window_size):
if not wait_for_ack(i, i+window_size-1, timeout):
resend_batch(data_list[i:i+window_size])
接收端流程:
def receive_data():
ack_list = []
for data in incoming_data:
if is_in_order(data, ack_list):
ack_list.append(data.seq)
send_ack(data.seq)
else:
drop_data(data)
其中,wait_for_ack函数等待ACK,超时则重传;is_in_order检查数据是否按序到达。
5) 【面试口播版答案】:(约90秒)
“面试官您好,针对军工设备短距离通信的可靠传输需求,我设计的核心机制是带确认的滑动窗口协议(优化版)。首先,短距离链路质量高(干扰少、误码率低),所以采用滑动窗口(窗口大小2-4),在收到前一个数据包的ACK前,发送多个数据包,减少空闲时间,提升效率。其次,为高可靠性引入ACK机制:接收端收到数据后立即发送ACK,发送端根据ACK或超时(超时时间按RTT的1.5倍计算,短距离下RTT低,超时短)判断是否重传。这种机制结合了滑动窗口的高效与ACK/超时重传的可靠性,复杂度适中(需维护窗口、超时计时器),适用于近距离、低干扰的军工设备间通信,能平衡低延迟(小窗口、短超时)和高可靠性(确认与重传)。”
6) 【追问清单】:
7) 【常见坑/雷区】: