连续ARQ协议实战:Python模拟滑动窗口与确认机制
1. 理解连续ARQ协议的核心机制
连续ARQ(Automatic Repeat Request)协议是TCP可靠传输的关键技术之一,它通过滑动窗口机制实现了高效的数据传输。与简单的停止等待协议不同,连续ARQ允许发送方在未收到确认的情况下连续发送多个分组,显著提高了信道利用率。
让我们先来看一个简单的Python类定义,它包含了连续ARQ协议的基本参数:
class ContinuousARQ:
def __init__(self, window_size=3, seq_range=16):
self.window_size = window_size # 发送窗口大小
self.seq_range = seq_range # 序号范围
self.base = 0 # 窗口起始序号
self.next_seq = 0 # 下一个要发送的序号
self.acks_received = set() # 已收到的确认
self.pending_packets = {} # 已发送但未确认的分组
协议的核心在于发送窗口和确认机制的配合。发送窗口定义了可以连续发送的数据范围,而确认机制则确保数据的可靠传输。当接收方期望收到序号5时,这意味着它已经正确接收了序号4及之前的所有分组。
2. 发送窗口的可能状态分析
根据题目描述,当接收方期望收到序号5时,发送窗口可能出现以下几种状态组合:
| 窗口范围 | 可能情况描述 |
|---|---|
| [2,4] | 所有确认丢失,发送方未收到任何确认 |
| [3,5] | 确认2已收到,但3、4的确认丢失 |
| [4,6] | 确认2、3已收到,但4的确认丢失 |
| [5,7] | 所有确认(2,3,4)都已收到 |
在Python中,我们可以这样实现窗口状态的判断:
def get_possible_windows(self, expected_seq):
possible_windows = []
for offset in range(self.window_size + 1):
start = (expected_seq - self.window_size + offset) % self.seq_range
end = (start + self.window_size - 1) % self.seq_range
if end >= start or end < start: # 处理序号环绕
possible_windows.append((start, end))
return possible_windows
3. 确认分组的网络滞留问题
在网络传输中,确认分组可能会延迟或丢失。当接收方期望收到序号5时:
- 确认2、3、4可能仍在网络中传输
- 确认1肯定已被发送方收到(否则不会发送序号4)
这种网络行为可以通过模拟网络延迟来观察:
im


26

被折叠的 条评论
为什么被折叠?



