概念
1· 所谓“网络栈”: 包括 网卡 iptables 路由表 回环设备
2· 容器 主要通过linux Cgroup ,namespace ,联合文件系统 技术实现
3·namespaces 主要有 pid, network, mount,ipc,user,uts
4·容器进程有自己的network namespaces网络栈,
容器网络通信的本质?
其实就是为了 容器进程之间在不同的network namespace之间通信
其实可以把每一个容器看做一台主机,它们都有一套独立的“网络栈”。
如果你想要实现两台主机之间的通信,最直接的办法,就是把它们用一根网线连接起来
如果你想要实现多台主机之间的通信, 需要用网线把它们连接到一台交换机上
linux 虚拟交换机
在linux 上能实现虚拟交换机功能 网桥 工作在数据链路层, 通过mac学习 把数据包转发到不同的端口上去, DOCKER 在宿主机 生成网桥docker0
veth pair 设备
一个容器会在宿主机创建一个 veth29392虚拟网卡, 通过 brctl show 可以看到被插在了docker0网桥上去,容器里有一张叫作 eth0 的网卡,它正是一个 Veth Pair 设备在容器里的这一端。
通信
1~ 通过 arp协议 维护cam 表(即交换机通过 MAC 地址学习维护的端口和 MAC 地址的对应表)
2~docker0 会有一个ip cidr 容器1 访问 容器2 容果docker0 解析 到具体的veth213端口 通过 arp协议 获取mac地址 通过cam维护mac地址 和端口的关系.