命名空間(namespace)的概念已經非常常見了,通常用以區分不同範疇內的各種資源。在linux核心中,命名空間用以隔離多種linux核心的資源,如程序、程序間通訊、網路、掛載路徑等。通過linux命名空間,能夠把linux有限的核心資源(程序號、通訊資源、網路資源等)合理分配給各個使用者的程序,而不互相干擾。
linux的網路命名空間(network namespace)用以在乙個linux主機上隔離不同的網路環境,構建虛擬化網路。linux的網路命名空間能夠隔離的linux核心網路資源如下:
例如,對於/proc/sys/net/ipv6/conf/all/forwarding檔案,不同的網路命名空間中有各自不同的值。
linux系統啟動即建立乙個初始的網路命名空間(default),建立的任何程序預設都從屬於該網路命名空間。使用者可以使用ip netns add ...建立新的網路命名空間,該命令即是在/var/run/netns目錄下建立同名的檔案。
[root@my ~]# ip netns add oam
[root@my ~]# ip netns add vim
[root@my ~]# ll /var/run/netns
total 0
-r--r--r--. 1 root root 0 mar 25 07:49 oam
-r--r--r--. 1 root root 0 mar 25 08:47 vim
[root@my ~]# ip netns exec oam ip addr
1: lo: mtu 65536 qdisc noop state down group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
對於任何乙個網路命名空間,都有乙個預設的loopback網絡卡(lo),預設處於down狀態。如果要啟動lo網絡卡,可以執行如下命令:
[root@my ~]# ip netns exec oam ip link set lo up
loopback網絡卡非常特別。除了loopback網絡卡之外,任何其他的網路裝置,都只能屬於乙個網路命名空間。但是,我們可以通過ip link命令,將乙個網路命名空間在的網路裝置移動(邏輯上)到另乙個網路命名空間中,命令如下:
[root@my ~]# ip link set my_dev netns oam
刪除乙個網路命名空間時,會同時刪除其中的所有虛擬網絡卡,而對於其中的物理網絡卡,則會被移動至預設的網路命名空間。刪除命令如下:
[root@my ~]#ip netns del oam
Linux的命名空間
命名空間是一種輕量級的虛擬化手段。傳統的虛擬化軟體,是虛擬化多個不同的作業系統,對共享資源的限制很大。通過提供命名空間,可以讓程序與程序之間,使用者與使用者之間彼此看不到對方。命名空間,相當於容器。命名空間,本質上建立了系統的不同檢視。chroot是一種簡單的命名空間,僅限於將程序限制在檔案系統的某...
PHP核心 命名空間
在維基百科中,對命名空間的定義是 命名空間 英語 namespace 表示識別符號 identifier 的上下文 context 乙個識別符號可在多個命名空間中定義,它在不同命名空間中的含義是互不相干的。在程式語言中,命名空間是一種特殊的作用域,它包含了處於該作用域內的識別符號,且本身也用乙個識別...
linux核心程序命名空間函式分析
struct pid 與 struct task struct 都是全域性的 核心的 struct pid 的 level 為最高的命名空間層次 全域性的命名空間層次為0 task struct.pid 為全域性的pid,find get pid pid t nr nr 必須為全域性pid t pi...