在dpvs上实现ICMP的源进源出

目录

  • 1. 缘起
  • 2. 源码分析
  • 3. 让ICMP也走源进源出

1. 缘起

  在网络通信中,当一个请求报文从源主机到达目标主机,并经过中间路由器或交换机进行转发时,请求报文进入主机A的路径和响应报文离开主机A的路径可能不同。这种情况下,就会出现所谓的三角路径问题。如下图:
在这里插入图片描述

   具体来说,当一个请求报文进入主机A的路径与响应报文离开主机A的路径不同,可能导致以下问题:

  1. 网络性能不稳定:如果进入主机A的路径与离开主机A的路径存在较大差异,可能会导致网络性能不稳定。例如,进入主机A的路径可能经过高负载的网络链路,而离开主机A的路径可能经过较空闲的链路。这样的差异可能导致请求和响应之间的延迟不一致,影响网络性能和用户体验。

  2. 安全性问题:在某些情况下,网络中的安全策略可能只应用于特定的路径。如果请求报文进入主机A的路径与响应报文离开主机A的路径不同,可能导致安全策略无法完全覆盖所有的路径,从而增加了网络的安全风险。

  3. 问题排查困难:当出现网络故障或问题时,如果请求报文进入主机A的路径与响应报文离开主机A的路径不同,可能增加了故障排查的难度。因为网络管理员需要同时考虑请求和响应的不同路径,以确定问题的根本原因。

为了解决这个问题,可以采取以下措施:

  1. 路由优化:网络管理员可以优化网络的路由配置,使得请求报文进入主机A的路径和响应报文离开主机A的路径尽可能一致。这可以通过路由策略调整、链路负载均衡等方式实现。

  2. 建立对称路径:尽可能建立对称路径,即让请求报文和响应报文经过相同的网络路径。这可以通过协议配置、网络设备设置等手段实现。

  3. 网络监控和故障排查:网络管理员应该使用适当的网络监控工具来监测网络性能和路径信息。当出现问题时,可以通过监控数据和故障排查工具来分析请求和响应的路径差异,并找出问题所在。

  最近,我们在用dpvs的fnat模式的部署测试中,就碰到了三角路径的问题。其原因是由于dpvs设置的默认路由和进来的路由不一致导致的,当时抓包发现tcp和udp报文走的路径和来源路径是一致的,就是所谓的源进源出,而ping报文则不是,dpvs上的出向流量走的是dpvs上面配置的默认路由。我们希望ping报文能够像tcp/udp一样也能够走源进源出的路径。
  下面就以fnat模式来进行分析。

2. 源码分析

   于是对tcp/udp的出向报文发送逻辑进行了分析。经过分析,tcp/udp出向报文是通过xmit_outbound转发到客户端的,由__dp_vs_in函数调用,源码片段如下:

    /* holding the conn, need a "put" later. */if (dir == DPVS_CONN_DIR_INBOUND)return xmit_inbound(mbuf, prot, conn);elsereturn xmit_outbound(mbuf, prot, conn);

   如果dir != DPVS_CONN_DIR_INBOUND就表示当前需要转发的数据包是出向流量,于是调用xmit_outbound函数进行数据包的转发。

  再看xmit_outbound的逻辑:

/* return verdict INET_XXX */
static int xmit_outbound(struct rte_mbuf *mbuf,struct dp_vs_proto *prot,struct dp_vs_conn *conn)
{int err;assert(mbuf && prot && conn);if (dp_vs_stats_out(conn, mbuf)) {dp_vs_conn_put(conn);return INET_DROP;}if (!conn->packet_out_xmit) {RTE_LOG(WARNING, IPVS, "%s: missing out_xmit\n", __func__);dp_vs_conn_put(conn);return INET_ACCEPT;}err = conn->packet_out_xmit(prot, conn, mbuf);if (err != EDPVS_OK)RTE_LOG(DEBUG, IPVS, "%s: fail to out xmit: %d\n", __func__, err);dp_vs_conn_put(conn);/* always stolen the packet */return INET_STOLEN;
}

  这里关键的就是调用了conn->packet_out_xmit进行数据包的转发。而packet_out_xmit函数指针在fnat模式下面对应的是dp_vs_out_xmit_fnat函数,对于ipv4,dp_vs_out_xmit_fnat函数最终调用的是__dp_vs_out_xmit_fnat4来进行数据包的转发。所以我们来看看__dp_vs_out_xmit_fnat4的实现,源码如下:

