「VPN」- SRv6 Policy 模块交互

SRv6 Policy 路径建立概述
通过控制器

在华为 SRv6 Policy 解决方案架构中,依赖控制器(iMaster NCE-IP)建立 SRv6 Policy 路径:
1)控制器通过 BGP-LS (Link-State) 收集扩展 IGP 协议收集的拓扑信息,用于计算 SRv6 Policy 路径和状态呈现;
2)控制器通过 BGP IPv6 SR Policy 协议向源节点下发 SRv6 Policy 信息(headend、color、endpoint 等);
在华为 SRv6 Policy 解决方案中,还会使用 NETCONF 协议,该协议主要用于下发业务接口、路由策略(添加 Color 属性)等其他配置;
在 SRv6 Policy 的实现上有三种主流方式:
1)NETCONF/YANG:把隧道路径作为配置下发到转发器。本质上是配置下发,性能最差,不推荐。在整体解决方案中使用 NETCONF 下发其他配置,而不是隧道配置;
2)PCEP:PCEP 作为南向协议在 SR-MPLS TE 场景下较为成熟,但是由于各厂家隧道实现模型不统一,无法实现互通,且 PCEP 交互流程较于 BGP 更复杂,更为推荐使用 BGP 扩展协议;
3)BGP:BGP-LS 用于收集拓扑,对于客户自研控制器,无需引入一个新的接口协议;BGP IPv6 SR Policy 下发路径路由信息。华为主要使用了 BGP 的方式部署 SRv6 Policy;
静态配置部署
除了通过 iMaster NCE-IP 下发 SRv6 Policy 之外,也可以通过手工的方式部署 SRv6 Policy;
流量引导(引流)
SRv6 Policy 基于 Color 引流
SRv6 Policy 可以基于路由 Color 属性引流。Color 引流是直接基于路由的扩展团体属性 Color 和目的地址迭代到 SRv6 Policy;

在 PE1 上配置隧道策略,然后当 PE1 接收到 BGP 路由(Net1,Net2)后,根据路由的扩展团体属性(0:15,0:20)和下一跳(PE2)迭代到不同的 SRv6 Policy。转发时,为到特定网段(Net1,Net2)的报文添加一个具体的 SRv6 SID 栈;
路由条目中的 Color 属性可以在路由始发路由器(比如 PE2)的出方向上修改,也可以在路由接受路由器(比如 PE1)的入方向修改;
在数据始发路由器(比如 PE1)的 VPN-instanc 中,也可以直接配置 Color,让所有该 VPN 的流量都指定通过某个 SRv6 Policy 转发;
SRv6 Policy 基于 DSCP 引流
问题:对于去往同一个目的地址的不同业务流量(HTTP,FTP 等),基于 Co[……]

READ MORE

「Jenkins Pipeline」- 如何编写共享库

共享库的目录结构

(root)
+- src # Groovy source files
| +- org
| +- foo
| +- Bar.groovy # for org.foo.Bar class
+- vars
| +- foo.groovy # for global ‘foo’ variable
| +- foo.txt # help for ‘foo’ variable
+- resources # resource files (external libraries only)
| +- org
| +- foo
| +- bar.json # static helper data for org.foo.Bar

src
像标准的 Java 源码目录结构。执行 Pipeline 时,此目录将添加到 CLASSPATH 中。
vars
保存脚本文件,将在 Pipeline 中作为变量公开,文件名将是在 Pipeline 中变量的名称。什么意思呢?如果你有一个名为vars/log.groovy的文件,其中包含def info(message){}方法,那么可以在 Pipeline 中访问此函数,例如log.info “hello world”。可以在此文件中放置任意数量的函数。请阅读下面的更多示例和选项。
每个.groovy 文件的基本名称应该是一个 Groovy(~Java)标识符,通常是驼峰命名。可以存在对应的.txt 文件,它其中可以包含文档,通过系统配置的「标记格式化程序」处理(因此可能是 HTML,Markdown 等,但需要.txt 扩展名)。此文档仅在「全局变量引用」页面上可见,可以从“导入共享库”的“ Pipeline 作业”的“导航侧栏”进行访问。此外这些作业必须“在生成共享库文档之前”成功运行一次。
这些目录中的 Groovy 源文件与 Scripted Pipeline 获得相同的“CPS transformation”。
resources
允许使用 libraryResource 步骤,来从外部库加载关联的非 Groovy 文件。目前,内部库不支持此功能。
其他目录
其他目录为保留目录,用于以后增强扩展。
共享库的开发语言
任何 Groovy 有效的代码都可以。例如不同的数据结构、工具方法:

// src/org/foo/Point.groovy
package org.foo

// point in 3D space
class Point {
float x,y,z
}[……]

READ MORE

「Jenkins Pipeline」- 在 Jenkinsfile 中,使用共享库

在 Jenkins 中,如果共享库被标记为 Load implicitly,这允许 Pipeline 立即使用共享库中的类和全局变量;
方法一 | 使用注解 | Library
要访问其他的共享库,在 Jenkinsfile 中,需要使用@Library注解来指定库名:

@Library(‘my-shared-library’) _

/* Accessing multiple libraries with one statement */
@Library([‘my-shared-library’, ‘otherlib@abc1234’]) _

只要符合 Groovy 语法规范,注解可以写在脚本中的任何地方。当使用类库(src/)时,通常注解会后续import语句:

@Library(‘somelib’)
import com.mycorp.pipeline.somelib.UsefulClass

# 对于仅定义全局变量(vars/)的共享库,或仅需要使用全局变量的 Jenkinsfile 文件,注释模式 @Library(‘my-shared-library’) _ 可能对于保持代码简洁有用;
# 在本质上,符号 _ 是注解,而不是注释一个不必要的 import 语句;

# 不建议 import 全局变量 / 函数,因为这会强制编译器将字段和方法解释为静态(static),即使它们意图需要实例化;
# 在这种情况下,Groovy 编译器可能会产生令人困惑的错误消息;

在编译脚本期间进行库的解析并加载,这在库开始执行之前。这允许 Groovy 编译器理解“在静态类型检查中使用的符号”的含义,并允许它们在脚本中的类型声明中使用。例如:

@Library(‘somelib’)
import com.mycorp.pipeline.somelib.Helper

int useSomeLib(Helper helper) {
helper.prepare()
return helper.count()
}

echo useSomeLib(new Helper(‘some text’))

但是,全局变量(vars)在运行时得到解析。
指定版本
通过 @ 指定特定共享库版本:

/* Using a version specifier, such as branch, tag, etc */
@Library(‘my-shared-library@1.0’) _

注意,当配置全局共项目时,如果为指定 Default Version 参数,则必须通过 @ 定义版本。
方法二 | 动态加载 | library
从 Pipeline: Shared Groovy Librari[……]

READ MORE

「Jenkins Pipeline」- 共享库 | Shared Libraries

