一、TCP的滑动窗口大小实际上就是socket的接收缓冲区大小的字节数

注意:在以Unix为核心的一些操作系统中(不一定都是),SO_RCVBUF选项确实决定了TCP窗口的大小.你设置为多少窗口就为多少.但在Windows上确并非如此,通过一些抓包工具分析后,你会发现这两者并不是一一对应关系,MSDN的说明上确实也告知这一事实.

二、对于server端的socket一定要在listen之间设置缓冲区大小,因为,accept时新产生的socket会继承监听socket的缓冲区大小。对于client端的socket一定要在connet之前设置缓冲区大小,因为connet时需要进行三次握手过程,会通知对方自己的窗口大小。在connet之后再设置缓冲区,已经没有什么意义。

注意:关于设置SO_RCVBUF的时机描述也有问题.服务端在accept前设置了缓冲区后可以向下继承,同样客户端connect前设置缓冲区大小可以在握手时通告窗口(上面说的Windows下的窗口和该设置关系不大,但通过测试还是有一定关系的),但实际上是可以随时设置的(主要指的是Windows下面,其它系统不一定可以),一但设置后,会随着下一个ACK包,或者普通数据包通告给对方最新的TCP窗口大小,需要注意的是此时窗口只能增大,不能减小,也就是说SO_RCVBUF设置的比上一次小的话,该值是不会作为新窗口大小通告给对方的。

三、由于缓冲区大小在TCP头部只有16位来表示,所以它的最大值是65536,但是对于一些情况来说需要使用更大的滑动窗口,这时候就要使用扩展的滑动窗口,如光纤高速通信网络,或者是卫星长连接网络,需要窗口尽可能的大。这时会使用扩展的32位的滑动窗口大小。

四、滑动窗口听移动规则:

1、窗口合拢:在收到对端数据后,自己确认了数据的正确性,这些数据会被存储到缓冲区,等待应用程序获取。但这时候因为已经确认了数据的正确性,需要向对方发送确认响应ACK,又因为这些数据还没有被应用进程取走,这时候便需要进行窗口合拢,缓冲区的窗口左边缘向右滑动。注意响应的ACK序号是对方发送数据包的序号,一个对方发送的序号,可能因为窗口张开会被响应(ACK)多次。

2、窗口张开:窗口收缩后,应用进程一旦从缓冲区中取出数据,TCP的滑动窗口需要进行扩张,这时候窗口的右边缘向右扩张,实际上窗口这是一个环形缓冲区,窗口的右边缘扩张会使用原来被应用进程取走内容的缓冲区。在窗口进行扩张后,需要使用ACK通知对端,这时候ACK的序号依然是上次确认收到包的序号。

3、窗口收缩,窗口的右边缘向左滑动,称为窗口收缩,Host Requirement

RFC强烈建议不要这样做,但TCP必须能够在某一端产生这种情况时进行处理。

linux下tcp滑动窗口大小设置,转:TCP滑动窗口协议与socket缓冲区之间的关系相关推荐

  1. Linux下的屏保设置 xset s 与 xset dpms

    Linux下的屏保设置 xset s 与 xset dpms http://bbs.chinaunix.net/archiver/?tid-2112889.html 用xset q 可以查看当前屏保的 ...

  2. linux系统电脑的权限设置,Linux下的文件权限设置修改详解linux操作系统 -电脑资料...

    在linux中更改所属用户组是使用chgrp,更改文件拥有者, chown,更改9个属性, chmod这三种常用的问题,在linxu中这三个命令就是对文件目录权限的控制命令了,下面我来介绍它们的用法与 ...

  3. 嵌入式 linux 屏 翻转,linux下如何把屏幕设置成竖屏

    23 个回复 spindrift C'est La Vie 2013-12-20 LinuxApp版的回帖也看了,你们用 DirectFB?图形是有 DFB 直接画么?还是用 Qt/GTK? CLI  ...

  4. linux的root用户默认密码,Linux下root初始密码设置方法

    Ubuntu刚安装后,不能在terminal中运行su命令,因为root没有默认密码,需要手动设定. 以安装ubuntu时输入的用户名登陆,该用户在admin组中,有权限给root设定密码. 给roo ...

  5. linux sftp没有读写权限,Linux下SFTP用户权限设置条件及实现命令

    Linux下SFTP用户权限设置条件及实现命令 众所周知SFTP账号是基于SSH账号的,所以在默认情况下访问服务器的权限是非常大的,今天的教程就是教大家进行SFTP用户权限设置. 必要条件: 你的op ...

  6. linux 输出core文件大小,linux下core file size设置笔记

    现象说明:突然发现一台测试机器的java程序莫名其妙地没了,但是没有core dump!这就需要打开服务器的core文件生成的功能了,(即core dump文件),方便程序调试. 1)core文件简介 ...

  7. Linux tcp同时多个连接,Linux下网络编程(2)——TCP多连接,1个server,多个client...

    1. 前言 本次使用TCP连接,1个server,多个client. server和多个client之间,可以互相发送消息. 2. 代码 tcp_sever_fork.cpp  如下: #includ ...

  8. nVidia多显卡多GPU在Linux下的超频设置

    nVidia的显卡是支持超频的,在Windows下各家都有工具,例如Afterburning之类的工具. 但是在Linux下就没有这样现成的工具了. 不过Coolbits的设置也还是非常简单的. 只需 ...

  9. linux下环境变量PS1设置

    为什么80%的码农都做不了架构师?>>>    linux下环境变量PS1简单来说就是设置命令提示符显示的内容,如下: root@10.1.1.200:~# PS1变量中提示符各项含 ...

最新文章

  1. 诺康得NKD完成500万天使轮融资,专注于糖化学细胞治疗...
  2. win7 无法复制粘贴
  3. (转)web.xml 中的listener、 filter、servlet 加载顺序及其详解
  4. 【转】刨根究底字符编码之三——字符编码的由来
  5. SpringBoot(入门)
  6. [存档]获取通讯录信息并写到SD卡上
  7. CNN_autoencoder_mnist
  8. java网上商城外文翻译_英语文献翻译网上商城java.doc
  9. KandQ:单例模式的七种写法及其相关问题解析
  10. 应该怎样学习新知识?
  11. Dubbo 的心跳设计,值得学习!
  12. VFP基础教程 2.8 使用命令建立和操作索引文件
  13. 如何用计算机处理图片,使用附带软件编辑照片 利用Digital Photo Professional 用电脑处理RAW图像...
  14. 自学结构体(小甲鱼c语言)
  15. R语言入门:R、R Studio的安装配置【多图详解、保姆级教程】
  16. Word模板导出更新目录
  17. 百度表格识别——原理解读
  18. 货币时间价值(学习笔记)
  19. 怎么用迅捷PDF转换器在线为PDF文件添加文字内容
  20. 微信小程序之获取百度语音合成

热门文章

  1. java类中变量初始化
  2. 钢结构库房计算机管理,仓库布局规划
  3. VisualVM Mac 安装和
  4. 那些年我做的移动互联网产品
  5. 【OpenCV】Mac OS M1上安装OpenCV
  6. FIR数字滤波器的FPGA实现(一)-FIR滤波器基本原理
  7. ATE电源测试设备NSAT-8000功能介绍
  8. 模板类h和cpp分开写问题浅析
  9. 网络信息安全对抗(北京邮电大学版)考点总结
  10. WIN7和WIN10微信多开