tcp丢包的排查

这篇具有很好参考价值的文章主要介绍了tcp丢包的排查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

丢包的排查:

     参考资料:1https://blog.csdn.net/maimang1001/article/details/121786580

              2https://blog.csdn.net/m0_67645544/article/details/124574099

1、 网卡丢包

a)   ifconfig

 

tcp丢包的排查

b)   查看网卡丢包统计(虚拟机看不到网卡信息)ethtool –S eth0

tcp丢包的排查

  

网卡(NIC)读取到数据帧后,写入网卡内部的数据缓冲区(Ring Buffer),再生成中断,触发内核从Ring Buffer中读取数据,如果该数据缓冲区不够用,新来的包就会被丢弃,上述两图中就会有显示。

 

tcp丢包的排查

查看eth0网卡Ring Buffer最大值和当前设置

              ethtool –g eth0

修改Ring Buffer大小

              ethtool –G eth0 rx 4096 tx 4096

2、 netdev_max_backlog溢出

netdev_max_backlog 是内核从NIC(网卡)收到包后,交由协议栈处理之前的缓冲队列。每个CPU核都有一个backlog队列,当这个队列不够用溢出时,数据包将被丢弃。

cat /proc/net/softnet_stat 查看是否发生了netdev_max_backlog溢出,其中:    每一行代表每一个CPU核的状态统计,

第一列代表中断处理程序收到的包总数,

第二列即代表由于 netdev_max_backlog 队列溢出而被丢弃的包总数

netdev_max_backlog 的默认值是 1000,修改大小方法为:

/etc/sysctl.conf里加上net.core.netdev_max_backlog=2000

再执行sysctl –p

3、 路由丢包

netsata –s|grep route 查看路由丢包

ip r 命令查看ip对应路由表

rp_filter反向路由过滤丢包:反向路由过滤机制是Linux通过反向路由查询,检查收到的数据包源IP是否可路由(Loose mode)、是否最佳路由(Strict mode),如果没有通过验证,则丢弃数据包,设计的目的是防范IP地址欺骗攻击。

rp_filter 提供三种模式供配置:

              0 - 不验证

              1 - RFC3704定义的严格模式:对每个收到的数据包,查询反向路由,如果数据包入口和反向路由出口不一致,则不通过

              2 - RFC3704定义的松散模式:对每个收到的数据包,查询反向路由,如果任何接口都不可达,则不通过

可通过修改/proc/sys/net/ipv4/conf/eth0/rp_filter值配置此项

4、 防火墙拦截

检查是否是防火墙引起的丢包, 可以停掉iptables和firewalld, 查看命令systemctl status iptables.service / systemctl status firewalld.service

停止命令 systemctl stop iptables.service / systemctl stop firewalld.service

5、连接跟踪表溢出

kernel 用 ip_conntrack 模块来记录 iptables 网络包的状态,并把每条记录保存到 table 里(这个 table 在内存里,可以通过 /proc/net/ip_conntrack 查看当前已经记录的总数),如果网络状况繁忙,比如高连接,高并发连接等会导致逐步占用这个 table 可用空间,一般这个 table 很大不容易占满并且可以自己清理,table 的记录会一直呆在 table 里占用空间直到源 IP 发一个 RST 包,但是如果出现被攻击、错误的网络配置、有问题的路由/路由器、有问题的网卡等情况的时候,就会导致源 IP 发的这个 RST 包收不到,这样就积累在 table 里,越积累越多直到占满。无论,哪种情况导致table变满,满了以后就会丢包,出现外部无法连接服务器的情况。内核会报如下错误信息:kernel: ip_conntrack: table full, dropping packet;

查看当前连接跟踪数 :

cat /proc/sys/net/netfilter/nf_conntrack_max

修改如下值:

net.netfilter.nf_conntrack_max = 262144 #可以增大跟踪的条数

net.netfilter.nf_conntrack_tcp_timeout_established = 432000 #减小跟踪有效时间

6、 tcp连接跟踪安全检查

丢包原因:由于连接没有断开,但服务端或者client之前出现过发包异常等情况(报文没有经过连接跟踪模块更新窗口计数),没有更新合法的 window 范围,导致后续报文安全检查被丢包;协议栈用 nf_conntrack_tcp_be_liberal 来控制这个选项,默认是1-不开启:

  • 1:关闭,只有不在tcp窗口内的rst包被标志为无效;
  • 0:开启; 所有不在tcp窗口中的包都被标志为无效;

7、 系统网络内存不足

系统内存不足,创建新分片队列失败,netstat -s |grep reassembles查看是否丢包

增大系统网络内存修改项:

net.core.rmem_default

net.core.rmem_max

net.core.wmem_default

8、 TIME_WAIT过多

服务端在高并发的情况, 主动关闭连接, 会出现大量的socket处于timewait状态,timewait数目超过tcp_max_tw_buckets(默认是65536)值后,新来的连接直接进入close状态。

解决方法:

a、tw_reuse,tw_recycle 必须在客户端和服务端 timestamps 开启时才管用(默认打开)

    b、tw_reuse 只对客户端起作用,开启后客户端在1s内回收;

c、tw_recycle 对客户端和服务器同时起作用,开启后在 3.5*RTO 内回收,RTO 200ms~ 120s具体时间视网络状况。内网状况比 tw_reuse 稍快,公网尤其移动网络大多要比 tw_reuse 慢,优点就是能够回收服务端的 TIME_WAIT 数量;在服务端,如果网络路径会经过NAT节点,不要启用 net.ipv4.tcp_tw_recycle,会导致时间戳混乱,引起其他丢包问题;

d、调整 tcp_max_tw_buckets 大小

