ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Go back n小例子

Go back n小例子

原创 Linux操作系统 作者:kirinri 时间:2008-01-10 19:41:07 0 删除 编辑

进程1给2发送数据,数据以包的形式被发送和接受。
为了即使在有数据包丢失的情况下也能完整的接收到1发送的所有数据,一般发送方需要接受接收方的

相应,例如
1 -> Packet(seq=1,len=10) -> 2
1 <- Packet(seq=1,ack=11) <- 2
1,2各自有自己的sequence number,假设都从1开始,1发给2一个10字节的数据包,2发给1一个

ACK,ack=11表示2已经接受了10个包,期待接受的下一个包的seq是11。
1收到了2的ACK后,在继续发送下一个数据包,例如:
1 -> Packet(seq=11,len=1) -> 2
2的下一个响应可能如下:
1 <- Packet(seq=2, ack=12) <- 2

这种数据交互方式速度比较慢,因为发送方必须要等到接收方接受了数据才能继续发送,如果有了一

定大小的发送/接受缓冲区,发送方就可以发送数据到缓冲区慢,然后再等待应答,这样就能提高效率

至于Go back n
举个例子,前面的packet sequence是无错误出现的状态下,下面是有错误

1. 1 -> Packet (seq=1, len = 10) -> 2 OK
2. 1 -> Packet (seq=11, len = 5 ) -> 2 OK
3. 1 -> Packet (seq=16, len = 10 ) -> 2 FAIL
4. 1 -> Packet (seq=26, len = 1 ) -> 2 FAIL

如上,假设3,4两个包都丢失了,2没有收到,则2会回1一个这样的ACK
5. 1 <- Packet (seq=1, ack = 16)

此时,1收到该packet后,发现3,4两个包2都没有收到,于是就go-back-2,重新发送3,4两个包

发表于:2007.02.12 11:06

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12476590/viewspace-134079/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-21

  • 博文量
    257
  • 访问量
    495328