TRILL浅析

TRILL浅析1TRILL 概述 TRILL 的全称就是 TransparentI 顾名思义 其本质就是将很多条链路透明地组织在一起 以致于上层 IP 应用感觉这只是一条链路似的 它本质上是一个 2 5 层的技术 使用最短路径 多路径等三层路由技术来讲多条链路组织成为一个大二层网络 并支持 VLAN 自配置 多播等二层功能 它既有以太网的易配置特性 又有第

1 TRILL概述

TRILL的全称就是Transparent Interconnection of Lots of Links,顾名思义,其本质就是将很多条链路透明地组织在一起,以致于上层IP应用感觉这只是一条链路似的。它本质上是一个2.5层的技术,使用最短路径、多路径等三层路由技术来讲多条链路组织成为一个大二层网络,并支持VLAN、自配置、多播等二层功能。

它既有以太网的易配置特性,又有第三层路由的技术优势。

2 TRILL的背景

(1) 为什么以太网使用范围小有6字节地址,而IP在整个Internet中使用却有4个字节?

出于自配置的考虑。以太网设备的MAC地址是不需要配置的,也绝对不会冲突,因为不同以太网厂商购买不同地址块。

(2) 为什么需要TRILL,为什么不能仅用第二层或者第三层的技术来解决?

二层无法扩展到很大,因为基于CSMA/CD的以太网支持的网络半径是有限的;如果引入网桥,那么就要使用STP生成树协议来防止环路;但是STP阻塞将造成了一半的网络带宽浪费和次优路由。

单纯使用三层的核心问题在于主机在移动的过程中,IP地址是必须要改变的,因为IP地址本质上是分给链路而不是节点的。

3 TRILL技术

RBridge:实现了TRILL协议的设备叫做Routing Bridge,简称RBridge.

TRILL头部很简单:

ingress RBridge nickname (16 bits), egress RBridge nickname (16 bits), hop count (6 bits), and a multidestination flag bit (1 bit).

所以查表速度肯定要快于以太网MAC地址(6字节)和IP(4字节并且最长匹配)。


TRILL浅析
对下面几个关键问题的解答,应该是理解TRILL核心技术的关键。


问题一:从源MAC S到目的MAC D,入RBridge如何知道出RBridge就是R2呢?


这个问题本质上是如何学习端节点End Node的位置,这是进行TRILL核心网转发的前提。
虽然目前有多种机制,但是宏观效果是:
只有Ingress/Egress RBridge需要使能传统的MAC地址学习(MAC表中区分从本地端口学到的MAC地址,以及从远端Egress RBridge上学到的MAC地址),而TRILL网络上的核心RBridge无需维护与主机相关的MAC表。
默认机制是自学习加洪泛。即所有RBridge不断学习
(ingress RBridge, source MAC address) 映射关系,如果仍然不知道,则封装multidestination标志被洪泛到所有RBridge。(插一句,如何进行洪泛是通过TRILL底层运行的IS-IS协议来生成的最短路径树进行,并且全网有一个相同的SPF树。)
一个可选机制是ESADI
End-Station Address Distribution Information
 ,即RBridge宣告下联的端节点。
此外还有一种机制是建立一个独立的字典或者目录,存储RBridge nickname与下联端节点的关系。

问题 二:TRILL为什么选择IS-IS作为底层路由协议,而不选择同样是链路状态协议的OSPF?

主要两个原因,1 IS-IS可以直接运行在第二层数据链路层上,进而实现自配置,而OSPF运行在IP层上,需要每个路由器都先配置好IP地址才行;2 IS-IS以TLV为报文的基本格式,方便支持各种可扩展属性。

问题三:RBridge如何获取nickname?

RBridge随机选择nickname,并与链路状态宣告报文一起洪泛通知给其他RBridge。

问题:TRILL是否支持增量部署?

当然可以,完全可以把现有以太网中的bridge替换成为RBridge,让两种设备并存于网络中。那么,RBridge之间由普通网桥bridge连接的网络仍然使用生成树STP,并且被RBridge视为一个单一的链路即可。

问题:TRILL是如何支持不同类型底层链路的?

在TRILL网络中,RBridge之间可能是多种链路层技术,比如以太网、PPP串行链路、IP或者IPSec或者MPLS。那么TRILL是如何支持这些不同类型的底层链路呢?这是因为TRILL网络中传输的报文是三层封装的:

第一层头,也叫做hop-by-hop头,是由具体的底层链路决定。如果是以太网,那就是MAC头;如果是MPLS,就是MPLS头等,这个外层头的源/目的地址是每跳都换的;

