博客 / 列表

putao - ebpf--入門03(網絡應用各種場景)

bpf_cmd: BPF_MAP_CREATE: 創建一個新的BPF映射。 BPF_MAP_LOOKUP_ELEM: 在BPF映射中查找一個元素。 BPF_MAP_UPDATE_ELEM: 更新BPF映射中的一個元素。 BPF_MAP_DELETE_ELEM: 從BPF映射中刪除一個元素。 BPF_MAP_GET_NEXT_KEY: 獲取BPF映射中下一個鍵的迭代器。 BPF_PROG_LOAD

ebpf , 網絡傳輸協議

putao - ebpf--入門04(支持的各種鈎子以及同時使用多個ebpf 插件)

支持同時使用多個eBPF程序? 可以將多個 eBPF 程序加載到不同的鈎子點,或者在同一個鈎子點上串聯多個 eBPF 程序。例如,可以在 XDP 層同時加載 URL 過濾、IPv6 過濾和 Cookie 過濾程序。 場景01: #include linux/bpf.h #include bpf/bpf_helpers.h #include linux/if_ether.h #include

ebpf , 網絡傳輸協議

putao - ebpf--入門05(流量控制)

先講tc,再講ebpf tc 的底層原理 隊列管理器(qdisc) 隊列管理器是 tc 的核心組件,用於管理數據包的隊列。不同的 qdisc 實現了不同的流量控制策略,如 FIFO、TBF(Token Bucket Filter)、HTB(Hierarchical Token Bucket)等。 FIFO(First In, First Out):最簡單的隊列管理器,按照數

ebpf , 網絡傳輸協議

putao - ebpf--入門06( kprobe, socket ,Tracepoint, perf event 使用案例)

過濾和監控 socket 層的數據包 socket 類型的 eBPF 程序,返回值類型是 int,並且返回值用於決定如何處理捕獲的數據包。返回 0 表示丟棄數據包,返回非零值表示接受數據包。 #include linux/bpf.h #include bpf/bpf_helpers.h #include netinet/in.h #include linux/virtio_net.h SE

ebpf , 網絡傳輸協議

putao - ebpf--入門06(lsm 應用場景)

