停止等待协议的算法
来源:互联网 发布:知行理工初始密码 编辑:程序博客网 时间:2024/06/05 14:32
发送结点:
- 从主机取一个数据帧,送交发送缓存。
- V(S)←0。
- N(S)←V(S)。
- 将发送缓存中的数据帧发送出去。
- 设置超时计时器。
- 等待。 { 等待以下(7)和(8)这两个事件中最先出现的一个 }
若收到确认帧 ACKn:
- 若 n = 1 – V(s),则
从主机取一个新的数据帧,放入发送缓存;
V(S)←[1 - V(S)],转到 (3)。 - 否则,丢弃这个确认帧,转到(6)。
- 若 n = 1 – V(s),则
- 若超时计时器时间到,则转到(4)。
注:
- V(S):发送状态变量
- N(S):发送序号
- ACKn:确认帧
说明:按照习惯的表示法,ACKn 表示“第 n – 1 号帧已经收到,现在期望接收第 n 号帧”。
- ACK1 表示“0 号帧已收到,现在期望接收的下一帧是 1 号帧”;
- ACK0 表示“1 号帧已收到,现在期望接收的下一帧是 0 号帧”。
接收结点:
- V(R)←0。
- 等待。
- 直到收到一个数据帧:
- 若 N(S) = V(R),则执行(4);
- 否则丢弃此数据帧,然后转到(6)。
- 将收到的数据帧中的数据部分送交上层软件
(也就是数据链路层模型中的主机)。 - V(R)←[1 - V(R)]。
- n←V(R);
发送确认帧 ACKn,转到(2)。
注:
- V(R):接收状态变量
- N(S):发送序号
- ACKn:确认帧
伪代码:
/** 停止等待协议算法*/// 发送结点void SendNode(void) { DataType dataTemp;// 发送缓存 bool stateSend = 0;// 发送状态变量 bool numSend = stateSend;// 发送序号 bool ACK = 0;// 确认帧 int timeOut = 1000;// 超时重传时间 int count = 0; dataTemp = GetDataFrame();// 取一个数据帧,送交发送缓存 Transmit(dataTemp);// 将发送缓存中的数据帧发送出去 while (1) { if (count != timeOut) { if (ACK == (1 - stateSend)) { dataTemp = GetDataFrame();// 取一个新的数据帧,放入发送缓存 stateSend = 1 - stateSend; numSend = stateSend; Transmit(dataTemp);// 发送新的数据帧 count = 0; } } else { Transmit(dataTemp);// 重发数据帧 count = 0; } count ++; }}// 接收结点void ReceiveNode(void) { bool stateReceive= 0;// 接收状态变量 bool flagReceiveDataFrame = 0;// 接收数据帧标志(接收到数据帧时,置1) bool ACK = 0;// 确认帧 while (1) { if (flagReceiveDataFrame) { if(stateReceive == numSend) { submitToApp();// 送交上层软件 stateReceive = 1 - stateReceive; ACK = stateReceive; Transmit(ACK);// 发送确认帧 flagReceiveDataFrame = 0;// 接收标志清空,继续等待 } else { ACK = stateReceive; Transmit(ACK); flagReceiveDataFrame = 0; } } }}
0 0
- 停止等待协议的算法
- 模拟停止等待协议
- 停止等待协议+源代码
- 26.滑动窗口协议 与停止等待协议的区别
- 停止等待协议传输数据文件
- 《计算机网络》知识总结-6.TCP的停止等待协议
- 停止等待协议和连续ARQ协议
- 停止等待协议和连续ARQ协议
- TCP协议的学习(六)滑动窗口 停止等待 退后N帧 选择重传
- 停止等待协议模拟程序v1.0【转载】
- 3.4.2 单帧滑动窗口与停止等待协议
- 17 - 01 - 28 计算机网络(18)(停止-等待协议)
- TCP协议总结--停止等待协议,连续ARQ协议,滑动窗口协议
- (运输层)TCP可靠传输原理之停止等待协议(ARQ)/连续ARQ协议
- TCP协议规定2MSL等待的原因
- 拼图的人工智能算法的分析,等待的是思考
- 的等待
- 的等待
- MySql DOS中操作的常用SQL语句
- POJ 3271 BFS (大坑)
- 网桥帧的转发与转发表的建立算法
- [C++]前置声明和头文件
- TensorFlow白皮书读后感
- 停止等待协议的算法
- BZOJ 2748 DP
- BZOJ 1193 搜索+贪心
- 载波侦听多点接入/碰撞检测(CSMA/CD协议)
- DateFormat在linux下系统和windows系统下取值不同的问题
- 软件开发职位中英对照表
- UOJ#127. 【NOI2015】程序自动分析
- VLC 推流的简单设置
- C++中,两个头文件互相引用怎么办