Docker——7——Docker的跨主机网络

Docker的跨主机网络

一、overlay的解决方案

为支持容器跨主机通信,Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络。VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更强的扩展性和灵活性。

Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 软件,这里使用 Consul。

环境限制:

  • 必须安装key-value存储服务,如consul
  • 宿主机已经安装docker engine
  • 宿主机的hostname必须不同

实验环境:

docker01docker02docker03
192.168.1.128192.168.1.129192.168.1.150

暂时不考虑防火墙和selinux安全问题,所以将3台dockerhost防火墙和selinux全部关闭,并且分别更改主机名称:

hostnamectl set-hostname docker01
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/sysconfig/selinux
SELINUX=disabled		#修改

hostnamectl set-hostname docker02
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/sysconfig/selinux
SELINUX=disabled		#修改

hostnamectl set-hostname docker03
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/sysconfig/selinux
SELINUX=disabled		#修改

在docker01上的操作

运行consul服务

[root@docker01 ~]# docker run -d -p 8500:8500 -h consul --name consul --restart always progrium/consul -server -bootstrap
命令解释:-d:后台运行;-p 8500:8500:端口映射;-h consu:主机名(注意不是容器名);--name consul:容器名;--restart always:跟随docker的启动而启动容器;-server:server端;-bootstrap:以单节点运行;

PS:容器生产之后,可以通过浏览器访问consul服务,验证consul服务是否正常。访问dockerHost加映射端口。
在这里插入图片描述
注意:访问不到可能是因为浏览器访问界面不正常,不防换个浏览器试试<建议使用chrome>

修改docker01/02/03 的docker配置文件

docker01:
[root@docker01 ~]# vim /usr/lib/systemd/system/docker.service		#修改
……
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.128:8500 --cluster-advertise=ens33:2376
……
[root@docker01 ~]# systemctl daemon-reload 
[root@docker01 ~]# systemctl restart docker
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                            NAMES
6defb83dd292        progrium/consul     "/bin/start -server …"   22 minutes ago      Up About a minute   53/tcp, 53/udp, 8300-8302/tcp, 8400/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp   consul


docker02:
[root@docker02 ~]# vim /usr/lib/systemd/system/docker.service
……
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.128:8500 --cluster-advertise=ens33:2376
……
[root@docker02 ~]# systemctl daemon-reload 
[root@docker02 ~]# systemctl restart docker


docker03:
[root@docker03 ~]# vim /usr/lib/systemd/system/docker.service
……
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.128:8500 --cluster-advertise=ens33:2376
……
[root@docker03 ~]# systemctl daemon-reload 
[root@docker03 ~]# systemctl restart docker

PS:返回浏览器consul服务界面,找到KEY/VALUE——> DOCKER——>NODES,会看到刚刚加入的docker01/02/03的信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在docker01上创建一个自定义网络

在docker01上创建的网络,我们可以看到它的SCOPE定义的是global(全局),意味着加入到consul这个服务的docker服务,都可以看到自定义的网络。无论在哪一台上创建都是global。

