「MPLS」- 数据转发(概述)

体系结构
MPLS 的体系结构由两部分组成:Control Plane(控制平面);Forwarding Plane(转发平面);

控制平面,是无连接的,主要功能是负责产生和维护路由信息以及标签信息,包括:

RIB(Routing Information Base,路由信息表):由 IP 路由协议(IP Routing Protocol)、静态路由、直连路由共同生成,用于选择路由;
LIB(Label Information Base,标签信息表):用于管理标签信息,LIB 中的表项可由标签交换协议(LDP、RSVP 等协议)、静态配置生成;

转发平面,也称为数据平面(Data Plane),是面向连接的,主要功能是负责普通 IP 报文的转发以及带 MPLS 标签报文的转发,包括:

FIB(Forwarding Information Base,转发信息表):从 RIB 提取必要的路由信息生成,负责普通 IP-Packet 的转发;
LFIB(Label Forwarding Information Base,标签转发信息表):简称标签转发表,负责带 MPLS 标签报文的转发;

简而言之,LIB 是借助 RIB 生成的;
控制平面 vs. 转发平面
控制平面:路由信息和标签信息传递过程

转发平面:IP 数据包和 MPLS 标签数据包传递过程

在转发平面中,入站数据:
1)如果不带标签,则出站可能携带标签,也可能不携带标签;
2)如果已带标签,则出站可能携带标签,也可能不携带标签;
转发概述
MPLS-Forwarding 的本质就是将数据归到对应的 FEC,然后按照预先建立好的 LSP 进行转发;
对于单台 LSR,需要建立 LFIB,用标签来标识 FEC,并绑定相应的标签处理和转发等行为;
LSR 的转发动作决定 LSP,而标签转发表确定转发动作,所以建立标签转发表也可以理解为建立 LSP;

如图所示:
1)虽然数据从不同的 LSR 进入,但因为有着相同的目的地,所以这三份数据属于同个转发等价类 FEC1;
2)同时由于 Ingress-LSR 不同,这些数据将分别在 LSP1、LSP2、LSP3 上被转发;
3)因为标签仅具有本地意义,所以每台 LSR 上给同一 FEC 分配的标签,可以相同,也可以不同;[……]

READ MORE

「MPLS」- 控制平面:建立 LSP 路径

建立原则
当网络层协议为 IP 协议时,FEC 所对应的路由必须存在于 LSR 的 RIB 中,否则该 FEC 的标签转发表项不生效;
LSR 用标签标识指定 FEC,所以该 FEC 的数据被发送至 LSR 时,必须携带正确的标签,才能被 LSR 正确的处理;

对某一 FEC,设备上存在进(In)标签和出(Out)标签,分别表示该 FEC 的数据接收时和发送时所携带的标签;
以 R2 转发到 4.4.4.0/24 的数据为例,R1 为 R2 的上游(Upstream)LSR,R3 为 R2 的下游(Downstream)LSR。为确保标签报文能被正确的处理和转发,那么 R1 发给 R2 的报文所携带的标签与 R2 上绑定到 4.4.4.0/24 的相同,即 R1 的出标签等于 R2 的入标签。同理,R2 关于 4.4.4.0/24 这条 FEC 的出标签必须等于 R3 的入标签;
建立方式
建立 LSP 是 MPLS 转发的关键,通过静态和动态两种方式建立(或说 MPLS 的标签分发有静态和动态两种方式);
静态建立
基本概念:
1)静态 LSP 是用户通过手工为各个 FEC 分配标签而建立的;
2)静态 LSP 不使用标签发布协议,不需要交互控制报文,因此消耗资源比较小;
3)通过静态方式建立的 LSP 不能根据网络拓扑变化动态调整,需要管理员干预;
4)鉴于静态 LSP 各节点上不能相互感知到整个 LSP 的情况,因此静态 LSP 是一个本地的概念;
静态建立的应用场景:适用于拓扑结构简单并且稳定的小型网络;
静态建立的标签分配原则:前一节点出标签的值等于下一个节点入标签的值;
动态建立
基本概念:
1)动态 LSP 通过标签发布协议动态建立;
2)标签发布协议是 MPLS 的控制协议(也可称为信令协议),负责 FEC 的分类、标签的分发、LSP 的建立和维护等等操作;
动态建立的常用标签发布协议:
1)LDP(Label Distribution Protocol,标签分发协议),其建立普通 LSP;

是 MPLS 的一种控制协议,负责 FEC 的分类、标签的分配、LSP 的建立和维护等等操作;

LDP 规定标签分发过程中的各种消息以及相关处理过程;

LDP 基于路由表从下游向上游路由器分配标签,建立普通 LSP(其通常是 IGP 计算的最短路径,不考虑带宽等因素,也缺少对隧道保护、流量优化的考虑)

2)RSVP-TE(Resource Reservation Protocol Traffic Engineering),其建立基于约束的 LSP(CR-LSP);

是对 RSVP 的扩展[……]

READ MORE

「MPLS」- 转发平面:标签数据转发

标签转发的相关表项
当处理报文时,LSR 主要根据 FTN、NHLFE、ILM 表;

补充说明:
1)Tunnel ID:为了给使用隧道的上层应用(如 VPN、路由管理)提供统一的接口,系统自动为隧道分配了一个 ID,也称为 Tunnel ID。该 Tunnel ID 的长度为 32-bit,仅本地有效。在 MPLS 转发过程中,通过 Tunnel ID 关联 FIB、ILM、NHLFE 表项;
2)简单说(便于理解):在华为设备中,Ingress-LSR 查询 FIB 表,Transit-LSR 与 Egress-LSR 查询 LFIB 表;
3)FTN、NHLFE、ILM 都是 LFIB 的组成部分;
FTN | FEC-to-NHLFE
当 LSR 收到 IP-Packet 并需要进行 MPLS 转发时,使用该表。
所在设备:FTN 只在 Ingress-LSR 存在;
表项信息:Tunnel ID、FEC 到 NHLFE 的映射信息;
NHLFE | Next Hop Label Forwarding Entry
下一跳标签转发表项(Next Hop Label Forwarding Entry):LSR 对报文(MPLS 或 IP 报文)进行 MPLS 转发时,使用该表;
所在设备:NHLFE 在 Ingress 和 Transit 存在
表项信息:Tunnel ID、Out Interface、下一跳、出标签、标签操作类型等信息;
ILM | Incoming Label Map
入标签映射(ILM,Incoming Label Map):用于指导 MPLS 报文的转发(MPLS 或 IP 转发);
所在设备:Transit;Egress;
表项信息:In Label、In Interface、Tunnel ID、Operation Type;
数据转发的查表过程

虽然我们平时更多的查看路由表(RIB)以确定数据转发路径,但实际设备是使用 FIB 来指导数据转发;
display fib x.x.x.x verbose
LFIB: display mpls ldp
ILM + NHLFE: dispaly mpls lsp in-label <label>
in Ingress LSR

