1.window size (即win=),这个值是发送窗口的大小吗?
不是,这是在向对方声明自己的接收窗口。
2.如何从包里看出发送窗口的大小呢?
没有办法。因为发送窗口的大小是受接收方的窗口和网络的影响的。
3.发送窗口和MSS(最大段大小)有什么关系?
发送窗口决定了一次能发送多少字节,而MSS决定了这些字节要分多少个包发完。
4.发送方在一个窗口里发出n个包,就一定能收到n个确认包?
不一定,确认包一般会少。因为TCP有延迟确认。
那为什么要有延迟确认呢?延迟确认是怎样工作的呢?
如果在收到一个包之后暂时没有什么数据要发给对方,就延迟一段时间再发送(windows=200ms),以便减轻网络负担。
5.TCP Window Scale 是什么概念?和接收窗口有什么关系?
TCP最大的接收窗口被限制为65535,那如何扩展呢?RFC1323提出一个解决方案,在三次握手时,将自己的Window Scale信息告诉给对方,放在TCP头之外的Options里面。如下图30*215=15360.(注意:Window Scale的值是2的幂)
注意:有时候,防火墙识别不了Window Scale的值,会导致严重的性能问题。