范桂飓
AWS Global Community Hero,EdgeGallery 开源社区架构组副主席及秘书处成员,跑步与自行车运动爱好者。
- 2016 年度十大博客之星得主
- 2021 年度十大博客之星得主
- 2022 年度博客新星评委
- 2023 年度博客之星评委
- 2024 年度博客之星评委
展开
-
C/C++ 语言与网络编程系列
目录文章目录目录文章列表高级数据结构文章列表《C 家族程序设计语言发展史》《C 语言编程 — 基本语法》《C 语言编程 — 基本数据类型》《C 语言编程 — 变量与常量》《C 语言编程 — const 关键字》《C 语言编程 — 作用域和存储器》《C 语言编程 — 运算符》《C 语言编程 — 逻辑控制语句》《C 语言编程 — 函数》《C 语言编程 — 高级数据类型 — 指针》《C 语言编程 — 高级数据类型 — 数组》《C 语言编程 — 高级数据类型 — 字符串》《C 语言编程原创 2020-07-08 00:05:09 · 3392 阅读 · 4 评论 -
从 C 到 C++ 编程 — 基于 template 的泛型编程
通常的,在使用 C/C++ 数组时,我们需要知晓数组的长度,并在使用时候进行严格的越界检测,会让效率降低。其中的 T 是一个占位符,表示一种通用的数据类型,可以在函数调用时被具体的数据类型所替代。所谓泛型编程,即:以一种独立于任何特定类型的方式编写代码,使得同一套代码可以适用于不同的数据类型。C++ 提供了多种代码重用机制,例如:继承、派生、多态等都属其中,而 C++ 模板也是其中的一种。类模版的示例化格式:其中的真实 “类型” 就会替换掉 Template 中的 T 占位符号。原创 2023-10-23 11:47:34 · 582 阅读 · 0 评论 -
从 C 到 C++ 编程 — 面向对象编程
使用关键字 class 声明和定义一个类,本质上是自定义一个数据类型的蓝图,它定义了类的对象包括什么数据(成员变量),以及可以在这个对象上执行哪些操作(成员函数)。class 作为一种自定义的数据类型,那么 class 实例化为 objects 的方式就类似于定义一个具有类型的变量。// 声明和定义一个类 class Box {// 在此处声明类的成员变量和成员函数 };// 声明一个类的对象 Box Box1;// 定义对象 Box1,类型为 Box Box Box2;原创 2023-10-20 17:42:25 · 7040 阅读 · 0 评论 -
从 C 到 C++ 编程 — 基础新增特性
C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。内联函数,即:在编译程序时,编译器会将内联函数调用的地方使用函数体来替换掉,类似于宏扩展。另外,如果函数体内存在复杂的控制语句结构的话,那么此时处理这些复杂控制结构所需要的时间远大于函数调用的时间,所以将此类函数声明为内联函数的意义不大,反而会使得编译后可执行代码变长。总的来说,C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。原创 2023-10-17 20:27:14 · 3635 阅读 · 0 评论 -
网络协议 — syslog 协议与 rsyslog 日志服务
通过适当配置,还可以实现运行 Syslog 协议的机器之间的通信。rsyslog 能够接受从各种各样的来源,将其输入,输出的结果到不同的目的地。Queue 模块负责消息的存储,从 Input 传入的未经过滤的消息放在主队列中,过滤后的消息放入到不同 action queue 中,再由 action queue 送到各个输出模块。Syslog(系统日志)协议是一种在 IP 网络中转发系统日志信息的标准,它是在 BSD 大学的 TCP/IP 系统实施中开发的,目前已成为工业标准协议,可用它记录设备的日志。原创 2023-07-27 23:30:36 · 3414 阅读 · 2 评论 -
C 语言网络编程 — NAT 网关运行原理
如果此时 NAT GW 已经配置了私网网段和公网 IP 地址之间的动态 NAT 规则,那么当私网中的 ClientA 192.168.1.2 向公网中 Web Server 202.20.65.4 发送了 1 个 IP Packet(srcIP=192.168.1.2、dstIP=202.20.65.4)时会执行以下 NAT 行为。在动态 NAT 场景中,还需要使用 IP 地址伪装模式(MASQUERADE),这是一种动态 SNAT 技术,通常用于家庭网络或移动网络。原创 2023-07-24 23:16:36 · 2415 阅读 · 0 评论 -
网络协议 — LLDP 数据链路发现协议
端口的 VLAN ID。:端口的协议 VLAN ID。:端口的 VLAN 的名称。:端口支持的协议类型。:端口的速率和双工状态、是否支持端口速率自动协商、是否已使能自动协商功能以及当前的速率和双工状态。:端口的供电能力。:端口是否支持链路聚合以及是否已使能链路聚合。:端口支持的最大帧长度,取端口配置的 MTU(Max Transmission Unit,最大传输单元)。原创 2023-07-15 21:14:28 · 3207 阅读 · 0 评论 -
Linux 操作系统原理 — Traffic Control 流量控制与 IP QoS 技术解析
所以,如果需要在 Leaf Class 上再实现分类,那就必须将 Filter 与 Leaf Class 的 Qdisc 关联起来,而不能直接与 Leaf Qdisc 相关联。:通常而言,Traffic Control 只能限制 Egress 的 Packets,而不能限制 Ingress 的 Packets,所以直接影响 Egress 的拥塞管理是 Traffic Control 的核心,在满足 Bandwidth Mgmt、QoS 等网络服务的前提下,还需要保障网络不会处于拥塞的危险中。原创 2023-06-10 21:08:04 · 3993 阅读 · 4 评论 -
网络协议 — IPv6 互联网协议第 6 版
描述IPv4IPv6地址长度为 32 位(4 个字节)。地址由网络和主机部分组成,这取决于地址类。根据地址的前几位,可定义各种地址类:A、B、C、D 或 E。IPv4 地址的总数为 4 294 967 296。IPv4 地址的文本格式为 nnn.nnn.nnn.nnn,其中 0原创 2023-06-08 18:39:03 · 3618 阅读 · 5 评论 -
C 数据结构与算法 — 找出数组中每个数右边第一个比它大的元素
找出数组中每个数右边第一个比它大的元素,输出下标索引,没有则标 -1。暴力法:嵌套循环比较。原创 2023-06-06 09:40:24 · 1070 阅读 · 0 评论 -
C 数据结构与算法 — 求由数组 A 中元素组成的且小于 n 的最大数
给定一个数 n,如 23121,给定一个数组 A 如 {2,4,9},求由 A 中元素组成的、小于 n 的最大数。解题思路:考察边界问题。原创 2023-06-06 09:31:58 · 1707 阅读 · 0 评论 -
网络协议 — IPSec 安全隧道协议族
安全封装协议(Encapsulating Security Payload,ESP)也是一种封装协议,与 AH 不同的是,ESP 会将 IP 数据包中的 Payload 进行加密后再封装到 IP 数据包,以保证数据的机密性,但 ESP 没有专门对 IP Header 的内容进行保护。在对身份保护要求较高的场合,则应该使用主模式。值得注意的是,IKE 不是简单的在网络上传输密钥,而是通过一系列数据的交换,最终计算出双方共享的密钥,并且即使第三者截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥。原创 2023-05-25 13:20:55 · 4150 阅读 · 1 评论 -
Linux 操作系统原理 — netfilter/iptables 流量处理框架
即:内网 IP 地址向外访问 Internet 时,发起访问的内网 IP 地址转换为指定的对外 IP 地址(可指定具体的服务以及相应的端口或端口范围),这使内网的多部主机可以通过同一个有效的公网 IP 地址访问外部网络。IP 网络有公网与私网的区分,企业内网使用私网 IP,Internet 使用公网 IP。DNAT(Destination Network Transform,目的地址转换)与 SNAT 相对,当外部网络访问内部网络时,进来的 IP 数据包会被改变 dstIP 地址。原创 2023-05-25 12:39:14 · 2377 阅读 · 1 评论 -
计算机硬件系统 — 冯诺依曼体系结构运行原理解析
值得注意的是,指令系统并非越复杂越好,因为每条 CPU 指令类型都需要特定的晶体管和电路元件来支撑实现,所以指令集越大就会使 CPU 的架构越复杂,执行操作的速度也更慢。但在指令字较短的计算机中,为了能够充分利用指令字的位数,在有限的长度中实现更多的指令集数目,所以其操作码长度被设计成是可变的,即把它们的操作码在必要的时候扩充到地址码字段。此时,段或页的首地址就会存放于基址寄存器中,而指令字的地址码就作为段或页的长度,这样只要修改基址寄存器的内容就可以访问到存储器的任意单元了。:存储当前正在执行的指令。原创 2023-05-24 18:23:48 · 3322 阅读 · 0 评论 -
CIAA 网络安全模型 — TLS v1.3 和 HTTPS 协议
举个例子:网站 https://www.example.com、https://www.something.com、https://www.another-website.com、https://www.example.io 被托管在相同的 Web 服务器中(相同的 IP 地址),若 SNI 扩展指定为 https://www.example.com,那么 Web 服务器就会返回 https://www.example.com 的 TLS 本地设备证书到客户端,继而建立正确的安全的连接。原创 2023-05-10 17:22:44 · 2718 阅读 · 8 评论 -
CIAA 网络安全模型 — 数据传输安全
后续,当 Server 向 Client 发送数据时,中间人故技重施的将数据劫持,用一开始劫持的 Public Key 进行解密后,对数据进行篡改,然后再使用非法的 Private Key 对数据进行加密发送给 Client,而 Client 也会使用非法的 Public Key 进行解密。CA 通常是可信任的第三方机构,能够对数据签名证书的真实性和有效性进行认证,全球性的 CA 机构有:Symantec、Comodo,GlobalSign,DigiCert,GeoTrust 等等。原创 2023-05-10 01:19:53 · 3426 阅读 · 1 评论 -
网络协议 — BGP 边界网关协议
BGP(Border Gateway Protocol,边界网关协议)是一种被广泛应用到 Internet 中的距离矢量(Distance Vector)动态路由协议,能够在不同的 AS(Autonomous System,自治系统,互联网路由选择的基本单元)间交换 Route Informations(路由信息)。BGP 协议起源于 1989 年 1 月举行的第 12 次 IETF 会议。在那时,由于互联网的快速发展和规模的不断扩大,互联网中存在的 AS 数量不断增加。传统的距离矢量路由协议(e.g. R原创 2023-05-05 15:35:38 · 2696 阅读 · 2 评论 -
C 数据结构与算法 — 快速判断链表是否成环
【代码】C 数据结构与算法 — 快速判断链表是否成环。原创 2023-04-27 21:23:40 · 449 阅读 · 0 评论 -
C 数据结构与算法 — 数组取数求目标和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的两个整数,并返回它们的数组下标。原创 2023-04-13 21:25:58 · 484 阅读 · 0 评论 -
C 数据结构与算法 — 链表反转
将 10 个节点按照长度 3 为一个区域进行反转。原创 2023-04-11 19:30:32 · 437 阅读 · 0 评论 -
Linux 操作系统原理 — RSS 多队列网卡
处理 Rx Queue 硬中断的 CPU Core 也是随后进行处理收包的 CPU Core,如上图所示,当某个 NIC Rx Queue 收到 Frames 时,就触发自己的 IRQ,收到 IRQ 的 CPU Core 就执行 IRQ Number 对应的硬中断处理程序,最终将收包任务下发给该 Core 的 NET_RX_SOFTIRQ 实例处理(每个 Core 都有一个 NET_RX_SOFTIRQ 实例)。:具有 128 个条目,对应 128 个不同的 Queues,还可以设置不同的权重参数。原创 2023-04-10 11:22:14 · 2490 阅读 · 0 评论 -
Linux 操作系统原理 — PCIe 总线标准
初始化 Bridge 1 的配置空间,并 Bridge1 的 Primary Bus Number 和 Secondary Bus Number 寄存器分别设置成 0 和 1,表明 Bridge1 的上游总线是 Bus0,下游总线是 Bus1。另外,PCIe 协议支持向前兼容的特性,如果设备支持 PCIe 4.0,但计算机主板支持只支持 PCIe 3.0,那么系统就只能以 3.0 的传输速率运行。其中可以看见该设备的 Memory BAR 空间,一段的大小是 1MB,另一段的大小是 256KB。原创 2023-04-08 18:26:37 · 3588 阅读 · 3 评论 -
Linux 操作系统原理 — Basic NIC、SmartNIC、DPU 设备演进与运行原理
此外还具有 PCS(物理编码)、PMA(物理介质附加)、PMD(物理介质相关)、MDI 等子层。CSMA/CD 协议具有 “冲突检测“ 和 “载波监听“ 功能,能够检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去。NIC(Network Interface Controller)是网卡的核心部件,相当于计算机的主机(CPU + Memory),提供了主要的控制面功能,并通过 Driver(驱动程序)与 Linux 操作系统进行交互。原创 2023-04-08 10:56:51 · 1801 阅读 · 0 评论 -
互联网协议 — DNS 域名协议
目录文章目录目录DNS 协议报文格式域名解析的流程Wireshark 抓包分析DNS 协议报文格式会话标识(2 字节):是 DNS 报文的 ID 标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分 DNS 应答报文是哪个请求的响应。标志(2 字节):数量字段(总共 8 字节):Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四个区域的数目。Questions 表示查询问题区域节的数量Answers 表原创 2021-04-22 12:24:55 · 2223 阅读 · 3 评论 -
互联网协议 — DNS 域名系统
目录文章目录目录DNS源起域名结构域名区域域名解析DNS 缓存机制基于缓存的 DNS 域名解析流程DNS 缓存使用面临的问题互联网环境缓存应用面临的问题企业内网缓存应用面临的问题DNS 缓存在实际应用中的考虑主动操作之缓存考虑因素被动操作之互联网缓存考虑因素被动操作之内网缓存考虑因素如何设置 TTL 值DNS 的协议为什么 DNS 使用 UDP 协议使用 UDP使用 TCP总结HTTP DNS ...原创 2020-04-24 00:25:25 · 3132 阅读 · 0 评论 -
C 语言编程 — 排错集(持续更新)
原因:本质是一个 EAGAIN 错误返回。常见于非阻塞 I/O 场景,作为一种 “数据暂时仍未就绪” 的通知类型。原因:向 Kernel 系统调用传递了非法的空指针参数。原创 2023-04-03 14:28:02 · 559 阅读 · 1 评论 -
C 语言网络编程 — Socket I/O 性能优化手段
目录文章目录目录基本概念同步与异步阻塞与非阻塞五种 IO 模型阻塞 IO非阻塞 IO同步 IO(信号驱动)异步 IOIO 多路复用selectpollepoll基本概念同步与异步同步是指一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成。异步是指不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了...原创 2020-05-04 13:18:13 · 4839 阅读 · 0 评论 -
C 语言编程 — GCC 自动化编译工具集
makefile 的变量定义和 Shell 变量定义类似。# 定义 name = value # 引用 ${name} #or $( name)主要关注 makefile build-in 的一些关键字变量。:表示变量引用。$^:表示当前规则中所有的依赖文件。$原创 2023-03-30 12:00:02 · 2062 阅读 · 0 评论 -
Linux 操作系统原理 — 内存管理 — 内存分配算法
目录文章目录目录内存分配算法物理内存分配内存碎片伙伴(Buddy)分配算法申请和回收反碎片机制Slab 算法slab 分配器的结构slab 高速缓存分区页框分配器非连续内存区内存的分配虚拟内存的分配内核空间内存分配kmallocvmalloc用户空间内存分配(malloc)malloc 申请内存DMA 内存内存分配算法Linux 系统把物理内存划分 4K 大小的内存页(Page),也称作页框(Page Frame),物理内存的分配和回收都是基于内存页进行,把物理内存分页管理有很多好处。假如系统请求小块原创 2020-06-20 16:14:01 · 4167 阅读 · 0 评论 -
Linux 操作系统原理 — 进程管理 — 进程调度
Kernel 通过优先级来确定 User Process 的处理顺序,从 MAX_PRIO 的范围可见,Kernel Scheduler 调度进程时,始终以实时进程为最优先,并且不能被抢占。在 Linux 操作系统中,只有 User Process 和 Kernel Thread 实体需要由 Linux Kernel 中的 Scheduler 调度程序来参与调度到 CPU 中执行,而 User Thread 的调度则完全由用户态代码实现,Kernel 并不感知。相反,动态优先级是可以被调整的。原创 2023-02-15 11:37:48 · 1370 阅读 · 0 评论 -
DPDK — App EAL options 指令行参数详解
目录文章目录目录DPDK APP 的指令行参数Lcore-related options(逻辑线程相关参数)Device-related options(设备相关参数)Multiprocessing-related options(多进程相关参数)Memory-related options(存储相关参数)Debugging options指定 DPDK App 使用的大页内存隔离 DPDK App 使用 lcore使用基于 Intel VT-d 的 Linux IOMMU Pass-Through 来运原创 2020-05-12 14:58:45 · 116060 阅读 · 4 评论 -
C 语言编程 — hiredis 数据库客户端
目录文章目录目录Redis 客户端HIREDIS安装验证Synchronous APIredisConnectredisCommandfreeReplyObjectredisFreeRedis 客户端Redis 拥有几乎所有主流编程语言的客户端(https://redis.io/clients),其中 C 语言的客户端推荐使用:hiredis:https://github.com/redis/hiredishiredis-vip:https://github.com/vipshop/hiredi原创 2020-05-27 00:18:21 · 3566 阅读 · 0 评论 -
互联网协议 — 802.1q VLAN 虚拟局域网协议
目录文章目录目录802.1q 数据帧头部VLAN 的 “隔离” 工作原理802.1q 数据帧头部VLAN 的 “隔离” 工作原理原创 2021-07-12 00:01:00 · 125288 阅读 · 0 评论 -
互联网协议 — ICMP 互联网控制消息协议
目录文章目录目录ICMPICMPv4 协议栈ICMPv4 的消息类型Echo Request & Echo Reply MsgDestination Unreachable MsgParameter Problem MsgRedirect MsgTime Exceeded MsgTimestamp Request & Timestamp Reply MsgICMP 的应用pingtracerouteICMPIPv4/v6 协议是尽力传输的网络协议,提供的数据传输服务是不可靠的、无连接转载 2021-06-01 15:11:10 · 3474 阅读 · 0 评论 -
互联网协议 — IPv4 — CIDR 无分类编址与路由
目录文章目录目录A、B、C 类 IPv4 地址表示法CIDR 表示法A、B、C 类 IPv4 地址表示法IPv4 地址由 4Byte(32 Bit)表示,通常使用点分十进制表示法,例如:192.168.0.1。格式为:IPv4 地址 ::= {<网络号>, <主机号>},将主机号置为 0,就可以得到网络地址。从上图中可知 A、B、C、D、E 每一类地址的前缀、网络地址、主机地址的位数,通过这个位数,就可以计算出每类网络的可支配网络数以及可连接主机数了。子网划分公式原创 2021-02-28 23:17:25 · 3966 阅读 · 1 评论 -
互联网协议 — IPv4 — 报文格式
目录文章目录目录IP 协议IP 协议**IP(Internet Protocol,因特网协议)**是网络层的核心协议,规定了网络层的封装规范,将上层(传输层)传递下来的数据段附加上 IP 首部封装成 IP 数据包,又称数据报文,IP 数据包同样由包首部和数据两部分组成,这是数据部分实际为传输层的数据段。数据包首部长度为 20 字节,数据部分最大长度为 65515 字节,一个 IP 数据包...原创 2020-05-01 22:36:43 · 3223 阅读 · 0 评论 -
互联网协议 — ARP 地址解析协议
目录文章目录目录ARP 简述MAC 地址简述以太网简述ARP 的基本功能ARP 的数据包结构ARP 的基本工作原理ARP 的客户端ARP 的代理ARP 欺骗GARP参考文档ARP 简述ARP(Address Resolution Protocol,地址解析协议),是一个通过解析网络层 IP 地址来找寻数据链路层 MAC 地址的网络传输协议,它在 IPv4 中极其重要。ARP 最初在 1982...原创 2019-11-09 15:00:34 · 4960 阅读 · 4 评论 -
以太局域网技术发展编年史
目录文章目录目录物理网络设备发展简述中继器(Repeater)集线器(hub)网桥设备网桥的工作原理网桥基于 MAC 的转发原理交换机设备交换机的工作原理网桥与交换机的区别路由器设备路由器的工作原理物理网络设备发展简述以太网设计目标:电脑使用一个网络接口,可以同时与多台电脑通信,将电脑连接起来的 “黑盒子” 最先面世,称之为集线器(Hub)。这种集线器,通常有多个端口,可以接入多台电脑,使电...原创 2020-02-27 13:28:56 · 3913 阅读 · 2 评论 -
未来互联网技术发展编年史,从阿帕网到完全可编程网络
后来,受 Ethane 项目的启发,Martin Casado 和他的导师 Nick McKeown 教授发现,如果将 Ethane 的设计更简化,将传统网络设备的数据转发(Data Plane)和路由控制(Control Plane)两个功能模块相分离,并通过集中式的 Controller 以标准化的接口对各种网络设备进行管理和配置,那么这将为网络资源的设计、管理和使用提供更多的可能性,从而更容易推动网络的革新与发展。这样可以管理更大的网络,提供更强劲的性能,还能增强系统的安全性和可靠性。原创 2023-03-22 09:04:53 · 2979 阅读 · 2 评论 -
Linux 操作系统原理 — 内存管理 — 虚拟地址空间
相应的,Linux 和 CPU 软硬件结合提供了 2 级保护机制,只有 Kernel Space 的代码可以使用 Ring0 的 CPU 指令,而 User Space 的代码只可以使用 Ring3 的 CPU 指令。在 Kernel 中用于对虚拟地址进行寻址的数据结构称为 Kernel Page Table(内核页表),包括:页表目录、页表、页表项、属性标记等组成部分,可以将每个页表项(Page Table Entry)标记为只读、可写、只执行等,以控制内存的访问权限和缓存行为。原创 2023-02-25 14:41:20 · 1940 阅读 · 0 评论