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

注:若想永久保存参数,可将其加入到/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. Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题

    标签:scrollview   android   滑动   嵌套 scrollview 嵌套recyclerview 时,recyclerview不显示,这就需要我们自己计算recyclerview ...

  2. [转]没有了SA密码,无法Windows集成身份登录,DBA怎么办?

    没有了SA密码,无法Windows集成身份登录,DBA怎么办?  原文:http://www.cnblogs.com/i6first/p/3512779.html 一同事反馈SQL无法正常登录了,以前 ...

  3. document.write 动态加载 script 脚本时,特殊异常

    项目中有个JS,需要动态引入. 写法如下: <script> document.write('<script src="http://www.z4.com/js/xxxx. ...

  4. JSP页面的隐含对象和Servlet程序里的对象之间的关联和区别

    首先,有两个概念: 1.JSP页面的域对象:pageContext,request,session,application对象(四个) void setAttribute(String name,Ob ...

  5. java 网络编程复习(转)

    好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942 ...

  6. help和dir函数

    help()函数是查看函数或模块用途的详细说明,比如:help('re'),help('re.split') 而dir()函数是查看函数或模块内的操作方法都有什么,输出的是方法列表.

  7. iOS Storyboard全解析

    来源:http://iaiai.iteye.com/blog/1493956 Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果, ...

  8. httpd的警告

    1. httpd: apr_sockaddr_info_get() failed for serv05 这个是因为httpd.conf文件没有定义ServerName,所以会用hostname来代替, ...

  9. Nginx+Nodejs搭建图片服务器

    图片上传请求由Node处理,图片访问请求由Nginx处理. 1.Nginx配置 #user nobody; worker_processes 1; #error_log logs/error.log; ...

  10. 转一篇老外写的博文:Android automated testing (Robotium)

    Robotium的中文资料甚少,只得求助于老外,发现了一篇不错的文章:https://blog.codecentric.de/en/2011/03/android-automated-testing- ...