[root@docker01 ~]# docker network create -d overlay ov_net1
[root@docker01 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
……
5d9ec4ef2539        ov_net1             overlay             global


[root@docker02 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
……
5d9ec4ef2539        ov_net1             overlay             global


[root@docker03 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
……
5d9ec4ef2539        ov_net1             overlay             global

同理如果是用此网络创建的容器,会有两张网卡。默认这张网卡的网段是10.0.0.0网段,如果想要docker02也可能看到这个网络,那么也只需在docker02的docker配置文件添加相应内容即可。
同理,因为是自定义网络,符合自定义网络的特性,可以直接通过 docker 容器的名称相互通信。

[root@docker01 ~]# docker run -itd --name ov_box1 --network ov_net1 busybox
[root@docker01 ~]# docker exec -it ov_box1 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue 
    link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.2/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
15: eth1@if16: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth1
       valid_lft forever preferred_lft forever


[root@docker02 ~]# docker run -itd --name ov_box2 --network ov_net1 busybox
[root@docker02 ~]# docker exec -it ov_box2 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue 
    link/ether 02:42:0a:00:00:03 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
11: eth1@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth1
       valid_lft forever preferred_lft forever


[root@docker01 ~]# docker exec -it ov_box1 sh
/ # ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3): 56 data bytes
64 bytes from 10.0.0.3: seq=0 ttl=64 time=2.802 ms
64 bytes from 10.0.0.3: seq=1 ttl=64 time=0.808 ms
……
/ # ping ov_box2		#能够通过容器名ping
PING ov_box2 (10.0.0.3): 56 data bytes
64 bytes from 10.0.0.3: seq=0 ttl=64 time=0.419 ms
64 bytes from 10.0.0.3: seq=1 ttl=64 time=0.429 ms

当然也可以在自定义网络的时候,指定它的网段,那么使用此网络的容器也可以指定IP地址。

小实验:

在任意一个节点,创建一个overlay网络:要求自定义网段、网关,并且使用此网络创建指定IP地址的容器,验证在不同节点,容器可以跨主机访问。

[root@docker01 ~]# docker network create -d overlay --subnet 10.10.0.0/24 --gateway 10.10.0.1 ov_net2
[root@docker01 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
……
24f4913e148a        ov_net2             overlay             global
[root@docker01 ~]# docker run -itd --name ov_box3 --network ov_net2 --ip 10.10.0.6 busybox
[root@docker01 ~]# docker exec -it ov_box3 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue 
    link/ether 02:42:0a:0a:00:06 brd ff:ff:ff:ff:ff:ff
    inet 10.10.0.6/24 brd 10.10.0.255 scope global eth0
       valid_lft forever preferred_lft forever
20: eth1@if21: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.3/16 brd 172.18.255.255 scope global eth1
       valid_lft forever preferred_lft forever



[root@docker02 ~]# docker run -itd --name ov_box4 --network ov_net2 --ip 10.10.0.8 busybox
[root@docker02 ~]# docker exec -it ov_box4 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue 
    link/ether 02:42:0a:0a:00:08 brd ff:ff:ff:ff:ff:ff
    inet 10.10.0.8/24 brd 10.10.0.255 scope global eth0
       valid_lft forever preferred_lft forever
16: eth1@if17: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.3/16 brd 172.18.255.255 scope global eth1
       valid_lft forever preferred_lft forever



[root@docker01 ~]# docker exec -it ov_box3 sh
/ # ping 10.10.0.8
PING 10.10.0.8 (10.10.0.8): 56 data bytes
64 bytes from 10.10.0.8: seq=0 ttl=64 time=0.547 ms
64 bytes from 10.10.0.8: seq=1 ttl=64 time=0.834 ms
……
/ # ping ov_box4
PING ov_box4 (10.10.0.8): 56 data bytes
64 bytes from 10.10.0.8: seq=0 ttl=64 time=0.632 ms
64 bytes from 10.10.0.8: seq=1 ttl=64 time=1.523 ms
……

在这里插入图片描述

二、Docker跨主机网络方案之MacVlan

除了overlay,docker 还开发了另一个支持跨主机容器网络的 driver:macvlan。

macvlan 本身是 Linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。macvlan 本质上是一种网卡虚拟化技术,Docker 用 macvlan 实现容器网络就不奇怪了。

macvlan 的最大优点是性能极好,相比其他实现,macvlan 不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络。

实验环境:

docker01docker02
192.168.1.128192.168.1.129

关闭防火墙和禁用selinux,更改主机名

hostnamectl set-hostname docker01
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/sysconfig/selinux
SELINUX=disabled		#修改

hostnamectl set-hostname docker02
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/sysconfig/selinux
SELINUX=disabled		#修改

1、macvlan的单网络通信

在这里插入图片描述

1)打开网卡的混杂模式

需要在docker01和docker02上都进行操作

[root@docker01 ~]# ip link set ens33 promisc on
[root@docker01 ~]# ip link show ens33
2: ens33: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:1e:20:7b brd ff:ff:ff:ff:ff:ff


[root@docker02 ~]# ip link set ens33 promisc on
[root@docker02 ~]# ip link show ens33
2: ens33: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:d4:1e:11 brd ff:ff:ff:ff:ff:ff
2)在docker01上创建macvlan网络
[root@docker01 ~]# docker network create -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1
[root@docker01 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
5f619c085a58        mac_net1            macvlan             local

PS:-o parent=绑定在哪张网卡之上

3)基于创建的macvlan网络运行一个容器
[root@docker01 ~]# docker run -itd --name mac_box1 --network mac_net1 --ip 172.22.16.10 busybox
[root@docker01 ~]# docker exec -it mac_box1 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
22: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:16:10:0a brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.10/24 brd 172.22.16.255 scope global eth0
       valid_lft forever preferred_lft forever
4)在docker02上创建macvlan网络,注意与docker01上的macvlan网络一模一样
[root@docker02 ~]# docker network create -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1
[root@docker02 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
41d3ab0e52a0        mac_net1            macvlan             local
5)在docker02上,基于创建的macvlan网络运行一个容器,验证与docker01上容器的通信
[root@docker02 ~]# docker run -itd --name mac_box2 --network mac_net1 --ip 172.22.16.11 busybox
[root@docker02 ~]# docker exec -it mac_box2 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
18: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:16:10:0b brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.11/24 brd 172.22.16.255 scope global eth0
       valid_lft forever preferred_lft forever

验证与docker01容器与docker02容器的通信

[root@docker01 ~]# docker exec -it mac_box1 sh
/ # ping 172.22.16.11
PING 172.22.16.11 (172.22.16.11): 56 data bytes
64 bytes from 172.22.16.11: seq=0 ttl=64 time=0.651 ms
64 bytes from 172.22.16.11: seq=1 ttl=64 time=0.553 ms

2、macvlan的多网络通信

在这里插入图片描述

1)docker01和docker02验证内核模块8021q封装