当 IP-Packet 进入 MPLS-Domain 时:
1)Ingress LSR 查看 FIB 表,检查 DST IP Address 对应的 Tunnel ID 值是否为 0x0:

如果 Tunnel ID == 0x0,则进入正常的 IP Forwarding 流程;
如果 Tunnel ID != 0x0,得到 FTN 信息,根据 FIB 表[……]

READ MORE

「VPLS」- Virtual Private LAN Service

认识
VPLS(Virtual Private LAN Service,虚拟专用局域网业务),是在公用网络中提供的一种点到多点的 L2VPN 业务,是一种基于以太网的 L2VPN 技术,它在 MPLS Networking 上提供类似 LAN 的业务,允许用户可以从多个地址位置接入网络、相互访问;
VPLS 技术的标准已经趋向稳定,试商用网络也建立较早。IETF L2VPN 工作组在 2007 年年初就分别提出对基于 LDP、BGP 的 VPLS 技术进行规范的 RFC 4761、RFC 4762 文稿,有关 OAM、互通等更详细的草案也在进行中。
RFC 4761 – Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery and SignalingRFC 4762 – Virtual Private LAN Service (VPLS) Using Label Distribution Protocol (LDP) Signaling
组成

简单说,其将运营商网络抽象为二层网络,两端设备仿佛通过交换机互联;
实现 VPLS,需要以下三个步骤:创建隧道和 PW、创建 VSI、绑定 PW 和 AC 到 VSI;
性质
VPLS 是一种基于以太网的 L2VPN 技术,它在 MPLS Networking 上提供了类似 LAN 的业务,允许用户可以从多个地理位置接入网络、相互访问;
VPLS 是一种多点到多点的 L2VPN 业务,
应用
WIP[……]

READ MORE

「VRF」- 虚拟路由转发 | Virtual Routing and Forwarding

认识
VRF(Virtual Routing and Rorwarding,虚拟路由转发)技术,华为 VRF 又称 VPN Instance(VPN 实例),是种虚拟化技术。简单理解是,将整个设备分割成“多个小设备”,并将接口分配给各个小设备。
VPN 实例:VRF 虚拟路由器使用
将一台物理设备虚拟成多个虚拟设备,并将相应的物理接口分配至虚拟设备中使用,从而实现每个虚拟设备之间及和根物理设备之间完全隔离;
组成
在物理设备上:

创建多个 VRF-Instance(VRF 实例),
然后,将物理接口划入不同的 VRP-Instance 中;

性质
每个 VPN Instance 拥有独立的 接口、路由表、路由协议进程、路由转发表项 等;
应用
常用于 MPLS VPN、Firewall 等一些需要实现隔离的应用场景。VRF 能够实现网络层的隔离;
实现隔离

某企业网络内有生产和管理两张网络,这两张网络独占接入和汇聚层交换机,共享核心交换机;
但是,核心交换机上同时连接了生产网络和管理网络的服务器群,两个网段均为 192.168.100.0/24 网段;
需求:实现生产和管理网络内部的数据通信,同时隔离两张网络之间的通信;
通过 ACL 实现:在核心交换机部署 ACL 策略,禁止生产和管理网络之间的互访流量。缺陷:(1)配置繁琐,拓展性差。(2)无法解决两张网络使用重叠网段的问题,需要在部署时规避重叠网段。
通过增加核心交换机实现:增加核心交换机,从物理上隔离两张网络。缺陷:(1)增加额外的设备成本投入;
Firewall

防火墙虚拟系统,虚拟系统(Virtual System)是在一台物理设备上划分出的多台相互独立的逻辑设备,其中路由虚拟化依靠创建 VPN Instance 来实现;
虚拟系统主要具有以下特点:
1)资源虚拟化:每个虚拟系统都有独享的资源,包括 接口、VLAN、策略、会话 等等;
2)路由虚拟化:每个虚拟系统都拥有各自的路由表,相互独立隔离;
BGP/MPLS IP VPN

BGP/MPLS IP VPN 是种基于 PE 的 L3VPN 技术。它使用 BGP 在服务提供商骨干网上发布 VPN 路由,使用 MPLS 在服务提供商骨干网上转发 VPN 报文;
通过创建 VPN Instance 的方式在 PE 上区别不同 VPN 的路由;[……]

READ MORE

「SOFTWARE-SWITCH」- 搭建,软交换,交换机,软件

认识
针对网络设备厂商的硬件产品,如果想要使用其高级功能(比如我们需要部署 VXLAN with BGP EVPN 网络),通常需要购买许可。针对家庭网络环境,该许可价格昂贵,我们无力负担。所以,我们萌生构建软件交换机的想法。
需求决定我们的方案:PVE +
在家庭实验室或开发环境中,软件交换机(Software Switch)是一种纯软件实现的网络交换解决方案,可以在通用硬件(如 x86 服务器、PC、树莓派)或虚拟机(VM)上运行,而无需专用交换芯片。软件交换机通常用于网络实验、虚拟化、SDN(软件定义网络)和云计算环境。
组成
硬件
软件
OpenSwitch(Community – OPX (OpenSwitch))
虚拟交换机:服务器内的软件仿真交换机,虚拟机通过虚拟网卡连接在虚拟交换机上,虚拟交换机关联服务器的物理网卡,通过该虚拟机交换机,虚拟机实现与外部物理网络的通信。虚拟交换机支持为虚拟机划分 VLAN,将虚拟机的报文打上 VLAN Tag 再发送到外部物理网络。在一些场景下虚拟机交换机还支持作为 VXLAN 的 VTEP,将报文封装进 VXLAN 头部中在 Underlay 进行传输。
哪个品牌的交换机可以安装其他系统
所以,我们萌生购买能够安装 SONiC 系统(或其他系统)的交换机硬件。
不同品牌的交换机在系统开放性方面差异较大,以下是支持安装第三方系统或提供高度可定制环境的交换机品牌及类型,供你参考:
企业级白牌交换机(White-box Switches)
– 品牌示例:Edgecore、Delta、Mellanox(NVIDIA)、Celestica、Quanta Cloud Technology(QCT)
– 特点:
– 硬件开放,支持安装第三方网络操作系统(NOS),如:

– SONiC(微软开源网络系统,支持多种芯片)

– Open Network Linux(ONL)+ 自定义网络栈

– Cumulus Linux(已停止更新,但仍有存量用户)

– Pica8 PICOS(基于 Linux 的 NOS)
– 通常搭载博通(Broadcom)、Mellanox 或英特尔(Barefoot)的交换芯片。

– 适用场景:大型数据中心、云服务商(如 Facebook、Google 等自研网络的厂商)。