第二层头,也就是前面所说的TRILL头。这个头里,源是前述ingress RBridge;目的是egress RBridge;

第三层头,真正进行大二层通信的端节点的二层地址。

问题:VLAN对于TRILL有什么影响吗?

如前述,TRILL网络的数据包有三个头:外头+TRILL头+内头。首先,在内头中的VLAN tag很明显体现的是终端所属的通信广播域;而在外头中的VALN tag则是用于在普通以太网中连接不同的RBridge。在TRILL中使用的是指定RBridge,即DRB的方式。具体说,DRB选择一个VLAN号,比如VALN A,然后通知在相同以太链路上的所有其他RBridge,用于Hello和LSP的通信。此外,

1) DRB也用于决定哪个RBridge来封装和解封装哪个VLAN的数据包。

2) RBridge会在其LSP中宣告它所连接的是哪个VLAN的终端,以便只接收对应VLAN的。

问题:多路径与TRILL是什么关系?

从技术渊源来看,多路径是第三层的技术,而不是第二层的。具体来说,在三层,路由器通过路由协议可以计算出多条等价路由路径,实现负载均衡,如ECMP;在二层,除了多播表项外,MAC表中的单播表项只可能对应于一个出口。

那么,TRILL与多路径的关系就是,TRILL技术的出现,通过隧道封装,将三层IP多路径转发技术应用到以太帧转发上,进而实现将原本的二层MAC转发转换成一个类IP的三层路由转发。

4 TRILL实现

TRILL设备中肯定是有两个表的,一个是MAC表,用于学习源MAC地址,并且查找目的MAC地址所对应的RBridge nickname;另一个是TRILL转发表,在TRILL域转发时用,即从ingreee RBridge如何到达egress RBridge。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204134.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:55
下一篇 2026年3月19日 下午8:55


相关推荐

  • 豆包1.5 Vision Lite 对比 GPT-5-min,谁更适合你?实测AI模型选型利器 | AIBase

    豆包1.5 Vision Lite 对比 GPT-5-min,谁更适合你?实测AI模型选型利器 | AIBase

    2026年3月12日
    2
  • SQL中连接(JOIN)子句介绍

    SQL中连接(JOIN)子句介绍本文主要介绍 SQL StructuredQu 中连接 JOIN 子句的相关知识 同时通过用法示例介绍连接的常见用法 说明 本文的用法示例是面向 MySQL 数据库的 1 概述 SQL 中 JOIN 子句用于把来自两个或多个表的行结合起来 在实际的数据库应用中 经常需要从多个数据表中读取数据 这时就可以使用 SQL 语句中的连接 JOIN 子句 在两个或多个数据表中查询数据 JOIN 的用法按照功能划分 可分为如下三类 INNERJOIN 内连接 或等值连接

    2026年3月19日
    2
  • 解决使用IDE Run运行出错package pack/test is not in GOROOT (/usr/local/go/src/pack/test)

    解决使用IDE Run运行出错package pack/test is not in GOROOT (/usr/local/go/src/pack/test)首先先讲一下包包 package 是多个 Go 源码的集合 是一种高级的代码复用方案 Go 语言为我们提供了很多内置包 如 fmt os io 等 我们还可以根据自己的需要创建自己的包 一个包可以简单理解为一个存放 go 文件的文件夹 该文件夹下面的所有 go 文件都要在代码的第一行添加如下代码 声明该文件归属的包 package 包名注意事项 一个文件夹下面直接包含的文件只能归属一个 package 同样一个 package 的文件不能在多个文件夹下 包名可以不和文件夹的名字一样 包名不能包含 符号 包名

    2026年3月19日
    2
  • 微信浏览器清理缓存的方法

    微信浏览器清理缓存的方法项目场景 提示 这里简述项目相关背景 例如 项目场景 示例 通过蓝牙芯片 HC 05 与手机 APP 通信 每隔 5s 传输一批传感器数据 不是很大 问题描述 提示 这里描述项目中遇到的问题 例如 数据传输过程中数据不时出现丢失的情况 偶尔会丢失一部分数据 APP 中接收数据代码 Overridepubl bytes mmInStream read buffer mHandler obta

    2026年3月17日
    2
  • 在pycharm新建项目时配置anaconda环境

    在pycharm新建项目时配置anaconda环境在 pycharm 新建项目时配置 anaconda 环境的解决办法

    2025年6月26日
    5
  • Swift 启动页动画(CAKeyframeAnimation)

    Swift 启动页动画(CAKeyframeAnimation)

    2021年5月27日
    155

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号