macvlan需要解决的问题:基于真实的ens33网卡,生产新的虚拟网卡。

[root@docker01 ~]# modinfo 8021q

如果内核模块没有开启,运行下边的命令导入一下

[root@docker01 ~]# modprobe 8021q



[root@docker02 ~]# modinfo 8021q

如果内核模块没有开启,运行下边的命令导入一下

[root@docker02 ~]# modprobe 8021q
2)基于ens33创建虚拟网卡

修改ens33网卡配置文件

[root@docker01 ~]# cd /etc/sysconfig/network-scripts/
[root@docker01 network-scripts]# vim ifcfg-ens33
BOOTPROTO=manual			#修改      手动模式

手动添加虚拟网卡配置文件

[root@docker01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.10		#-p 保留源文件或目录的属性
[root@docker01 network-scripts]# vim ifcfg-ens33.10
BOOTPROTO=manual
NAME=ens33.10
DEVICE=ens33.10
ONBOOT=yes
IPADDR=192.168.10.10
PREFIX=24
GATEWAY=192.168.10.2
VLAN=yes

PS:这里注意,IP要和ens33网段做一个区分,保证网关和网段IP的一致性,设备名称和配置文件的一致性,并且打开VLAN支持模式。

创建第二个虚拟网卡配置文件

[root@docker01 network-scripts]# cp ifcfg-ens33.10 ifcfg-ens33.20
[root@docker01 network-scripts]# vim ifcfg-ens33.20
BOOTPROTO=manual
NAME=ens33.20
DEVICE=ens33.20
ONBOOT=yes
IPADDR=192.168.20.20
PREFIX=24
GATEWAY=192.168.20.2
VLAN=yes
3)docker01上的操作,启用创建的虚拟网卡
[root@docker01 network-scripts]# ifup ifcfg-ens33.10
[root@docker01 network-scripts]# ifup ifcfg-ens33.20
[root@docker01 network-scripts]# ip a
……
23: ens33.10@ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:0c:29:1e:20:7b brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.10/24 brd 192.168.10.255 scope global ens33.10
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe1e:207b/64 scope link 
       valid_lft forever preferred_lft forever
24: ens33.20@ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:0c:29:1e:20:7b brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.20/24 brd 192.168.20.255 scope global ens33.20
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe1e:207b/64 scope link 
       valid_lft forever preferred_lft forever

PS:如果此时有重启网卡的操作,注意验证ens33.10和ens33.20网卡必须是启用的,正在运行的,如果没有则再次开启即可。

4)基于虚拟网卡,创建macvlan网络
[root@docker01 ~]# docker network create -d macvlan --subnet 172.16.10.0/24 --gateway 172.16.10.1 -o parent=ens33.10 mac_net10
[root@docker01 ~]# docker network create -d macvlan --subnet 172.16.20.0/24 --gateway 172.16.20.1 -o parent=ens33.20 mac_net20
5)基于上述创建的macvlan网络,运行对应的容器,不过这里需要注意,运行的容器与网络对应的网段相符合,还需要注意,IP地址的唯一性。
[root@docker01 ~]# docker run -itd --name mac_box10 --network mac_net10 --ip 172.16.10.10 busybox
[root@docker01 ~]# docker run -itd --name mac_box20 --network mac_net20 --ip 172.16.20.20 busybox
6)在docker02上进行操作,创建网络及容器

