----------原创不易,欢迎点赞收藏。广交嵌入式开发的朋友,讨论技术和产品-------------

今天发一篇五年前的文章,不调单板。对以太网和交换片的较多理解,对系统级的优化。

大部分的网络设备,都由多种单板组成,类似刀片服务器产品。一片单板基本上是一个独立的系统,能够处理不同的业务。有些单板的业务流要直接对外,其带的IP/MAC地址要直接发送到业务网络或者公网中。如图1,该设备由四个单板组成,一个主控单板MPU,三个业务单板FXS。每个FXS要对外收发数据报文,那么每个业务单板要配置不同的IP和MAC地址
在这里插入图片描述 (图1)

图2是每个业务单板FXS的IP和MAC地址都对外,主控板不参与业务单板的IP/MAC替换,这是传统的做法。
在这里插入图片描述
(图2)

  • 随着业务单板的增加,所需要的IP和MAC地址会大量增加,对业务配置和网络规划带来了挑战,也增大了维护的难度。如果能够一个设备,只需要配置一个对外的IP和MAC地址,将大大简化产品的使用和维护难度。要实现这个功能,一般由设备的主控单板来对业务单板的报文进行IP和MAC地址替换,将业务单板的源IP和源MAC地址替换成设备对外的IP和MAC地址。
    S1,软件从网口收到业务单板发来的报文;
    S2,将报文中的源IP替换成自己对外的IP;
    S3,将报文中的源MAC替换成自己对外的MAC;
    S4,将报文发送到外部网络

主控板CPU对每个报文进行处理,随着业务流量的增大,主控CPU的负荷大大增加,甚至可能处理不过来而丢包,常见的做法上用iptables等第三方软件进行网络地址转换(NAT),图3所示。
在这里插入图片描述
(图3)

本文提出一种基于三层交换芯片,能迅速收敛IP和MAC地址,同时业务报文不经过设备主控板CPU,不增加主控板CPU负荷的方法。

在这里插入图片描述
(图4)

如上图4所示,交换芯片BCM 53347为一款三层交换芯片。其中,P1~P3接FXS单板网口,P0接主控板网口,P4接对外网口RJ45。

FXS1~FXS3每个单板的对外网口ETH0,配置带VLAN TAG的子接口。FXS1的VLAN=100,FXS2的VLAN=200,FXS3的VLAN=300。同时配置每个FXS子接口的IP地址为主控板对外的IP 10.8.8.1,MAC地址也配置成主控板对外的MAC地址MAC0。

配置BCM53348 P1支持VLAN TAG 100/1000, P2支持VLAN TAG 200/1000, P3支持 VLAN TAG 300/1000。

新增FXS1子接口 eth0.1000 192.168.1.1 私有MAC1
新增FXS2子接口 eth0.1000 192.168.1.2 私有MAC2
新增FXS3子接口 eth0.1000 192.168.1.3 私有MAC3
新增MPU子接口 eth0.1000 192.168.1.254 私有MAC0

以上私有IP用于主控板MPU与每个FXS之间的内部通讯,IP和MAC地址不会对外。

关键配置P4端口发送属性
对于P0/P1/P2/P3内部交换过来报文,剥离VLAN TAG并且发送到外部网络。那么FXS1, FXS2, FXS3的报文源IP/MAC地址都变成10.8.8.1/MAC0,与主控板对外的MAC一致,如图5

端口P4的接收转发属性配置
从P4外部网络进来的报文,只有特定的RTP业务流才能转发到FXS1 - FXS3,其他协议的报文全部转发给主控板MPU。RTP报文上属于UDP协议族,其自带UDP端口号,规定FXS1所属的UDP端口号10000 - 12000,FXS2的UDP端口号范围12001 - 14000,FXS3的UDP端口号范围14001 - 16000。P4端口检测到从外部网络接收的报文,如果是UDP报文,并且判断端口号范围,来确定报文转发到P1 - P3哪个端。转发给P1端口报文增加VLAN为100的tag,转发给P1端口报文增加VLAN为200的tag,转发给P3端口报文增加VLAN为300的tag。这样不同的FXS就可以成功接收外部RTP报文。如图6