描述
构建结果 | https://javadoc.jenkins-ci.org/hudson/model/Result.html
随着 Pipeline 被频繁使用在组织的项目上,很可能出现通用模式。如果多个项目之间可以共享这些模式,那么可以降低代码的重复性;
共享库(Shared Libraries),是为了解决这个问题而发明的。共享库与类库概念类似,只是在 Jenkins 中被称为共享库;
原理
Pipeline: Shared Groovy Libraries
https://plugins.jenkins.io/workflow-cps-global-lib
是 Pipeline Plugin 的一个组件。提供了使用共享库来扩展 Pipeline 脚本的功能;
应用
在 Jenkins Pipeline 中,使用共享库的大致流程:
1)通过 Groovy 语言,来编写共享库,并保存在代码仓库中;
2)然后,在 Jenkins 中,配置使用该共享库,即引入;
3)最后,在 Jenkinsfile 中,使用在共享库中定义的方法;
该部分内容是对官方 Extending with Shared Libraries 文档的整理与学习,参考官方文档,以获取详细内容;
按照官方文档结构,我们的笔记分为以下部分:
1)开发共享库:与代码编程相关的内容,编写共享库的具体方法,共享库运行环境;
2)定义共享库:在 Jenkins 中,定义共享库,以便 Jenkinsfile 来引用;
3)使用共享库:在 Jenkinsfile 中,引用该共享库定义的方法;[……]

READ MORE

「Jenkins Pipeline」- 常用 JSON 操作

问题描述
该笔记将记录:将数据转化为 JSON 字符串并写入文件以及从文件中读取 JSON 字符串并解析为对象的方法
解决方案
有关其他 JSON 相关操作(比如禁止 Unicode 转义),参考 Apache Groovy/JSON 笔记
读取:从文件中读取 JSON 字符串,并直接解析为对象

// Parsing json using pipeline
node{
def dataObject = readJSON file: ‘message2.json’
echo “color: ${dataObject.attachments[0].color}”
}

读取:从文件中读取 JSON 字符串,然后解析为对象
从文件中读取 JSON 字符串,然后解析对象:

// Parsing json using JsonSlurperClassic
import groovy.json.JsonSlurperClassic

node{
// 从文件中读取 JSON 字符串
def jsonString = readFile(file: ‘message2.json’) // ‘{“k”:”1″, “n”:”2″}’

// 解析 JSON 字符串为对象
def dataObject = new JsonSlurperClassic().parseText(jsonString)

// 从对象中获取参数
echo “color: ${dataObject.k}”
}

保存:将对象直接写入文件,无需先转化为 JSON 字符串

// Building json from code and write it to file
writeJSON(file: ‘message1.json’, json: dataObject)

保存:将对象转化 JSON 字符串,然后写入到文件中

import groovy.json.JsonOutput

def jsonString = JsonOutput.toJson(dataObject)
writeFile(file: ‘message2.json’, text: jsonString) // put string into the file:

// json = JsonOutput.prettyPrint(jsonString)

参考文献
Create JSON strings from Groovy variables in Jenkins PipelineParsing and producing JSON[……]

READ MORE

「BGP」- Update Packet

Update 报文用于在 BGP Peer 间的传递路由信息,其用于发布路由、撤销路由;
报文格式

单个 Update 报文:
1)可以通告具有相同路径属性的多条路由,这些路由保存在 NLRI(Network Layer Reachable Information,网络层可达信息)中;
2)同时 Update 还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在 Withdrawn Routes 字段中;
报文格式如图所示,主要字段解释如下:
Withdrawn Routes Length(Unfeasible routes length):标明 Withdrawn Routes 部分的长度,以 Byte 为单位。其值为零时,表示没有撤销的路由;
Withdrawn routes:不可达路由的列表;
Total path attribute length:路径属性字段的长度,以 Byte 为单位。如果为 0,则表示无 Path Attributes 字段;
Path attributes:与 NLRI 相关的所有路径属性列表,每个路径属性由一个 TLV(Type-Length-Value)三元组构成;
NLRI:其为二元组(可达路由前缀、前缀长度)。简而言之,该字段保存的是被通告的网段。
报文示例
更新路由的报文

Frame 28: 109 bytes on wire (872 bits), 109 bytes captured (872 bits) on interface -, id 0
Ethernet II, Src: HuaweiTe_2e:4a:35 (00:e0:fc:2e:4a:35), Dst: HuaweiTe_0b:50:b5 (00:e0:fc:0b:50:b5)
Internet Protocol Version 4, Src: 10.1.12.1, Dst: 10.1.12.2
Transmission Control Protocol, Src Port: 50115, Dst Port: 179, Seq: 65, Ack: 65, Len: 55
Border Gateway Protocol – UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 55
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 27
Path attributes
Path Attribute – ORIGIN: IGP
Path At[……]

READ MORE

「EBGP」- 通过 Loopback 建立,多跳问题

通过 Loopback 建立
在 EBGP 中,依旧能够使用 Loopback 接口来建立 EBGP 关系,但是:
1)两台设备间,需要指定静态路由(否则,由于无 IGP 协议,因此无法访问),以实现回环接口的互通;
2)然后,可选地,两台设备间再多加一条链路,以实现冗余(负载分担,通过静态路由实现);
已知问题
在默认情况下,EBGP Peer 间要求是直接相连的,该要求是为了防止路由环路并确保网络稳定性。其实现方式是将 IP.TTL == 1 来实现直连检测,如果超过一跳,则 TTL ==0 时报文直接被丢弃。
针对 EBGP 连接,存在 TTL==1 要求,导致如果使用 Loopback Interface 建立邻居关系,依旧会出现无法建立邻居关系的问题。

Frame 40: 81 bytes on wire (648 bits), 81 bytes captured (648 bits) on interface -, id 0
Ethernet II, Src: 38:39:cc:06:01:01 (38:39:cc:06:01:01), Dst: 38:39:cc:02:01:00 (38:39:cc:02:01:00)
MultiProtocol Label Switching Header, Label: 16003, Exp: 6, S: 0, TTL: 1
MultiProtocol Label Switching Header, Label: 48121, Exp: 6, S: 1, TTL: 1
Internet Protocol Version 4, Src: 1.1.1.1, Dst: 6.6.6.6
0100 …. = Version: 4
…. 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0xc0 (DSCP: CS6, ECN: Not-ECT)
Total Length: 59
Identification: 0x0c0b (3083)
000. …. = Flags: 0x0
…0 0000 0000 0000 = Fragment Offset: 0
Time to Live: 1
Protocol: TCP (6)
Header Checksum: 0x9ee5 [validation disabled]
[Header checksum status: Unverified]
Source Address: 1.1.1.1
Destination Address: 6.6.6.6[……]

READ MORE

「Jenkins Pipeline」- 共享库的实践经验