static int __dp_vs_out_xmit_fnat4(struct dp_vs_proto *proto,struct dp_vs_conn *conn,struct rte_mbuf *mbuf)
{struct flow4 fl4;struct ipv4_hdr *iph = ip4_hdr(mbuf);struct route_entry *rt;int err, mtu;if (!fast_xmit_close && !(conn->flags & DPVS_CONN_F_NOFASTXMIT)) {/* 通过来源端口转发 */dp_vs_save_outxmit_info(mbuf, proto, conn);if (!dp_vs_fast_outxmit_fnat(AF_INET, proto, conn, mbuf)) {return EDPVS_OK;}}/* 通过路由转发 *//** drop old route. just for safe, because* FNAT is PRE_ROUTING, should not have route.*/if (unlikely(mbuf->userdata != NULL))route4_put((struct route_entry *)mbuf-&g

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++第二弹---C++入门(中)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 C入门 1、函数重载 1.1、函数重载概念 1.2、C支持函数重载的原理--名字修饰(name Mangling) 3、引用 3.1、引用概念 3.2、引用特性 3.3、常引用 …

批量PDF转HTML:高效管理与优化文档格式

随着数字化时代的快速发展,PDF文件因其跨平台兼容性和良好的排版效果而被广泛应用。然而,在文本批量管理的场景中,我们可能需要将PDF文件转换为HTML格式,以便更好地进行编辑、搜索和定制。本文将为您介绍一种高效的方法&#xff0…

Java线程的基本操作

线程的基本操作 Java线程的常用操作都定义在Thread类中,包括一些重要的静态方法 和线程的实例方法 。下面我们来学习一下,线程的常用基本操作 1.线程名称的设置和获取 线程名称可以通过构造Thread的时候进行设置,也可以通过实例的方法setName…

NOIP2018-S-DAY1-3-赛道修建(洛谷P5021)的题解

目录 题目 原题描述: 题目描述 输入格式 输出格式 输入输出样例 主要思路: check: 真正的code: 原题描述: 题目描述 C 城将要举办一系列的赛车比赛。在比赛前,需要在城内修建 条赛道。 C 城一共有 个路…

rancher里的ingress如何配置gzip压缩

方案一,未试验成功,但配置过程值得记录一下 通过配置configmap,然后在ingress的deployment里引用configmap实现。 参考文章 创建configmap apiVersion: v1 kind: ConfigMap metadata:name: nginx-ingress-controllerannotations:{} # k…

WPF Button去除按钮边框,添加下划线

<Button Width"45" Height"25" FontSize"20" Background"Transparent" BorderBrush"Transparent" Foreground"#FFC9A322" Click"Btn_Retry_Click" ><TextBlock><Underline>重试</…

01_lombok review

文章目录 Lombok父子工程ide中的Maven基础配置前置知识储备 Lombok 怎么引入Lombok依赖&#xff1a; step1&#xff1a;引入Lombok依赖 eg&#xff1a; <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok<…

数据库管理-第159期 Oracle Vector DB AI-10(20240311)

数据库管理159期 2024-03-11 数据库管理-第159期 Oracle Vector DB & AI-10&#xff08;20240311&#xff09;1 其他distance函数2 实例演示使用其他函数寻找最近向量点函数变体简写语法 总结 数据库管理-第159期 Oracle Vector DB & AI-10&#xff08;20240311&#x…

网络安全AI智能体公司「云起无垠」获数千万元天使+轮融资,致力于大模型与网络安全深度融合的技术研究

「云起无垠」致力于打造最懂安全的AI智能体&#xff0c;通过持续运营的工具、知识以及记忆引擎&#xff0c;不断提升智能体对用户安全场景的理解&#xff0c;以达到易于使用、自我学习、自主行动的特性&#xff0c;助力企业自动化执行各类安全任务&#xff0c;让软件更安全&…

解决:黑马webpack视频中出现的问题总结

问题 1 ERROR in main Module not found: Error: Can‘t resolve ‘./src‘ 解决 Webpack 中 ERROR in main Module not found: Error: Can‘t resolve ‘./src‘ 问题 黑马AJAX-Node.js-Webpack教学视频&#xff08;BV1MN411y7pw 其中P98&#xff09;中webpack部分&#xff0c…

代理IP如何应对自动化测试和爬虫检测

目录 一、代理IP在自动化测试和爬虫中的作用 二、代理IP的优缺点分析 1.优点 2.缺点 三、应对自动化测试和爬虫检测的策略 1.选择合适的代理IP 2.设置合理的请求频率和间隔 3.模拟人类行为模式 4.结合其他技术手段 四、案例与代码示例 五、总结 在自动化测试和爬虫开…

传递函数硬件化

已知一个系统的传递函数&#xff0c;如何进行硬件化呢&#xff1f; 只需要将传递函数离散化&#xff0c;得到差分方程&#xff0c;就可以根据差分方程进行硬件设计。 通过例子说明&#xff1a; 得到差分方程后&#xff0c;其中y(k)/y(k-1)/y(k-2)/u(k-1)/u(k-2)等代表不同周期…

软考如何选择?信息系统项目管理师值得选吗?

软考有五大专业方向和三个等级&#xff0c;一共有27个资格认证&#xff0c;如果没有进行深入了解的情况下从这27个中选择一个可能会为难。一般情况下&#xff0c;我们进行选择的时候都会结合自己所学的专业方向、所在的工作岗位发展方向去选择&#xff0c;但是我给大家的建议是…

华为OD机试 - 垃圾信息拦截(Java 2024 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&a…

Node.js 安装和配置

一、Node.js 下载和安装 1.1 下载 Node.js 打开 Node.js — Download (nodejs.org)&#xff0c; 选择合适的版本。 1.2 安装 Node.js 双击 node-v20.11.1-x64.msi&#xff0c;安装 Node.js &#xff08;自定义安装目录&#xff0c;我的修改为 D:\Program Files\nodejs\&…

Google发布创新AI工具Path Foundation和Derm Foundation,突破医学影像解读瓶颈,开启病理学与皮肤科研究新纪元

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

解压常见_gzip:stdin:not in gzio format:怀疑下文件是否损坏

此次的主角文件是&#xff1a;pin-2.14-71313-gcc.4.4.7-linux.tar.gz 结论&#xff1a;文件后缀没问题&#xff0c;就先怀疑下是不是文件损坏了 ls指令看不出任何端倪 文件名、后缀都正常 解压出现报错 瞅瞅文件大小 du -h <文件名> 呦呵 4kb&#xff0c;和应该的大…

基于SpringBoot的信息技术知识赛系统设计与实现

该系统使用的到的开发工具为Eclipse&#xff0c;使用的数据库为Mysql&#xff0c;使用的框架为SpringBoot框架。 系统主要实现了如下功能&#xff1a; 用户信息管理 如图5.1显示的就是用户信息管理页面&#xff0c;此页面提供给管理员的功能有&#xff1a;用户信息的查询管理…

波司登高德康:以有“韧性”的创新应变市场新浪潮

伴随着消费升级&#xff0c;羽绒服市场需求日益旺盛。愈发多元化的需求对于企业发展也有着更高的要求。如何更好推动行业多元化发展&#xff0c;可以从波司登的品牌升级、产品创新、模式创新、数字技术创新、绿色发展创新等方面窥得一二。 高德康总裁接受新华网主持人采访 对此…

Codeforces Round 933 (Div. 3)C:Rudolf and the Ugly String

题目链接&#xff1a;Dashboard - Codeforces Round 933 (Div. 3) - Codeforces 解题思路&#xff1a; 解题思路&#xff1a; 题目大概意思是字符串中最少去掉几个单词可以使字符串变漂亮&#xff0c;其实只要找“map"和”pie“这两个单词数量&#xff0c;注意判断&quo…