数据链路层六大协议详解
- 一些假设
- 1.无限制的单工协议(乌托邦协议)
- 五点假设
- 发送方
- 接收方
- 接受方
- 2.单工停-等协议
- 3.有噪声信道的单工协议
本文图片截取自 学堂在线-华南理工大学的计算机网络课程
一些假设
- 物理层、数据链路层和网络层各自是独立的处理进程
- 机器A希望向B发送的是一个可靠的、面向连接的长数据流
- 假设机器不会崩溃
- 从网络层获取到的数据是纯的数据,直接装到载荷里
- 定义了四个数据传送接口
- from_network_layer 从网络层取数据
- to_physical_layer 向物理层发送数据
- to_network_layer 向网络层提交数据
- from_physical_layer 从物理层获取数据
- 等待事件的发生
- frame_arrival 帧到达事件
- cksum_err 校验和没有通过
- timeout 定时器超时
- 定义两个定时器
- timer 重传定时器
- ack_timer捎带确认定时器
- 定义数据帧的结构

1.无限制的单工协议(乌托邦协议)
五点假设
- 1.数据单向传送
- 2.收发双方网络层都处于就绪的状态
- 3.处理的时间可以忽略不计
- 4.可用的缓存空间无穷大
- 5.完美信道:信道不损坏,不丢帧
由于该协议的假设实际情况是不可能存在的,所以该协议又叫乌托邦协议
发送方
typedef enum {frame_arrival
} event_type;
#include "protocol.h"
void sender(void){frame s;packet buffer;while(true){from_network_layer(&buffer); // 从网络层接受数据s.info = buffer; // 包装数据to_physical_layer(&s); // 送向物理层}
}
接收方
typedef enum {frame_arrival
} event_type;
#include "protocol.h"
void receiver(void){frame r;event_type event;while(true){wait_for_event(&event); // 等待接收事件的到来from_physical_layer(&r); // 从物理层接收数据to_network_layer(&r.info); // 送向网络层}
}
接受方
2.单工停-等协议
明天再写。。。













