• 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 读取数据

    如下图 :

  • 相关阅读:
    js表单提交回调函数
    sublime text3下BracketHighlighter的配置方法
    不同版本的jquery的复选框checkbox的相关问题
    jquery键盘常见事件
    jQuery学习笔记(一)
    sublime text按esc经常进入command mode(不能输入任何东西)
    sublime text光标移入移出括号的快捷键设置
    sublime text3 自己定义的不同浏览器的预览快捷键
    grains和pillar的联合使用
    自定义模块和grains
  • 原文地址:https://www.cnblogs.com/rsapaper/p/12547490.html
Copyright © 2020-2023  润新知