场景 | 获取当前共享库版本
Jenkins shared library get version – Stack Overflow
env.”library.LIBNAME.version”
开发共享库的约定 | 代码约定 | Code Conversion
该部分将概述我们在使用Jenkins Pipeline时的编码约定。
Global Vars vs. Class Implementations
我们很少使用全局变量的方式来实现共享库,主要原因是:
1)全局变量,其难以进行层次化的组织和管理;
Declarative vs. Scripted
我们将采用指令式流水线,其是 Jenkins Pipeline 的新特性,也是官方推荐的做法;
Shared Libraries vs. Jenkinsfile
为了保证流水线代码的可读性与可维护性,我们遵循以下原则:
1)在 Shared Libraries 中,实现核心的流水线功能。此举是为了实现代码复用以及核心逻辑的统一调整,保证流水线代码的可维护性;
2)在 Jenkinsfile 中,调用在共享库及全局变量中的实现。此举是为了降低 Jenkinsfile 编写难度,保证 Jenkinsfile 的可读性。在 Jenkinsfile 中,看到的是流水线的“框架”(像伪代码),能够直接体现流水线的过程,但是不会看到内部实现;
此原则适用于“多数项目的自动化流程相似”的场景;
共享库的包组织方法
共享库及流水线使用 Groovy 语言,程序文件以包的方式存在,那应该如何组织这些包呢?
在包分类方面,我们遵循如下原则:
1)配置分类。定义在程序中使用的常量、服务器信息、证书 ID 值等等,将常用且易变常量分离出来;
2)底层实现。该类型的包进行壹些基础的操作,类似于工具类库。比如使用 RSYNC、FTP 发布,使用邮件、即时消息通知等等。可以有多个包,比如 notify、publisher、util 等等;
3)应用逻辑。该类型的包实现业务功能,更贴近于应用层,使用「底层实现」完成某些功能。允许在 Jenkinsfile 中调用;
最后,在 Jenkinsfile 中,通常调用「应用逻辑」包中的实现来完成具体任务;
是否开发公共类库
问题描述:
因为需要为不同的组织开发共享库,他们之间会涉及很多通用方法(比如消息通知、程序发布等等)。那我们是否应该开发独立的「底层实现」,以类库形式存在,然后在所有组织中引入该共享库呢?
解决方法:
我们还是决定不要这么做,而是:(1)仓库代码分为两部分:公共代码与组织代码。(2)然后将公共代码与组织代码同步到特定仓库中;
如果独立出来,只能达到“美观”目的,并没有减轻太多维护成本,多个仓库的[……]

READ MORE

「Jenkins Pipeline」- 定义共享库

本文“定义共享库”不是“如何编写共享库”,而是:如何配置 Jenkins 来加载某个共享库,以便在 Jenkinsfile 中引用。
共享库的组成
共享库由三部分组成:(1)共享库名称;(2)源码取回方式;(3)可选的版本
共享库名称(Name)
共享库名称是共享库的简短标识,每个共享库都具有自己的名字。在 Jenkinsfile 中,将通过该名称引用特定的共享库。
源码取回方式(Retrieval method)
共享库保存在单独的仓库中,在执行之前需要先通过 SCM 取回。指定 SCM 的最佳方法是使用 SCM Plugin,那些插件经过专门更新以支持“用于检出任意命名版本的”新 API(使用 Modern SCM 选项)。目前 GIT 和 SVN 支持该模式。
如果你使用的 SCM Plugin 尚未集成,可以选择 Legacy SCM 选项,并选择所提供的任何内容。在这种情况下,需要在 SCM Plugin 的配置中包含$ {library.yourLibName.version},以便在检出时 SCM Plugin 将扩展此变量以选择所需的版本。例如对于 Subversion 插件,可以将存储库 URL 设置为svnserver/project/${library.yourLibName.version},然后使用trunk或branches/dev或tags/1.0等版本。
可选的版本(Default version)
从仓库中取回共享库时,可以指出特定版本。”可选的版本“可以是能够被 SCM 识别的任何东西(比如 GIT 的分支,标签,提交等等)。你也可以声明脚本是否需要明确要求该库,或在默认情况下是否存在。此外如果在 Jenkins 配置中指定某个版本,可以防止脚本使用其他版本。
全局的共享库
在何处配置:Manage Jenkins » Configure System » Global Pipeline Libraries。
可以在多出定义共享库,取决以使用场景。
该共享库是全局的,在系统中的任何 Pipeline 可以使用该库中实现的功能。
这些库被视为可信的,他们可以运行在 Java、Groovy、Jenkin 内部 API、Jenkins 插件、第三方库中的任何方法。可以使用该特性将不安全的 API 封装在高级的包装器中,以便在任何 Pipeline 中使用。任何可以推送代码到该共享库的成员可以获得访问 Jenkins 的无限权限。需要 Overall/RunScripts 权限来配置这些共享库,通常管理员具有该权限。
文件夹层级的共享库
在何处配置:在特定项目中进行配置。
创建的任何文件夹都可以具有与之关联的共享库。此机制允许将特定库的范围限定为文件夹或子文件夹内的所有 Pipeline。[……]

READ MORE

「Bochs」- 配置及使用(在 Linux 下)

执行执行汇编语言的编译输出
emulation – How can I use Bochs to run Assembly code? – Stack Overflow
比如,我们编写有效的(0xaa55)引导程序,我们需要运行它,以进行调试:
第一步、编译引导程序

nasm -o main.img main.asm

注意,我们省略引导程序内容,请保证你的引导程序是有效的。
第二步、创建 .bochsrc 文件

printf ‘ata0-master: type=disk, path=”main.img”, mode=flat, cylinders=1, heads=1, spt=1
boot: disk
‘ > .bochsrc

第三步、启动 bochs 模拟

bochs -q -f .bochsrc

常用指令及调试方法
Bochs User Manual

Instructions
Description

s
执行下条指令

b 0x7c00
设置断点,然后使用 c 指令来执行到断点

c
执行到断点处

r
查看通用寄存器内容

sreg
查看段寄存器内容

creg
查看控制寄存器内容

info gdt
查看 GDTR 内容

 
 

q
退出

禁用 Debugger 功能
Bochs x86 PC emulator / Thread: [Bochs-developers] How to disable the bochs debuggerBochs x86 PC emulator / Thread: Re: [Bochs-developers] How to disable the bochs debuggerInstallation3.4. Compiling Bochs
系统环境:Debian GNU/Linux 10 (buster)
软件版本:Bochs x86 Emulator 2.6.9
当启动 Bochs 之后,进入调试模式,显示命令提示符。即使使用 -q 选项,也只能跳过启动菜单。
我们希望可以将其当作模拟器来运行,即直接执行程序而不进入调试模式。
解决方法
目前(11/11/2020)没有选项来禁止进入 Debugger 模式。
方法一、重新编译(推荐)
重新编译 Bochs 命令,并不要启用[……]

READ MORE

「OSPF」- 与 BGP 联动(OSPF-BGP Association)

问题描述
当有新设备加入到网络中,或设备重启时,可能会出现在 BGP 收敛期间内网络流量丢失的现象。

