LLC协议通过其帧结构和控制机制实现流量控制与错误控制
LLC协议通过其帧结构和控制机制实现流量控制与错误控制,核心机制如下:
---
### 一、流量控制机制
LLC采用**滑动窗口协议**实现流量控制:
1. **序列号管理**
- 信息帧(I帧)携带两个序列号:
- `N(S)`:发送序列号(当前帧序号)
- `N(R)`:接收序列号(期望接收的下一个帧序号,隐含确认)
- 示例帧结构:
```
| DSAP | SSAP | Control(N(S),N(R)) | Data |
```
2. **窗口大小限制**
- 接收方通过`RR`(接收就绪)或`RNR`(接收未就绪)监控帧(S帧)动态调整发送方窗口
- 当接收方缓冲区不足时发送`RNR`帧,强制发送方暂停传输
3. **确认机制**
- **显式确认**:通过S帧(如RR)单独发送确认
- **捎带确认**:I帧的`N(R)`字段携带对之前帧的确认
---
### 二、错误控制机制
#### 1. 帧校验(物理层协作)
- 依赖MAC子层的**帧校验序列(FCS)** 检测比特错误
- 错误帧直接被丢弃,不提交给LLC层
#### 2. 序列号验证(核心机制)
```mermaid
graph LR
A[接收帧] --> B{校验N(S)}
B -->|N(S)=预期值| C[接收并递交给上层]
B -->|N(S)≠预期值| D[丢弃并触发重传]
```
#### 3. 重传控制
- **REJ帧(拒绝)**:
接收方检测到帧丢失时(如收到N(S)=5但预期N(S)=3),发送`REJ`监控帧请求重传序列号3开始的帧
- **超时重传**:
发送方未收到确认时自动重传(需维护定时器)
#### 4. 确认超时
- 发送方为每个未确认帧设置计时器
- 超时后重传该帧及后续所有帧(回退N帧协议)
---
### 三、关键帧功能对照表
| **帧类型** | **控制字段** | **流量控制** | **错误控制** |
|------------|--------------|---------------------------|---------------------------|
| **I帧** | `N(S)`, `N(R)` | 捎带确认/窗口更新 | 隐含确认/序列号连续性校验 |
| **S帧-RR** | `N(R)` | 允许继续发送(窗口更新) | 确认已接收帧 |
| **S帧-RNR**| `N(R)` | 强制发送方暂停 | 确认已接收帧 |
| **S帧-REJ**| `N(R)` | 无 | 请求重传指定序列号帧 |
> 注:所有控制字段均通过LLC帧头的**Control字段**实现(1-2字节),采用模128计数。
---
### 四、典型工作流程示例
```python
# 简化版LLC发送方逻辑
def llc_sender():
next_seq = 0 # 下一个发送序列号
window_size = 4 # 滑动窗口大小
while has_data():
if (next_seq < last_ack + window_size):
send_frame(I_frame, N(S)=next_seq, N(R)=expected_ack)
start_timer(next_seq)
next_seq += 1
elif received(S_frame):
if frame.type == RR:
last_ack = frame.N(R) # 更新确认位置
elif frame.type == REJ:
retransmit_from(frame.N(R)) # 从指定序列号重传
```
---
**总结**:LLC通过**序列号管理**(I帧)、**动态窗口控制**(S帧)和**选择性重传**(REJ)实现流量与错误控制,其设计平衡了效率与可靠性,为上层协议提供统一接口。