当前位置: 首页 > news >正文

解决访问客户端位nat模式服务端syn握手失败的问题

我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处理过程,结合Linux内核参数说明和TCP/IP协议栈相关的理论,介绍一些常见的丢包故障定位方法和解决思路。

在开始之前,我们先用一张图解释 linux 系统接收网络报文的过程。

  1. 首先网络报文通过物理网线发送到网卡
  2. 网络驱动程序会把网络中的报文读出来放到 ring buffer 中,这个过程使用 DMA(Direct Memory Access),不需要 CPU 参与
  3. 内核从 ring buffer 中读取报文进行处理,执行 IP 和 TCP/UDP 层的逻辑,最后把报文放到应用程序的 socket buffer 中
  4. 应用程序从 socket buffer 中读取报文进行处理

在接收 UDP 报文的过程中,图中任何一个过程都可能会主动或者被动地把报文丢弃,因此丢包可能发生在网卡和驱动,也可能发生在系统和应用。

之所以没有分析发送数据流程,一是因为发送流程和接收类似,只是方向相反;另外发送流程报文丢失的概率比接收小,只有在应用程序发送的报文速率大于内核和网卡处理速率时才会发生。

本篇文章假定机器只有一个名字为 eth0 的 interface,如果有多个 interface 或者 interface 的名字不是 eth0,请按照实际情况进行分析。

相关文章:

  • 【Python】线程
  • 【markdown】markdown语法进阶
  • 自动驾驶自主避障概况
  • php mysql网络考试系统dzkf8994
  • python干饭神器---今天吃什么?python告诉你
  • 华为OD机试题【打折买水果】用 C++ 编码,速通
  • 我用Python写的一个操控玩具车的程序
  • Springboot整合Nacos实现动态线程池
  • 软考中级到底有没有用?价值高吗?
  • java基础面试题(一)
  • 【算法题】831. 隐藏个人信息
  • arthas 源码分析 篇一 【结构篇】
  • HTML5 <abbr> 标签 和 HTML5 <applet> 标签
  • C++面向对象高级编程(上)
  • 安装和配置 Flask
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 77. Combinations
  • Computed property XXX was assigned to but it has no setter
  • HashMap ConcurrentHashMap
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java方法详解
  • LintCode 31. partitionArray 数组划分
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Vue.js源码(2):初探List Rendering
  • Vue2.0 实现互斥
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 分享一份非常强势的Android面试题
  • 爬虫模拟登陆 SegmentFault
  • 前嗅ForeSpider教程:创建模板
  • 双管齐下,VMware的容器新战略
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​flutter 代码混淆
  • ​queue --- 一个同步的队列类​
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (12)Hive调优——count distinct去重优化
  • (20050108)又读《平凡的世界》
  • (3)(3.5) 遥测无线电区域条例
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (超详细)语音信号处理之特征提取
  • (多级缓存)多级缓存
  • (分类)KNN算法- 参数调优
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • []串口通信 零星笔记
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C#]C#学习笔记-CIL和动态程序集