0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Docker容器网络的数据链路是什么

汽车电子威廉希尔官方网站 来源:码农与软件时代 作者:码农与软件时代 2023-02-15 09:56 次阅读

单主机容器网络可能存在多个docker,分属于不同的bridge,它们之间有通信的需求。其基础的数据链路为:

图片

下面进行数据链路的分析。

一、环境信息

  1. 系统环境
操作系统为ubuntu14.04;
Docker version 17.05.0-ce
  1. 查看容器网络:docker network list
NETWORK ID          NAME                DRIVER              SCOPE
844c74ceea9d        bridge              bridge              local
93b0f2d679ed        docker_gwbridge     bridge              local
baa5b46a5057        host                host                local
852747e4d566        none                null                local

默认提供bridge模式的容器网络。

二、Docker基础链路

  1. 启动docker服务后,一个名为docker0的Linux bridge被创建,默认子网是172.17.0.0/16,docker0的地址是172.17.0.1。

(1)查询网络设备:ifconfig

docker0   Link encap:Ethernet  HWaddr 02:42:93:6f:2e:4f  
inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
inet6 addr: fe80::42:93ff:fe6f:2e4f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:21 errors:0 dropped:0 overruns:0 frame:0
TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
          RX bytes:1204 (1.2 KB)  TX bytes:6659 (6.6 KB)
eth0      Link encap:Ethernet  HWaddr fa:16:3e:2e:6d:3f  
inet addr:30.0.1.48  Bcast:30.0.1.255  Mask:255.255.255.0
inet6 addr: fe80::f816:3eff:fe2e:6d3f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
RX packets:28352 errors:0 dropped:0 overruns:0 frame:0
TX packets:23242 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 
RX bytes:56315936 (56.3 MB)  TX bytes:1637368 (1.6 MB)


lo        Link encap:Local Loopback  
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:480 (480.0 B)  TX bytes:480 (480.0 B)

(2)查看容器网络bridge的配置信息

docker network inspect bridge

[
    {
"Name": "bridge",
"Id": "844c74ceea9d98cd31a7bb7c0298894cecf8ba1b175dc74824c3688490336a3c",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
                {
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
                }
            ]
        }       
    }
]
  1. Docker会对从docker0流向外部的数据包进行NAT操作。这样就可以使得多个容器共享宿主机IP地址,与其他主机的实体进行通信。

(1)查看路由:ip route

default via 30.0.1.1 dev eth0 
30.0.1.0/24 dev eth0  proto kernel  scope link  src 30.0.1.48
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1

说明:iproute2的ip route命令与net-tools的route命令类似。

(2)查看iptables规则链:iptables -L -t nat

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL


Chain INPUT (policy ACCEPT)
target     prot opt source               destination         


Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  anywhere            !127.0.0.0/8          ADDRTYPE match dst-type LOCAL


Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        anywhere            
MASQUERADE  all  --  bogon/16             anywhere            


Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere

Docker的基础链路信息为:

图片

三、Docker的数据链路

1.单bridge

不指定网络选项的情况下,创建新容器将默认在docker0,IP地址为172.17.0.0/16的一个未使用地址,通常按顺序分配,如172.17.0.2、172.17.0.3。

(1)启busydox容器:docker run -it -d --name=box3 busybox

说明:busybox集成常用的linux命令和工具的软件,适应于资源有限的嵌入式系统,可以看作精简版的shell。

(2)查看docker进程:docker ps

CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
b2a846aef8c3        busybox             "sh"                 2 hours ago         Up 2 hours

(3)进入docker容器:docker exec -it b2a8 sh

/ # busybox ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:46 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:7996 (7.8 KiB)  TX bytes:0 (0.0 B)


lo        Link encap:Local Loopback  
inet addr:127.0.0.1  Mask:255.0.0.0
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

(4)访问外网:ping www.baidu.com。默认情况下,连接到docker0上的容器可以进行通信。

(5)删除SNAT规则,以序号标记查询iptables规则,执行:iptables -L -n --line-numbers

Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL


Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         


Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL


Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
6    MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
7    MASQUERADE  all  --  172.18.0.0/16        0.0.0.0/0           


