Docker源码学习进度(5)
1.网络基础
linux 命令
①ip netns add ns1 创建一个网络Namespace
②ip link add vech0 type vech peer name vech1 用于创建虚拟网络设备
③ip link set vech0 netns ns1 将网络设备放入Namespace中
④ip netns exec ns1 ifconfig vech0 172.18.0.2/24 up
配置网络设备地址
⑤ip netns exec ns1 route add default(目的ip) dev vech0(发往的目的)
其中default表示0.0.0.0,就是网络中的所有主机
表示所有的网络设备都经过vech0,
添加路由是什么意思.
在一个Net Namespace下,必然有一个路由器, 而添加路由指的是
将Namespace的目的ip发往目的
⑥brch1 addbr br0 创建网桥
⑦brch1 addif br0 ech0 将设备放入网桥
2.NET的实现
①type Network struct {
Name string //网络名,例如testbridgenet
IpRange *net.IPNet //网络的IP地址
Driver string //网络驱动名, 例如Bridge.
}
type Endpoint struct {
ID string `json:"id"` //这个ID是关于container的ID
Device netlink.Veth `json:"dev"` //
IPAddress net.IP `json:"ip"` //这个是端口的IP
MacAddress net.HardwareAddr `json:"mac" //`端口的MAC地址
Network *Network //连接的网络
PortMapping []string //Port maping 的方式
}
②dump与load
主要功能为将Network结构写入到文件中,以及将文件中的内容写入到Network中.
③CreateNetwork
①通过net.ParseCIDR将subnet转化为net.IPNet的对象
②通过IPAM分配网关IP
③将前面创建的IPNet的IP设置为分配的IP
④调用drive的Create创建一个wetwork.
④Connect
①为容器创建IP地址。
②为容器创建一个Endpoint
③将endPoint与network相连