计算机网络--tcp字段说明

来源:互联网 发布:sem优化思路 编辑:程序博客网 时间:2024/05/16 01:03
1.Windows Scale窗口扩大因子

窗口扩大选项使TCP的窗口定义从16位增加为32位。这并不是通过修改TCP首部来实现的,TCP首部仍然使用16位,而是通过定义一个选项实现对16位的扩大操作(scaling operation)来完成的。于是TCP在内部将实际的窗口大小维持为32位的值。
[img]http://www-128.ibm.com/developerworks/cn/linux/cluster/cluster_system/balance/part7/images/image010.gif[/img]

这个选项只能够出现在一个SYN报文段中,因此当连接建立起来后,在每个方向的扩大因子是固定的。为了使用窗口扩大,TCP通信的两端必须在它们的SYN报文段中发送这个选项。主动建立连接的一方(这里一般是客户端)在其SYN中发送这个选项,但是被动建立连接的一方(负载均衡器和服务节点)只能够在收到带有这个选项的SYN之后才可以发送这个选项。每个方向上的扩大因子可以不同。

TCP根据接收缓存的大小自动选择移位计数。也就是说,扩大因子的数值自动产生。当然也可以通过特定的接口由应用层进行修改。

客户端可以在发起SYN握手的时候向均衡器协商窗口扩大因子,数值可以是从0到16之间的任一值(用于表示扩大窗口的位移量,实际的窗口大小为:(16bit的windows大小)×2 (扩大因子))。当均衡器向服务节点发起SYN握手请求后,会将先前对应客户端的窗口扩大选项值传递到服务节点进行协商。如果服务节点支持该选项,将会使用该扩大因子与客户端进行splicing通信,尽管客户端仅仅是简单的把服务节点以0位移扩大因子看待。其实,作为典型的客户-服务通信模式,从服务端->客户端的返回数据量往往比较大,在客户端使用较大的窗口扩大因子也便于客户端接收大量数据,提高通信的效率。

如果服务节点不支持窗口扩大因子选项,均衡器需要忽略所有客户端的窗口扩大因子选项,使之无效,这一点和其他的扩展TCP选项的处理模式相同,主要是为了兼容更旧的TCP/IP协议栈实现系统。在后续的通信中,客户端将自动调整扩大因子,仅使用16位窗口大小选项来与服务节点通信。


2.;ts选项含三个32bit,其中后两个分别记录着tsval和tsecr;(注意,ts_recent并不在此处更新,在后面的tcp_store_ts_recent中更新)
        struct tcp_options_received: 定义在tcp.h中,其中saw_tstamp表明timestamp选项是否有效,ts_recent_stamp是我们最近一次更新ts_recent的时间,ts_recent是下一次回显的时戳一般等于下次发包中的rcv_tsecr;rcv_tsval是该data从发端发出时的时戳值,rcv_tsecr是回显时间戳(即该ack对应的data或者该data对应的上次ack中的ts_tsval值)

0 0
原创粉丝点击