一、网卡
1、网卡:计算机进行通信的硬件支撑,有唯一的mac地址,
2、查看网卡信息
a、ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 44:1e:a1:4f:52:60 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 44:1e:a1:4f:52:62 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 44:1e:a1:4f:52:ac brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 44:1e:a1:4f:52:ae brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether 44:1e:a1:4f:52:60 brd ff:ff:ff:ff:ff:ff
b、ls /sys/class/net/ 以文件的方式存在centos中
br0 eth0 eth1 eth2 eth3 lo
c、ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 44:1e:a1:4f:52:60 brd ff:ff:ff:ff:ff:ff
inet6 fe80::461e:a1ff:fe4f:5260/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 44:1e:a1:4f:52:62 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 44:1e:a1:4f:52:ac brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 44:1e:a1:4f:52:ae brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether 44:1e:a1:4f:52:6f brd ff:ff:ff:ff:ff:ff---------------->mac地址
inet 192.168.171.18/24 brd 192.168.171.255 scope global br0------------>ip地址
inet6 fe80::461e:a1ff:fe4f:5260/64 scope link
valid_lft forever preferred_lft forever
3、修改网卡信息
cd /etc/sysconfig/network-scripts---->cat ifcfg-eth0--->配置如下
DEVICE=eth0------------------------->网卡的名字
BOOTPROTO=none------------------------->协议
NM_CONTROLLED=no
ONBOOT=yes------------------------->开机是否启动
TYPE=Ethernet------------------------->类型
BRIDGE="br0"
IPADDR=192.168.171.17
NETMASK=255.255.255.0------------------------->子网掩码
GATEWAY=192.168.171.254
USERCTL=no
4、给网卡添加ip地址,和外界进行通信
可以修改文件,也可以用命令:ip addr add 192.168.0.100/24 dev eth0
5、将网卡中的ip删除:ip addr delete 192.168.0.100/24 dev eth0
6、网卡的状态
开启:ifup eth0
关闭:ifdown eth0
二、网卡隔离分类
1、网卡在centos中通过namespace隔离
2、创建network-namespace
ip netns add ns1------->创建名为“ns1”的network-namespace
ip netns list------>查看有哪些namespace
ip netns exec ns1 ip a---->查看namespace中的网卡信息,默认有本地的网卡信息
ip netns exec ns1 ip link show
ip netns exec ns1 ifup lo----->启动namespace中的网卡
三、不同namespace中的网卡进行通信
1、veth pair技术(Virtual Ethernet Pair)成对出现----->同时创建出两个网卡,这连个网卡默认是可以连通的。本别将网卡给ns1和ns2。
2、模拟
1、ip link add veth-ns1 type veth peer name veth-ns2 检查ip link show多了两个网卡:veth-ns1@veth-ns2 veth-ns2@veth-ns1
2、ip link set veth-ns1 netns ns1---------->将网卡veth-ns1@veth-ns2派给ns1
3、ip link set veth-ns1 netns ns1---------->将网卡veth-ns2@veth-ns1派给ns2
再查看ip link show发现veth-ns1 和 veth-ns2已经没有了
4、ip netns exec ns1 ip addr add 192.168.0.100/24 dev veth-ns1----->给网卡添加ip地址
5、ip netns exec ns1 ip link set veth-ns1 up----->开启网卡
6、ip netns exec ns1 ip addr add 192.168.0.101/24 dev veth-ns2----->给网卡添加ip地址
7、ip netns exec ns1 ip link set veth-ns2 up----->开启网卡
8、ip netns exec ns1 ping 192.168.0.101-------->通过ping测试网卡的连通性
ip netns exec ns2 ping 192.168.0.100-------->通过ping测试网卡的连通性
注:一个docker容器就相当于一个network-namespace
四、通过image启动两个tomcat-container
1、网卡分别为:eth0@if21、eth0@if23:中间差一个22
2、装完docker后,ip a中会有docker0网卡
3、装完docker后,docker相当于一个namespace。其他的container都与docker成对的出现namespace以及成对的网卡
4、验证
yum install bridge-utils
brctl show
五、dcoker中的网络
注:创建docker时,默认会创建docker0网卡,docker0属于bridge类型的网络(网络名也叫bridge)
1、docker network ls---->chakna y
bridge host null tomcat-net(自定义的网络)
2、docker0属于bridge类型
3、docker network inspect bridge 可以看到docker0网卡连到了docker中的哪些container
4、docker network create tomcat-net----->创建网络名为“tomcat-net”,默认就是bridge类型的
查看该网络:docker network inspect tomcat-net
5、创建容器时,可以指定网络,如果不指定,默认就是docker0,容器的网段就与docker0的网段一样
创建容器:docker run -d --name custom-net-tomcat --network tomcat-net tomcat ,则tomcat容器就与tomcat-net一个网段
查看容器网络:docker exec -it tomcat-net ip a
6、将container加入到自定义的tomcat-net网络中
docker network connect tomcat-net tomcat01--->将tomcat01容器添加到tomcat-net网络
查看tomcat01的网络:docker network inspect tomcat-net 、docker network inspect tomcat01----->发现tomcat01会有两个网络
7、通过容器名ping通,而不是ip地址
例:docker exec -it tomcat01 ping 171.17.0.3 && docker exec -it tomcat01 ping tomcat02
a、自建一个网络:docker network create tomcat-net
b、创建容器时使用该网络:docker run -d --name tomcat01 --network tomcat-net tomcat、
docker run -d --name tomcat02 --network tomcat-net tomcat
c、docker exec -it tomcat01 ping tomcat02 可以通 。原因:可以增加一条dns记录
或者
a、创建tomcat01时link到tomcat02:docker run -d --name tomcat01 --link tomcat02 tomcat
b、docker exec -it tomcat01 ping tomcat02 可以通
总结:link很少用,更提倡使用自定义的bridge类型的网络。即可通过容器名去访问
8、端口映射
docker run -d --name tomcat01 -p 8081:8080 tomcat
访问时通过:宿主机ip:8081 或 tomcat-container的ip:8080
9、采用host网络
docker run -d --name tomcat01 --network host tomcat----->则tomcat-container网络与宿主机的网络是一样的
查看:docker exec -it tomcat01 ip a
10、两台机器中的container进行通信
vx|an---->结果多机通信的问题,底层的一个技术是overlay