9、时间戳异常

    服务端开启快速回收机制后, net.ipv4.tcp_tw_recycle为1(前提tcp_timestamps为1),NAT环境里的多个客户端连接服务端时, 因为时间戳校验导致会导致SYN包被丢弃。通过命令netstat –s|grep rejects查看确认丢包。

    tcp_timestamps开启后,linux内核会开启 PAWS 机制。PAWS是为了防止TCP序列号绕回,会维护最近一次收到数据包的时间戳(Recent TSval),如果接下来的数据包时间戳小于这个,即不是递增的时间戳,就会直接丢弃这个数据包。这种情况下是用「IP + 端口」四元组区分连接。

    而开启timewait快速回收后,PAWS检查是针对IP做区分,这样同一个NAT环境里的不同客户端连接都会被检查同一时间戳

10tcp全连接队列长度不够

    tcp连接,linux内核维护一个半队列和一个全连接队列,

半连接队列中存放等待完成3次握手的连接,这些连接的状态为Syn_RECV ,该队列长度为max(64,/proc/sys/net/ipv4/tcp_max_syn_backlog)

全连接队列存放完成3次握手等待accpet的连接,此时的状态已经是ESTABLISHED,这个队列的长度min(backlog, somaxconn),backlog 的值则应该是由 int listen(int sockfd, int backlog) 中的第二个参数指定,somaxconn由net.core.somaxconn决定

可以通过命令netstat –s|grep listen 查看是否丢包

写文章-CSDN创作中心文章来源地址https://www.toymoban.com/news/detail-459692.html

到了这里,关于tcp丢包的排查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 资料与参考

    资料: 本书(《Python神经网络编程》)的资料是使用Jupyter notebooks写的,本人并不擅长使用Jupyter,所以用传统py重写了一遍,并附加了新功能(即多数字识别),现将Jupyter版和py版连带本书pdf一并上传至gitee,地址:python-neuralNetwork-coding: 《Python神经网络编程》pdf和随书源码,

    2024年02月11日
    浏览(43)
  • Fast Planner——代码解读参考资料整理

    参数解读 主要函数解读 概率栅格地图,概率更新过程的公式推导过程 全概率公式、贝叶斯公式 一. kinodynamic a_star(前端hybrid A_star动力学路径搜索) 1.1启发函数的计算 1.2 Compute shot Traj 1.3 节点扩张 1.4 节点剪枝 1.5 返回kinopath与 getsamples 二、B样条曲线设置 2.1 均匀B样条设置

    2024年02月05日
    浏览(77)
  • [渝粤教育] 中国人民警察大学 工业企业防火 参考 资料

    教育 -工业企业防火-章节资料考试资料-中国人民警察大学【】 随堂测验 1、【判断题】工业企业的火灾特点是涉及行业种类繁多,涉及到社会生活的方方面面。 A、正确 B、错误 参考资料【 】 2、【判断题】工业企业的火灾特点是物资集中,存在各种形式的点火源,发生火灾

    2024年02月02日
    浏览(49)
  • [渝粤教育] 辽宁对外经贸学院 数字新技术 参考 资料

    教育 -数字新技术-4-章节资料考试资料-辽宁对外经贸学院【】 第一单元测验 1、【单选题】1. 云计算是对(D)技术的发展与运用 云计算是对( )技术的发展与运用。 A、并行计算 B、网格计算 C、分布式计算 D、三个选项都是 参考资料【 】 2、【单选题】从研究现状上看,下

    2023年04月25日
    浏览(51)
  • 【Python NLTK】零基础也能轻松掌握的学习路线与参考资料

    Python 自然语言处理工具包(Natural Language Toolkit,简称 NLTK)是一款 Python 的库,主要用于处理自然语言的相关问题,如文本清洗、标记化、分词、语义分析、词性标注、文本分类等功能,是数据科学家和机器学习工程师不可或缺的工具之一。 本文将介绍学习 Python NLTK 的路线,

    2024年02月07日
    浏览(46)
  • 【Python psycopg2】零基础也能轻松掌握的学习路线与参考资料

    Python psycopg2是一个Python库,在Python中提供了一个连接PostgreSQL数据库的接口。它可以让Python应用程序和PostgreSQL数据库之间进行通信和数据传输。学习Python psycopg2的路线和教程可以在查阅资料和实践中快速入门。 一、学习前置知识 学习Python psycopg2需要一定的前置知识,如Pytho

    2024年02月05日
    浏览(39)
  • 【Python Cookie 和代理 IP】零基础也能轻松掌握的学习路线与参考资料

    一、Python Cookie 1、什么是Cookie? Cookie是一种在客户端保存数据的机制,服务器通过在HTTP响应头中添加Set-Cookie头实现。浏览器在接收到响应头中的Set-Cookie后,会将这个Cookie保存在本地。之后每次请求都会将本地保存的Cookie自动添加到请求头中,发送给服务器。 2、为什么需要

    2024年02月05日
    浏览(36)
  • java工程师面试技巧和方法,这份Github标星50K,相关资料参考

    Dubbo 为什么要用 Dubbo? Dubbo 的整体架构设计有哪些分层? 默认使用的是什么通信框架,还有别的选择吗? 服务调用是阻塞的吗? 一般使用什么注册中心?还有别的选择吗? 默认使用什么序列化框架,你知道的还有哪些? 服务提供者能实现失效提出是什么原理? 服务上线怎么

    2024年04月16日
    浏览(39)
  • 基于python影视电影点评系统设计与实现:开题报告、成品参考、毕设辅导资料

     博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月05日
    浏览(37)
  • 基于JAVA高校校园学习资料共享系统 设计与实现(springboot框架) 参考文献

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年01月19日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包