linux Tcp总结

Tcp连接建立时的影响因素

在Client发出SYN后,如果过了1秒 ,还没有收到Server的响应,那么就会进行第一次重传;如果经过2s的时间还没有收到Server的响应,就会进行第二次重传;一直重传tcp_syn_retries次。

对于tcp_syn_retries为3而言,总共会重传3次,也就是说从第一次发出SYN包后,会一直等待(1 + 2 + 4 + 8)秒,如果还没有收到Server的响应,connect()就会产生ETIMEOUT的错误。

Server中积压的半连接较多,也有可能是因为有些恶意的Client在进行SYN Flood攻击。典型的SYN Flood攻击如下:Client高频地向Server发SYN包,并且这个SYN包的源IP地址不停地变换,那么Server每次接收到一个新的SYN后,都会给它分配一个半连接,Server的SYNACK根据之前的SYN包找到的是错误的Client IP, 所以也就无法收到Client的ACK包,导致无法正确建立TCP连接,这就会让Server的半连接队列耗尽,无法响应正常的SYN包。

解决:通过Tcp sync cookie。Server收到SYN包时,不去分配资源来保存Client的信息,而是根据这个SYN包计算出一个Cookie值,然后将Cookie记录到SYNACK包中发送出去。对于正常的连接,该Cookies值会随着Client的ACK报文被带回来。然后Server再根据这个Cookie检查这个ACK包的合法性,如果合法,才去创建新的TCP连接

连接释放的过程

当应用程序调用close()时,会向对端发送FIN包,然后会接收ACK;对端也会调用close()来发送FIN,然后本端也会向对端回ACK,

fin_wait_2状态,等待对端close发送fin 报文,关闭连接,如果连接得不到释放的话,就会等待对方fin报文。Linux为了防止这种资源的开销,设置了这个状态的超时时间tcp_fin_timeout,默认为60s,超过这个时间后就会自动销毁该连接。实际上可以调节为2s足够。

我们再来看TIME_WAIT状态,TIME_WAIT状态存在的意义是:最后发送的这个ACK包可能会被丢弃掉或者有延迟,这样对端就会再次发送FIN包。如果不维持TIME_WAIT这个状态,那么再次收到对端的FIN包后,本端就会回一个Reset包,这可能会产生一些异常。

数据传输时可以调节的参数

拥塞控制查看方法

重传率计算:retrans = (RetransSegs-last RetransSegs) / (OutSegs-last OutSegs) * 100 

tcpdump抓包原理

warning

1.如果网络包已经被网卡丢弃了,那么tcpdump是抓不到它的

2.,比如因为发送缓冲区满而被丢弃,tcpdump同样抓不到它

轻量级追踪方式是TCP Tracepoints。

tcpdump的能力范围简单地总结为:网卡以内的问题可以交给tcpdump来处理;对于网卡以外(包括网卡上)的问题,tcpdump可能就捉襟见肘了。这个时候,你需要在对端也使用tcpdump来抓包。

后面有空可以玩一下这些工具。

  • Kprobe是一个很通用的追踪工具,在低版本内核上,你可以使用这个方法来追踪TCP重传事件;
  • Tracepoint是一个更加轻量级也更加方便的追踪TCP重传的工具,但是需要你的内核版本为4.16+;
  • 如果你想要更简单些,那你可以直接使用tcpretrans这个工具。

Tcp如何高效利用本机cpu

首先先说说收包过程,网卡以DMA方式放入ringBuffer中,软中断把skb取走,然后把新的skb挂上去。其中指针数据是预先分配好的,而skb是动态分配的。

查看ringbuffer是256

满了,就网卡丢弃了。

网络包的处理分为硬中断和软中断。

硬中断:把poll_list添加到per-cpu的softnet_data的poll_list里面。

软中断:对softnet_data的poll_list进行变量。(内核线程ksoftirqd).

同时软中断线程和硬中断线程具有核亲密性,会在同一个核上处理。

可以通过中断号看对应亲和的核。

1000 第四个CPU, cpu3

所以我们可以加大ens33的网卡队列数,并且设置队列中断号上的smp_affinity,将硬中断打散到不同的cpu上。

还可以通过top观察

还可以通过dpdk可以绕过内核协议栈,更高效的节约指令,从根源上节省和提高cpu。

关于dpdk下次有机会聊聊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

策略模式-实践