支持替代系统的商用交换机
– MikroTik(RouterOS)
– 部分型号允许通过第三方工具刷写 OpenWRT 等系统,但需破解硬件限制。
– Ubiquiti(EdgeSwitch 系列)
– 硬件基于 Linux,社区有尝试移植其他系统的案例,但官方不提供支持。
– HPE/Aruba([……]

READ MORE

「HUAWEI-ENSP」- 实验学习:QoS

实验拓扑
实验需求

在 AR1 上,配置基于接口的流量监管技术;
在 AR1 上,配置流量整形技术;

实验过程
流量监管 | Traffic Policing

[AR1]interface GigabitEthernet 0/0/0
[AR1-GigabitEthernet0/0/0]qos car inbound cir 8
[AR1-GigabitEthernet0/0/0]display this
[V200R003C00]
#
interface GigabitEthernet0/0/0
ip address 10.0.15.1 255.255.255.0
qos car inbound cir 8 cbs 1504 pbs 2504 green pass yellow pass red discard # 双桶双速三色
#
return

测试方法:

通过不同 ping -s 进行测试,较大 ping 会产生丢包;

补充说明:

根据 AR 1220 文档:

CIR PIR 的单位为 kbit/s;CBS PBS 的单位为 byte;
执行命令 qos overhead layer { link | physics },配置在流量监管或流量整形时报文长度的计算方式。缺省,流量监管或流量整形计算报文长度时包括报文的物理层和链路层的补偿信息。

该实验现象比较模糊,如果想看到精准的 QoS 实验现象,需要制造流量进行验证;

流量整形 | Traffic Sharping

[AR1]interface GigabitEthernet 0/0/1
[AR1-GigabitEthernet0/0/1]qos gts cir 8 cbs 1514

测试方法:

通过不同 ping -s 进行测试,理论上,看到较低的丢包概率,但是报文时延增加;

补充说明:

GTS:Generic Traffic Shaping 通用流量整形

流分类 | 流标记 | 配置案例

需求:要求为语音、视频等即时性业务提供最优先的转发服务
实现:在 DS 边界节点,先通过复杂流分类抓取语音、视频等业务流量,映射到对应的优先级;再通过简单流分类,处理剩余流量;
WIP !!! [NETWORK] QoS 流分类实验(QoS 复杂流分类及分类打标实验)
第一步、配置复杂流分类
由于 DS 边界收到的流量一般未被分类,并且可信度较低,所以复杂流分类一般在 DS 边界设备上配置;
配置思路如下:

// 使用 Traffic classifier 工具匹配流量
System-view
traffic[……]

READ MORE

「Linux」- 网络栈

Linux 网络栈
数据包的发送过程(概览)
在进行网络传输时,数据包就会按照协议栈:
1)对上层发来的数据,根据网络协议而封装该层的协议头(即增加固定格式的元数据),但不会修改原始数据;
2)再发送给下一层;
在 Linux Kernel 中的网络栈
应用程序 => 系统调用 => 套接字接口 => 传输层/网络层/接口层 => 网卡驱动程序/物理网卡设备。
网卡是发送和接收网络包的基本设备。在系统启动过程中,网卡通过内核中的网卡驱动程序注册到系统中,在网络收发过程中,内核通过中断跟网卡进行交互。
网络包的接收流程 与 网络包的发送流程
网络包的发送流程
1)应用程序 => Socket API(系统调用,陷入到内核态的套接字层),套接字层会把数据包放到 Socket 发送缓冲区
2)网络协议栈从 Socket 发送缓冲区中取出数据包,分别为其增加 TCP 头和 IP 头,执行路由查找确认下一跳的 IP,并按照 MTU 大小进行分片。
3)分片后的网络包,再送到网络接口层,进行物理地址寻址,以找到下一跳的 MAC 地址,然后添加帧头和帧尾,放到发包队列中。
4)这一切完成后,会有软中断通知驱动程序:发包队列中有新的网络帧需要发送。
5)驱动程序通过 DMA ,从发包队列中读出网络帧,并通过物理网卡把它发送出去
网络包的接收流程
1)网络帧到达网卡后,网卡会通过 DMA 方式,把这个网络包放到收包队列中,然后通过硬中断,告诉中断处理程序已经收到了网络包。
2)网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到 sk_buff 缓冲区中;然后再通过软中断,通知内核收到了新的网络帧
3)内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网络帧

A)在链路层检查报文的合法性,找出上层协议的类型(比如 IPv4 还是 IPv6),再去掉帧头、帧尾,然后交给网络层。

B)网络层取出 IP 头,判断网络包下一步的走向,比如是交给上层处理还是转发。当网络层确认这个包是要发送到本机后,就会取出上层协议的类型(比如 TCP 还是 UDP),去掉 IP 头,再交给传输层处理。

C)传输层取出 TCP 头或者 UDP 头后,根据 < 源 IP、源端口、目的 IP、目的端口 > 四元组作为标识,找出对应的 Socket,并把数据拷贝到 Socket 的接收缓存中。
4)应用程序就可以使用 Socket 接口,读取到新接收到的数据

DMA
1)内核分配一个主内存地址段(DMA缓冲区),网卡设备可以在DMA缓冲区中读写数据
2)当来了一个网络包,网卡将网络包写入DMA缓冲区,写完[……]

READ MORE

「Network」- 交换,概念,术语

冲突域,Collision Domain
在以太网中,当多个节点同时传输数据时,从多个设备发出的帧将会碰撞,在物理介质上相遇,彼此数据都会被破坏,这样的共享介质网段就叫冲突域。冲突域是指连接在同一共享介质上的所有节点的集合。冲突域内所有节点竞争同一带宽,一个节点发出的报文(无论是单播、组播、广播),其余节点都可以收到。
在共享式网络中,可能会出现信号冲突现象。同轴电缆

在半双工状态下,使用 CSMA/CD 方案解决:
1)先听后发,监听检测网络是否空闲;
2)如果没有冲突则,进行发送;
3)如果发送时出现冲突,则立即停止;
4)随机延时重发;
目前的网络设备多是全双工,因此基本不会使用 CSMA/CD 进行检测冲突。
交换机不同的接口发送和接收数据独立,各接口属于不同的冲突域,因此有效地隔离了网络中物理层冲突域,使得通过它互连的主机(或网络)之间不必再担心流量大小对于数据发送冲突的影响。
广播域,Broadcast Domain

广播域(broadcast domain):指广播帧传输的网络范围,广播报文所能到达的整个访问范围称为二层广播域,简称广播域,同一广播域内的主机都能收到广播报文。一般是 Router 来设定边界(因为 Router 不转发广播)。
交换机,Switch
交换机工作在数据链路层,依靠于 MAC 地址进行数据转发。
MAC 地址表
收到数据帧,形成 CAM Table(思科术语),然后根据 CAM Table 进行转发。
交换机依据 MAC 地址转换表(CAM Table,Content Addressable Memory Table)进行数据帧处理。CAM Table 是 MAC 地址 与 出接口 的对应关系(但是这个 MAC 地址来自于帧的 Source MAC 字段,只有这样交换机才能知道哪些 MAC 在哪个接口下)。
MAC 地址表形成过程
在交换机初始状态下,CAM Table 为空。
当 Host-A 访问 Host-B 时:
1)交换机会利用收到帧(SRC MAC),来形成 CAM Table。例如,添加 00:01:02:03:04:AA ⇒ G0/0/0/0 记录;
当 Host-B 响应 Host-A 时:
1)交换机会利用收到帧(SRC MAC),来填充 CAM Table。例如,添加 00:01:02:03:04:BB ⇒ G0/0/0/1 记录;
2)交换机会根据收到帧(DST MAC),来查找 CAM Table,以确定数据包应该从哪个接口发出。例如,查到 00:01:02:03:04:AA ⇒ G0/0/0/0 记录;
如果单播帧的 DST MAC 未出现在 CAM Table 中时,便是未知单播,交换机开始进行泛洪。[……]