Chain DOCKER (2 references)
num  target     prot opt source               destination         
1    RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
2    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

这里可以看到POST ROUTING链,源地址为172.17.0.0,目的地址是任意地址。数据包通过这个链时,便执行了NAT操作。

删除序号为6的规则(172.17.0.0/16):iptables -t nat -D POSTROUTING 6

Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL


Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         


Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL


Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
6    MASQUERADE  all  --  172.18.0.0/16        0.0.0.0/0           


Chain DOCKER (2 references)
num  target     prot opt source               destination         
1    RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
2    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

说明:MASQUERADE与SNAT类似,可以从服务器的网卡上自动获取当前ip地址来做NAT。

此时,ping www.baidu.com,则无法访问。

这样,单个主机的Docker容器网络为:

图片

再新启docker进程,docker run -it -d --name=busybox1 busybox

Docker容器网络为:

图片

2.双bridge

默认情况下,连接到docker0上的容器可以进行通信,但不同bridge上的容器是无法通信的。

(1)创建名为nwtest的bridge,子网为10.0.0.0/24

docker network create --driver=bridge --subnet=10.0.0.0/24 nwtest

(2)查看网络设备:ifconfig

br-8d3ef22d71a6 Link encap:Ethernet  HWaddr 02:42:11:0d:c7:67  
inet addr:10.0.0.1  Bcast:0.0.0.0  Mask:255.255.255.0
UP BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)




docker0   Link encap:Ethernet  HWaddr 02:42:c9:84:d8:fc  
inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
inet6 addr: fe80::42:c9ff:fe84:d8fc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:0 (0.0 B)  TX bytes:4667 (4.6 KB)




lo        Link encap:Local Loopback  
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:480 (480.0 B)  TX bytes:480 (480.0 B)




vethdb9a3fb Link encap:Ethernet  HWaddr 7e:9c:93:1d:1d:81  
inet6 addr: fe80::7c9c:93ff:fe1d:1d81/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:46 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:0 (0.0 B)  TX bytes:7996 (7.9 KB)




vethec487c4 Link encap:Ethernet  HWaddr 6e:90:8e:40:5c:1d  
inet6 addr: fe80::6c90:8eff:fe40:5c1d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:0 (0.0 B)  TX bytes:3399 (3.3 KB)

(3)查看docker网络:docker network list

NETWORK ID          NAME                DRIVER              SCOPE
57d56a34c3c8        bridge              bridge              local
93b0f2d679ed        docker_gwbridge     bridge              local
baa5b46a5057        host                host                local
852747e4d566        none                null                local
8d3ef22d71a6        nwtest              bridge              local

(4)新建Docker容器,执行命令

dockerrun -it -d --network=nwtest --name=busybox6 busybox

(5)将容器busybox1关联到网络nwtest

dockernetwork connect nwtest busybox1

(5)容器busybox1执行命令,测试是否能连通

docker exec -it 99f9 sh
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:46 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:7996 (7.8 KiB)  TX bytes:0 (0.0 B)


eth1      Link encap:Ethernet  HWaddr 02:42:0A:00:00:03  
inet addr:10.0.0.3  Bcast:0.0.0.0  Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:3398 (3.3 KiB)  TX bytes:0 (0.0 B)


lo        Link encap:Local Loopback  
inet addr:127.0.0.1  Mask:255.0.0.0
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
/ # ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: seq=0 ttl=64 time=0.952 ms
64 bytes from 10.0.0.2: seq=1 ttl=64 time=0.124 ms
64 bytes from 10.0.0.2: seq=2 ttl=64 time=0.188 ms
64 bytes from 10.0.0.2: seq=3 ttl=64 time=0.168 ms
64 bytes from 10.0.0.2: seq=4 ttl=64 time=0.186 ms
64 bytes from 10.0.0.2: seq=5 ttl=64 time=0.160 ms