ebpf不僅可以用於網絡數據包過濾和性能監控,還可以應用於安全領域,特別是在與 LSM(Linux Security Modules)結合使用時。通過 eBPF 和 LSM 的結合,可以實現更靈活和高效的安全策略,包括訪問控制、安全審計和入侵檢測等。 安全審計: 使用 eBPF 程序記錄特定系統調用的審計日誌。 SEC("lsm/file_open") int BPF_PROG(audit

ebpf , 網絡傳輸協議

putao - 軟件定義網絡--01 (OVS+ ryu + Mininet 環境準備)

創建新的網絡命名空間: sudo ip netns add ns1 sudo ip netns add ns2 創建一對 veth 接口:(連接2個不同的命名空間) sudo ip link add veth1 type veth peer name veth2 將 veth1 移動到命名空間 ns1,將 veth2 移動到命名空間 ns2: sudo ip link set veth1 netn

sdn , 網絡傳輸協議

putao - 軟件定義網絡--02《 linux 開源網絡全棧詳解》閲讀記錄(VXLAN等)

FlowVisor 是一種網絡虛擬化平台,專為軟件定義網絡(SDN)環境設計。它允許多個獨立的控制器同時管理同一個物理網絡,而不會相互干擾。FlowVisor 的主要功能是將網絡資源劃分成多個邏輯視圖(slices),每個視圖都可以由不同的控制器獨立管理。這種虛擬化使得網絡資源可以更靈活地進行分配和管理。 FlowVisor 的主要功能和特性 網絡切片:FlowVisor 能夠將物理網絡劃分成多個

sdn , 網絡傳輸協議

putao - 軟件定義網絡--03 (P4 語言, 以及rust進行交互)

P4 語言的核心思想是將數據包處理邏輯抽象為以下幾個主要部分: 數據包解析(Parsing):定義如何從數據包中提取字段。 表匹配(Table Matching):定義如何根據數據包字段進行匹配和查找。 數據包處理(Processing):定義如何對匹配結果進行處理和修改。 數據包轉發(Forwarding):定義如何將處理後的數據包轉發到適當的端口。 語法案例: // 頭部定義

sdn , 網絡傳輸協議

putao - 軟件定義網絡--04( 交換機)

設置 OVS 交換機和虛擬接口 # 啓動 OVS 服務 sudo service openvswitch-switch start # 創建一個 OVS 交換機 sudo ovs-vsctl add-br br0 # 創建兩個 veth 對 sudo ip link add veth1 type veth peer name ovs-veth1 sudo ip link add veth2 t

sdn , 網絡傳輸協議

putao - 軟件定義網絡--05(ryu +onos 案例目錄)

ryu 源碼的一些案例 bmpstation.py cbench.py 説明: 用於性能測試的應用,通常與 Cbench 工具一起使用來測試 OpenFlow 控制器的性能。 conf_switch_key.py 説明: 配置交換機密鑰的示例應用,可能用於交換機與控制器之間的安全通信。 example_switch_13.py 説明: OpenFlow 1.

sdn , 網絡傳輸協議

putao - 軟件定義網絡--06(OpenFlow協議)

常見的 OpenFlow 消息類型及其格式 OFPT_HELLO: 用於交換機和控制器之間的初始握手。 格式:包含 OpenFlow 版本信息。 OFPT_FEATURES_REQUEST: 控制器發送給交換機,要求交換機報告其能力。 格式:不包含額外的數據。 OFPT_FEATURES_REPLY: 交換機響應 OFPT_FEATURES

sdn , 網絡傳輸協議

putao - 軟件定義網絡--07(putao-sdn)

改的onos源碼, 強類型語言, 可以跳轉。onos架構太重了。後面準備用go語言進行重構 https://gitee.com/putao0525/putao-sdn Atomix 是一個強大的分佈式協調和一致性框架,獨立於 ONOS 也可以使用。它提供了多種分佈式數據結構和工具,可以幫助開發者實現分佈式應用。以下是一個簡單的指南,展示如何單獨使用 Atomix 來構建分佈式應用。 import

sdn , openflow , 網絡傳輸協議

putao - 軟件定義網絡--09(sdn數據結構)

畫龍點睛:作為通用配置下發 設備ID 設備ID是網絡中唯一標識一個網絡設備(如交換機或路由器)的標識符。它通常是一個字符串或數字,如 "of:0000000000000001"。 流量列表 流量列表是與每個設備ID相關聯的一組流規則。流規則定義瞭如何處理通過該設備的網絡流量。 處理規則 每個處理規則包含以下幾個關鍵部分: *匹配條件(Match C

sdn , openflow , 網絡傳輸協議

putao - 軟件定義網絡-- 10 BGP(邊界網關協議)

BGP 消息類型及其格式: BGP(邊界網關協議)消息有四種主要類型:OPEN、UPDATE、NOTIFICATION 和 KEEPALIVE。每種消息類型都有其特定的功能和格式 OPEN 消息 功能:用於建立 BGP 鄰居關係。 格式: Marker(16 字節):標記字段,用於同步和安全性。 Length(2 字節):消息長度,包括頭部和數據部分。 Type(1

sdn , bgp , 網絡傳輸協議

putao - k8s--vxlan的使用

在 Linux 系統中可以使用命令行工具來創建和測試 VXLAN 網絡 確定物理網卡 首先要明確 VXLAN 隧道所基於的物理網卡,一般可以使用 ip addr 命令查看當前系統的網絡接口信息。例如,假設物理網卡名為 eth0。 創建 VXLAN 接口 ip link add vxlan100 type vxlan id 100 dev eth0 dstport 4789

網絡傳輸協議

putao - react native 項目創建

創建項目 npx @react-native-community/cli init 項目名稱 依賴組件 brew update brew upgrade openssl readline libyaml gmp 新版本的macos git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-bu

react-native

putao - 架構設計--openresty生命週期

openresty的生命週期,各個階段都做了那些事情: 初始化階段 init_by_lua Worker 進程啓動時執行一次。加載全局配置、初始化共享字典 SSL 握手階段 ssl_certificate_by_lua SSL/TLS 握手時執行。動態加載 SSL 證書 請求重寫階段 rewrite_by_lua 修改請求 URI、重定向。URL 重寫、強制 HTTPS 訪問控制階段 a

openresty

putao - 架構設計--openresty配置文件的邏輯結構

openresty 配置文件結構: #全局其他的配置(比如: 配置日誌的數據位置等) .... #配置http的反向代理 http{ server{ listten 8080; #後端的進程,比如Java的服務器 } server{ listten 8081; } } #配置tcp的反向代理 stream{ ser

openresty

putao - 架構設計--openresty入門

Lua入門 推薦使用vscode進行開發,需要用到的插件: 調試需要用到的launch.json: { "version": "0.2.0", "configurations": [ { "type": "lua-local", "request": "launch",

openresty

putao - 架構設計--openresty入門

推薦使用vscode. 相關的插件: debug配置文件配置: { "version": "0.2.0", "configurations": [ { "type": "lua-local", "request": "launch", "name": "OpenResty

openresty

putao - rust --bitflags 庫使用

use bitflags::bitflags; bitflags! { pub struct FilePermissions: u32 { const READ = 0b00000001; const WRITE = 0b00000010; const EXECUTE = 0b00000100; } } fn main() {

二進制 , rust

putao - risc-v--多任務切換原理

rust 代碼實現。current_task_cx_ptr 當前任務是一段空的內存區域。 用來存放當前任務的寄存器環境。 fn run_next_task(self) { if let Some(next) = self.find_next_task() { let mut inner = self.inner.exclusive_access();

asm , rust , risc-v

putao - risc-v+rust-- 加載用户的app的底層原理?

文章寫的有點墨跡, 我在梳理梳理一下, 其實,就是一個技巧: 內核棧裏面放入的是用户態的數據。還有一點, 用户的程序放到一個位置, 內核去這個位置讀取數據 之前都是內核態,用的棧也是內核態的sp. extern "C" { //彙編地址的入口 fn __restore(cx_addr: usize); } unsafe { //

asm , rust , risc-v

putao - risc-v --全部的關鍵字

.ascii:插入一串不以零結尾的字符。 .asciz:插入一串以零結尾的字符。 .balign:在當前位置插入字節以使地址對齊到指定的字節邊界。 .byte:插入一個或多個字節值。 .data:轉到數據段,通常用於定義數據信息。 .define:通常用於定義宏或常量符號,但在不同彙編器中使用可能有所不同。 .double:插入一個或多個雙精度浮點數。 .

asm , risc-v