R1、R2、R3、R4 运行 OSPF,并建立 IBGP 全互联。其中 R3 是 R2 的备份设备。
当网络环境稳定时,R1 访问 10.1.5.5/32 的流量路径为:R1-R2-R4-R5;
当 R2 故障时,R1 访问 10.1.5.5/32 的流量路径切换到:R1-R3-R4-R5;
当 R2 恢复后,R1 访问 10.1.5.5/32 的流量路径恢复为:R1-R2-R4-R5,但是此时会出现丢包。
原因分析
出现丢包的原因是 IGP 收敛速度比 BGP 快而造成的:
1)当 R2 恢复后,R2 的 OSPF 先收敛。
2)此时 R1 若要访问 10.1.5.5/32,先查 BGP 路由,下一跳为 R4;再查 IGP 路由,会根据 IGP 路由传递给 R2;
3)当 R2 收到该流量后,会查 BGP 路由。由于 BGP 还未完成收敛,发现没有到达 10.1.5.5/32 的路由,则不会转发数据,造成流量丢失。
补充说明:
1)R1 去往 10.1.5.5/32 的下一跳为 R4 的原因是:在实际 BGP 网络中,R1 是不会得知 R4<=>R5 间的网络,需要配置 NextHopLocal 才能使 R1.BGP-Route(10.1.5.5/32) 生效,所以 R1.BGP-Route(10.1.5.5/32).NextHop 为 R4;
解决方案
通过使能 OSPF-BGP-Association(OSPF 与 BGP 联动)特性,能够解决流量丢失问题。
原理简述
核心原理是:通过足够的等待时间,等待 BGP 收敛完成。
使能 OSPF-BGP-Association 特性,设备会在设定的联动时间内保持为 Stub-Router,配置 Stub-Router 是一种特殊的路由选路,配置 Stub-Router 的路径不被优选,原因是:该设备发布的 LSA 中的链路 Metric 为最大值(65535),从而告知其它 OSPF 设备不要使用该路由器来转发数据,以尽量避免数据从此路由器转发。用于保护此路由器链路。当经过 on-startup interval 时间后,才能成为普通路由器。
在 R2 上,当开启该特性后,在完成 BGP 收敛前,R1 不把流量转发到 R2 上,而是继续使用备份设备 R3 转发流量,直到 R2 上的 BGP 路由完成收敛。
应用场景
通常使用在升级等维护操作的场景。
配置案例
配置 Stub-Router 特性:

[Huawei-ospf-1] stub-router [ on-startup [ in[……]

READ MORE

「BGP」- 4-BYTE-ASN(4-BYTE-ASN)

问题描述
目前,网络使用的 AS-Num 范围为 1 至 65535(2 字节),随着网络规模的扩大,可分配的 AS 号已经濒临枯竭;
解决方案
需要将 AS 号范围扩展为 1 至 4294967295(4 字节),且支持 4-BYTE-ASN 的 BGP 设备能够与仅支持 2-BYTE-ASN 的 BGP 设备兼容;
特性特征
注意事项:虽然称为 4-BYTE-ASN,而实际的 ASN 仍旧为 2-BYTE,但其采用 Path-Attr 来传递 4-BYTE-ASN(后面将详细说明);
概念术语
Speaker(发言者)
发送 BGP 消息的路由器称为 BGP Speaker,它接收或产生新的路由信息,并发布给其它 BGP Speaker;
Peer(对等体)
相互交换消息的 BGP Speaker 之间互称 Peer;
New Speaker vs. Old Speaker
支持 4-BYTE-ASN 扩展能力的 BGP Speaker,称为 New Speaker;
不支持 4-BYTE-ASN 扩展能力的 BGP Speaker,称为 Old Speaker;
New Session vs. Old Session
New Speaker 之间建立的 BGP 连接,称为 New Session;
New Speaker 和 Old Speaker 之间或者 Old Speaker 之间建立的 BGP 连接,称为 Old Session;
4-BYTE-ASN 的格式
表示 4-BYTE-ASN 分为两种形式:
1)点分形式:点分形式的 4-BYTE-ASN 格式一般为:x.y;
2)整数形式:其与点分形式的换算关系是:x * 65536 + y;
例如,点分形式的 4-BYTE-ASN 2.3,对应的整数形式的 4-BYTE-ASN 为:2*65536+3=131075;
在系统内部,这两种形式,其都是以无符号的整数形式存储;
协议细节
4-BYTE-ASN 是将 AS 号的编码范围由 2 字节扩大为 4 字节,并通过定义新的能力码和新的可选过渡属性来协商 4-BYTE-ASN 能力和传递 4-BYTE-ASN 信息,使 New Speaker 之间、New Speaker 和 2-BYTE-ASN 的 Old Speaker 之间能够进行通信;
1)为了支持 4-BYTE-ASN,标准协议定义了一种新的 Open 能力码(0x41,代表本端支持 4 字节能力扩展)用于进行 BGP 连接的能力协商;
2)另外,标准协议还定义了 2 种新的可选过渡属性 AS4_Path 和 AS4_Aggregator 用于在 Old Session 上传递 4 字节 AS 信息;
3)如果 N[……]

READ MORE

「BGP」- 路由反射器 | Route Reflector

描述

R1 向 BGP 发布 10.0.1.0/24 路由,
R2 从 R1 学习到该路由,并且将其通告给 R3,
R3 从 R2 学习到的这条 IBGP Route,但鉴于水平分割规则,故而 R3 不能向 R4 及 R5 通告;
Router Reflector(RR,路由反射器)技术能够解决该问题。
引入路由反射器,可以简化 IBGP Full Mesh 需求,也可以减轻网络和 CPU 的负担。
原理

1)将某台路由配置为 Router Reflector(RR)角色后,其他所有路由器都与 RR 建立 IBGP Peer 关系;
2)当 RR 学到路由后,首先使用 BGP 选路策略来选择最佳路由,然后将路由反射出去;
3)从而使得 IBGP Route 在 Intra-AS 传播无需建立 IBGP Full Mesh;
概念术语
路由角色
当引入路由反射器后,存在如下几种角色:
1)RR(Route Reflector):路由反射器;允许把从 IBGP 对等体学到的路由反射到其他 IBGP 对等体的 BGP 设备,类似 OSPF 网络中的 DR。
2)RR Client:路由反射器客户端;与 RR 形成反射邻居关系的 IBGP 设备。在 AS 内部客户机只需要与 RR 直连。
3)Non-Client:非客户机;既非 RR 亦非 Client 的 IBGP 设备。在 AS 内,部非客户机与 RR 之间,以及所有的非客户机之间仍然必须建立全互联关系。
Originator(始发者):在 AS 内部始发路由的设备。
Cluster(集群):路由反射器及其客户机的集合。
当配置路由反射器时:
1)需要将一台 BGP Router 指定为 RR 的同时,还需要指定其关联 Client;
2)至于 Client 本身,无需做任何配置,它并不知晓网络中存在 RR 设备;
路由反射簇(Cluster、Cluster ID)
路由反射簇包括反射器 RR 及其 Client;一个 AS 内允许存在多个路由反射簇。