综上,Docker容器网络的数据链路为:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 容器
    +关注

    关注

    0

    文章

    495

    浏览量

    22060
  • Bridge
    +关注

    关注

    0

    文章

    15

    浏览量

    11891
  • Docker
    +关注

    关注

    0

    文章

    457

    浏览量

    11847
收藏 人收藏

    评论

    相关推荐

    Matlab仿真1090ES数据链

    本帖最后由 sy9576 于 2013-4-16 22:00 编辑 如题如题,求助各位大侠,如何在Matlab编程下仿真出1090ES数据链波形?{:16:}
    发表于 04-16 21:57

    如何利用Simulink进行猝发通信系统数据链系统仿真设计?

    未来战场必是网络中心战格局下的系统一体化作战,用于制导的武器数据链是其中重要一环。通常武器数据链用于传输目标信息,信息量小,但要求信息传输必须可靠,同时将来战场通信处于复杂的电磁环境中,要求武器
    发表于 07-31 07:02

    武器数据链测试系统是什么组成的?

    传统的武器数据链测试方法多以传输系统的静态性能参数检测为主,难以对数据链出现的瞬态异常情况做出正确地判定,更不可能对正常使用情况进行动态仿真测试,最终也就不能有效地保证数据链无故障可靠应用。武器
    发表于 08-23 07:00

    基于isoSPI数据链的高可靠性车载电池系统设计

    isoSPI 数据链助力实现高可靠性车载电池系统
    发表于 09-02 14:23

    高级数据链控制的操作方式是什么?

      高级数据链控制涉及三种类型的站,即主站、从站和复合站。  主站的主要功能是发送命令(包括数据信息)帧、接收响应帧,并负责对整个的控
    发表于 11-01 09:10

    基于数据链监视的Ad Hoc网络攻击检测机制

    移动Ad hoc网络由于其动态拓扑、无线信道的特点,特别容易受到各种攻击的威胁。该文在安全路由协议的基础上,针对流量模式类攻击,提出一种基于数据链监视的攻击检测机制
    发表于 04-17 09:18 17次下载

    数据链路层的作用

    数据链路层的作用:通过一些数据链路层协议和链路控制规程,在不太可靠的物理路上实现可靠的数据传输。 “
    发表于 07-22 16:04 7064次阅读

    数据链协议,数据链协议是什么意思

    数据链协议,数据链协议是什么意思 数据链可以粗略地理解为
    发表于 03-18 15:07 690次阅读

    高级数据链控制(HDLC)是什么意思

    高级数据链控制(HDLC)是什么意思 高级数据链控制(HDLC)协议是基于的一种数据链路层协议,促进传送到下一层的
    发表于 03-18 15:30 1451次阅读

    数据链交换,什么是数据链交换

    数据链交换,什么是数据链交换 DLSw是在IP(网际协议)网络中封装IBM SNA(系统网络
    发表于 04-06 17:27 1054次阅读

    工控软件iFIX的数据链结构及其应用

    分析iFIX的 数据链 结构和数据点的处理进程调度方式,针对流量补偿计算、流量累积计算和流量控制组态,采用编写用户程序的方式解决数字
    发表于 06-17 17:23 0次下载
    工控软件iFIX的<b class='flag-5'>数据链</b><b class='flag-5'>路</b>结构及其应用

    数据链路层的功能

    数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链,使之对
    的头像 发表于 02-21 16:49 1.4w次阅读

    无人系统和地面控制站的加密数据链的演示

    此加密数据链演示代表无人系统和地面控制站之间的数据链。我们将演示从无人平台到地面控制站的加密视频
    的头像 发表于 06-27 06:11 1692次阅读

    docker容器删除后数据还在吗

    数据是否还会保留,这是一个需要深入分析和理解的问题。 本文将详细探讨Docker容器删除后数据的存储机制,从容器使用的存储驱动、
    的头像 发表于 11-23 09:32 1818次阅读

    docker容器容器之间通信

    Docker容器之间的通信方式、通信过程以及常见的通信模式。 一、Docker容器之间的通信方式 在Docker中,
    的头像 发表于 11-23 09:36 1545次阅读