主控板MPU与每个FXS单板之间采用私有IP通讯。如果FXS要对外发送报文,必须知道目的IP所对应的MAC地址,一般这是由ARP协议来实现。但是P4端口只能转发UDP RTP报文给FXS,所以FXS发出去的ARP报文,是收不到ARP响应的。这样,FXS发送私有命令给MPU,让MPU发送ARP到外部网络,获取MAC成功后,MPU将MAC地址通过私有协议发送给FXS。如图7
在这里插入图片描述
(图5)
在这里插入图片描述
(图6)
在这里插入图片描述
(图7)

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

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

相关文章

【flink】 flink 读取debezium-json数据获取数据操作类型op/rowkind方法

flink 读取debezium-json数据获取数据操作类型op/rowkind方法。 op类型有c(create),u(update),d(delete) 参考官网案例:此处的"op": "u",就是操作类型。 {"before&qu…

某手游cocos2dlua反编译

一、获取加载的luac文件 通过frida hook libccos2dlua.so 的luaL_loadbuffer函数对luac进行dump js代码如下,得到dump后的lua文件 // 要加载的目标库名 var targetLibrary "libcocos2dlua.so"; var dlopen Module.findExportByName(null, "dlope…

`toRaw` 与 `markRaw`:Vue3 响应式系统的细粒度控制

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

Python文件迁移之Shutil库详解

Shutil是一个Python内置的用来高效处理文件和目录迁移任务的库。Shutil不仅支持基本的文件复制、移动和删除操作,还具备处理大文件、批量迁移目录、以及跨平台兼容性等特性。通过使用Shutil,我们可以更加轻松地实现文件系统的管理和维护,本文…

【服务器R环境架构】基于 micromamba下载 R 库包

目录 准备工作:下载并安装R环境下载并安装R环境方式1:下载 .tar.bz2 压缩包进行解压执行(官方推荐)方式2: 创建并激活R环境 下载R库包安装CRAN包在 micromamba 中安装 GitHub 包(如 BPST) 参考 …

基于 Apache POI 实现的 Word 操作工具类

基于 Apache POI 实现的 Word 操作工具类 这个工具类是让 AI 写的,已覆盖常用功能。 如不满足场景的可以让 AI 继续加功能。 已包含的功能: 文本相关: 添加文本、 设置字体颜色、 设置字体大小、 设置对齐方式、 设置字符间距、 设置字体加粗…

时间序列预测、分类 | 图神经网络开源代码分享(上)

本期结合《时间序列图神经网络(GNN4TS)综述》,整理了关于图神经网络在时间序列预测、分类等任务上的开源代码和学习资料以供大家学习、研究。 参考论文:《A Survey on Graph Neural Networks for Time Series: Forecasting, Classification, Imputation,…

Vue 添加水印(防篡改: 删除水印元素节点、修改水印元素的样式)

MutationObserver_API: 观察某一个元素的变化// index.vue<template><div class="container"><Watermark text="版权所有" style="background: #28c848"><!-- 可给图片、视频、div...添加水印 --><div class=&quo…

如何处理开发不认可测试发现的问题

解决方案 第一步&#xff1a;收集确凿证据 确保有完整的复现结果准备详细的记录材料&#xff1a; 截屏录屏操作步骤记录 带着这些证据与开发人员进行沟通 第二步&#xff1a;多角度验证 如果与开发人员沟通无果&#xff1a; 竞品分析&#xff1a;查看市场上同类产品如何…

linux生产环境下根据关键字搜索指定日志文件命令

grep -C 100 "error" server.log 用于在 server.log 文件中查找包含 “error” 的行&#xff0c;并同时显示该行前后100行的上下文。这是排查日志问题的常用技巧&#xff0c;解释一下&#xff1a; 命令参数详解 grep&#xff1a;文本搜索工具&#xff0c;用于在文件…

用vue和echarts怎么写一个甘特图,并且是分段式瀑布流

vue echarts 甘特图功能 index.vue <template><div ref"echart" id"echart" class"echart"></div> </template><script setup>import { nextTick, onMounted, ref } from "vue";import * as echarts f…

Pandas使用教程:从入门到实战的数据分析利器

一、Pandas基础入门 1.1 什么是Pandas Pandas是Python生态中核心的数据分析库&#xff0c;提供高效的数据结构&#xff08;Series/DataFrame&#xff09;和数据分析工具。其名称源于"Panel Data"&#xff08;面板数据&#xff09;和"Python Data Analysis"…

NuttX Socket 源码学习

概述 NuttX 的 socket 实现是一个精心设计的网络编程接口&#xff0c;提供了标准的 BSD socket API。该实现采用分层架构设计&#xff0c;支持多种网络协议族&#xff08;如 TCP/IP、UDP、Unix域套接字等&#xff09;&#xff0c;具有良好的可扩展性和模块化特性。 整体架构设…

基于YOLO的语义分割实战(以猪的分割为例)

数据集准备 数据集配置文件 其实语义分割和目标检测类似&#xff0c;包括数据集制备、存放格式基本一致像这样放好即可。 然后需要编写一个data.yaml文件&#xff0c;对应的是数据的配置文件。 train: C:\图标\dan\语义分割pig\dataset\train\images #绝对路径即可 val: C:\…

钉钉智能会议室集成指纹密码锁,临时开门密码自动下发

在当今快节奏的工作环境中&#xff0c;会议室的高效管理和使用成为了企业提升工作效率的关键一环。湖南某知名企业近期成功升级了原有使用的钉钉智能会议室系统&#xff0c;并配套使用了启辰智慧联网指纹密码锁&#xff0c;实现了会议室管理的智能化升级&#xff0c;提升了会议…

C++讲解—类(1)

类 在 C 中&#xff0c;类是一个关键概念&#xff0c;凭借其封装和继承的特性&#xff0c;能够助力程序员之间实现高效的分工协作&#xff0c;共同完成复杂的大型项目。我们先从最简单的概念入手&#xff0c;再进行更深层次的了解和应用。 1. 类的定义 类是用户自定义的一种…

什么是Hadoop Yarn

Hadoop YARN&#xff1a;分布式集群资源管理系统详解 1. 什么是YARN&#xff1f; YARN&#xff08;Yet Another Resource Negotiator&#xff09;是 Apache Hadoop 生态系统中的资源管理和作业调度系统&#xff0c;最初在 Hadoop 2.0 中引入&#xff0c;取代了 Hadoop 1.0 的…

项目开发中途遇到困难的解决方案

1. 正视困难&#xff0c;避免逃避 开发遇阻时&#xff0c;退缩会带来双重损失&#xff1a;既成为"失败者逃兵"&#xff0c;又损害职业信心1。 行动建议&#xff1a; 立即向团队透明化问题&#xff08;如进度延迟、技术瓶颈&#xff09;&#xff0c;避免问题滚雪球…

Blender硬表面建模篇收集学习建模过程中的Demo

c 齿轮 创建一个圆柱体&#xff0c;选择侧面的所有&#xff0c;然后进行隔断选择&#xff0c;两次挤出面&#xff0c;一次缩放面&#xff0c;通过圆柱面三次插入面缩放挤出得到齿轮中心&#xff0c;选中齿轮的锯齿中间&#xff0c;然后进行相同周长选择行选择齿与齿中间的面&…

Chromium 136 编译指南 macOS篇:获取源代码(四)

1. 引言 在现代软件开发的宏大版图中&#xff0c;源代码的获取往往标志着从理论探索向实践应用的关键转折。对于Chromium 136这样一个拥有超过2500万行代码、涉及数百个第三方库的超大规模开源项目而言&#xff0c;源代码的获取不仅仅是简单的文件下载&#xff0c;更是一个涉及…