Kubernetes 网络MAC地址 电脑版发表于:2022/4/8 21:57  >#Kubernetes 网络MAC地址 [TOC] ## MAC简介 tn2>MAC (Media Access Control) 地址用来定义网络设备的位置。MAC地址由48比特长、12位的16进制数字组成,其中从左到右开始,0到23bit是厂商向IETF等机构申请用来表示厂商的代码(OUI),24到47bit由厂家自行分配,是各个厂商制造到所有网卡到一个唯一编号。 MAC地址可以分为3种类型:物理MAC地址,广播MAC地址,组播MAC地址。 | 类型 | 描述 | | ------------ | ------------ | | 物理MAC地址 | 这种类型的MAC地址唯一的标识了以太网上的一个终端,该地址为全球唯一的硬件地址。 | | 广播MAC地址 | 全1的MAC地址(FF-FF-FF-FF-FF-FF),用来表示LAN上所有终端设备。 | | | | ## 物理MAC地址 tn>这种类型的MAC地址唯一的标识了以太网上的一个终端,该地址为全球唯一的硬件地址。 tn2>在ENSP中首先添加两个PC到交换机中,并为这两台PC手动填写掩码与ip。 我们通过右键打开两台PC的设置,发现已经存在了物理Mac地址,分别是:`54-89-98-9A-36-CD`与`54-89-98-77-3C-4C`。 这里我们设置PC1的IP为`192.168.1.1`,设置PC2的IP为`192.168.1.2`。子掩码都将其设置为`255.255.255.0`。    tn2>然后我们打开PC1的命令行,通过`ipconfig`命令查看网络配置情况,随后我们向PC2`192.168.1.2`发送ping包。   tn2>随后我们点击PC1右键再点抓包,选择`GE 0\0\2`接口然后会启动Wireshark抓取PC1所请求的包。  tn2>我们可以通过这张图清楚的看到一个Ping包是基于ICMP协议来发送的,并且IP与IP之间的请求与响应有来有回。 `Ethernet II`表示交换机处理层,在这一栏下面我们可以看到请求源与接收源,并且前面的 `HuaweiTe_`表示的是设备厂商的MAC地址(如果是戴尔的可能会发现`Dell_xxx`),所对应的16进制为`548998`转换为二进制后为23bit,后面的6位16进制是自定义生成的; Type表示协议的类型这里是`IPv4`,在下一栏中`Internet Protocol Version 4`同样表示的是IPv4类型的包。 `Src`表示发送源IP。 `Dst`表示接收源IP。 ## 广播MAC地址 tn>广播MAC地址:全1的MAC地址(FF-FF-FF-FF-FF-FF),用来表示LAN上所有终端设备。 tn2>简单来讲:你在一个群里面你要找一个张三的人,但你不知道他的网名叫什么,所以在群里说了一句"谁叫张三啊?",然后不是张三的人就不会回你,是张三就会回你,张三回你后你就会备注一下,这就是广播。 (而`FF-FF-FF-FF-FF-FF`就是广播地址) 值得注意的是在这里其他不是张三的人也会收到通知,所以其他设备也会收到这个包,但不会做出响应。 (有兴趣肯定会想到如果不是张三的人说自己是张三,就有了`ARP`中间人攻击,可以网上搜搜看)。 不知道在上面的中朋友们有没有注意到,在发送Ping包之前呢。有两个ARP的包,第一个ARP发送到的就是`FF-FF-FF-FF-FF-FF`广播Mac地址,然后在第二个包就被找到了他们就联系上了。  tn2>电脑那么智能啊?说联系上就联系上了,当然没那么简单。其实他们被存到了交换机的Mac表地址中,他们第一次发送ping时交换机Mac表中是不存在他们的记录的,随后就发送广播通知,然后将他们的mac地址与接口记录到交换机的mac表中去。并且在他们的本地也有一个Arp的缓存。 我们先打开交换机输入查看mac表的命令:`dis mac-address`。 如果我们要清空mac表中的地址的话输入命令:`undo mac-address`  tn2>图中表所呈现的如下表。也就是说在这之后呢,你PC1再找PC2的话我就从`GE0/0/3`接口转发出去。反之你PC2来找PC1我从`GE0/0/2`接口给你转发出去,这个接口就是与交换机连接的线条。 | 电脑名 | ip | mac | 接口 | | ------------ | ------------ | ------------ | ------------ | | PC1 | 192.168.1.1 | 54-89-98-9A-36-CD | GE0/0/2 | | PC2 | 192.168.1.2 | 54-89-98-77-3C-4C | GE0/0/3 |  tn2>除此之外,在经过第一次查询后,本地会存储相关的地址到arp cache中可以通过`arp -a`命令进行查看,如果本地的arp cache里面存在该IP,并且交换机mac表中也存在该mac,将进行直接访问不会进行请求广播mac地址。 (还可以通过`arp -d`命令进行删除)  ## 组播MAC地址 tn>除了广播地址外,第3bit为1的MAC地址为组播MAC地址(例如01-00-00-00-00-00),用来代表LAN上的一组终端。 tn2>简单来讲基于广播地址的基础之上,进行一个分组。 ## 动态MAC地址(Dynamic MAC) >### MAC 老化过程 tn2>在讲动态MAC地址之前呢,我们有个问题需要说明一下。那就是如果我们每一个设备连上交换机的时候,交换机都会去表里添加一条记录,如果添加很多了的话就会导致内存溢出的情况。所以变添加了老化时间的一个机制,当某个mac地址长时间不发包,我们就可以删除它,这样就节省了内存避免了内存溢出。下面将展示老化过程的生存周期。  tn2>设备MAC地址老化的时间设置为T。在t1时刻有源MAC地址为`00e0-fc00-0001`、VLAN为1的报文从某接口进入。假定该接口已加入VLAN 1。如果之前MAC地址表不存在关于(MAC:`00e0-fc00-0001`,VLAN:1)的任何种类表项,那么这个地址就会作为动态MAC地址表项添加到地址表里,同时该表项进行检查。 -- 在t2时刻,检查到动态表项(MAC:00e0-fc00-0001,VLAN:1)的命中标志位为1,则将该表项的命中标志位置为0,但不删除这条表项。 -- 在t2时刻和t3时刻之间没有这种报文进入设备,那么该表项的命中标志位会一直保持为0 -- 在t3时刻,设备检查到该表项的命中标志位0,认为该表项的老化时间到达,将删除此条表项。 >### 动态MAC的介绍 tn2>由交换机从接收到报文自动识别到MAC地址,当端口收到一个报文时,会查找报文的源MAC地址是否存在于MAC地址表中,如果不存在则会将相应的端口、VLAN和源MAC地址关联起来,并保存到MAC地址表中,动态MAC地址在到达一定老化时间后会被老化删除,但如果该地址在老化时间内被正确使用过,则会重新激活该条地址的老化时间,同时MAC地址和端口(接口)的对应关系会随着设备所连的交换机的端口的变化而变换。 (通过下图所示,交换机已经老化了所有的mac地址)  ## 静态MAC地址(Static MAC) tn>简单来讲它不会收到mac表的老化的影响,它将永久存在于交换机的mac表项中。 tn2>举个例子,假如你家的网经常被陌生人蹭来蹭去,你就把你们家所有的设备的mac地址都加入静态中,这样外人就连接不上你家wifi了。 ## 过滤MAC地址、黑洞MAC地址 tn>由用户通过命令配置的静态过滤的MAC地址,当网关接收到的报文中,源或者目的MAC 地址为过滤MAC地址,则直接丢弃该报文。 tn2>简单来讲:黑名单。 ## MAC 地址表 tn2>设备添加MAC地址的方法如下:如果从某接口(假设为接口A `GE0/0/1`)收到一个数据帧,设备就会分析该数据的源MAC地址(假设为MAC-SOURCE)并认为目的MAC地址为MAC-SOURCE的报文可以由接口A转发;如果MAC地址表中已经包含MAC-SOURCE,设备将对该表项进行更新;如果MAC地址表中尚未包含MAC-SOURCE,设备则将这个新的MAC地址以及该MAC地址对应的接口A作为一个新的表项目加入到MAC地址种。 Note:用户手工配置的静态MAC地址表项和黑洞MAC地址表项不会被动态的MAC地址表覆盖,而动态MAC地址表项可以被静止MAC地址表项和黑洞MAC地址表项覆盖。 tn>设备在转发报文时,根据MAC地址表项信息,会采取以下两种转发方式:单播方式与广播方式 >### 单播方式 tn2>当MAC地址表中包含与报文目的MAC地址对应的表项时,直接将报文从该表项中的转发出接口发送。 (举例:有ABC三台PC,A往B发包,交换机有A与B的地址,C不会接收到B的包) >### 多播方式 tn2>当设备收到目的地址为全1的报文,或MAC地址表中没有包含对应报文目的MAC地址的表项时,设备将会采取广播方式将报文向除接收接口外的所有接口进行转发。 (举例:当我们交换机上MAC地址表没有这ABC的地址,那么将会对所有设备发送包来确认) ## 泛洪 tn2>当主机本地缓存有目标地址的记录,但路由器没有的情况下,它也会进行广播,但这种情况专业一点就被称之为泛洪。