日期:2014-05-18  浏览次数:20718 次

TCP新手关于TCP规范中的疑问
在TCP规范中讲解关于当TCP连接处于各种状态该如何处理收到的TCP报文,当TCP连接处于ESTABLISHED状态时,在第五步检查ACK时谈到该如何更新发送窗口,其中有这麽一段:

如果(SND.WL1 <SEG.SEQ   或者(SND.WL1=SEG.SEQ且SND.WL2= <SEG.ACK)),设置SND.WND=SEG.WND,设置SND.WL1=SEG.SEQ,并设置SND.WL2=SEG.ACK。

这段我看不明白,它说的更新条件有两个:

1,SND.WL1 <SEG.SEQ             2,SND.WL1=SEG.SEQ且SND.WL2= <SEG.ACK

对于第二个条件,为何要有SND.WL2= <SEG.ACK这个条件?如果SND.WL2> SEG.ACK,说明到达的报文的ACK是老的,而规范前面说如果ACK是重复的可以忽略它,发送窗口不会更新,那麽这里为何要特地加上这个条件?

而且这似乎还暗含这如果SND.WL1 <SEG.SEQ,那麽即使SND.WL2> SEG.ACK,也可以将窗口改变?这不就将窗口的左边向回移动(即移动到了以前的地方)了吗?这也不符合逻辑啊?

------解决方案--------------------
看到都昏了,真佩服樓主的耐性!雖然不懂,也幫你頂一下了,順便學習!
------解决方案--------------------
三次握手。。。

不会了,帮你up
------解决方案--------------------
三次握手