READ MORE

「ICMP」- 互联网控制消息协议(Internet Control Message Protocol)

问题描述
ICMP,Internet Control Message Protocol,因特网控制报文协议。
解决方案
ICMP,用来在网络设备之间传递各种差错和控制信息,它对于收集各种网络信息、诊断、排除各种网络故障具有至关重要的作用。
在 IPv4 中,ICMP 允许主机或设备报告差错情况。ICMP 报文作为 IP 报文的数据部分,再封装上 IP 报文首部,组成完整的 IP 报文发送出去。
原理简述
1)主机发送 Message 报文;
2)设备响应 Return Message 报文;
3)主机根据 Return Message 来判断网络问题;
协议特性
ICMP 是 IP 协议的辅助协议;
鉴于 ICMP 并不直接参与 IPv4 通信,所以 ICMP 在 IPv4 中并没有得到广泛用途;
应用场景
常用的 Ping、Tracert 等命令都是基于 ICMP 实现的。
参考文献
Internet Control Message Protocol – Wikipedia[……]

READ MORE

「ICMP」- 概念、术语

为了更有效地转发 IP 数据报文和提高数据报文交互成功的机会,在 Network Layer 使用 ICMP 协议。ICMP 允许主机或设备报告差错情况和提供有关异常情况的报告。
差错信息:ICMP 差错检测(ping)
ICMP的一个典型应用是 Ping:Ping 是网络设备、Windows、Unix、Linux 平台上的一个命令,常用于探测到达目的节点的网络可达性,其实是一个小巧而实用的应用程序,该应用基于 ICMP 协议。
Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数、等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。
ICMP Echo消息常用于诊断源和目的地之间的网络连通性,同时还可以提供其他信息,如报文往返时间等:
1)ICMP Echo Request / ICMP Echo Reply 分别用来查询和响应某些信息,进行差错检测。
2)当网络设备无法访问目标时,会(由网络设备)自动发送 ICMP 目的不可到报文到发送端设备。

控制消息:ICMP 重定向;Type=5, Code=0;
场景:在不同网段间通信,需要通过网关。从路由接口收到的数据包,又要从相同接口重新发出,路由就会响应 ICMP 重定向给主机。
用于路径优选。

错误报告:tracert & traceroute
ICMP 定义各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因。
探知数据包从源到目的经过的路径(路由)
tracert(ICMP Echo Requst)
Tracert 基于报文头中的TTL值来逐跳跟踪报文的转发路径。Tracert是检测网络丢包和时延的有效手段,同时可以帮助管理员发现网络中的路由环路。
1)ICMP echo Requst * 3, TTL = 1,网络设备会相应 TTL Exceeded,此时探测到第一个网络设备地址;
2)ICMP echo Requst * 3, TTL = 2,网络设备会相应 TTL Exceeded,此时探测到第二个网络设备地址;
3)……
5)到遇到 ICMP Echo Reply 时,停止发包,此时已经探测到目的主机地址。
但是,部分设备 tracert 发送 UDP 报文,比如 华为路由器;
traceroute(UDP Packet)
1)UDP with Large Port Number * 3,TTL = 1,此时探测到第一个网络设备地址;
2)UDP with Large Port Number * 3,TTL = 2,此时探测到第一个网络设备地址;[……]

READ MORE

「ICMP」- 报文格式

ICMP 消息封装在 IP 报文中,IP 报文头部 Protocol==1 时表示ICMP协议。
报文格式

ICMP 消息的格式取决于 Type 和 Code 字段:
1)Type 字段为消息类型;
2)Code 字段包含该消息类型的具体参数。
Checksum 字段用于检查消息是否完整。
消息类型
Type=0, Code=0:Echo Reply;
Type=3, Code=0:网络不可达(没有去往某个网络的路由);
Type=3, Code=1:主机不可达(网络中没有找到主机,比如对端 Router 发送的 ARP 无人响应);
Type=3, Code=2:协议不可达;
Type=3, Code=3:端口不可达,Destination unreachable;在我们测试环境中,设备针对 DNS Query 返回该类型报文(其中包含 DNS 报文数据);
Type=5, Code=0:ICMP 重定向;
Type=8, Code=0:Echo Request;[……]

READ MORE

「QoS」- 流量整形 | Traffic Shaping | 控制发包速度

当从高速链路向低速链路传输数据,或发生突发流量时,带宽会在低速链路出口处出现瓶颈,导致数据丢失严重;
描述
该场景下,需要在进入高速链路的设备出口处(Outbound)进行流量整形;
流量整形,是种主动调整流量输出速率的措施,通常是为了使报文速率与下游设备相匹配,使流量适配下游设备可供给的网络资源,避免不必要的报文丢弃和拥塞,
其对输出报文的速率进行控制,使报文以均匀的速率发送出去
在网络边缘,监控网络流量,通常作用在接口出方向;
对于进出的不同流量规定带宽占用比例,让不同的业务有不同的流量边界
缓存超出策略 / 协定 SLA 规定的超额流量
需要内存去缓存超额流量,可能会带来延迟和抖动
较少的丢包,因而较少导致重传
不能重标记
通过在上游设备的接口出方向配置流量整形,将上游不规整的流量进行削峰填谷,输出一条比较平整的流量,从而解决下游设备的瞬时拥塞问题。

原理
相关技术
通常使用 缓冲区 和 令牌桶 来实现流量整型:

缓冲区:当报文的发送速度过快时,首先在缓冲区进行缓存,
令牌桶:在令牌桶的控制下,再均匀地发送这些被缓冲的报文。可使用的令牌桶类型:单速单桶;评估结果只有两种:符合(Green);超标(Red);

基于队列的流量整形
对接口的每个队列进行流量整形,区分优先级;

在出队的时候,针对无需整形的报文,将直接转发;
在出队的时候,针对需要整形的报文,则先进行令牌桶评估:

如果数据包速率符合要求,标记为绿色,并转发;
如果数据包速率超标,则当前正在出队的数据包仍然转发出去,同时,将该数据包所在队列的状态改为不可调度,等令牌桶填充了新的令牌时再调度此队列。队列的状态改为不可调度后,该队列允许报文继续入队,但入队满了的时候会丢弃报文。因此,虽然流量整形使超额的数据能够从接口平滑地输出,但并不表示流量整形永远不会丢包;

