Linux 基础知识中的网络命名空间

描述

为什么要引入命名空间?有哪些?

Linux系统是一个多用户操作系统,通常是服务器的操作系统。

服务器通常会运行很多服务,在其有限的资源下,必然会造成资源的争抢,可能导致整个服务器宕机。

需要找到一种方法来解决上面的问题,Linux便引入了命名空间机制(NameSpace)。

Linux包含PID(进程)、Network(网络)、Mount(挂载)、User(用户)、UTS(主机名)、IPC(进程间通信)等命名空间。

网络命名空间是什么?

Linux网络命名空间可以看成网络协议栈的副本,每个网络命名空间拥有独立的网络环境(回环设备、IPv4等)。

默认情况下,Linux提供init_net网络命名空间,网络协议栈和网络设备属于此命名空间。Linux也可支持用户自定义网络命名空间。

网络设备通过在其结构体中定义网络命名空间,来标识其属于某个网络命名空间。

用户如何自定义网络命名空间?

用户可以使用iproute2工具来自定义网络命名空间。

基础命令:

root@linux:/var/run# ip netns help
Usage: ip netns list # 列出网络命名空间
      ip netns add NAME  # 创建 NAME 命名空间
      ip netns set NAME NETNSID # 分配网络命名空间id
      ip [-all] netns delete [NAME] # 删除 NAME 命名空间
      ip netns identify [PID] # 查看进程的网络命名空间
      ip netns pids NAME  # 查找使用 NAME 网络命名空间的进程
      ip [-all] netns exec [NAME] cmd ... # 在 NAME 网络命名空间中执行命令CMD
      ip netns monitor # 监控对网络命名空间的操作
      ip netns list-id #

创建命名空间:

root@linux:/var/run# ip netns add netns0
root@linux:/var/run# ip netns list
netns0

命名空间文件在/var/run/netns/目录下

root@linux:/var/run# ls /var/run/netns/
netns0

查看netns0的网卡信息,并设置为UP状态

root@linux:/var/run# ip netns exec netns0 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

测试回环口

root@linux:/var/run# ip netns exec netns0 ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.069 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.041 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.039 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.039 ms
^C
--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3074ms
rtt min/avg/max/mdev = 0.039/0.047/0.069/0.012 ms
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分