ip_vs 原理解析 (四)hook 后的开始 NF_INET_LOCAL_OUT

这篇具有很好参考价值的文章主要介绍了ip_vs 原理解析 (四)hook 后的开始 NF_INET_LOCAL_OUT。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

NF_INET_LOCAL_OUT

根据优先级依次是 ip_vs_local_reply4,ip_vs_local_request4

| -- ip_vs_local_reply4
  | -- ip_vs_out
    | -- ip_vs_fill_iph_skb    // 填充 ip 头
    | -- ip_vs_proto_data_get      // 根据 ip 头获取协议对应的 ipvs data
    | -- pp->conn_out_get      // 查询是否属于已存在的连接
      | -- 有已存在连接
        | -- handle_response     // 回复,重写 报文,发送
          | -- snat_handler          // 使用协议 data 的 snat_handler 方法
            | -- tcp_snat_handler  // 如 tcp 的 snat 方法,修改 tcp 源端口为 vport,计算 checksum
          | -- 修改源 ip 为 vip, 计算 checksum
          | -- ip_vs_route_me_harder   // 重新计算路由
          | -- ip_vs_update_conntrack  // 更新 nf_ct 表
          | -- ip_vs_conn_put    // 更新 连接
      | -- 无已存在连接
        | -- 允许发送 ipvs icmp 报文的情况下且没有 rs 的情况下,回复 ICMP_DEST_UNREACH 或 ICMP_PORT_UNREACH,并丢弃报文
        | -- NF_ACCEPT         

Local_OUT hook,即发包前,查询是否有 ipvs 已存在连接,如果有,做 snat 再发,如果没有且在 内核开启 vs_icmp_nat,有对应 rs 时(回包匹配到 rs),回复 ICMP_DEST_UNREACH/ICMP_PORT_UNREACH;其他通过 hook 点。

ip_vs_local_request4
| -- ip_vs_in
  | -- ip_vs_proto_data_get    // 获取协议
  | -- cp = pp->conn_in_get   // 查是否已存在连接
    | -- ip_vs_try_to_schedule
      | -- conn_schedule 对应协议的 conn_schedule  // tcp 的 tcp_conn_schedule
        | -- tcp_conn_schedule    根据报文查询 ipvs 的 service
          | -- ip_vs_schedule    ipvs 主要函数,调度去获取真实的后端

使用场景通常是需要 ipvs 应用将报文发送到真正的后端;在 k8s 中,使用该函数将流量发送到 rs

如 kubernetes service 的 ipvs 使用过程中,每个节点都有 vip 的情况下,pod 访问 vip 时先 LOCAL_INPUT 的 ip_vs_remote_request4,再 LOCAL_OUT 的 ip_vs_local_request4。如果宿主机访问 vip,则是LOCAL_OUT 的 ip_vs_local_request4。文章来源地址https://www.toymoban.com/news/detail-697041.html

到了这里,关于ip_vs 原理解析 (四)hook 后的开始 NF_INET_LOCAL_OUT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 网络层&&IP协议的基本原理 数据链路层&&ARP协议 域名解析以及一些重要技术

    网络层作用:在复杂的网络环境中确定一个合适的路径。 tcp/ip协议,tcp解决可靠性与效率,ip提供在网络中传输的能力。 传输层决定了单次向下交付数据包的大小。 IP(Internet Protocol)协议是一种网络层协议,用于在互联网上进行数据传输。它定义了数据如何在网络中进行分

    2024年02月15日
    浏览(47)
  • 从零开始实现一个C++高性能服务器框架----Hook模块

    此项目是根据sylar框架实现,是从零开始重写sylar,也是对sylar丰富与完善 项目地址:https://gitee.com/lzhiqiang1999/server-framework 项目介绍 :实现了一个基于协程的服务器框架,支持多线程、多协程协同调度;支持以异步处理的方式提高服务器性能;封装了网络相关的模块,包括

    2023年04月09日
    浏览(101)
  • React Hooks解析

    1. react使用hook的意义 Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期)。 class组件与函数式组件: class组件可以 定义自己的state ,用来 保存组件自己内部的状态, 函数式组件不可以,因为函数每次调用都会产生新

    2024年02月08日
    浏览(39)
  • 【React】React Hooks解析

    React 16.8 + 为什么需要Hook? Hook是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期) 我们先来思考一下class组件相对于函数式组件有什么优势?比较常见的是下面的优势: class组件可以 定义自己的state ,用来 保存组件自己内

    2024年02月11日
    浏览(55)
  • React Hooks 源码解析:useEffect

    React Hooks 源码解析(4):useEffect React 源码版本: v16.11.0 源码注释笔记:airingursb/react 1.1 为什么要有 useEffect 我们在前文中说到 React Hooks 使得 Functional Component 拥有 Class Component 的特性,其主要动机包括: 在组件之间复用状态逻辑很难 复杂组件变得难以理解 难以理解的 class 对

    2024年01月21日
    浏览(43)
  • 重复delete 对象指针后的 异常调用栈怪异 解析

    Release版VC6 MFC程序 程序正常退出时得到一个如下异常调用栈: 顶层两个函数调用帧都是错的,地址怪异 ,没有函数名子通过反汇编校验,根据帧返回地址是 0079451a 判断出具体函数源码位置, 不及格的程序员-八神 在内存窗口中查看此变量周围已经被16进制 feee feee填充,看我

    2023年04月19日
    浏览(26)
  • React Hook - useState函数的详细解析

    在上一篇文章中, 我用到useState来让大家体验一下hooks函数 那么接下来我们来先研究一下上面核心的一段代码代表什么意思 useState来自react,需要从react中导入,是一个hook函数, 官方中也将它成为State Hook, 它与class组件里面的 this.state 提供的功能完全相同; 一般来说,在函数退出

    2024年01月25日
    浏览(43)
  • React初探:从环境搭建到Hooks应用全解析

    1、React是什么 React是由Facebook开发的一款用于构建用户界面的JavaScript库。它主要用于构建单页面应用中的UI组件,通过组件化的方式让开发者能够更轻松地构建可维护且高效的用户界面。 React的核心思想是组件化,将UI拆分成独立且可复用的部分,每个部分被称为组件。这种组

    2024年01月17日
    浏览(32)
  • 4.1 应用层Hook挂钩原理分析

    InlineHook 是一种计算机安全编程技术,其原理是在计算机程序执行期间进行拦截、修改、增强现有函数功能。它使用钩子函数(也可以称为回调函数)来截获程序执行的各种事件,并在事件发生前或后进行自定义处理,从而控制或增强程序行为。Hook技术常被用于系统加速、功

    2024年02月08日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包