针对其使用队列缓存,所以报文的时延会增加;
基于接口的流量整形
限制接口发送的所有报文的总速率,是对整个出接口进行流量整形,不区分优先级;

在出队的时候,对所有队列的数据包总和进行令牌桶评估:
如果数据包总速率符合要求,标记为绿色,并转发;
如果数据包总速率超标(即令牌桶中的令牌不足),标记为红色,接口暂停调度,等令牌足够时再继续调度;
应用
在企业网络中
总部与分支机构通过 ISP 网络使用专线相连。分支机构想要访问 Internet 必须通过总部;

如果所有分支机构同时访问 Internet,可能导致访问 Internet 的 Web 流量产生拥塞,从而被丢弃;
如图所示,为了防止 Web 流量的丢失,可以在企业分支机构的流量进入企业总部之前配置流量整形;
一般用于接口出方向,多用于流量限速,对于丢包[……]

READ MORE

「QoS」- 桶令牌 | Token Bucket

描述
令牌桶:使用令牌桶对流量进行评估,是否满足报文转发的条件。
令牌桶算法(Token Bucket Algorithm)是一种常用的网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)算法,用于控制发送到网络上的数据的数目,并允许突发数据的发送。
原理

存在某个服务,其以特定的速度,来向桶中投放令牌。通过令牌的投放速度,来控制流量的转发速度。
在数据转发前中,需要从桶中获取令牌。仅当获取到令牌,数据才能得以转发。

令牌生成:系统以固定的速率向桶中添加令牌。例如,每秒添加 10 个令牌。
令牌存储:桶有最大容量,当桶满时,新添加的令牌会被丢弃。
请求处理:当请求到达时,需要从桶中获取相应数量的令牌:

如果有足够的令牌,则请求被允许,令牌被消耗
如果令牌不足,则请求被拒绝或排队等待

概念术语
CIR,承诺信息速率,unit: kbps, kbit/s:表示向令牌桶中投放令牌的速率
CBS:承诺突发尺寸,unit: byte:用来定义在部分流量超过 CIR 之前的最大突发流量,即为令牌桶的容量
EBS:峰值突发尺寸,unit: byte:用来定义每次突发所允许的最大的流量尺寸
PIR:峰值信息速率,unit: kbps, kbit/s:表示端口允许的突发流量的最大速率,表示向令牌桶中投放令牌的速率,大于 CIR
PBS:峰值突发尺寸,unit: byte,Peek Burst Size,用来定义每次突发所允许的最大的流量尺寸,即为令牌桶的容量,大于 CBS
单桶单速双色标记法
特新特征
单桶单速双色标记法,不允许突发流量,只有承诺流量
原理简述

为方便用 Tc 和 Te 表示桶中的令牌数量,Tc 和 Te 初始化等于 CBS 和 EBS;
当报文到来后,直接与桶中的令牌数相比较:
1)如果有足够的令牌,就转发(通常用一个令牌关联一个比特的转发权限),
2)如果没有足够的令牌,则丢弃或缓存;
在色盲模式下,对于单速单桶:
1)如果报文长度不超过 C 桶中的令牌数 Tc,则报文被标记为绿色,且 Tc=Tc-B,
2)如果报文长度超过 C 桶中的令牌数 Tc,报文被标记为红色,Tc 值不变;
双桶单速三色标记法
特性特征
双桶单速三色标记法,允许短暂的突发流量
原理简述

当报文到来后,直接与桶中的令牌数相比较:
1)如果有足够的令牌,就转发(通常用一个令牌关联一个比特的转发权限)
2)如果没有足够的令牌则丢弃或缓存;
为方便,用 Tc 和 Te 表示桶中的令牌数量,Tc 和 Te 初始化等于 CBS 和 EBS;
在色盲模式下,对于双桶单速:
1)如果报[……]

READ MORE

「Learning」- 针对特定对象的学习方法

研究对象
被研究的主体
研究结果
解决问题(实现目标)
知识的产生,其源于问题。知识的学习,其源于问题。—— 问题是开始。
我们必须明确学习知识是为了解决什么问题。

Q:为什么必须要首先明确问题?
A:如果未明确实践内容,那么学习到的知识将处于理论状态,无法在实践中检验。此时,这些知识对于我们来说将非常孤立,仅能了解其整理原理,而无法深入细节;

补充说明:“问题”是个通用的描述,亦可解释为“目标”;
研究工具
信息采集
采集相关信息
目的:掌握相关知识;了解整体结构(及发展现状);
制定路线
根据整体结构,来制定学习路线。 学习路线的结构:The Way of Explore
执行路线[……]

READ MORE

「Learnging」- 制定学习路径

第一步、将体系拆解为模块
WIP
第二步、将模块串联成路线
注意,这里讨论的知识结构是 针对某个特定对象 的学习,而并非整个知识体系的建立顺序;
在数字电路中,有两种设计方法:
自顶向下(Top-Down)
解释含义: 自顶向下(top-down)的分析算法通过在最左推导中描述出各个步骤来分析记号串输入。将大型的数字电路设计分割成大小不一的小模块来实现特定的功能,最后通过由顶层模块调用子模块来实现整体功能,这就是 Top-Down 的设计思想;
特性特征: 自顶向下(提问式学习):整体入手,逐层向下,不断深入;
应用场景: 1)发明:当利用现有知识,来创造新事物时。能凭人力创造的东西,针对其研究或发明,都能采用此类方法; 2)当结果已经确定时(或,通过现有知识体系,能够演绎得到结果);
实践过程: 1)掌握框架:了解系统框架(体系结构),以形成整体的认识; 2)问题驱动:针对特定场景提出疑问,以逐步完善系统框架;
以提升英语阅读能力英语为例: 1)就是把文章看成一个整体,以句子为单位来理解,文章提供了上下文信息,陌生单词甚至可以猜出意思来。但是,我们仍然认为英语学习应该采用 Bottom-Top 方法(音标、单词、语法、句型、文章)。该实例,与其说是 Top-Down,不如解释为「在 Bottom-Top 后,对现有知识框架的进一步填充完善」;
在计算中,以学习 Kubernetes 为例: 1)鉴于我们侧重 Kuberntes 运维,而非 Kubernetes 研发。我们通常采用 Top-Down 的学习方法,先形成整体认识,再根据问题逐步探究细节; 2)如果采用 Bottom-UP 的学习方法,那我们先要学习开发 Kubernetes 的背景,然后从首个 Kubernetes 版本开始研究它是如何被创建的;
自底向上(Bottom-Up)
解释含义: 自底向上法,一类软件开发方法,需要通过编写驱动程序来实现。自底向上法是根据系统功能要求,从具体的器件、逻辑部件或者相似系统开始,凭借设计者熟练的技巧和丰富的经验,通过对其进行相互连接、修改和扩大,构成所要求的系统。该方法是从底层(具体部件)开始的,实际中无论是取用已有模块还是自行设计电路,其设计成本和开发周期都优于自顶向下法;但由于设计是从最底层开始的,所以难以保证总体设计的最佳性,例如电路结构不优化、能够共用的器件没有共用;
特性特征: 从低级到高级,由底层具体信息的认知,逐渐到较高层次的整体理解;
应用场景: 1)发现:在毫无知识背景的前提下,探索新事物(构建体系) —— 我们觉得科研便属于该类型; 2)当结果无法确定时(或,结果存在无限的可能);
以学英语为例,就是先学单词,再到句子,最终[……]