俗话说:条条大路通罗马。在很多情况下,实现某个目标的途径不止一条,例如我们在外出 旅游时可以选择多种不同的出行方式,如骑自行车、坐汽车、坐火车或者坐飞机,可根据实 际情况(目的地、旅游预算、旅游时间…

星河璀璨:飞桨星河文心SDK与Gurdance珠联璧合让大模型更像人!

星河璀璨:飞桨星河文心SDK与Gurdance珠联璧合让大模型更像人! 本项目效果惊艳,可以在AIStudio星河社区一键运行 只需要在cpu基础版下运行,妈妈再也不怕我的算力不够了! 1、引言 2023年8月22日,百度董事…

3.14.1 函数对象 Page139~141

28行,doggie是一个类型为Dog的对象,而“()”是它的一个成员函数,doggie()实际上是doggie.operator() "operator()"既然是函数,那就可以有参数,也可以有返回值 运行结果为:

新微信公众号没有留言功能, 你们怎么破?

为什么公众号没有留言功能?从2018年2月开始,新注册的微信公众号取消了留言功能,原因是为了规避一些营销号通过虚假留言骗取读者信任。不过大部分公众号运营者对TX此举感到失望,一方面大片的留言就像店前排队的顾客,能体…

PLC、工业设备如何远程访问?贝锐蒲公英云智慧组网实现数据互通

在工业4.0时代,工业数字化的核心在于数据的互联互通,而在整个工业数字化、智能化的过程中,往往面临数据采集困难、设备运行情况难以知晓、部署管理难度大、后期维护成本高等问题。 显然,PLC设备在整个工业数字化进程中扮演的角色…

freertos任务管理器,任务监控

freertos提供了类似于windows的任务管理器功能,具体地如下: 1、configUSE_TRACE_FACILITY 和 configUSE_TRACE_FACILITY使能置1 2、调用vTaskList,如下: if(idleTaskCounter%84){char printlist[2048];vTaskList(printlist);Prin…

ssm基于Java的药店药品信息管理系统的设计与实现论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,药品信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大…

11-适配器模式(Adapter)

意图 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。 适配器模式属于结构模式。 类适配器模式(通过继承的方式实现适配器模式) Adapter类,通过继承src类&#xff0…

vulnhub靶场之DC-8

一.环境搭建 1.靶场描述 DC-8 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. This challenge is a bit of a hybrid between being an actual challenge, and being a "proof of concept&quo…

【技术选型】Doris vs starRocks

比对结论 仅从当前能看到的数据中,相比于doris,starRocks在性能方面具备优势,且更新频率高(降低维护成本)。 目标诉求 并发性不能太低——相比于clickhouse不到100的QPS支持大表关联——降低数据清洗的压力&#xf…

家用洗地机哪个品牌质量比较好?高配置洗地机推荐

近年来,科技飞速发展,推动了多个新兴行业的崛起,其中洗地机行业也在不断扩大。然而,随着市场的蓬勃发展,洗地机市场的产品质量参差不齐。在众多品牌中,真正致力于深入研究和创新的品牌相对较少。洗地机的问…

电流检测方法

电路检测电路常用于:高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。 对于大部分应用,都是通过感测电阻两端的压降测量电流。 一般使用电流通过时的压降为数十mV~数百mV的电阻值&…

VUE element-ui实现表格动态展示、动态删减列、动态排序、动态搜索条件配置、表单组件化。

1、实现效果 1.1、文件目录 1.2、说明 1、本组件支持列表的表头自定义配置,checkbox实现 2、本组件支持列表列排序,vuedraggable是拖拽插件,上图中字段管理里的拖拽效果 ,需要的话请自行npm install 3、本组件支持查询条件动态…

将Android应用修改为鸿蒙应用的工作

将Android应用修改为鸿蒙(HarmonyOS)应用需要进行一系列主要的工作。以下是在进行这一转换过程中可能需要进行的主要工作,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.项目…

Microsoft Excel 直方图

Microsoft Excel 直方图 1. 数据示例2. 打开 EXCEL3. settings4. 单击直方图柱,右键“添加数据标签”References 1. 数据示例 2. 打开 EXCEL 数据 -> 数据分析 -> 直方图 3. settings 输入区域样本值、接受区域分类间距,输出选项选择“新工作表组…

手把手图解教你Java SPI源码分析

原创/朱季谦 我在《Java SPI机制总结系列之开发入门实例》一文当中,分享了Java SPI的玩法,但是这只是基于表面的应用。若要明白其中的原理实现,还需深入到底层源码,分析一番。 这里再重温一下SPI机制的概念:SPI&#…

JS实现网页轮播图

轮播图也称为焦点图,是网页中比较常见的网页特效。 1、页面基本结构: 大盒子focus,里面包含 左右按钮ul 包含很多个li (每个li里面包含了图片)下面有很多个小圆圈 因为我们想要点击按钮,轮播图左右播放&a…

外部晶振、复位按键、唤醒按键、扩展排针原理图详解

前言:本文对外部晶振、复位按键、唤醒按键、扩展排针原理图详解。本文使用的MCU是GD32F103C8T6 目录 外部晶振原理图 复位按键、唤醒按键原理图 扩展排针部分原理图 ​外部晶振原理图 如下图,两个外部晶振,分别是8M(主晶振&a…

【InternLM 大模型实战】第三课

基于 InternLM 和 LangChain 搭建你的知识库 大模型开发范式RAG(检索增强生成)FINETUNE(微调) LangChain 简介构建向量数据库加载源文件文档分块文档向量化 搭建知识库助手构建检索问答链RAG方案优化建议 Web Demo 部署动手实战In…

让网页自动化测试更简便,流程图设计工具为您解决痛点

在数字化时代,网页自动化测试已经成为提高工作效率、保证项目质量的重要手段。然而,传统的自动化测试往往需要复杂的编程技能,对非专业人员来说门槛较高。为了解决这个问题,我们向您推荐一款创新的设计工具,它可以通过…