GBN 协议和SR 协议对比分析
2015-12-17黄欣
黄欣
摘要:Go-Back-N协议和Selective-Repeat协议是计算机网络在传输层和链路层用于实现可靠数据传输的两个重要协议。Internet的TCP协议在设计时借鉴了上述两个协议的基本思想。该文通过对GBN协议和SR协议进行对比分析,从而揭示两个协议的内在思想和重要特性。
关键词:Go-Back-N协议;Selective-Repeat协议;对比分析
中图分类号:TP301 文献标识码:A 文章编号:1009-3044(2015)27-0020-02
Abstract: Go-Back-N protocol and Selective-Repeat protocol are two important protocols for reliable data transmission in the transmission layer and link layer of computer network.The design of TCP protocol references the ideas of two protocols mentioned above.In this thesis, GBN protocol and SR protocol are compared and analyzed in order to reveal the intrinsic and import characteristics of the two protocols.
Key words: Go-Back-N protocol; Selective-Repeat protocol; comparative analysis
1 引言
Go-Back-N协议(以下简称GBN协议)和Selective-Repeat协议(以下简称SR协议)用于在计算机网络的传输层或链路层实现可靠数据传输服务,是两个重要的流水线可靠数据传输协议。GBN协议和SR协议允许发送方连续发送多个分组,而无需等待来自接收方的确认,从而有效地避免了停等ARQ协议信道利用率不高、吞吐量较低的问题。GBN协议和SR协议在设计思想上既有联系又有区别。现代因特网的TCP协议在实现时正是综合了两者的优点。
2 GBN协议描述和性能分析
2.1 GBN协议描述
假设发送方窗口的基序号用send_base变量表示,窗口大小用N表示(发送方每次最多只能使用N个序号发送分组),则GBN发送方协议需要处理的三个事件用伪码描述如下:
(1) 从应用层发送进程收到新数据分组
if(发送窗口仍有序号没有分配出去){
将发送窗口最小未使用序号分配给新数据分组;
在新数据分组中加入校验和;
发送新数据分组;
if(当前所发数据分组的序号==send_base)
启动计时器;
标记刚分配的序号;
}
else 通知发送进程暂缓新数据分组发送;
(2) 计时器超时
重新发送窗口中从基序号send_base对应的分组开始的所有尚未得到确认的数据分组;
重新启动计时器;
(3) 收到来自接收方的确认分组
if(收到的确认分组正确){
send_base=收到的确认分组的序号+1;
if(已发送分组全部得到确认)
停止计时;
else 重启计时;
}
else 丢弃错误确认分组
GBN接收方协议只要处理收到来自发送方的数据分组事件,用伪码描述如下:
if(收到的数据分组正确 && 数据分组按序到达){
提取分组中的数据交付给接收进程;
返回确认分组(序号和到达的数据分组序号相同),确认分组中加入校验和;
}
else
丢弃错误的数据分组或失序分组;
返回确认分组(序号和最近收到的数据分组序号相同),确认分组中加入校验和;
2.2 GBN协议性能分析
认识到GBN协议的接收方按序接收数据分组这一特性,有助于我们理解GBN协议的优点和缺点。GBN协议的重要优点是采用累积确认方式,即只要发送方收到序号为n的确认分组,即便发送方没有收到序号小于n的确认分组,也能肯定接收方已经正确接收序号n以及所有序号小于n的数据分组。由于GBN协议接收方是按序接收数据分组,所以凡是乱序到达的正确的数据分组都会被接收方丢弃,这也造成了这部分数据分组的不必要重传。
3 SR协议描述和性能分析
3.1 SR协议描述
为了避免GBN协议发送方重传失序到达接收方的正确分组(不必要),SR协议在接收方设立接收方窗口(缓存)以存储失序到达的正确分组。假设发送方窗口的基序号用send_base变量表示,窗口大小用N表示,接收方窗口的基序号用receive_base表示,则SR发送方协议需要处理的三个事件用伪码描述如下:
(1) 从应用层发送进程收到新数据分组
if(发送窗口仍有序号没有分配出去){
将发送窗口最小未使用序号分配给新数据分组;
在新数据分组中加入校验和;
发送新数据分组;
启动计时器;
}
else 通知发送进程暂缓新数据分组发送;
(2) 计时器超时
重传超时的数据分组;