READ MORE

「METHODOLOGY」- 探索新事物的方法

人类是如何认识新事物的?
人类认识新事物的方式是通过感官接受信息,然后通过思考和推理来理解和归纳。具体来说,人类可以通过视觉、听觉、触觉、味觉、嗅觉等感官来感知世界,然后通过大脑对这些信息进行分析和处理,最终形成对事物的认知和理解。此外,人类还可以通过学习、实验、观察、交流等方式来进一步增加对新事物的认识;
简单说,从感知开始(整体),到深入理解(局部);
详细说,人类认识新事物的过程可以大致分为以下几个阶段: 1)感知阶段:通过感官接受新事物的刺激,如观察、听觉、嗅觉、味觉、触觉等,从而感知到新事物的存在; 2)认知阶段:通过对感知到的信息进行处理、分析和比较,从而建立对新事物的认知和理解。这个过程涉及到人类的大脑、记忆、思维等多个方面; 3)学习阶段:通过学习、实践和反思等方式,逐步积累对新事物的经验和知识,从而提高对新事物的认知和理解能力; 4)创新阶段:在认知和学习的基础上,通过创新、发明和改进等方式,对新事物进行重新设计、改造和利用,从而创造出更加适应人类需求的新事物;
学习计算机科学(Computer Sciense)

Introducing a Subject ————————————- // 感知阶段

0 Guidelines on Learning 学习指导(结果) ———— // <定义学习目标>

1 Terms and Fundamentals 概念术语(组成) ———— // 认知阶段
2 Interaction of Modules 原理交互(运作)

3 Setting Up Environment 环境创建(实现)————- // 学习阶段
4 Solutions to Scenarios 场景方案(应用)[……]

READ MORE

「dnsdomainname」

[……]

READ MORE

「Operating Systems Administration」- 配置与管理

问题描述
虽然我们的工作以 维护应用服务 为主(例如 DB、Webserver、MQ、Java Web 等等环境),但是操作系统的使用却是基本功。例如,我们必须了解如何在系统中如何配置网络,每个发行版的配置方法都有所出入;我们也必须了解如何配置磁盘,以对数据盘进行扩容;我们还必须了解进程管理的方法,以处理服务的极端情况。这些都是使用操作系统的基本知识,只有掌握这些知识,才能在此之上流畅的进行服务管理。
鉴于此,该部分笔记更加偏向于操作系统的日常维护,比如网络配置、日志管理、存储管理、数据备份(操作系统层面)、进程管理等等。且偏向于操作系统在终端环境(multi-user.target)下的使用与维护(是在操作系统启动之后需要进行的工作)。
该笔记将记录:与操作系统维护相关的内容(比如,网络配置、日志管理、数据备份(操作系统层面)、进程管理等等),以及常用配置场景、相关问题的处理方法。
解决方案
该部分章节包含如下内容(更多的是应用层的配置): 1)系统日志:Log Management 2)数据备份:Backup and Recovery 3)账户管理:Managing user accounts 4)服务管理:Systemd Services Start and Stop
补充说明
不包含硬件内容:并不涉及「硬件属性」相关的知识,也不会涉及「硬件控制」方面的内容。比如,磁盘分区相关的内容属于该部分,但是磁盘组成、性能、品牌、特性等等内容不属于该部分。比如,网卡网络、修改 MAC 地址等内容属于该部分,但是网卡的型号、带宽、无线网卡的频段、特征等等内容并不属于该部分。这就是我们所说的“该部分的内容更偏向于「软件层面」”。
不涉及系统原理:该部分的内容更偏向于「软件层面」,倾向于“操作系统的某些配置(应用层)”,但是不会涉及原理。
不包含服务配置:该部分不包含 HTTP、FTP、NFS、DNS 等等与网络服务相关的内容。它们都属于服务部署与服务管理,因此没有归类到操作系统维护中。
不包含存储技术:该部分不包含 LVM、RAID 等与存储有关的内容。这些内容都是某种问题的解决方案,不属于操作系统维护的必备内容。
当然也会包含一些系统相关的东西,这些东西可能与操作系统维护关系不是特别大。
不包含桌面环境:桌面环境相关的设置归类到 +1998 Linux Desktop Environments 章节中[……]

READ MORE

「Windows」- 桌面环境

桌面环境引入时间
Later, in 1985, Microsoft Windows 1.0 was released as Microsoft’s first attempt at providing a consistent user interface (for applications). The early versions of Windows ran on top of MS-DOS. At first Windows met with little success, but this was also true for most other companies’ efforts as well, for example GEM. After version 3.0, Windows gained market acceptance.
笔记本双显卡怎么只用独显如何关闭禁用集成显卡
笔记本双显卡怎么只用独显如何关闭禁用集成显卡
在设备管理器中,直接禁用即可。
调整鼠标滚轮方向
Reverse the scroll of mouse
注意事项: 1)如果是触摸板(TouchPad)能够在 设置/设备/触控板 中直接配置
第一步、此电脑 / 管理 / 设备管理器 / 鼠标和其他指针设备 / HID-compliant mouse 1)如果由多个 HID-compliant mouse 设备,则 右键 / 属性 / 位置:在 USB 输入设备 上 表示该设备为 USB 鼠标;
第二步、HID-compliant mouse / 右键 / 属性 / 详细信息 / 设备实例路径 1)记住 设备实例路径 属性的值; 2)在我们的电脑中:HID\VID_275D&PID_0BA6\6&1F557284&0&0000
第三步、注册表编辑器 / HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID 1)根据第二步的值,找到 Device Parameters 属性; 2)修改 FlipFlopWheel 参数,为 1 即可;
第四步、重启计算机,并测试鼠标滚轮方向
Windows 10
文件浏览器,以树形结构显示
how to display entire tree in windows 10 file explorer folder pane WHEN THERE IS NO NUMBER KEYPAD
Open File Explorer. Click View from the Main Menu. Click Options > Change folder and[……]

READ MORE

「Package Management」- 包管理系统

