查看: 3754|回复: 4

窗口机制确认问题

[复制链接]
发表于 2008-8-22 17:48:45 | 显示全部楼层 |阅读模式
有个问题要请教一下,
一台client,一台SERVE,他们建立三次握手确定WINDOWS后,假如窗口大小为5000,server开始发包,每个包1500,server发四个包后,client是发一个包确认还是也发四个包确认??

假如第三个包丢了,server是重新发送第三第四个包还是只发送第三个包??

评分

1

查看全部评分

回复

使用道具 举报

发表于 2008-8-22 19:40:44 | 显示全部楼层

回复 1# 的帖子

楼主的问题非常好,我先抛砖引玉,尝试回答一下:
1,一般情况下,TCP有个叫做“经受延时的ack”机制,意思是:对端pc在收到包后,会等待其他后续的包过来,如果有的话,就连上次的包一起发送一个ack,这个等待时间为200ms。如果超出200ms还没有后续的包过来,则直接发送ack确认;那么如果服务器端连续发送4个包给客户端(时间很短),客户端应该会给服务器端回应2个ack包,分别确认前两个数据包和后两个数据包。如果此时第三包丢失,那么服务器需要重传第三、四数据包;
2,第二种情况是双方支持可选择性ack(sack),并在三次握手时的option选项字段做好协商,那么,在窗口足够大时,客户端可能会发送一个ack对前面的四个数据包一次性做确认,如果服务器的第三个包在传输过程中丢失的话,服务器根据客户端的ack,只会重传第三个丢失的数据包,不会重传第四个数据包;
3,TCP的窗口大小值在数据交互时一直处于不断变化中,tcp正是利用窗口机制来实现流控的,个人觉得,在楼主假设的情况下,客户端窗口为5000,服务器端不会一次性发送超过客户端窗口范围的数据包(4个1500的数据包,大小为6000了)给客户端。也就是说,服务器可能会先发送两个数据包给客户端,在等到客户端的ack,并发现客户端的窗口值变大后,接着发送后面的数据包。

[ 本帖最后由 孤独的意尹者 于 2008-8-22 19:42 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2008-8-23 11:30:34 | 显示全部楼层
不错,非常感谢了,版主回答的相当全面,长见识了,我抓包分析的时候也是经常遇到发两个包,一个确认包的情况.继续学习中
回复

使用道具 举报

发表于 2008-8-26 17:01:05 | 显示全部楼层
原帖由 孤独的意尹者 于 2008-8-22 19:40 发表
楼主的问题非常好,我先抛砖引玉,尝试回答一下:
1,一般情况下,TCP有个叫做“经受延时的ack”机制,意思是:对端pc在收到包后,会等待其他后续的包过来,如果有的话,就连上次的包一起发送一个ack,这个等待时间 ...

呵呵,孤独兄厉害,希望能常常看到你的高见啊。
回复

使用道具 举报

发表于 2008-8-27 20:13:59 | 显示全部楼层
本人的一点小小的理解:
连接建立过程:
                     A主机 ---------------------B主机
                             ---------〉SYN报文
                             ------ SYN ACK报文
                             -------ACK报文
步骤解析:
1.        A向B发送一个SYN同步报文,里面包括Seq,比如Seq=100;
2.        B向A发送一个SYN ACK报文,这有两个含义,一个SYN报文请求,一个是ACK报文应答。里面的ACK中seq为101,意思是说,我已经收到了seq为100的报文,期待你的seq为101的报文,另一个是SYN报文中的seq 比如为300,是告诉对方我的seq是从什么数值开始的。(应该是一个报文?)
3.        A向B发送一个ACK报文,里面包括序列号有seq的序列号为101,ack的序列号301。
上述过程也就是建立连接的可靠性。
TCP窗口:也就是本地的TCP缓存区,是可以接收对端数据的容量,通过改变TCP窗口的大小来进行流量控制。
数据传输可靠性过程:
                     A主机---------------------B主机
                  Windows size 3+数据1------〉
                  Windows size 3+数据2------〉
                  Windows size 3+数据3----
                                         Ack 3 +window size 2
                  Windows size 3+数据3-----〉
                  Windows size 3+数据4-----〉
                                         Ack 5+windows size 2
步骤解析:
1.        A向B发送了3个数据,windows size 3表示A可以接收对端发过来的3个数据大小的空间。
2.        B向A发送了一个ACK应答,期待数据3,并且告诉A我最多接收2个数据,因为A已经发送了数据3,但可能是由于网络原因或报文错误等原因丢失了,也有可能是本地缓存满了,没有收到3这个数据。
3.        A向B重新发送数据3和数据4(因为上面收到的window size大小为2)。
4.        B向A发送ack应答,ack为5,windows size为2,表示前面的4个数据我已经收到了,期待你的第5个数据。
5.        A收到ACK应答后,继续发送下两个数据。

评分

1

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表