zoukankan      html  css  js  c++  java
  • Linux网络数据包的揭秘以及常见的调优方式总结

    https://mp.weixin.qq.com/s/boRWlx1R7TX0NLuI2sZBfQ

    作为业务 SRE,我们所运维的业务,常常以 Linux+TCP/UDP daemon 的形式对外提供服务。SRE 需要对服务器数据包的接收和发送路径有全面的了解,以方便在服务异常时能快速定位问题。
    以 tcp 协议为例,本文将对 Linux 内核网络数据包接收的路径进行整理和说明,希望对大家所有帮助。

    Linux 数据包接收路径的整体说明

    接收数据包是一个复杂的过程,涉及很多底层的技术细节 , 这里先做一下大概的说明 :
    NIC (network interface card) 在系统启动过程中会向系统注册自己的各种信息,系统会分配专门的内存缓冲区,
    NIC 接收到数据包之后,就会存放在内存缓冲区,通过硬件中断通知内核有新的数据包需要处理 .
    内核从缓冲区取走 NIC 接收过来的数据,交给 TCP/IP 协议栈处理。
    内核的 TCP/IP 协议栈代码进行处理后,更新协议的各种状态,然后交给应用程序的 socket buffer。
    然后应用程序就可以通过 read() 系统调用,从对应的 socket 文件中,读取数据。

    对内核数据包接收的路径做一下分层,总体可分为三层 :

    1. 网卡层面

      • 1.1 网卡接收到数据包

      • 1.2 将数据包从网卡硬件转移到主机内存中 .

    2. 内核层面

      • 2.1 TCP/IP 协议逐层处理

    3. 应用程序层面

      • 3.1 应用程序通过 read() 系统调用 , 从 socket buffer 读取数据

    如下图 :

    作为业务 SRE,我们所运维的业务,常常以 Linux+TCP/UDP daemon 的形式对外提供服务。SRE 需要对服务器数据包的接收和发送路径有全面的了解,以方便在服务异常时能快速定位问题。
    以 tcp 协议为例,本文将对 Linux 内核网络数据包接收的路径进行整理和说明,希望对大家所有帮助。

    Linux 数据包接收路径的整体说明

    接收数据包是一个复杂的过程,涉及很多底层的技术细节 , 这里先做一下大概的说明 :
    NIC (network interface card) 在系统启动过程中会向系统注册自己的各种信息,系统会分配专门的内存缓冲区,
    NIC 接收到数据包之后,就会存放在内存缓冲区,通过硬件中断通知内核有新的数据包需要处理 .
    内核从缓冲区取走 NIC 接收过来的数据,交给 TCP/IP 协议栈处理。
    内核的 TCP/IP 协议栈代码进行处理后,更新协议的各种状态,然后交给应用程序的 socket buffer。
    然后应用程序就可以通过 read() 系统调用,从对应的 socket 文件中,读取数据。

    对内核数据包接收的路径做一下分层,总体可分为三层 :

    1. 网卡层面

      • 1.1 网卡接收到数据包

      • 1.2 将数据包从网卡硬件转移到主机内存中 .

    2. 内核层面

      • 2.1 TCP/IP 协议逐层处理

    3. 应用程序层面

      • 3.1 应用程序通过 read() 系统调用 , 从 socket buffer 读取数据

    如下图 :

  • 相关阅读:
    Atomikos 中文说明文档(周枫翻译) 东师理想
    flex手机项目嵌套html页面和html页面播放声音文件 东师理想
    sql server 创建 ASPState 数据库方法 东师理想
    Android中文API(博客翻译版转载) 东师理想
    sql server导入excel和多表关联更新 东师理想
    关于CSS样式zindex在firefox和平板电脑中的问题 东师理想
    使用Flash builder 4.6创建Flex手机项目读取XML文件方法 东师理想
    android动画切换(滑屏效果)实例 东师理想
    一个障碍,就是一个超越自我的契机(转载)
    多去阅读思维训练类的书籍(转载)
  • 原文地址:https://www.cnblogs.com/rsapaper/p/12547490.html
Copyright © 2011-2022 走看看