停止等待协议就是每发送完一组数据包后,等待对方确认并且收到确认后,再发送下一组数据
流程简单可以理解为:发送数据,收到数据,发送确认,收到确认
分别有以下的四种情况:数据帧正常接收、数据帧丢失、确认帧丢失、数据帧错误
发送方发送数据的同时,设置定时器开始计时。
数据帧正常接收
数据能够正常发送,正常接收,正常确认,正常收到确认的一个过程
正常接收.gif数据帧丢失
超过一段时间仍然没有收到确认,就认为刚才所发送的数据丢失,然后重传前面发送的数据
数据帧丢失.gif确认帧丢失
但传输过程中确认帧丢失。而主机A并不知道,在超时计时过后,主机A重传数据帧,主机B再次收到该消息后采取以下两点措施:
-
丢弃这个重复的数据帧,不向上层交付。
-
向A发送确认消息。(不会认为已经发送过了,就不再发送。主机A能重传,就证明主机B的确认消息丢失)。
数据帧错误
数据帧错误.gifStop-and-Wait ARQ 协议中发送方站点的算法
Sn=0; //帧0被最先发出
canSend=true; //允许最初请求
while(true){ //无休止重发
WaitForEvent(); //当一个事件发生时,唤醒它
if(Event(RequestToSend) AND canSend){
GetData();
MakeFrame(Sn); //顺序号为Sn
StoreFrame(Sn); //保留副本
sendFrame(Sn);
StartTimer();
Sn=Sn+1;
canSend=false;
}
WaitForEvent(); //休眠
if(Event(ArrivalNotification)){ //ACK帧到达
ReceiveFrame(ackNo); //接收ACK帧
if(not corrupted AND ackNo==Sn){ //有效ACK帧
Stoptimer();
PurgeFrame(Sn-1); //不需要的副本
canSend=true;
}
}
if(Event(TimeOut)){ //超时
StartTimer();
ResendFrame(Sn-1); //发送副本检查
}
}
网友评论