●停止等待协议的算法如下 ●发送方: ●(1)从主机取一个数据帧; ●(2)V(S)←0;{发送状态变量初始化} °(3)N(S)←V(s);{将发送状态变量的数值写入发送序号}并 将数据帧送交发送缓存; ●(4)将发送缓存中的数据帧发送出去; ●(5)设置超时计时器 ●(6)等待以下三个事件中最先出现的一个 ●(7)若收到确认帧ACK,则: 从主机取一个新的数据帧; V(S)←[1-V(S)];{更新发送状态变量,变为下一个序号} 转到(3),发送下一帧。 ●(8)若收到否认帧NCK,则转到(4),重传数据帧。 ●(9)若超时计时器时间到,则转到(4),重传数据帧
⚫ 停止等待协议的算法如下: ⚫ 发送方: ⚫ (1)从主机取一个数据帧; ⚫ (2)V(S) 0; {发送状态变量初始化} ⚫ (3)N(S) V(S); {将发送状态变量的数值写入发送序号}并 将数据帧送交发送缓存; ⚫ (4)将发送缓存中的数据帧发送出去; ⚫ (5)设置超时计时器 ⚫ (6)等待以下三个事件中最先出现的一个; ⚫ (7)若收到确认帧ACK,则: ⚫ 从主机取一个新的数据帧; ⚫ V(S) [1- V(S)];{更新发送状态变量,变为下一个序号} ⚫ 转到(3),发送下一帧。 ⚫ (8)若收到否认帧NCK,则转到(4),重传数据帧。 ⚫ (9)若超时计时器时间到,则转到(4),重传数据帧
接收方: ●(1)V(R)0;{接收状态变量初始化,为欲接收的序号} ●(2)等待; ●(3)当收到一个数据帧,检查有无传输差错如用CRC), ●若检查正确,则执行后续算法,否则转到( °(4)若NS)=V(R),则执行后续算法;(序号正确) ●否则丢弃此数据帧,然后转到(7){为重复帧,发ACK} ●(5)将接收缓存中数据帧的数据部分上交主机 ●(6)V(R)←[1-V(R{更新状态变量,准备接收下一帧 ●(7)发送确认帧,并转到(2) ●(8)发送否认帧,并转到(2)
⚫ 接收方: ⚫ (1)V(R) 0;{接收状态变量初始化,为欲接收的序号} ⚫ (2)等待; ⚫ (3)当收到一个数据帧,检查有无传输差错(如用CRC), ⚫ 若检查正确,则执行后续算法,否则转到(8)。 ⚫ (4)若N(S)=V(R),则执行后续算法;(序号正确) ⚫ 否则丢弃此数据帧,然后转到(7) {为重复帧,发ACK} ⚫ (5)将接收缓存中数据帧的数据部分上交主机; ⚫ (6) V(R) [1- V(R)],{更新状态变量,准备接收下一帧} ⚫ (7)发送确认帧,并转到(2); ⚫ (8)发送否认帧,并转到(2)