看linux3.0 network代码,发现TCP initcwd(初始拥塞窗口)默认已经调为10,同时,TCP rcvwnd初始接收窗口也已调为10。
       tcp initcwd初始化函数---函数tcp_init_cwnd(),宏TCP_INIT_CWND
       tcp rcvwnd初始化函数 ---函数tcp_select_initial_window(),宏TCP _DEFAULT_ I NIT_RCVWND
     (注:tcp允许发送包个数由 发送端拥塞窗口 和 接收端接收窗口 决 定, 接收 端通过tcp头部window字段通知发送端接收窗口大小)
       linux为什么要调大tcp initcwnd,请参见http://lwn.net/Articles/427104/ 和 http://tools.ietf.org/html/draft-hkchu-tcpm-initcwnd-01;
     (注:wf和我在09年已经进行了研究,并在线上业务中调大initcwnd,当时觉得该参数适用场景不具普遍性;没想到google能对其进行量化的研究,并推动IETF接受该调整,值得我们学习)

国内外 互联网公司(google/baidu/taobao等)已在合适业务中调大了TCP初始拥塞窗口,调大有2种方法:
       1. ip route方式, ip route change default via <gateway> dev eth0 initcwnd <iw>(记得2.6.32版本以上支持),该方式仅对通过该路由的TCP连接有效;
    2. sysctl参数,自己在内核中增加一个控制initcwnd的proc参数,该方式对于所有tcp连接有效;(我们当年采用了该方式)
     
        适用场景 :短连接+发送数据量小(拥塞控制尚处于slowstart阶段,传输就完 毕了)
        效果 :我知道的几个应用效果为传输速度可以提高10%~20%;但有好处也有坏处,TCP重传率会增加(初始拥塞窗口越大,重传率越高)

代码研究:
       我们将分析“tcp三次握手”过程中,客户端和服务端 拥塞窗口(snd_cwnd)的变化 ;,。
        客户端:
                创建soc ket - 函数tcp_v4_init_sock - snd_cwnd=2;
               发送syn - 函数tcp_v4_connect - snd_cwnd=2  没有变化;
               收到syn_ack发送ack - 函数tcp_rcv_synsent_state_process 调用 函数tcp_init_metrics 调用 snd_cwnd = tcp_init_cwnd(tp, dst);
          服务端:
               linux tcp/ip协议栈中 服务端收到三次握手的最后一个ack,才会创建socket;
               收到ack - 函数tcp_create_openreq_child中创建socket,snd_cwnd=2 - 函数tcp_rcv_state_process,当前socket状态为TCP_SYN_RECV,调用 函数tcp_init_metrics 调用 snd_cwnd = tcp_init_cwnd(tp, dst);
       
        注:函数tcp_init_metrics根据socket所在路由中设置的tcp参数 初始化 该socket;同时,该路由条目所在socket在关闭时,会通过函数tcp_update_metrics,更新路由中的tcp参数(sysctl_tcp_nometrics_save为是否更新的开关);路由条目中所有的tcp参数在rtnetlink.h中定义,如RTAX_RTT/RTAX_REORDERING等。

