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

注:若想永久保存参数,可将其加入到/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. (转)Deep Learning Research Review Week 1: Generative Adversarial Nets

    Adit Deshpande CS Undergrad at UCLA ('19) Blog About Resume Deep Learning Research Review Week 1: Ge ...

  2. QTreeWidget创建

    QTreeWidget.顾名思义,这个类用来展示树型结构.同前面说的QListWidget类似,这个类需要同另外一个辅助类QTreeWidgetItem一同使用.不过,既然是提供方面的封装类,即便是看 ...

  3. jquery选择器之属性选择器

    [attribute]   匹配指定属性名的所有元素 [attribute=value] 匹配给定的属性名是某个特定值的属性 [attribute!=value] 匹配给定的属性名不是某个特定值的属性 ...

  4. [转]配置mysql允许远程连接的方法

    配置mysql允许远程连接的方法 vim /etc/my.cnf注释这一行:bind-address=127.0.0.1 ==> #bind-address=127.0.0.1保存退出.mysq ...

  5. The error occurred while setting parameters--索引 3 超出范围 sqlserver2008

    这个问题不是jar包冲突,是表的问题,表里的ID设置成自动增加1,就可以了!

  6. [经验交流] 简单安装 centreon 3.2

    centreon 是一个自动化监控平台,监控数据存储在 mysql 中,监控配置在UI中操作,方便且功能强大. 1. centreon 监控引擎 centreon 可以与 nagios 结合,使用 n ...

  7. centos 下Supervisor 守护进程基本配置

    supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...

  8. vs无法调试的时候

    ①选中所有程序可能经过的地方设置断点 ②清空.net frameword对应的缓存,路径"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temp ...

  9. BMP图片格式

    BMP图片 BMP采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大.BMP文件的图像深度可选lbit.4bit.8bit及24bit和32bit.BMP文 ...

  10. Tomcat中解决sql server连接失败--- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver

    php连接mysql数据库很容易,他俩真是黄金搭档.最近转战java连接微软sqlServer,步骤稍微复杂一点,但也不是太难,中途遇到了一点小问题,最后在csdn论坛里找到了答案http://bbs ...