集群的可扩展性及其分布式体系结构之十一
2008-12-01 11:02:51 来源:WEB开发网TCP根据接收缓存的大小自动选择移位计数。也就是说,扩大因子的数值自动产生。当然也可以通过特定的接口由应用层进行修改。
客户端可以在发起SYN握手的时候向均衡器协商窗口扩大因子,数值可以是从0到16之间的任一值(用于表示扩大窗口的位移量,实际的窗口大小为:(16bit的windows大小)×2 (扩大因子))。当均衡器向服务节点发起SYN握手请求后,会将先前对应客户端的窗口扩大选项值传递到服务节点进行协商。如果服务节点支持该选项,将会使用该扩大因子与客户端进行splicing通信,尽管客户端仅仅是简单的把服务节点以0位移扩大因子看待。其实,作为典型的客户-服务通信模式,从服务端->客户端的返回数据量往往比较大,在客户端使用较大的窗口扩大因子也便于客户端接收大量数据,提高通信的效率。
如果服务节点不支持窗口扩大因子选项,均衡器需要忽略所有客户端的窗口扩大因子选项,使之无效,这一点和其他的扩展TCP选项的处理模式相同,主要是为了兼容更旧的TCP/IP协议栈实现系统。在后续的通信中,客户端将自动调整扩大因子,仅使用16位窗口大小选项来与服务节点通信。
SACK
选择确认(Selective ACK选择性ACK)SACK是针对TCP协议中的累积确认协议(Cumulative Acknowledgement)提出的。接收方有选择地在SACK确认信息中告知发送方已经正确接收到的部分数据包,而发送方根据SACK就可以只重发出错包,这就避免了不必要的数据重传。当通讯需要更有效率的进行时,通信的双方需要尽早地检测到任何丢失的分组,就发送端而言,可以根据获得的SACK的信息判断哪些分组未被确认,从而可以请求重新传输丢失的分组。
和时戳的处理机制类似,对于SACK的处理均衡器也是先判断粘合连接的两端是否都支持SACK。如果其中的一端在SYN握手之后被判断出不支持这一特性,那么均衡器对于使用SACK选项的另外一端发送的SACK报文将进行丢弃处理,以保证最低兼容性。如果两端的连接都支持SACK,那么均衡器将对SACK报文段中所包含的应答数据块进行序号映射处理――使用了前面所描述的序列空间映射机制。
更多精彩
赞助商链接