每一个簇都有唯一的簇标识(Cluster_ID,缺省时为 RR 的 BGP Router ID)。
反射规则
在向 IBGP Peer 发布学习到的路由信息时,RR 会按照一定规则来发布路由。
当路由反射器执行路由反射时,它只将自己使用的、最优的 BGP Route 进行反射;
当路由反射时,不会修改 Next_Hop、AS_Path、Local_Preference、MED 路径属性,否则可能产生路由环路;
注意此处“反射”和“发送”的区别:
1)“发送”指的是传统情况下(相当于 RR 不存在的场景下)的 BGP 路由传递行为,
2)而“[……]

READ MORE

「Bochs」- IA-32 Emulator

介绍(Interduction)
Bochs is a highly portable open source IA-32 (x86) PC emulator written in C++, that runs on most popular platforms.
功能与特性(Functions and Features)
It includes emulation of the Intel x86 CPU, common I/O devices, and a custom BIOS. Bochs can be compiled to emulate many different x86 CPUs, from early 386 to the most recent x86-64 Intel and AMD processors which may even not reached the market yet.
Bochs is capable of running most Operating Systems inside the emulation including Linux, DOS or Microsoft Windows.
实践案例(Practice Cases)
1)使用 Bochs 进行引导程序调试
我们的学习路线
参考官方文档:bochs: The Open Source IA-32 Emulation Project (New Bochs Documentation)
其他内容
Bochs(发音同 “box” 单词)
安装服务
Bochs x86 Emulator 2.6.9 on Debian GNU/Linux 10 (buster)
bochs: The Open Source IA-32 Emulation Project (Download Current Release)
作为新人,我们直接安装全家桶:

apt-get install bochs*

参考文献
bochs: The Open Source IA-32 Emulation Project (Home Page)Bochs – Wikipedia[……]

READ MORE

「BGP」- AS Number Substitution and SoO(MPLS VPN)

AS Number Substitution
问题描述
在 MPLS VPN 中,若 PE 与 CE 间运行 EBGP 交互路由信息,则可能会出现两个 Site 的 AS-Number 相同的情况。

Site-1 与 Site-2 具有相同的 AS Number,当路由从 Site-1 传递到 Site-2 的时候。此时 BGP AS-PATH 防环,导致 CE2 拒收来自 Site-1 的路由条目。
解决方案
最直接的解决方案就是进行 AS Number 替换;
华为交换机提供相关命令:可以在 PE 上执行 peer substitute-as 命令使能 AS Number Substitution 功能,即 PE 用 Local AS Number 替换收到的私网路由中 CE 所在 VPN 站点的 AS-Number ,这样对端 CE 就不会因为 AS-Number 重复而丢弃路由了。
配置命令:

[PE1] bgp 123
[PE1-bgp] ipv4-family vpn-instance vpn1
[PE1-bgp-vpn1] peer 192.168.100.1 substitute-as

SoO, Site of Origin
问题描述
新的解决方案通常会引入新的问题:在 CE 多归属场景,若使能 BGP AS Number Substitution 功能,可能会引起路由环路。

CE1 与 CE3 处于 Site-1 站点;CE2 位于 Site-2 站点;
站点 Site-1 和 Site-2 所在的 AS-Number=65001;
在 PE 与 CE 间,运行的都是 EBGP 协议,以进行路由传递;
为了 Site-1 和 Site 2 间的路由可以正常学习,需要在 PE1 和 PE2 上配置 AS-Number Substitution 功能。
但是,路由传递,CE1⇒PE1⇒CE3,鉴于配置 AS-Number 替换,AS-Number=123,导致 CE3 会接收该路由,可能会导致产生路由环路;
解决方案
需要 SoO(Site of Origin)特性来避免环路。
配置 BGP 邻居的 SoO 特性后:
1)接收到该邻居的 BGP-Route 时,会在 Path-Attr 中携带该 SoO 属性并通告给其他 BGP 邻居;
2)向该邻居通告 BGP-Route 前,会检查路由中的 SoO 属性是否与配置的 SoO 值相同,若相同则不通告,避免引起环路。[……]

READ MORE

「VPN」- SSL VPN

认识
先期出现的 VPN 技术,如 IPsec、L2TP 等,虽然可以支持远程接入这个应用场景,但这些 VPN 技术存在如下缺陷:

远程用户终端上需要安装指定的客户端软件,导致网络部署、维护比较麻烦;
IPsec/L2TP VPN 的配置繁琐;
网络管理人员无法对远程用户访问企业内网资源的权限做精细化控制;

SSL VPN 是以 SSL 协议为安全基础的 VPN 远程接入技术,移动办公人员 (在 ssL VPN 中被称为远程用户) 使用 SSL VPN 可以安全、方便的接入企业内网,访问企业内网资源,提高工作效率。
SSL VPN 是一种基于 HTTPS(SSL/TLS)的 VPN 技术,允许用户通过浏览器或轻量级客户端安全访问内网资源。
组成
我们未深入研究,但是根据我们的理解:SSL VPN 更像是个代理服务(远程用户终端上无需安装额外的客户端软件,直接使用 Web 浏览器就可以安全),而传统 VPN 能够直接接入企业网络;

构建
常见的实现方式包括:
客户端模式:需安装小型客户端(例如,Cisco AnyConnect、……)。
无客户端模式:直接通过 Web 浏览器访问(如端口转发、Web 应用代理)。
性质

细粒度访问控制:支持按需分配资源(如仅开放特定应用)。可以根据远程用户访问内网资源类型的不同,对其访问权限进行高细粒度控制;
身份验证:支持灵活的身份验证机制,支持证书、LDAP、RADIUS、OTP、……
协议:SSL VPN 基于 HTTP 进行用户认证和控制,用户无需配置,使用简单。基于 HTTPS(端口 443),兼容性强,能穿透大多数防火墙。
无需复杂配置:部署简单,用户体验友好(尤其无客户端模式)。用户可通过浏览器快速接入。SSLVPN 采用 B/S 架构设计,远程用户终端上无需安装额外的客户端软件,直接使用 Web 浏览器就可以安全、快捷的访问企业内网资源;

主机检查策略可以检查远程用户终端的操作系统、端口、进程、杀毒软件等是否符合安全要求,并且还具备防跳转、防截屏的能力,消除潜藏在远程用户终端上的安全隐患;
优点
适合临时访问或移动设备。
企业级解决方案(如 Fortinet、Pulse Secure、……)提供高级功能(如终端安全检查)。
缺点
无客户端模式功能有限(通常仅支持 Web 应用)。
依赖 HTTPS,可能受中间人攻击威胁(需正确配置)。
应用
企业员工远程访问内部 Web 系统或文件共享。
外包人员临时接入特定资源。
移动设备(如平板、手机)的安全访问。

SSL VPN 使用方便,只需要使用浏览器即可访问公司内网。但不是所有路由器都支持 SSL VPN,对于不支持 SSL V[……]

READ MORE

「BGP」- 概念,术语