问题描述
很多「编程语言」或者「编辑器」都有一个”库“,称之为”扩展库“、”插件库“等等。库里存放了各种牛人开源的工具、插件等等”组件“。(大多数”库“都是以 HTTP 站点的形式存在的)
如果我们要使用这些”组件“,可以通过一个叫做「包管理器」(或者其他的名字)的东西进行下载。「包管理器」在下载之后,还会自动安装到我们所使用的工具中,无需过多的配置就可以使用该组件的功能;
解决方案
在 Linux 中,有 APT、YUM 等等包管理器,类似在编程语言中的 Composer、Cabal、NPM 等等,这些它们都是”包管理器“,或者有些是”依赖管理工具“,本质上来讲实现的功能是类似的,只是侧重点不同;
原理简述
所以说,一个「包管理系统」通常由两部分组成: 1)仓库:包含了所有的插件、工具的一个”源“。通常是一个 HTTP 站点; 2)包管理器:访问库,下载指定的”组件“,安装到系统中;
工具不同,包管理系统在组成上可能还会包含其他部分;
特性特征
WIP
应用场景
WIP
相关链接
Package Cloud: https://packagecloud.io JForg Bintray: https://bintray.com/
参考文献
Wikipedia/Package manager List of software package management systems[……]

READ MORE

「Package Manager」- 概念术语

Synaptic Package Manager
第三方仓库
# the IUS Community Project
https://ius.io/
第三方制品库
# PackageCloud
https://packagecloud.io/
# Bintray
https://bintray.com/[……]

READ MORE

「Linux」- 使用源码编译安装 vs. 使用包管理器安装 vs. 使用二进制包安装

在 Linux 中,软件的安装方法有三种:使用源码编译安装、使用包管理器安装、使用二进制包安装
我们以服务运维为主,将简单讨论 snap、flatpak、appimage 等等用于桌面程序管理的工具
以上各种安装方式的对比
我们没有记录“缺点”,因为某种方式的优点则是其他方式所不具备的特性。并无所谓的缺点,只看是否满足需求。
源码编译安装的优点
定制软件包:我们可以根据自己的需要,使用不同的编译选项,添加自定义模块,有更多选择;
性能优化:根据平台特性,使用不同的编译优化选项,以提高应用性能。但是这些的前提是以精湛的技术作为支撑,熟悉这些优化所带来的改变。
安装最新版本:在各种 Linux 发行版中,应用的版本通常落后于官方版本。通过源码编译我们可以获取最新版本;
问题修复:我们可以最快的速度修复 Bug(关注应用咨询,处理应用漏洞),而无需等待发行版团队发布新的应用包;
使用包管理器安装的优点
安装方便:在安装某个应用时,软件包管理器自动解决依赖关系(安装依赖包),无需我们再去安装其他依赖程序;
便于管理:由发行版自带的应用程序包,除了应用外,还包含服务管理脚本(systemd、init)、日志轮转、符合 FHS 规范;
附带文档:安装应用之后,还会在系统中安装对应的命令手册,方便查阅;
提供源码:发行版同时还提供程序的源码包,以及编译程序时的参数,可以让我们进行审查
稳定可靠:发行版虽然提供的软件版本比较旧,但是通常能够满足需求,是已知问题已修复的稳定版本。
使用二进制包安装的优点
无需编译:官方已经编译,我们无需再手动编译(通常按照文档安装依赖即可)
官方优化:官方已经进行适度的调优和配置(属于通用设置)
数据管理:通常应用相关的数据也在该应用的安装目录中,迁移可以作为整体进行处理
注意事项,该方法特指使用官方提供的二进制压缩包(tar.gz),比如在 MySQL 官方站点下载的已编译的 MySQL 包。但是这不包含 rpm、deb 包,比如 Nginx 官方提供 rpm 包,则我们将其归类到 源码编译安装的优点 中。
我们应该如何选择安装方式
对于在服务运维过程中的软件安装
我们首选「使用包管理器安装」,先查找 Linux 发行版的仓库是否已经包含,(如果没有)然后再去应用服务的官方站点查找是否提供 rpm、deb 应用包
其次,我们会选择「使用二进制包安装」,我们会到官方站点下载 tar.gz 然后在本地解压运行。如果需要服务管理,可以自定义服务文件(systemd、init、supervisor)
最后,无奈之下我们会选择使用「使用源码编译安装」二进制包,然后按照「使用二进制包安装[……]

READ MORE

「如何查找某个文件所属的软件包」

内容:如果获取命令所属的软件包及如何找到命令的完整手册。
此文并无任何技术含量,只是有些时候:

我们不知道去哪里找到一个命令的完整手册。很显然这里不是要介绍 man 命令,man 命令显示的只是命令的速记手册,而且有些并没有非常详细的解释命令。
当出现command no found或库文件不存在的时候,我们不知道这个命令或库属于哪个软件包,不知道该安装什么。

要想找到命令的完整手册,肯定是官方的文档。本文的主要目的:

如何找到命令所属的软件包。
告诉大家如何找到命令的官方文档。

下面分别以 Debian 和 CentOS 为例:
在「Debain及其衍生版」中
使用apt-file命令
以 Debian 为例,比如我要查找ifconfig命令所属的软件包。 这里要用到另外一个软件包apt-file,先安装:

#!/bin/sh

# 安装
apt-get install apt-file

# 更新。视情况而定,跳过也可以。如果有必要更新 apt-file 会提示你
apt-get upadte

# 此命令用于生成软件包中文件缓存列表。
apt-file upate

然后,执行查找。查找 ifconfig 所属的软件包:

#!/bin/sh

apt-file search ifconfig | grep -E ‘/ifconfig$’
# 输出:net-tools: /sbin/ifconfig
# 结论:这个命令属于net-tools软件包。

#
# apt-file update 会生成缓存,缓存的内容是所有软件包中的所有命令的索引,类似如下内容:
# ……
# adwaita-icon-theme: /usr/share/icons/Adwaita/48×48/actions/edit-find-replace.png
# adwaita-icon-theme: /usr/share/icons/Adwaita/48×48/actions/edit-find.png
# adwaita-icon-theme: /usr/share/icons/Adwaita/scalable/actions/edit-find-symbolic.svg
# adwaita-icon-theme: /usr/share/icons/Adwaita/scalable/actions/find-location-symbolic.svg
# aegis: /usr/bin/aefind
# aegis: /usr/share/man/man1/aefind.1.gz
# aeskeyfind: /usr[……]

READ MORE

「Linux」- 运行 AppImage 应用(常见问题处理)

问题描述
第一次见 AppImage 还是很惊奇的(在 Linux 下,很少见这种仅有可执行文件的应用,一般应用都附带一堆配置文件、资源文件)
该笔记将记录:如何运行 AppImage 文件,以及相关问题处理(比如查看 AppImage 文件内容)。
解决方案
方案一、直接运行
1)赋予执行权限:chmod u+x package.AppImage 2)运行应用程序:/path/to/package.AppImage
方案二、通过 AppImageLauncher 管理
该工具(AppImageLauncher)用于管理 .AppImage 应用,具有以下功能: 1)通过“安装”到自定义目录中,集中管理 .AppImage 应用文件; 2)自动创建“Desktop Entry”文件,以便在菜单中直接运行应用; 3)删除应用、更新应用(会为每个应用创建更新按钮,简化应用更新);
详细使用,参考项目主页:TheAssassin/AppImageLauncher: Helper application for Linux distributions serving as a kind of “entry point” for running and integrating AppImages
解压 AppImage 文件(查看内容)
在 linux – FUSE error: Transport endpoint is not connected 中,列举多种查看方法及解压方法。
这里,我们通过 AppImage 命令进行解压:

