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

    如下图 :

  • 相关阅读:
    ASP.NET Web API 框架研究 Self Host模式下的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式下的消息处理管道
    ASP.NET Web API 框架研究 核心的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道
    ASP.NET Web API 框架研究 ASP.NET Web API 路由
    ASP.NET Web API 框架研究 ASP.NET 路由
    ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
    MVVM模式
    RESTful Web API 理解
    C# 函数式编程及Monads.net库
  • 原文地址:https://www.cnblogs.com/rsapaper/p/12547490.html
Copyright © 2011-2022 走看看