1. 项目概述:为什么我们需要ReMII?
在嵌入式网络设备开发,尤其是路由器、交换机、工业网关或者一些定制化的中继板卡设计中,我们经常会遇到一个经典问题:如何将两个带有以太网MAC(媒体访问控制器)的芯片或模块直接连接起来,而不使用中间的PHY(物理层)芯片?传统的以太网连接路径是“MAC -> PHY -> 变压器 -> 网线 -> 变压器 -> PHY -> MAC”。PHY负责将MAC输出的数字信号(通过MII、RMII等接口)调制到模拟线路上,并处理复杂的物理层协议,比如曼彻斯特编码、冲突检测等。
但在很多场景下,这种“标准流程”显得冗余且昂贵。比如,在一个设备内部,两块处理板需要通过背板高速通信;或者在一个紧凑型的中继设备中,两块带有MAC的芯片背靠背放置,它们的通信距离可能只有几厘米。如果为每一端都配上一颗PHY芯片,不仅增加了BOM(物料清单)成本和PCB面积,还引入了不必要的信号转换延迟和潜在的兼容性问题。这时候,一个很自然的想法就是:既然两边都是数字信号,能不能让MAC直接“对话”?
然而,直接拿两个标准MAC对接,你会发现它们“面面相觑”,根本无法通信。核心矛盾在于,在标准的MAC-PHY主从架构中,PHY是时钟的提供者(Slave),而MAC是配置的主控者(Master)。两个都想当Master的MAC碰在一起,自然无法协调。为了解决这个矛盾,一种名为“Reversible MII”(可逆MII,简称ReMII)的接口技术应运而生。它本质上是一种智能的接口模式,让一颗MAC芯片能够根据连接对象的不同,在“MAC模式”和“模拟PHY模式”之间动态切换,从而实现MAC到MAC的无缝直连。这就像给一个只会说一种语言的人配了一个智能开关,遇到同乡就说方言,遇到外人就自动切换成普通话。
2. 核心需求解析:MAC直连的挑战与ReMII的解决思路
2.1 标准MII接口的主从矛盾
要理解ReMII的价值,必须先拆解标准MII(Media Independent Interface)的工作机制。MII定义了MAC和PHY之间数据与控制交互的通用标准。
数据通道:主要包括TXD[3:0](发送数据)、TX_EN(发送使能)、TX_CLK(发送时钟)、RXD[3:0](接收数据)、RX_DV(接收数据有效)和RX_CLK(接收时钟)。这里有一个关键点:TX_CLK和RX_CLK都是由PHY提供给MAC的。PHY根据自身的晶振和链路协商结果,产生25MHz(10Mbps)、2.5MHz(100Mbps)或相应的时钟信号,MAC则根据这个时钟来同步发送和接收数据。
控制通道:即MDIO(Management Data Input/Output)接口,它通常是一个两线制(MDC时钟和MDIO双向数据线)的串行总线,用于MAC(作为Master)读写PHY(作为Slave)内部的各种寄存器,配置工作模式(如10/100M自适应、全/半双工)、读取链路状态等。
当两个标准MAC试图直接连接时,问题立刻浮现:
- 时钟冲突:双方都期望对方提供
TX_CLK和RX_CLK,但双方都无法提供。系统缺少了时序基准。 - 控制权冲突:双方都试图作为MDIO总线上的Master去配置一个不存在的Slave(PHY),导致总线竞争和通信失败。
- 数据流方向固定:一方的
TXD理应连接到另一方的RXD,但在硬件连接上是固定的,而逻辑上的主从关系未定义。
注意:有些工程师会尝试用飞线或CPLD强行交叉连接两个MAC的MII接口,并试图用一个外部时钟源同时驱动双方的
TX_CLK/RX_CLK。这种方法在极低速或特定条件下可能侥幸工作,但完全无法处理MDIO配置、链路状态同步等关键功能,可靠性极差,不适用于任何严肃的产品设计。
2.2 ReMII的核心设计思想
ReMII接口的设计目标,就是让一个端口具备“双重人格”。其核心思想可以概括为:通过硬件逻辑和引脚复用,使接口能够根据连接对象自动或手动切换角色。
方向可逆的数据通道:将原本单向的
TXD/RXD等数据线,通过内部的多路复用器(MUX)变成双向IO。当芯片工作在“MAC模式”(连接PHY)时,这些引脚作为标准的输出(TXD)或输入(RXD);当切换到“PHY模式”(连接另一个MAC)时,这些引脚的功能正好对调——原来的TXD引脚变为接收RXD,原来的RXD引脚变为发送TXD。TX_EN和RX_DV信号也做类似的反转处理。独立的时钟方案:摒弃了由链路对端提供时钟的模式。在ReMII模式下,通信所需的时钟(
TX_CLK和RX_CLK)由芯片内部的PLL或直接由系统主时钟分频产生,并固定输出。这样,无论连接的是PHY还是另一个ReMII MAC,时钟源都是本地稳定提供的,解决了时钟同步问题。通常,这个时钟频率需要根据要模拟的网速(如100Mbps对应25MHz)预先设置好。分离的MDIO通道:这是非常巧妙的一步。它将标准的双向
MDIO信号线,拆分成两个独立的单向信号:MDO(Management Data Output)和MDI(Management Data Input)。同时,MDC时钟信号也被赋予方向控制。- 在“MAC模式”下,
MDO和MDC作为输出,MDI作为输入,此时芯片作为Master去管理外部PHY。 - 在“PHY模式”下,
MDO和MDC作为输入,MDI作为输出。此时芯片模拟了一个PHY的行为,等待并响应外部MAC(Master)通过MDC和MDO发来的配置指令,并通过MDI返回数据。
- 在“MAC模式”下,
通过以上三点改造,一个支持ReMII的端口就具备了与两种不同对象通信的能力。当两个这样的端口直接对接时,只需将一方设置为“MAC模式”,另一方设置为“PHY模式”,并将数据线交叉连接(A的TXD接B的RXD),同时将MDO/MDI/MDC按模式正确连接,它们就能像标准的MAC-PHY组合一样协同工作。
3. 硬件实现方案与关键电路设计
理解了原理,我们来看如何具体实现。虽然AMD等公司拥有相关专利,但其核心思想是公开的,我们可以使用FPGA/CPLD或者带有灵活IO的MCU来模拟实现ReMII功能,这对于定制化硬件开发尤其有用。
3.1 基于FPGA/CPLD的ReMII接口实现
使用FPGA或CPLD来实现ReMII接口是最灵活的方式,特别适合作为两个现成MAC芯片(如两颗处理器内置的MAC)之间的“翻译桥接器”。
整体架构框图(文字描述): 假设我们设计一个ReMII转换模块,它有两个对外接口:Port_A和Port_B,以及一个模式选择信号mode_sel。内部核心是一个方向切换控制逻辑和一系列多路复用器(MUX)。
- 当
mode_sel=0时,Port_A作为MAC端,Port_B作为PHY端。 - 当
mode_sel=1时,Port_A作为PHY端,Port_B作为MAC端。
关键电路模块设计:
数据总线MUX:
// 以Port_A的TXD/RXD为例,伪代码逻辑 if (mode_sel == 1‘b0) begin // Port_A是MAC Port_A_TXD_OUT = internal_mac_txd; // 输出内部MAC产生的数据 Port_A_RXD_IN = internal_mac_rxd; // 输入给内部MAC的数据来自Port_B Port_B_RXD_IN = internal_phy_rxd; // Port_B作为PHY,其RXD输入来自Port_A的TXD Port_B_TXD_OUT = internal_phy_txd; // Port_B作为PHY,其TXD输出给Port_A的RXD end else begin // Port_A是PHY // 信号流向全部反转 Port_A_TXD_OUT = internal_phy_txd; Port_A_RXD_IN = internal_phy_rxd; Port_B_RXD_IN = internal_mac_rxd; Port_B_TXD_OUT = internal_mac_txd; end实际设计中,
TXD/RXD是4位总线,TX_EN和RX_DV也需要类似的MUX控制。所有连接到芯片物理引脚的信号线,都需要通过三态缓冲器或MUX来控制其方向和来源。时钟生成与分配: 需要一个稳定的时钟源,例如FPGA的50MHz晶振。通过内部PLL或时钟分频器,生成ReMII模式所需的25MHz(100Mbps)发送和接收时钟。
// 假设使用PLL pll_25m inst_pll ( .inclk0(sys_clk_50m), // 输入50MHz .c0(tx_clk_25m), // 输出25MHz TX时钟 .c1(rx_clk_25m) // 输出25MHz RX时钟 ); // 时钟分配逻辑 assign Port_A_TX_CLK = (mode_sel==0) ? tx_clk_25m : 1‘bz; // MAC模式输出时钟 assign Port_A_RX_CLK = (mode_sel==0) ? rx_clk_25m : 1’bz; assign Port_B_TX_CLK = (mode_sel==1) ? tx_clk_25m : 1‘bz; assign Port_B_RX_CLK = (mode_sel==1) ? rx_clk_25m : 1’bz; // 当端口作为PHY模式时,其TX_CLK/RX_CLK引脚应配置为输入,接收来自对端MAC的时钟实操心得:时钟的相位和抖动非常关键。务必使用FPGA的全局时钟网络来布线
tx_clk_25m和rx_clk_25m,并约束其输出到引脚的时序。如果时钟质量差,会导致数据采样错误,链路极不稳定。建议用示波器测量输出时钟的波形。MDIO通道分离逻辑: 这是实现软件配置兼容性的核心。我们需要实现一个“MDIO角色切换器”。
- 当端口处于MAC模式时,该模块作为一个标准的MDIO Master控制器。它产生
MDC时钟,将读写命令和数据从MDO引脚发出,并从MDI引脚读取PHY的响应。 - 当端口处于PHY模式时,该模块需要模拟一个PHY的MDIO Slave行为。它监听
MDC和MDO(此时作为输入)上的指令,解析寄存器地址和操作,从一个内部寄存器映射表中读取或写入数据,并通过MDI(此时作为输出)引脚返回响应数据。 这个MDIO Slave的状态机需要严格按照IEEE 802.3标准中关于MDIO帧格式(Preamble, ST, OP, PHYAD, REGAD, TA, Data)的规定来实现,否则无法与对端的标准MAC驱动兼容。
- 当端口处于MAC模式时,该模块作为一个标准的MDIO Master控制器。它产生
3.2 集成ReMII的MAC芯片选型与使用
对于不想自己用FPGA实现的设计,可以选择原生支持ReMII或类似功能(可能被称为“SMI Mode”、“Dual-Role MAC”等)的以太网控制器或集成MAC的处理器。这在一些高集成度的通信处理器和交换机芯片中较为常见。
选型要点:
- 查阅数据手册:仔细阅读芯片的Datasheet和编程指南,寻找关于接口模式(Interface Mode)、引脚复用(Pin Muxing)的章节。关键词可能包括“Reversible MII”、“MII/RMII/RGMII direction control”、“MAC to MAC connection”、“SerDes configuration”等。
- 确认时钟方案:明确芯片在“反向模式”下,时钟是由内部产生还是需要外部输入。大部分集成方案会由芯片内部PLL提供时钟。
- 确认配置方式:了解模式切换是通过硬件引脚(如
MII_MODE)上拉/下拉决定,还是通过软件配置某个特定寄存器来设置。软件配置的方式更为灵活。 - 验证驱动支持:确认芯片厂商提供的驱动或SDK是否支持这种特殊模式。如果驱动不支持,你可能需要手动修改底层驱动代码来正确初始化MDIO和控制寄存器。
使用流程示例(以某款假设的处理器为例):
- 硬件连接:将两个芯片的MII接口对应引脚交叉连接(TXD<->RXD, TX_EN<->RX_DV等)。将双方的
TX_CLK和RX_CLK引脚都连接到提供时钟的一方的输出上(或均连接至外部时钟源)。 - 硬件配置:将作为“PHY端”的芯片的某个模式引脚拉低,将其设置为反向模式。
- 软件初始化:
- MAC端芯片:像驱动一个普通PHY一样初始化其以太网控制器。驱动程序会通过MDIO去扫描并配置PHY。此时,它实际上是在配置对端芯片的“模拟PHY”逻辑。
- PHY端芯片:需要先初始化其“模拟PHY”模式,确保其内部寄存器映射正确,并能响应MDIO请求。然后,其以太网MAC核心可能被禁用或配置为直通模式,仅让数据流经ReMII接口。
4. 软件驱动与协议栈适配考量
硬件连通只是第一步,让操作系统和网络协议栈识别并正确使用这个“直连通道”更为关键。
4.1 Linux网络驱动下的处理
在Linux系统中,以太网接口通常由网络设备驱动(net_device)管理。对于ReMII连接,我们需要考虑两种情况:
情况一:一端是标准MAC驱动,另一端是模拟PHY。这是最常见的情况。例如,处理器A(运行Linux)的MAC通过ReMII连接处理器B(作为设备)。
- 处理器A侧:驱动完全无需修改。它像往常一样探测PHY(通过MDIO),它会“发现”对端的模拟PHY,并对其进行配置(速度、双工模式)。只要模拟PHY的寄存器行为符合标准,驱动就会认为链路已启动,并正常启用网络接口
eth0。 - 处理器B侧:它可能不需要完整的TCP/IP协议栈。它的任务就是实现好MDIO Slave和数据的直通转发。它可能运行一个简单的固件,或者本身就是一个FPGA逻辑。
情况二:两端都是运行Linux的处理器,需要点对点IP通信。这就需要在两端都创建一个网络接口。每台机器都需要一个驱动,这个驱动要能配置本地的MAC工作于ReMII模式,并“虚拟”出一个PHY设备。
- 创建虚拟PHY驱动:实现一个
phy_driver,它不对应真实的PHY芯片,而是对接本地MAC的ReMII控制逻辑。当上层MAC驱动调用phy_read()/phy_write()时,虚拟PHY驱动将这些操作转换为对本地ReMII模式配置寄存器的读写。 - 修改MAC驱动:在MAC驱动的探测函数中,不再去扫描真实的MDIO总线,而是直接关联我们创建的虚拟PHY。或者,更干净的做法是,让虚拟PHY驱动在MDIO总线上“注册”自己,让标准MAC驱动像发现真PHY一样发现它。
- 链路状态模拟:虚拟PHY驱动需要始终报告链路状态为“UP”(因为这是背板直连,理应一直连通),并固定报告协商的速度和双工模式(如100Mbps Full-Duplex)。
// 一个极其简化的虚拟PHY驱动示例框架 static int virtual_phy_read(struct mii_bus *bus, int phy_id, int regnum) { struct virtual_phy_priv *priv = bus->priv; // 根据 regnum,返回本地ReMII配置的状态信息 switch(regnum) { case MII_BMCR: return BMCR_FULLDPLX | BMCR_SPEED100; // 报告100M全双工 case MII_BMSR: return BMSR_LSTATUS | BMSR_100FULL; // 报告链路已启动,支持100M全双工 // ... 处理其他标准PHY寄存器 default: return 0xFFFF; } } static int virtual_phy_probe(struct platform_device *pdev) { // 初始化本地ReMII硬件(设置寄存器,切换模式等) configure_remii_hardware(); // 创建并注册一个mdio_device和phy_device // 这样标准的以太网驱动就能找到这个“PHY”了 }4.2 裸机或RTOS环境下的实现
在没有完整操作系统驱动的嵌入式环境中,实现更为直接,但也需要仔细处理。
- MAC控制器初始化:直接配置MAC控制器的寄存器,将其接口模式设置为ReMII(或反向模式)。关闭自动协商功能(因为直连无需协商),手动设置速度(100Mbps)和双工模式(Full)。
- 模拟PHY侧的任务:如果本端作为PHY,需要实现一个MDIO命令解析任务(可能是一个中断服务程序或主循环中的轮询)。实时解析对端MAC发来的MDIO帧,并更新本地的状态寄存器(如链路状态寄存器始终返回“UP”)。
- 数据包收发:一旦硬件链路在逻辑上建立,数据包的收发流程就和普通以太网一样。发送时,CPU将数据填入MAC的发送缓冲区;接收时,从MAC的接收缓冲区读取数据。底层ReMII硬件会自动完成与对端的帧交换。
注意事项:在裸机程序中,要特别注意缓冲区管理和流量控制。由于是直连,没有物理载波侦听,如果一端发送过快,另一端缓冲区可能溢出导致丢包。建议实现简单的硬件或软件流控机制,或者确保应用层协议能处理丢包重传。
5. 实战调试与常见问题排查
将理论转化为实际可用的链路,调试是必不可少的环节。以下是一些实战中常见的问题和排查技巧。
5.1 硬件连接与信号完整性检查
这是所有问题的基础,务必首先排除。
| 问题现象 | 可能原因 | 排查工具与方法 |
|---|---|---|
| 完全无通信,MDIO无响应 | 1. 电源或地未接好。 2. 模式选择引脚配置错误,芯片未进入ReMII模式。 3. TX_CLK/RX_CLK时钟未输出或频率错误。4. 数据线连接错误(未交叉连接)。 | 1. 万用表检查电源和地。 2. 逻辑分析仪或示波器抓取模式引脚电平。 3. 示波器测量时钟引脚是否有25MHz(100M模式)方波输出,观察波形是否干净。 4. 核对原理图,确认TXD-RXD,TX_EN-RX_DV等已交叉。 |
| 链路时通时断,大量CRC错误 | 1. 时钟信号质量差(抖动大,边沿不陡)。 2. 数据信号有振铃、过冲或反射。 3. PCB布线问题,等长或阻抗控制不好。 4. 电源噪声大。 | 1. 用示波器高带宽模式仔细观察时钟和数据信号的眼图。 2. 检查是否缺少或使用了不合适的端接电阻。MII信号通常在驱动端串联22Ω-33Ω电阻以匹配阻抗、减少反射。 3. 审查PCB layout,确保MII信号线走线尽量短,同组信号(如TXD[3:0])等长,远离高速噪声源。 4. 测量电源纹波。 |
| MDIO可以读写,但无法ping通 | 1. 数据通道的MUX逻辑或方向控制有误。 2. MAC地址未正确设置或冲突。 3. 软件驱动未正确初始化或启动网络接口。 | 1. 用逻辑分析仪同时抓取两端的TXD和RXD信号,对比发送和接收的数据是否一致。检查TX_EN/RX_DV信号是否同步有效。 2. 确认两端的MAC地址已设置为不同的值。 3. 在Linux下使用 ifconfig eth0 up启动接口,用dmesg查看内核日志是否有错误。 |
5.2 软件与配置问题排查
硬件无误后,焦点转向软件。
链路状态始终为DOWN:
- 检查虚拟PHY:在Linux下,使用
ethtool eth0命令查看链路信息。如果显示“Link detected: no”,问题通常在PHY层。检查你的虚拟PHY驱动是否成功注册,以及MII_BMSR寄存器的BMSR_LSTATUS位是否被正确报告为1。 - 检查MDIO通信:使用
mii-tool或ethtool -p eth0(让PHY的LED闪烁)来测试MDIO总线是否通畅。如果不通,检查MDIO Slave逻辑的状态机是否正确解析了PRE(前导码)和ST(开始位)。 - 检查自动协商:在直连模式下,必须关闭自动协商(Auto-Negotiation)。在驱动或硬件初始化中,将MAC和模拟PHY的寄存器设置为固定速度/双工模式。
- 检查虚拟PHY:在Linux下,使用
可以ping通本端IP,但ping不通对端:
- 检查IP地址和子网掩码:确保两台设备位于同一IP子网内。
- 检查ARP表:使用
arp -a命令查看是否学习到了对端的MAC地址。如果ARP表为空,可能是广播帧未能正确收发。尝试手动添加ARP条目:arp -s <对端IP> <对端MAC>。 - 防火墙/网络规则:检查是否有防火墙规则(如iptables)丢弃了ICMP报文。
传输大文件时速度慢或不稳定:
- 缓冲区与流控:如前所述,检查是否因缓冲区满导致丢包。在Linux下,可以使用
ethtool -S eth0查看统计信息,关注rx_missed_errors、tx_errors等计数器。 - 中断负载:在高流量下,网络中断可能占用大量CPU。可以考虑启用NAPI(New API)中断合并机制(如果驱动支持),或调整
/proc/interrupts中网络中断的SMP affinity,将其绑定到特定CPU核心。
- 缓冲区与流控:如前所述,检查是否因缓冲区满导致丢包。在Linux下,可以使用
5.3 一个具体的调试案例:FPGA实现中的时钟域交叉问题
在我早期的一个FPGA ReMII项目中,遇到了一个诡异的问题:小包(如ping)通信正常,但一旦传输超过500字节的数据包,必然出现错位和CRC错误。
排查过程:
- 用逻辑分析仪抓取原始信号,发现错位并非随机,而是有规律的每隔一段时间发生一次偏移。
- 仔细检查代码,发现问题出在时钟域交叉(CDC)上。我的设计是:本地系统时钟
sys_clk为100MHz,生成的tx_clk_25m和rx_clk_25m是25MHz。数据从sys_clk域进入FIFO,再从tx_clk_25m域读出发送。同时,对端送来的数据由rx_clk_25m采样后,写入另一个FIFO,再从sys_clk域读出。 - 问题根源:
sys_clk与tx_clk_25m/rx_clk_25m是异步时钟。我使用的FIFO是简单的双端口寄存器组,没有做真正的异步FIFO处理,导致在时钟沿接近时,亚稳态(Metastability)传播,最终造成数据错位。
解决方案:
- 使用FPGA厂商提供的异步FIFO IP核(如Xilinx的FIFO Generator或Intel的DCFIFO)替换手写的FIFO。
- 在跨时钟域传递单比特控制信号(如FIFO空满标志)时,使用两级或多级寄存器进行同步。
- 重新编译下载后,长时间大流量测试(iperf)稳定通过,问题彻底解决。
这个案例深刻提醒我们,在涉及多个时钟的FPGA设计中,CDC处理是重中之重,任何疏忽都可能导致间歇性、难以复现的故障。
6. 应用场景与方案选型建议
ReMII技术虽然小众,但在特定场景下能带来显著优势。以下是几个典型的应用场景和方案选型建议。
6.1 典型应用场景
- 设备背板互连:在机架式网络设备(如多业务路由器、接入服务器)中,主控板和线卡之间通常需要高速内部通信。使用ReMII通过背板连接,比每块板卡都通过PHY接出网口再通过外部交换机连接,成本更低、延迟更小、可靠性更高。
- 紧凑型中继/转换设备:例如,将光纤模块的SerDes接口转换为电口的媒体转换器。如果主控芯片自带MAC和SerDes,另一侧只需一个以太网电口PHY。但若需要两个电口进行中继,使用两颗带ReMII的MAC芯片背靠背连接,可以省去两颗PHY芯片。
- 多核/多芯片处理器间通信:在一些高性能嵌入式系统中,多个处理器(如DSP+ARM)需要共享数据。通过ReMII建立一个私有的、基于以太网协议的高速数据通道,可以利用成熟的TCP/IP协议栈进行流量管理和可靠传输,比传统的SPI、PCIe等总线在软件架构上更灵活。
- 原型验证与测试:在开发阶段,可以用FPGA实现ReMII桥接功能,快速将两个待测的以太网子系统连接起来进行联调,而无需等待带有PHY的完整硬件。
6.2 方案选型对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 选用原生支持ReMII的商用芯片 | 集成度高,性能稳定,有官方驱动和文档支持。 | 芯片可选范围小,可能成本较高,且受限于厂商的具体实现。 | 产品量产,追求高可靠性和快速上市。 |
| 使用FPGA/CPLD自行实现 | 灵活性极高,可适配任何MAC接口,可作为通用桥接模块。 | 开发难度大,需要深厚的数字逻辑和时序设计功底,增加了BOM成本和功耗。 | 原型验证、特殊接口转换、对灵活性要求极高的定制硬件。 |
| 采用带SGMII/SerDes的芯片并通过配置实现 | 一些高速接口(如SGMII)本身是串行差分信号,更容易实现方向控制。性能更高(可达1Gbps+)。 | 电路设计更复杂(需考虑SerDes时钟、均衡),协议更复杂。 | 需要千兆或更高速率内部互连的场景。 |
个人建议:对于大多数百兆互连需求,如果系统中有现成的FPGA/CPLD资源(哪怕是小规模的),自行实现ReMII是一个性价比很高的选择,它能极大地简化硬件设计和供应链管理。对于千兆及以上速率,强烈建议直接选用支持SGMII等高速串行接口且具备方向控制功能的芯片,自行实现数字部分的难度和风险会急剧增加。
最后,无论选择哪种方案,充分的仿真(对于FPGA)和信号完整性测试(对于PCB)都是保证项目成功的关键。ReMII连接省去了PHY,但也意味着数字信号完整性的责任完全落在了设计者身上。一份清晰的时序约束文件、一次细致的PCB布线评审、一轮完整的眼图测试,这些投入对于打造一条稳定可靠的“MAC直连高速通道”来说,绝对是值得的。