1. 網絡命名空間是什么?
網絡命名空間(Network Namespace) 是 Linux 內核提供的一種網絡資源隔離機制,用于為進程或容器創建完全獨立的網絡環境。它并非物理或虛擬的網絡接口(如網卡、veth pair 等),而是一個虛擬容器,包含以下資源的獨立實例:
-
網絡接口(物理或虛擬)
-
IP 地址和路由表
-
防火墻規則(如 iptables/nftables)
-
端口號分配和套接字(Socket)狀態
通過命名空間,不同進程或容器可以擁有彼此隔離的網絡配置。例如,兩個容器可以各自綁定到 80 端口而不會沖突,因為它們屬于不同的命名空間。
2. 內核中的資源管理:dec_ucount
的作用
在 Linux 內核中,網絡命名空間的創建和銷毀涉及用戶資源計數機制,核心函數包括:
-
dec_ucount(struct ucounts *ucounts, enum ucount_type type)