概述协议
BGP 是种实现 AS 间的路由可达,并选择最佳路由的矢量性协议。早期发布的三个版本分别是 BGP-1(RFC1105)、BGP-2(RFC1163)、BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)。
BGP 通常被称为 Path-Vector Routing Protocol(路径矢量路由协议)
BGP Speaker
运行 BGP 的路由器被称为 BGP Speaker(BGP 发言者,或 BGP 路由器)。
BGP Peer: IBGP Peer and EBGP Peer
两个建立 BGP 会话的路由器互为 Peer(对等体),BGP Peer 间交换 BGP 路由表。

BGP 存在两种对等体关系类型:
IBGP Peer
IBGP(Internal BGP):位于相同 AS 的 BGP Router 间的 BGP Peer 邻接关系。
EBGP Peer
EBGP(External BGP):位于不同 AS 的 BGP Router 间的 BGP Peer 关系。
两台路由器间要建立 EBGP Peer 关系,必须满足两个条件:
1)在配置 EBGP 协议时,命令 peer 所指定的对等体IP地址要求路由可达,并且 TCP 连接能够正确建立;
2)两个路由器所属 AS 不同(即 AS Number 不同);
Source IP Address
针对建立 BGP Peer 关系的路由器,并不要求必须直连,但是需要通过配置来声明 Peer 的地址信息;
在 BGP 中,管理员手动互相指定两个 Peer 地址。在 BGP 关系建立过程中,SRC-Address 与 DST-Address 也必须为这两个地址,否则无法建立 Peer 关系。即:本端路由器用于发起 TCP 连接的 SRC-Address 必须与 对端路由器 Peer 所指定的 Address 相同;
在缺省情况下,路由器的 BGP Pakcet 的 Source Address 为 出接口地址。
EBGP (Inter-AS)
在部署 EBGP Peer 关系时,通常使用 直连接口的 IP-Address 作为源地址。鉴于非直连接口在两个 AS 间通常是无法互通的,所以很难使用非直连接口。
也能够使用 Loopback 接口来建立 EBGP 关系:EBGP, with Loopback, Max Hop
IBGP (Intra-AS)
在部署 IBGP Peer 关系时,建议使用 Loopback 地址作为更新源地址。
选用 Loopback 原[……]

READ MORE

「Huawei VRP」- 配置 BGP 协议

配置案例

[Huawei] bgp <AS-NUMBER>
[bgp] router-id x.x.x.x
[bgp] peer <IP-ADDRESS> as-number <AS-NUMBER>
[bgp] peer <IP-ADDRESS> connect-interface <lo0> # 当使用回环接口时,需要指定使用该接口
[bgp] network <router-entity>

<R1>display bgp peer

<R1>display bgp routing-table

启用调试:

<Huawei> terminal monitor
<Huawei> terminal debugging
<Huawei> debugging bgp event
<Huawei> debugging bgp packet
<Huawei> reset bgp all # ** 不要随便执行该命令

常用命令
启动 BGP 进程:启动 BGP,指定本地 AS 编号,并进入 BGP 视图。使用 router-id 命令配置 BGP 的 Router ID,建议将 BGP Router ID 配置为设备 Loopback 接口的地址;

[Huawei] bgp { as-number-plain | as-number-dot }
[Huawei-bgp] router-id ipv4-address

// 如果没有配置 Router ID,则 BGP 会自动选取系统视图下的 Router ID 作为 BGP 协议的 Router ID。系统视图下的 Router ID 选择规则,请参见命令 router-id 中的描述;

配置 BGP 对等体:创建 BGP 对等体,指定对等体地址以及 AS 号;

[Huawei-bgp] peer { ipv4-address | ipv6-address } as-number { as-number-plain | as-number-dot }

配置建立对等体使用的源地址、EBGP 对等体最大跳数

[Huawei-bgp] peer ipv4-address connect-interface interface-type interface-number [ ipv4-source-addres[……]

READ MORE

「BGP」- 路由控制、路由策略

问题描述
BGP 路由控制包括控制路由的发布和接收。通常通过 Route Policy 实现:即通过 路由匹配工具 匹配特定路由,再通过 路由策略工具 对路由的发布和接收进行控制;
解决方案
针对 BGP 路由控制:
路由匹配工具:
1)ACL(Access Control List,访问控制列表);
2)IP Prefix List(地址前缀列表),AS_PATH Filter,Community Filter
路由策略工具:
1)Filter-Policy
2)Route-Policy;
路由匹配方法:
1)BGP 路由控制通常影响的属性包括:AS_PATH;Community;
2)通过对这两个属性的匹配,来选择需要操作的路由条目;
IP AS_PATH Filter
AS_PATH Filter 是个过滤器,将 BGP.AS_PATH 属性作为匹配条件,对路由进行过滤;
在不希望接收某些 AS 的路由时,可以利用 AS_PATH Filter 对携带这些 AS 号的路由进行过滤,从而实现拒绝某些路由;
通过正则表达式匹配
例如:

如果需要匹配 AS_Path=103 102 101 的 AS103,则可以通过 ^103 或 ^103_ 来实现;

^$ 匹配不包含任何 AS Number 的 AS_Path,也就是本 AS 内的路由
.* 匹配所有,任何路由
^10[012349]$ 匹配 100、101、102、103、104、109
^10[^0-6]$ 匹配除 100~106 以外的 AS_Path
^10. 匹配 100~109,以及 10
^12(_34)?_56$ 匹配 12 56 及 12 34 56

Q:下划线(_)具有什么含义?
A:能够用在开始或结尾,类似于 ^ 与 $ 功能;
R:AS_Path Filter Applications in BGP
常用的基础配置命令

// —————————————————————————- // 第一步、创建

[Huawei] ip as-path-filter { number | name } { deny | permit } regular-expression

AS_Path Filter 使用正则表达式来定义匹配规则;

在同个过滤器编号下,可以定义多条过滤规则(permit 或 deny 模式);
在匹配过程中,规则间是“或”的关系,即只要路由信息通过其中一项规[……]

READ MORE

「EMULATION」- 模拟 | Emulator | 模拟器 | EMULATOR

认识
Emulator 旨在完全模拟目标设备的硬件和软件环境,通常通过二进制翻译或虚拟化技术实现,尽可能接近真实设备的运行方式。
性质

硬件级模拟:模拟 CPU、内存、存储等硬件行为。
运行真实系统:如 Android 模拟器运行完整的 Android OS。
性能较低:由于需要模拟硬件,通常比 Simulator 慢。
兼容性高:适合测试真实环境下的应用行为。

应用
Android 模拟器(如 BlueStacks、Android Studio Emulator)
游戏机模拟器(如 Dolphin 模拟 Wii/GameCube)
嵌入式开发(如 QEMU 模拟 ARM 设备)[……]

READ MORE

「BGP」- 协议扩展 | 强化功能