tcp协议栈优化1-增加TCP初始拥塞窗口 ===》流氓的方式相关推荐

  1. tcp协议栈优化1-增加TCP初始拥塞窗口

    看linux3.0 network代码,发现TCP initcwd(初始拥塞窗口)默认已经调为10,同时,TCP rcvwnd初始接收窗口也已调为10.      tcp initcwd初始化函数-- ...

  2. TCP初始拥塞窗口与初始接收窗口

    根据RFC3390(2002年)中的表述,TCP初始窗口的上限定义为: min (4 * MSS, max (2*MSS, 4380 bytes)),旨在限制初始窗口在4K范围内,但是当MSS非常大时 ...

  3. linux协议栈劫持,Linux系统优化之TCP协议栈优化-基本篇1

    因为在做爬虫分布式系统的过程中,涉及到了一些linux系统优化方面的知识,所以来总结一下,我们会对linux的不同模块做相关的基本优化,这篇文章主要讲述的是关于tcp协议栈的参数优化. 1.机器环境 ...

  4. 如何进行TCP性能优化

    本次和大家聊一下TCP性能优化. TCP全称为Transmission Control Protocol,每一个IT人士对TCP都有一定了解.TCP协议属于底层协议,对于大部分研发人员来说,这是透明的 ...

  5. 【计算机网络】2、TCP:四次挥手与TIME_WAIT、shutdown() 优雅关闭 server、探活、拥塞窗口与 Nagle 算法、端口占用、tcp 的流式协议、可靠性

    文章目录 六.四次挥手 与 TIME_WAIT 6.1 TIME_WAIT 的作用 6.2 TIME_WAIT 的危害和方案 七.server 用 shutdown() 优雅关闭 7.1 close( ...

  6. TCP的滑动窗口与拥塞窗口

    因此我们先了解一下16位的窗口大小究竟有什么作用. 窗口分为滑动窗口和拥塞窗口. 滑动窗口是接受数据端使用的窗口大小,用来告知发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制 ...

  7. RFC2861 TCP 拥塞窗口检验

    组织:中国互动出版网(http://www.china-pub.com/) RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook ...

  8. python Scapy 随心所欲撩tcp协议栈

    1. 前言 如果只需要研究Linux的tcp协议栈行为,只需要使用packetdrill就能够满足我的所有需求.packetdrill才是让我随心所欲地撩tcp协议栈.packetdrill的简单使用 ...

  9. tcp拥塞控制_面试必备TCP(四):拥塞控制

    拥塞控制: 发送端主动控制cwnd,有慢启动(从cwnd初始为1开始启动,指数启动),拥塞避免(到达ssthresh后,为了避免拥塞开始尝试线性增长),快重传(接收方每收到一个报文段都要回复一个当前最 ...

  10. TCP/IP参考模型-传输层TCP

    系列文章目录 由于因特网的实现是一个分层架构,为了防止篇幅过大,笔者不想一篇文章就写完想表达的所有内容,于是会以系列文章的方式,主要内容包括TCP/IP分层架构.网络层的最短路径算法:Dijkstra ...

最新文章

  1. python入门经典例题-Python入门_列表练习题
  2. Linux(9)--添加新用户+赋sudo权限
  3. qq浏览器网页翻译_有了这些PDF翻译软件,再也不愁看英文文献了
  4. keepalived 安装
  5. python---之阿partial
  6. 全面解读“资金二清”与“信息二清”
  7. 我的理想作文400字计算机,我的理想作文400字5篇
  8. 网络表示学习简单总结(一)
  9. redis之可视化工具
  10. linux安装ifconfig
  11. 照花台、无锡景、探清水河调
  12. Linux修改系统时间、时区
  13. 起底飞书:在产品背后,看见现代管理哲学
  14. vreyCD 标题中的经典名句
  15. 【CNN】理解卷积神经网络中的通道 channel
  16. 黑鹰红客基地 --- 谈Linux分区
  17. python常识系列07-->python利用xlwt写入excel文件
  18. 4.人工神经网络(一些例题)
  19. Redisson 分布式锁简单应用
  20. 声学漫谈之一:声音三要素

热门文章

  1. RGB,CMY(K),YUV,YIQ,YCbCr颜色的转换算法(java实现)
  2. 2015/7/28(总结昨天抄底操作失败-割肉自保)
  3. 早期/天使科技投资逻辑
  4. FlashFXP用到的功能
  5. 在线 Python运行工具
  6. ql的python学习之路-day5
  7. python 彩票深度学习_Python数据分析:双色球的深度学习预测
  8. Swift 在UILabel前面或者后面插入图标
  9. 有关微信小程序云数据库修改数据的坑
  10. KeyError: 0 与 KeyError: 1(附例子)