容器内组播

初闻组播我也是一愣,作为非计算机专业,半路出家研究容器和k8s的小白,组播对于我来说是陌生的,所以也是各种查阅资料,经历了先了解再尝试,不论是负责任还是不负责任地说,很大程度上本篇博客也是搬运工的操作,但是还是想要纪念一下我仅有的一些学习成果。

先声明一下研究组播的原因,要在容器集群管理软件上实现局域网内组播的功能,这次学习经历了对组播概念的了解,对局域网的了解,对macvlan的初步了解,关于路由和网关只有简单理解,目前并不熟悉打通局域网如何配置它们,大概过程就是这个样子,所以接下来我们一起学习吧~

目录

1. IP网络数据传输的方式

 2.组播地址

3. macvlan

4. 组播通信实现


1. IP网络数据传输的方式

单播(unicast)

单播是在一个单个的发送者和一个接受者之间通过网络进行的通信。

缺点:会因为数据包的多次重复而浪费带宽资源,源主机的负荷会因为多次的数据复制而加大。

广播(broadcast)

主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要)。

缺点:信息会发送到不需要该信息的主机从而浪费带宽资源,甚至引起广播风暴。

组播/多播(multicast)

主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。

优点:提高了数据传送效率,减少了骨干网络出现拥塞的可能性。

更形象的理解可以看一下下图:

 

 图片资料来自IP传输三种方式之组播 - 腾讯云开发者社区-腾讯云

 2.组播地址

首先了解一下五类IP地址的划分:

A类地址:第一个字节0开头,其余7位为网络地址,后3个字节为主机地址。A类地址是起始地址为:1~126,有效网络数字为126,每个网络号所包含的有效主机数为16,777,214。1.0.0.1~126.225.255.254,A类保留给政府机构。

                A类地址中的私有地址和保留地址:
                ① 10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。   范围:(10.0.0.0---10.255.255.255)。
                ② 127.X.X.X是保留地址,用做循环测试用的。

B类地址:第一个字节10开头,前2个字节为网络地址,后2个字节为主机地址,B类地址的起始地址为:128~191,有效网络数为16,382个,每个网络号所包含的有效主机数为65,531。128.0.0.1~191.255.255.254,B类分配给中等规模的公司。

                B类地址的私有地址和保留地址:
                 ① 172.16.0.0---172.31.255.255是私有地址。
                 ② 169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。191.255.255.255是广播地址,不能分配。

C类地址:第一个字节110开头,前3个字节为网络地址,后1个字节为主机地址,C类地址的起始地址为192~223,有效网络数为2,097,150个,每个网络号所包含的有效主机数为254。192.0.0.1~223.255.255.254,C类分配给任何需要的人。

                C类地址中的私有地址:
                192.168.X.X是私有地址。(192.168.0.0---192.168.255.255)

D类地址:第一个字节1110开头,通常用于多点传送或者组的寻址。224.0.0.0~239.255.255.255,D类用于组播。

                 D类地址不分网络地址和主机地址

E类地址:第一个字节11110开头,实验地址,保留给将来使用。240.0.0.0~247.255.255.255,E类用于实验,各类可容纳的地址数目不同。E类地址不分网络地址和主机地址

IP地址的资料来自说说有哪五类ip?范围是什么?_zxa1334的博客-CSDN博客_各类地址第一个字节起始范围

 我们要实现的是容器内组播的功能,所以需要使用D类地址,关于D类地址的说明如下:

 PS:可知不是所有的 D  类地址 , 都可以作为组播地址 。

3. macvlan

macvlan 本身是 linux 内核的模块,本质上是一种网卡虚拟化的技术,其功能是允许在同一个物理网卡上虚拟出多个网卡,通过不同的 MAC 地址在数据链路层进行网络数据的转发。

一块网卡上配置多个 MAC 地址,即多个接口,每个接口都可以配置自身的 IP 地址。Docker 的 macvlan 网络实际上就是使用了 Linux 提供的 macvlan 驱动功能。

因为多个 MAC 地址的网络数据包都是从同一个网卡上传输,因此需要打开网卡的混杂模式。

(上述资料来自链接:https://www.jianshu.com/p/cc481870236b)

macvlan有四种模式,分类如下:

bridge:各个子设备之间可以通信。

vepa:各个子设备直接无法直接通信(可以通过支持端口聚合的交换机通信),可以和外部通信。

private:和vepa模式类似,各个子设备之间无法通信,即使通过支持端口聚合的交换机也不能。

passthru:会接管父设备(网口),父设备不能接收数据包,并且每个父设备只允许存在一个macvlan设备。

后续测试docker-macvlan使用的是bridge模式。

4. 组播通信实现

数据源:组播程序所在的物理机作为数据源,将数据信息发给组播组地址。

组播组:设置组播组ip,并将数据源发送的信息转发给组播成员。

组播组 主机 :一般来说组播组中主机与数据源主机处于同一局域网中,在不同网络中需要有组播路由器。

组播分类 :

        因特网组播 :路由器之间的组播 ; 涉及到 IGMP 协议 和 组播路由选择协议 。

        硬件组播 :子网内的组播 。

具体实现:

首先开启网卡的混杂模式:

ip link set enp4s0 promisc on

 

 

 在安装有docker环境的主机上创建驱动为macvlan的网络:

docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.2 -o parent=enp4s0 macvlan190 

 -d : 驱动类型

--subnet:子网段

--gateway:网关

-o parent: 使用的网卡

macvlan190: 创建的macvlan的名字,自己设置即可

 

 查看网络情况:

docker network ls

 

 将需要的容器运行在该macvlan上:

docker run -it -d --name mactest1 --net macvlan190 --ip 192.168.0.207 test1:v1

 --name: mactest1为启动的容器的名字

--net: macvlan190为使用的网络

--ip: 192.168.0.207为容器的ip

test1:v1是本地镜像包的名字

 

 查看网络ping通情况,macvlan的ip无法ping通本机的ip,可以ping通同网段的其他ip: 

 查看组播测试结果,可以接收组播消息: 

猜你喜欢

转载自blog.csdn.net/q_hsolucky/article/details/125819720
今日推荐