在大型网络中,通常会部署 BGP 协议,相比于 IGP 协议,BGP 拥有更加灵活的路由控制能力。每条 BGP-Route 都可以携带多个路径属性,针对其属性也有特有的路由匹配工具,包括:AS_Path Filter 和 Community Filter。根据实际组网需求,可以实施路由策略,控制路由的接收和发布。
同时,为了提升网络性能,BGP 提供各种高级特性以及多种组网部署方案。
该笔记将记录:与 BGP 路由控制的原理与配置,常用的 BGP 高级特性(ORF、对等体组、安全特性),还会介绍 BGP RR 的组网部署方式。
路由控制(Route Control)
BGP Route Policy:路由策略;Prefix-based BGP ORF:出口路由过滤器;
其他特性
1)对等体组:BGP Peer Group
2)安全特性:Security[……]

READ MORE

「HUAWEI-ENSP」- 实验学习:MPLS LDP

实验拓扑

OSPF 实现网络互通;
配置 Loopback 接口,作为 LSR ID 参数;

实验需求
WIP
实验过程
配置 MPLS 协议:

# 这里仅包含 AR1 配置,并且忽略无关命令步骤(比如 quit 等等)
# 其他设备配置类似

[R1]mpls lsr-id 1.1.1.1
[R1]mpls
[R1]mpls ldp

[R1-GigabitEthernet0/0/0]mpls
[R1-GigabitEthernet0/0/0]mpls ldp

将网络加入到 LSP FEC 中:

# 由于 192.168.1.0/24 不是 32 位掩码的路由,所以要额外配置触发 LSP 建立;
[R1]ip ip-prefix ldp permit 192.168.1.0 24
[R1]ip ip-prefix ldp permit 192.168.2.0 24
[R1-mpls]lsp-trigger ip-prefix ldp

# 同理 AR4 也需要添加相同的配置;

Q:为什么两个网络加入到 ip-prefix?
A:当配置 ip-prefix 信息时,两个网络都要进行配置。否则两端相异,不符合 ip-prefix 信息,将拒收对方分配的标签(实验 display mpls lsp 上看是这样的,无法看到 FEC 的 Out-Label),进而无法形成 LSP 路径(RIB.Tunnel-ID 将保持 0x0),导致最后的节点断开(即标签不存在)。如果仅配置一条 ip-prefix 匹配,那仅能在 R1 或 R4 上配置,此时仅单个方向上的报文将被添加 MPLS LABEL 信息(具体情况取决于配置所在的设备);
查看状态
华为设备目前缺省模式为下游自主方式(DU)+ 有序标签分配控制方式(Ordered)+ 自由标签保持方式(Liberal);

[AR1]display mpls ldp peer —————————————————- # 首先,查看邻居状态,以确定邻居被发现

——————————————————————————
PeerID TransportAddress DiscoverySource
——————————————————————————
2.2.2.2:0 2.2.2.2[……]

READ MORE

「BGP」- 对等体组(Peer Group)

问题描述
在大型 BGP 网络中,对等体的数量会很多,其中很多对等体具有相同的策略,在配置时会重复使用一些命令。
解决方案
对等体组(Peer Group)是一些具有某些相同策略的对等体的集合,利用 Peer Group 可以简化配置。
原理简述
当一个对等体加入 Peer Group 中时,该对等体将获得与所在 Peer Group 相同的配置。当 Peer Group 的配置改变时,组内成员的配置也相应改变。
简单说:
1)本端将多个 Peer 将 Peer Group,然后针对 Peer Group 创建配置,而无需对每个 Peer 都进行相同配置;
2)但是每个对端(即 Peer)还是需要进行配置的(该技术并不能简化 Peer 的配置,只能减少对 Peer 的配置);
特性特征
外在优势:减少配置;
内在优势:减小 BGP 路由计算,并复制发送给组内成员(否则需要为每个 Peer 进行路由计算);
在 Peer Group 中,单个对等体也可以配置自己的发布路由与接收路由的策略。
应用场景
在 RR 中,通常需要配置多个 RR Client,这些 Client 通常具有相同配置,所以此时可在 RR 上使用 Peer Group 特性;
配置命令

// —————————————————————————- // 第一步、创建对等体组

# 在 BGP 视图、BGP-VPN 实例 IPv4 地址族视图、BGP-VPN 实例 IPv6 地址族视图下创建对等体组。
# external:表示创建 EBGP 对等体组。
# internal:表示创建 IBGP 对等体组。
[Huawei-bgp] group group-name [ external | internal ]

// —————————————————————————- // 第二步,可选,为指定的对等体组配置 AS 号

# 对于 IBGP Peer Group,AS-Num 为 IBGP 的本地 AS 号
[Huawei-bgp] peer group-name as-number { as-number-plain | as-number-dot }

// —————————————————————————- // 第三步[……]

READ MORE

「BGP」- Open

Open 报文是 TCP 连接建立之后发送的第一个报文,用于建立 BGP 对等体之间的连接关系;
报文格式

报文格式如图所示,主要字段解释如下:
Version
BGP 的版本号。对于 BGP 4 来说,其值为 4;
My AS(AS Number)
本地 AS 号。通过比较两端的 AS 号可以判断对端是否和本端处于相同 AS;
Hold Time
保持时间。在建立对等体关系时两端要协商 Hold Time,并保持一致。如果在 Hold Time 内未收到对端发来的 Keepalive 报文或 Update 报文,则认为 BGP 连接中断;
BGP Identifier
BGP 标识符,以 IP 地址的形式表示,用来识别 BGP 路由器(Route ID);
Opt Parm Len
Optional parameters 的长度;
Optional parameters
宣告自身对于一些可选功能的支持,比如 认证、多协议支持 等等;
除了 IPv4 单播路由信息,BGP4+还支持多种网络层协议(如 IPv6、组播),在协商时 BGP Peer 之间会通过 Optional parameters 字段协商对网络层协议的支持能力;
报文示例
Open in BGP EVPN with VXLAN

Frame 160: 105 bytes on wire (840 bits), 105 bytes captured (840 bits) on interface -, id 0
Ethernet II, Src: 38:3b:75:01:01:00 (38:3b:75:01:01:00), Dst: HuaweiTechno_a3:61:d7 (00:e0:fc:a3:61:d7)
Internet Protocol Version 4, Src: 1.1.1.1, Dst: 3.3.3.3
Transmission Control Protocol, Src Port: 58166, Dst Port: 179, Seq: 1, Ack: 1, Len: 51
Border Gateway Protocol – OPEN Message
Marker: ffffffffffffffffffffffffffffffff
Length: 51
Type: OPEN Message (1)
Version: 4
My AS: 200
Hold Time: 180
BGP Identifier: 10.0.19.1
Optional Parameters Length: 22
Optional Parameters
Optional[……]

READ MORE

「OSFP」- 协议扩展 | 高级特性

OSPF 是基于链路状态的内部网关路由协议,运行该协议的路由器通过同步 LSDB,采用 SPF 算法计算最优路由。当网络拓扑发生变化时,OSPF 支持多种快速收敛和保护机制,能够降低网络故障导致的流量丢失。为了实现对路由表规模的控制,OSPF 支持路由选路及路由信息的控制,能够减少特定路由器路由表的大小。
该笔记将记录:

