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相连

3.IPAM的实现


4.Bridge的实现

你可能感兴趣的:(Docker源码学习进度(5))