open dir error: Transport endpoint is not connected

常见错误列表
open dir error: Transport endpoint is not connected(未解决)
问题描述: 当我们运行 AppImage 程序时,产生如下错误:

open dir error: Transport endpoint is not connected

问题原因: # 02/26/2018 我们尝试 AppImageLauncher 方式运行,产生”Segmentation fault“错误。 # 01/29/2021 现在我们能够成功运行 Emacs 应用。而当时的错误可能是 AppImage 文件有问题,导致无法失败,或者系统某些设置存在问题。
参考文献
linux – FUSE error: Transport endpoint is not connected – Stack Overflow linux – How can I extrac[……]

READ MORE

「APT」- Advanced Package Tool

解决方案
APT(Advanced Package Tool)是一个包管理工具,用来解决Linux系统中软件包管理的问题。
原理简述
APT使用软件包存储库来获取软件包,并自动解决依赖关系,使得软件包的安装和更新变得更加简单和可靠。
特性特征
它的主要目的是简化软件包的管理,使用户能够轻松地安装和更新软件包,同时保持操作系统的稳定性和安全性。
应用场景
用于在Debian和其衍生版本的Linux操作系统中安装、升级和卸载软件包。[……]

READ MORE

「APT」- 常见错误汇总

Settings schema ‘…’ is not installed

# dconf-editor
(dconf-editor:54647): GLib-GIO-ERROR **: 10:28:21.500: Settings schema ‘ca.desrt.dconf-editor.Lib’ is not installed
Trace/breakpoint trap (core dumped)

# vinagre
(vinagre:54958): GLib-GIO-ERROR **: 10:29:43.428: Settings schema ‘org.gnome.Vinagre’ is not installed
Trace/breakpoint trap (core dumped)

原因分析: 我们配置 apt-mark hold <pkg-name> 以防止意外升级,而该配置导致该问题。
解决方案: apt-mark unhold <pkg-name>
APT had planned for dpkg to do more than it reported back

# apt install vino

Processing triggers for libc-bin (2.31-0ubuntu9.5) …
W: APT had planned for dpkg to do more than it reported back (7 vs 9).
Affected packages: vino:amd64

原因分析: 我们配置 apt-mark hold <pkg-name> 以防止意外升级,而该配置导致该问题。
解决方案: apt-mark unhold <pkg-name>
This must be accepted explicitly before updates for this repository can be applied
问题描述

# apt-get update

Reading package lists… Done
N: Repository ‘http://mirrors.tencentyun.com/debian buster InRelease’ changed its ‘Version’ value from ‘10.9’ to ‘10.11’
E: Repository ‘http://mirrors.tencentyun.com/debian buster InRelease’ changed its ‘Suite’ valu[……]

READ MORE

「APT」- E: Sub-process /usr/bin/dpkg returned an error code (1)

问题描述
在安装 Sunloginclient 应用时,由于依赖关系无法满足,或者系统以来关系被破坏,或者其他原因,都可能产生类似如下错误:


x11-session-utils xinit xorg
Use ‘apt autoremove’ to remove them.
0 upgraded, 0 newly installed, 0 to remove and 237 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up sunloginclient (10.1.1.38139) …
Error:unknown OS it not impl
Installation failed
dpkg: error processing package sunloginclient (–configure):
installed sunloginclient package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
sunloginclient
E: Sub-process /usr/bin/dpkg returned an error code (1)

问题原因
错误日志通常会提示失败的原因,失败原因也各有不同。
在我们的场景中,使用 postinst 脚本执行失败(该脚本是在安装过程中要执行的一些脚本,由于设置环境,执行作业等等)。
解决方法
1)我们比较大胆,直接修改 /var/lib/dpkg/info/sunloginclient.postinst 脚本,让安装能够通过。 2)然后,执行 apt -f install 修复 2)最后,再卸载该应用(虽然能够运行,但是它依旧是个不正常的安装,因此我们还是会卸载它)
参考文献
dpkg – How to remove/install a package that is not fully installed? – Ask Ubuntu[……]

READ MORE

「APT」- Unable to get the locale encoding

问题描述
在执行apt-get install -y pypy-setuptools命令时,产生如下错误:

The following additional packages will be installed:
pypy-pkg-resources
Suggested packages:
python-setuptools-doc
The following NEW packages will be installed:
pypy-pkg-resources pypy-setuptools
0 upgraded, 2 newly installed, 0 to remove and 1411 not upgraded.
Need to get 461 kB of archives.
After this operation, 1,903 kB of additional disk space will be used.
Get:1 http://mirrors.ustc.edu.cn/kali kali-rolling/main amd64 pypy-pkg-resources all 41.1.0-1 [154 kB]
Get:2 http://mirrors.ustc.edu.cn/kali kali-rolling/main amd64 pypy-setuptools all 41.1.0-1 [307 kB]
Fetched 461 kB in 8s (56.5 kB/s)
Fatal Python error: initfsencoding: Unable to get the locale encoding
File “/usr/lib/python2.7/encodings/__init__.py”, line 123
raise CodecRegistryError,\
^
SyntaxError: invalid syntax

Current thread 0x00007f5bf683b740 (most recent call first):
/bin/sh: line 1: 19958 Aborted /usr/bin/apt-listchanges –apt
E: Sub-process /usr/bin/apt-listchanges –apt || test $? -lt 10 returned an error code (1)
E: Failure running script /usr/bin/apt-listchanges –apt || test $? -lt 10[……]

READ MORE

「APT」- 3.Problem Solving (how-to)

About backports
无人值守升级软件包
Debian/Wiki/UnattendedUpgrades How to Install Security Updates Automatically on Debian and Ubuntu
查看最近安装的软件
apt – Is it possible to get a list of most recently installed packages? – Ask Ubuntu

grep ” install ” /var/log/dpkg.log

锁定版本,防止升级
How to prevent updating of a specific package?

apt-mark hold <package-name> # 锁定
apt-mark unhold <package-name> # 解锁
apt-mark showhold # 查看所有锁定的包

查看可升级的软件包
List available updates but do not install them

apt list –upgradable
apt-get -u upgrade –assume-no
apt-get upgrade –show-upgraded –assume-no

获取某个包的下载地址
Get installed packages url using apt
当从仓库中下载特别慢时,我们可以自己下载 deb 包,然后放入/var/cache/apt/archives/中:

apt-get download –print-uris “<package-name>” # 打印下载链接
axel -n 5 “http://<package-url>” # 加速下载工具
mv “<package-name>” /var/cache/apt/archives/ # 移动到本地的缓存库[……]

READ MORE