大并发带来服务器各种层出不穷的问题,我们要善用服务器系统内核,因为其性能优于用户态的玩意

注:若想永久保存参数,可将其加入到/etc/sysctl.conf中,执行sysctl -p使其永久生效,临时改配则修改/proc/sys/net/ipv4下的参数,重启后失效

[root@master ipv4]# more tcp_syn_retries

5

描述:对于一个新建链接,内核要发送多少SYN链接请求才决定放弃,不应大于255,default value 是5,对应180s,(对于大负载而物理信道通信良好的网络而言,这个值偏高,可修改为2,这个值仅是针对对外的链接,对进来的链接是由tcp_retries1)

对与这个对应时间,经过抓包是有问题的,我们来看截图

我们看到重发时间,跟描述并不相符合,那tcp是以什么原则来确定重发时间呢

强大的wireshark已经告诉我们了,当发送一个tcp片段后将开始计时,等待该TCP片段的ACK,如果接收方收到符合次序的片段,接收方会利用ACK片段回复发送方,发送方得到ACK后,继续移动窗口,发送接下来的TCP片段,如果直到计时完成,send方仍未收到ACK回复,那么判断之前发送的TCP片段丢失,因此重新发送,这个计时叫做重新发送超时时间(RTO,reteransmission timeout)

发方应该在等待多久时间之后重发呢,这是重发的核心问题

上述过程实际上有往返两个方向,1,发送片段从发方到接收方的传输

2,ACK片段从接收方到发送的传输。

整个过程实际耗费称往返时间(RTT)。若RTT是固定的,那么我们可以让

RTO等于RTT即可,但在实际上,RTT上下浮动很大,

如图,一个是局域网,一个是公网,我们发现其RTO时间是不一样的,即使在局域网,如果某个时刻,网络中交通比较拥塞,那么RTT也会增加,因此,我们如果设置了RTO过小,那么实际上之前发送的TCP片段未丢失,网络中重复注入TCP片段,从而浪费网络传输资源,另一方面,如果RTO过长,那么当前面的TCP片段丢失的情况下,发方未能及时重发,会造成网络资源闲置。

所以RTO必须符合当前网络的使用状况,网络状况越好,RTO应该越短,越差则RTO应越长。

TCP协议通过统计RTT,来决定合理的RTO,发送方可以测量每一次TCP传输的RTT(从发送数据片段开始,到接收到ACK片段为止),这样每次测量得到的RTT,叫采样RTT,

此时我们来观测下,为何局域网内RTT为1s

请容许我再次感谢万能的wireshark,基于第一次TCP报文的往返时间,1s,

我们仔细观察syn报文从往返时间上可以得出以下规律

第一次   RTO = RTT

第二次   RTO = 1*RTT

第三次   RTO = 2*RTT

第四次   RTO = 4*RTT

第五次   RTO = 8*RTT

至此,TCP之发送SYN相关就到此时暂告一个段落,限于文档的上传限制,不能尽述,只好待下次了…

END!

TCP/ip协议栈之内核调优的更多相关文章

  1. Linux内核 TCP/IP、Socket参数调优

    Linux内核 TCP/IP.Socket参数调优 2014-06-06  Harrison....   阅 9611  转 165 转藏到我的图书馆   微信分享:   Doc1: /proc/sy ...

  2. Linux内核、 TCP/IP、Socket参数调优

    /proc/sys/net目录 所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失),例如下面这 ...

  3. (转)Linux内核 TCP/IP、Socket参数调优

    Doc1: /proc/sys/net目录 所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失) ...

  4. Linux内核TCP/IP参数分析与调优

    转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0225/167.html?1456482565 如下图展示的是TCP的三个阶段.1,TCP三次握手. ...

  5. Linux 系统TCP连接内存大小限制 调优

    系统TCP连接内存大小限制 TCP的每一个连接请求,读写都需要占用系统内存资源,可根据系统配置,对TCP连接数,内存大小,限制调优. 查看系统内存资源 记录内存 详情:cat /proc/meminf ...

  6. TCP/IP协议栈源码图解分析系列10:linux内核协议栈中对于socket相关API的实现

    题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈内核相关技术 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linu ...

  7. 用virtualbox+模拟串口+CDT调试linux内核 TCP/IP协议栈-起步

    经常有人问一台机器如何将hello经网络发送给另一台机器,我确实是不知道,只能看代码了. 说明:本人对内核的研究学习也是刚刚起步,有很多不了解的,所以文中可能会有一些"一本正经的胡扯&quo ...

  8. TCP/IP协议栈在Linux内核中的运行时序分析

    网络程序设计调研报告 TCP/IP协议栈在Linux内核中的运行时序分析 姓名:柴浩宇 学号:SA20225105 班级:软设1班 2021年1月 调研要求 在深入理解Linux内核任务调度(中断处理 ...

  9. Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

    我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处 ...

随机推荐

  1. cookie,session,sessionid

    cookie,session,sessionid http协议是无状态的,意思是每次请求的状态不会保存.因此,产生了cookie,session之类保存会话状态的机制.1.什么是cookiecooki ...

  2. Maven项目

    1,创建项目,类似于创建一个VS.net 项目的 解决方案.    http://stackoverflow.com/questions/6328778/how-to-create-an-empty- ...

  3. pt-query-digest用法

    pt-query-digest用法 http://blog.csdn.net/wxc20062006/article/details/52387505

  4. 使用nodejs防止csurf攻击的方法

    一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...

  5. python学习-day03:整形、字符串常用方法:

    一.数字,int 1.1: a.int(object)转化数字类型: a=' b=int(a) b=b+1000 print(b) 223 <class 'int'> 答案 b.转化二进制 ...

  6. SonarQube的安装、配置与使用

    SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误,下面将会介绍一下这个工具的安装.配置以及使用. 准备工作: 1.jdk(不再介绍) 2.sonarqube:ht ...

  7. hdu 5381 The sum of gcd

    知道对于一个数列,如果以x为左(右)端点,往右走,则最多会有log(a[x])个不同的gcd,并且有递减性 所以会分成log段,每一段的gcd相同 那我们可以预处理出对于每一个位置,以这个位置为左端点 ...

  8. 预处理语句--#define、#error和#warning

    1.#define语句 我们经常会这样定义一些宏:       #define BLOCK 8192 但这样的宏却不能在字符串中展开,如:    printf("The BLOCK numb ...

  9. 就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers

    就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers 转载注明出处:http://www.cnblogs.com/wade-xu/p/43 ...

  10. 货币单位类RmbUnit

    import java.math.BigDecimal; public enum RmbUnit { FEN{ public String toFen(String amt) { BigDecimal ...