前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >速读原著-TCP/IP(窗口扩大选项)

速读原著-TCP/IP(窗口扩大选项)

作者头像
cwl_java
发布2020-03-13 09:38:49
1.4K0
发布2020-03-13 09:38:49
举报
文章被收录于专栏:cwl_Javacwl_Java

第24章 TCP的未来和性能

24.4 窗口扩大选项

窗口扩大选项使T C P的窗口定义从16 bit增加为32 bit。这并不是通过修改T C P首部来实现的, T C P首部仍然使用 16 bit ,而是通过定义一个选项实现对 16 bit 的扩大操作 ( s c a l i n g o p e r a t i o n )来完成的。于是T C P在内部将实际的窗口大小维持为 32 bit的值。

在图1 8 - 2 0可以看到关于这个选项的例子。一个字节的移位记数器取值为 0(没有扩大窗口的操作)和1 4。这个最大值1 4表示窗口大小为1 073 725 440字节(6 5 5 3 5×21 4)。

这个选项只能够出现在一个 S Y N报文段中,因此当连接建立起来后,在每个方向的扩大因子是固定的。为了使用窗口扩大,两端必须在它们的 S Y N报文段中发送这个选项。主动建立连接的一方在其 S Y N中发送这个选项,但是被动建立连接的一方只能够在收到带有这个选项的S Y N之后才可以发送这个选项。每个方向上的扩大因子可以不同。

如果主动连接的一方发送一个非零的扩大因子,但是没有从另一端收到一个窗口扩大选项,它就将发送和接收的移位记数器置为 0。这就允许较新的系统能够与较旧的、不理解新选项的系统进行互操作。

Host Requirements RFC要求T C P接受在任何报文段中的一个选项(只有前面定义的一个选项,即最大报文段大小,仅在S Y N报文段中出现)。它还进一步要求T C P忽略任何它不理解的选项。这就使事情变得容易,因为所有新的选项都有一个长度字段(图1 8 - 2 0)。

假定我们正在使用窗口扩大选项,发送移位记数为 S,而接收移位记数则为 R。于是我们从另一端收到的每一个 16 bit的通告窗口将被左移 R位以获得实际的通告窗口大小。每次当我们向对方发送一个窗口通告的时候,我们将实际的 32 bit窗口大小右移S比特,然后用它来替换T C P首部中的16 bit的值。

T C P根据接收缓存的大小自动选择移位计数。这个大小是由系统设置的,但是通常向应用进程提供了修改途径(我们在 2 0 . 4节中讨论了这个缓存)。

一个例子 如果在4 . 4 B S D的主机v a n g o g h . c s . b e r k e l e y . e d u上使用s o c k程序来初始化一个连接,我们可以观察到它的 T C P计算窗口扩大因子的情况。下面的交互输出显示的是两个连续运行的程序,第1个指定接收缓存为128 000字节,而第2个的缓存则为220 000字节。

在这里插入图片描述
在这里插入图片描述

图2 4 - 7显示了这两个连接的 t c p d u m p输出结果(去掉了第 2个连接的最后8行,因为没有什么新内容)。

在这里插入图片描述
在这里插入图片描述

在第1行,v a n g o g h通告一个 6 5 5 3 5的窗口,并通过设置移位计数为 1来指明窗口扩大选项。这个通告的窗口是比接收窗口( 128 000)还小的一个最大可能取值,因为在一个 S Y N报文段中的窗口字段从不进行扩大运算。

扩大因子为1表示v a n g o g h发送窗口通告一直到131 070(6 5 5 3 5×21)。这将调节我们的接收缓存的大小(12 8000)。因为b s d i在它的S Y N(第2行)中没有发送窗口扩大选项,因此这个选项没有被使用。注意到v a n g o g h在随后的连接阶段继续使用最大可能的窗口(6 5 5 3 5)。

对于第2个连接v a n g o g h请求的移位计数为 2,表明它希望发送窗口通告一直为 262 140(6 5 5 3 5×22),这比我们的接收缓存(220 000)大。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第24章 TCP的未来和性能
    • 24.4 窗口扩大选项
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档