一、计算机网络模型
二、Linux中网卡
-
查看网卡详情命令:ip link show
-
查询网卡:ls /sys/class/net
-
查看ip信息: ip a
-
状态 UP/DOWN/UNKNOW
link/ether:MAC地址
inet :ip地址 -
我们可以通过修改文件或者命令的方式改ip地址
文件:/etc/sysconfig/network-scripts
目录下
命令:新增ip addr add 192.168.0.110/24 dev eth0
删除ip addr delete 192.168.0.110/24 dev eth0
-
网卡的启动/停止
重启网卡:systemctl restart network
启动/停止某个网卡:ifup/ifdown eth0
orip link set eth0 up/down
二、Linux中的Network namespace
-
namespace:用于隔离网络
-
查看当前主机netns列表:
ip netns list
-
新增netns:
ip netns add ns3
-
删除netns:
ip netns delete ns3
-
查看namespace为ns1的ip:
ip netns exec ns1 ip a
-
启动ns1的本地lo(loopback回环):
ip netns exec ns1 ifup lo
orip netns exec ns1 ip link set lo up
-
再启动ns2
-
列出结构
-
使用veth-pair(VirtualEthernet-pair)技术
sudo ip link add veth-ns1 type veth peer name veth-ns2
-
查看当前网卡:
ip link list
-
将veth-ns1和veth-ns2分别设置到ns1和ns2中
ip link set veth-ns1 netns ns1
ip link set veth-ns2 netns ns2
-
此时ns1和ns2的只有网卡 却没有ip地址,所以要给他们ip
ip netns exec ns1 ip addr add 192.168.0.22/24 dev veth-ns1
ip netns exec ns2 ip addr add 192.168.0.23/24 dev veth-ns2
-
当前网卡还是DOWN状态 我们启动它
ip netns exec ns1 ip link set veth-ns1 up
ip netns exec ns2 ip link set veth-ns2 up
-
查看网卡veth-ns1和veth-ns2
ip netns exec ns1 ip link
ip netns exec ns2 ip link
-
验证:互相ping一下
ip netns exec ns1 ping 192.168.0.23
ip netns exec ns2 ping 192.168.0.22
可以ping通
四、深入分析Docker(单机)–Container中网络bridge
- 我们先创建两个container,看看他们能不能ping的通
docker run -d --name=tomcat01 -p 8080:8080 tomcat
docker run -d --name=tomcat02 -p 8081:8080 tomcat
docker exec -it tomcat01 ip a
=172.18.0.2
exit
docker exec -it tomcat02 ip a
=172.18.0.3
exit
docker exec -it tomcat01 ping 172.18.2.3
docker exec -it tomcat02 ping 172.18.2.2
- 在centos中去ping tomcat01和tomcat02
ping 172.18.2.2
ping 172.18.2.3
centos和他们属于不同的Network NameSpace,是如何连接的? - centos中的docker0的veth69d7573@if156和tomcat01中的eth0@if157是成对存在的
- tomcat01和tomcat02能ping通
- 因此使用Bridge模式
我们查看下docker中的网络模式(默认bridge)
docker network list
- 检查一下bridge
docker network inspect bridge
- 在docker中创建自己的bridge
docker network create my-network
ordocker network create --subnet=172.19.0.0/24 my-network
- 创建一个容器指定用my-network
docker run -d --name=network-tomcat03 -p 8083:8080 --network=my-network tomcat
- 查看这个容器网络
docker exec -it network-tomcat03 ip a
- 在network-tomcat03中去ping tomcat01互相发现ping不通
只需要将tomcat01加入到my-network中就可以
docker network connect my-network tomcat01
- 此时不但可以用ip去ping network-tomcat03还可以用名字
五、深入分析Docker(单机)–Container中网络host & none
- 创建容器指定用host
docker run -d --name=tomcat04 -p 9090:8080 --network=host tomcat
用的是centos的网络
检查下docker host
- 创建一个容器 指定用 none
docker run -d --name=tomcat05 -p 9091:8080 --network=none tomcat
检查下docker none
none 网络不能和别人连接