OSPF 基本特性,即路由通告原理;
OSPF 高级特性,例如快速收敛机制、路由控制、……;

基本特性
路由通告原理
高级特性
快速收敛 | Fast Convergence
快速收敛是为了提高路由的收敛速度,以提高网络可用时间。其中包括:
1)PRC(Partial Route Calculation,部分路由计算)
2)Intelligent Timer(智能定时器)
3)FRR(Fast ReRoute,快速重路由):通过提前完成备份链路的路由计算,以实现备份链路的快速切换;
4)BFD Association(BFD 联动):通过联动 OSPF 与 BFD 以实现对故障的快速感知;
路由控制 | Route Control
01)Equal-cost Route:设置等价路由
02)Default Route Injection:缺省路由通告
03)LSA Filter:对 Outbound LSA 及 ABR LSA-Type-3 进行过滤
04)OSPF Database Overflow:设置 LSDB 中 External LSA 的最大数量
06)调整 OSPF 接口开销
07)引入外部路由
08)路由聚合
09)Filter-Policy
其他特性
多进程:OSPF Multiple Process
与 BGP 联动:OSPF-BGP Association
静默端口:Silent Interface
认证:Authentication
转发地址:Forwarding Address[……]

READ MORE

「QEMU」- Quick Emulator

解决方案
QEMU(Quick Emulator)是一款开源的虚拟化模拟器,可以模拟多种硬件平台,包括 x86、ARM、PowerPC 等,并能够在不同的主机操作系统上运行。
QEMU 是一个全系统模拟器,可以模拟整个计算机系统,包括处理器、内存、设备和操作系统等;
原理简述
QEMU 支持多种虚拟化技术,包括全虚拟化和硬件辅助虚拟化。全虚拟化是指在虚拟机中运行的操作系统无需进行任何修改,完全可以像在真实硬件上一样运行。硬件辅助虚拟化利用主机处理器的虚拟化扩展,提供更高的性能和更低的虚拟化开销;
特性特征
QEMU 提供了丰富的功能和特性,包括虚拟化支持、快照、热迁移、网络和存储设备模拟、调试功能等;
它还支持多种操作系统,包括 Linux、Windows、FreeBSD 等,并提供了丰富的命令行和图形界面工具,方便用户进行配置和管理;
应用场景
QEMU 在虚拟化领域被广泛应用,可以用于开发和测试操作系统、应用程序和驱动程序,也可以用于构建云计算平台、容器化环境等;
它的灵活性和可扩展性使得它成为一个强大的工具,可以满足各种虚拟化需求;[……]

READ MORE

「DOSBOX」- an x86 emulator with DOS

在汇编语言学习的过程中(《汇编语言第 3 版王爽》),我们需要使用 DOSBox 进行实验。
安装服务
Debian GNU/Linux 10

apt-get install dosbox

相关链接
DOSBox, an x86 emulator with DOSCommands – DOSBoxWiki[……]

READ MORE

「BGP」- 边界网关协议 | Border Gateway Protocol

认识
为方便管理规模不断扩大的网络,网络被分成不同的 AS(Autonomous System,自治系统)。
但是 IGP 不适用于 AS 环境:

安全低:AS 间可能是不同的机构、公司,相互间无法完全信任,使用 IGP 可能存在暴露 AS 内部的网络信息的风险。
收敛慢:整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大。
连接性:使用 IGP 需要 AS 间存在直连链路(或通过 VPN 构造逻辑直连,如 GRE Tunnel 等),以进行邻居建立。

早期,EGP(Exterior Gateway Protocol,外部网关协议)被用于实现在 Inter-AS 动态交换路由信息。但是 EGP 设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。
BGP 是为取代最初的 EGP 而设计的另种外部网关协议。与最初的 EGP 不同,BGP 能够进行路由优选、避免路由环路、更高效率的传递路由、维护大量的路由信息。
1980 年,AS 概念提出:1980 年左右,随着网络规模变大,路由数量不断增加,为了解决该问题提出 AS 概念,Inter-AS 使用 EGP;
1989 年,BGP 首个 RFC 发布(RFC1105,BGP-1):EGP 只发布路由,不控制路由优选、无环路避免机制。
1990 年,发布的 RFC1163 提出路径属性概念,自此 BGP 可以基于路径属性进行路由优选、路径控制。
现在 BGP 是个应用非常广泛的边界网关路由协议,在全球范围内被大量部署。
在 Wikipedia 中,BGP 被认为是 Applicaiton Layer 协议。而在其他文章或讨论中,BGP 被划为 Layer 4 协议。
组成
通过建立 TCP 连接,来相互发送路由条目;
性质
当不同 AS 间需要进行通信时,在 AS 间使用 BGP 路由协议进行路由的传递:
1)BGP 基于 TCP,使用 TCP 作为其传输层协议(端口号为 179),只要能够建立 TCP 连接便可建立 BGP 连接;
2)能够承载大批量的路由信息,能够承载大规模网络;
3)BGP 定义多种路径属性,并且提供丰富的路由策略工具,这使得其在路由操控和路径决策上变得非常灵活,能够灵活的进行路由选路,并能指导对等体按策略发布路由。对 BGP 路由的各种属性的操作都可能影响路由的优选,从而对网络的流量产生影响,所以说 BGP 路由的优选规则十分重要。
4)只传递路由信息,不会暴露 Intra-AS 的拓扑信息;
5)触发式更新(BGP 更新的路由条目通常较多,所以需要快速更新机制),而非周期性更新(需要等待收敛);
6[……]

READ MORE

「VCS」- 云效代码管理 | Codeup | Alibaba Cloud

认识
阿里云Codeup正式升级为阿里云代码管理 Codeup,百万开发者都在用的代码管理平台,不限人数,免费提供代码托管、代码评审、代码扫描、质量检测、持续集成等基础功能,全方位保护企业代码资产。
官网:https://codeup.aliyun.com/
文档:https://help.aliyun.com/zh/yunxiao/
性质
免费版本的容量限制:https://help.aliyun.com/document_detail/173288.html?spm=a2c4g.153770.0.0.1bfa17e4zVlpga
1)0 元/人/年,不限人数
2)代码库数量不限,代码库容量 10GB(单库容量:Git 5GB + Git LFS 5GB)[……]

READ MORE

「BGP」- Link State | LS

认识
BGP-LS(BGP Link State),BGP-LS 支持汇总网络层拓扑、带宽、时延等信息,统一上送控制器用于路径计算。
组成
其为在 BGP 基础扩展新的 NLRI。此 NLRI 携带链路、节点、拓扑前缀等信息,又称为链路状态 NLRI;
性质

BGP-LS 将网络层各种协议汇总,包括:

IGP:汇总各 AS IGP 信息
TWAMP:测量信息,例如接口时延
TE:TE 信息,例如带宽
SR:SR 信息,例如 SR 标签[……]

READ MORE