这里只需注意,我们在这里的操作跟在docker01上的操作是一模一样的,操作顺序大致为:
1)验证8021q内核封装
2)基于ens33网卡创建新的虚拟网卡,ens33.10和 ens33.20(注意和docker01上的ens33.10和ens33.20必须是在同一网段,且IP不能冲突)
3)基于此网络运行容器。(注意和docker01上的容器,都是基于刚刚创建的macvlan网络,但IP地址不能冲突)

[root@docker01 network-scripts]# scp ifcfg-ens33.10 ifcfg-ens33.20 192.168.1.129:/etc/sysconfig/network-scripts/


[root@docker02 ~]# cd /etc/sysconfig/network-scripts/
[root@docker02 network-scripts]# vim ifcfg-ens33
BOOTPROTO=manual			#修改
[root@docker02 network-scripts]# vim ifcfg-ens33.10
BOOTPROTO=manual
NAME=ens33.10
DEVICE=ens33.10
ONBOOT=yes
IPADDR=192.168.10.11			#修改
PREFIX=24
GATEWAY=192.168.10.2
VLAN=yes
[root@docker02 network-scripts]# vim ifcfg-ens33.20
BOOTPROTO=manual
NAME=ens33.20
DEVICE=ens33.20
ONBOOT=yes
IPADDR=192.168.20.21			#修改
PREFIX=24
GATEWAY=192.168.20.2
VLAN=yes
[root@docker02 network-scripts]# ifup ifcfg-ens33.10
[root@docker02 network-scripts]# ifup ifcfg-ens33.20
[root@docker02 network-scripts]# ip a
19: ens33.10@ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:0c:29:d4:1e:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.11/24 brd 192.168.10.255 scope global ens33.10
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed4:1e11/64 scope link 
       valid_lft forever preferred_lft forever
20: ens33.20@ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:0c:29:d4:1e:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.21/24 brd 192.168.20.255 scope global ens33.20
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed4:1e11/64 scope link 
       valid_lft forever preferred_lft forever

[root@docker02 ~]# docker network create -d macvlan --subnet 172.16.10.0/24 --gateway 172.16.10.1 -o parent=ens33.10 mac_net10
[root@docker02 ~]# docker network create -d macvlan --subnet 172.16.20.0/24 --gateway 172.16.20.1 -o parent=ens33.20 mac_net20

[root@docker02 ~]# docker run -itd --name mac_box11 --network mac_net10 --ip 172.16.10.11 busybox
[root@docker02 ~]# docker run -itd --name mac_box21 --network mac_net20 --ip 172.16.20.21 busybox
7)验证:

在docker01上进入容器mac_box10和docker02上的mac_box11进行通信。
在docker01上进入容器mac_box20和docker02上的mac_box21进行通信。
注意:VMware 的网络必须设置为Bridge模式。

[root@docker01 ~]# docker exec -it mac_box10 sh
/ # ping 172.16.10.11
PING 172.16.10.11 (172.16.10.11): 56 data bytes

[root@docker01 ~]# docker exec -it mac_box20 sh
/ # ping 172.16.20.21
PING 172.16.20.21 (172.16.20.21): 56 data bytes
修改两台 dockerhost 的网络为Bridge模式在这里插入图片描述在这里插入图片描述
[root@docker01 ~]# docker exec -it mac_box10 sh
/ # ping 172.16.10.11
PING 172.16.10.11 (172.16.10.11): 56 data bytes
64 bytes from 172.16.10.11: seq=0 ttl=64 time=1.944 ms
64 bytes from 172.16.10.11: seq=1 ttl=64 time=0.631 ms
……

[root@docker01 ~]# docker exec -it mac_box20 sh
/ # ping 172.16.20.21
PING 172.16.20.21 (172.16.20.21): 56 data bytes
64 bytes from 172.16.20.21: seq=0 ttl=64 time=0.573 ms
64 bytes from 172.16.20.21: seq=1 ttl=64 time=1.699 ms
……
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值