这篇文章给大家介绍印花网络通信的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
1。印花网络模型揭秘
下面我们通过具体的例子来帮助大家理解印花网络的通信原理。任意选择k8集群中的一个节点作为实验节点,进入容器,查看容器的IP地址:
<>之前,美元ip 1:,瞧:& lt;环回,,lower_up>, mtu 65536, qdisc noqueue state UNKNOWN qlen 1000 ,,,联系/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 ,,,inet 127.0.0.1/8 scope host 瞧 ,,,,,,valid_lft forever preferred_lft 直到永远 3:,eth0@if771: & lt;广播、多播,,lower_up, m-down>, mtu 1440年,qdisc noqueue state ,,,联系/ether 66: fb: 34: db:制备过程:b4 brd ff: ff: ff: ff: ff: ff ,,,inet 172.17.8.2/32 scope global eth0 ,,,,,,valid_lft forever preferred_lft 永远这里容器获取的是/32位主机地址,表示将容器一个作为一个单点的局域网。
瞄一眼容器一个的默认路由:
<>之前,美元ip 路线 default via  169.254.1.1 dev  eth0 169.254.1.1 dev  eth0 scope 链接现在问题来了,从路由表可以知道<代码> 169.254.1.1> 代码是容器的默认网关,但却找不到任何一张网卡对应这个IP地址,这是个什么鬼?
莫慌,先回忆一下,当一个数据包的目的地址不是本机时,就会查询路由表,从路由表中查到网关后,它首先会通过<代码> ARP 代码>获得网关的MAC地址,然后在发出的网络数据包中将目标MAC改为网关的MAC,而网关的IP地址不会出现在任何网络包头中。也就是说,没有人在乎这个IP地址究竟是什么,只要能找到对应的MAC地址,能响应ARP就行了。
想到这里,我们就可以继续往下进行了,可以通过IP马嘶<代码> 代码>命令查看一下本地的ARP缓存:
<>之前,美元ip 马嘶声 169.254.1.1 dev  eth0 lladdr  ee: ee: ee: ee: ee: ee 可及这个MAC地址应该是棉布硬塞进去的,而且还能响应ARP。但它究竟是怎么实现的呢?
我们先来回想一下正常情况,内核会对外发送ARP请求,询问整个二层网络中谁拥有<代码> 169.254.1.1 代码>这个IP地址,拥有这个IP地址的设备会将自己的MAC地址返回给对方。但现在的情况比较尴尬,容器和主机都没有这个IP地址,甚至连主机上的端口<代码> calicba2f87f6bb> 代码,MAC地址也是一个无用的<代码> ee: ee: ee: ee: ee: ee> 代码。按道理容器和主机网络根本就无法通信才对呀!所以棉布是怎么做到的呢?
这里我就不绕弯子了,实际上白布利用了网卡的代理ARP功能。代理ARP是ARP协议的一个变种,当ARP请求目标跨网段时,网关设备收到此ARP请求,会用自己的MAC地址返回给请求者,这便是代理ARP(代理ARP)。举个例子:
上面这张图中,电脑发送ARP请求服务器8.8.8.8的MAC地址,路由器(网关)收到这个请求时会进行判断,由于目标8.8.8.8不属于本网段(即跨网段),此时便返回自己的接口MAC地址给电脑,后续电脑访问服务器时,目标MAC直接封装为MAC254。
现在我们知道,印花棉布的本质上还是利用了代理ARP撒了一个“善意的谎言”,下面我们来确认一下。
查看宿主机的网卡信息和路由信息:
<>之前,美元ip addr … 771年:,calicba2f87f6bb@if4: & lt;广播、多播,,lower_up>, mtu 1440年,qdisc noqueue state UP group 违约 ,,,联系/ether ee: ee: ee: ee: ee: ee brd ff: ff: ff: ff: ff: ff link-netnsid 14 ,,,inet6 fe80:: ecee: eeff: feee: eeee/64, scope 链接 ,,,,,,valid_lft forever preferred_lft 直到永远 … 美元,ip route … 172.17.8.2 dev  calicba2f87f6bb scope 链接 …查看是否开启代理ARP:
<>之前,美元cat /proc/sys/net/ipv4/conf/calicba2f87f6bb/proxy_arp 1如果还不放心,可以通过tcpdump抓包验证一下:
<>之前,美元tcpdump 小姐;calicba2f87f6bb -e 神经网络 tcpdump: verbose output 镇压,,use -v 或是-vv for full protocol 解码 listening 提醒calicba2f87f6bb, link-type EN10MB (以太网),capture size 262144字节 14:27:13.565539 ee: ee: ee: ee: ee: ee 和gt;, 0: 58:交流:1 c: ce: 12日,ethertype IPv4 (0 x0800), length 4191年,10.96.0.1.443 和gt;, 172.17.8.2.36180:, Flags [p], seq 403862039:403866164,, ack 2023703985,, win 990年,options [nop、nop TS val 331780572, ecr 603755526), length 4125 14:27:13.565613 0: 58:交流:1 c: ce: 12,和gt;, ee: ee: ee: ee: ee: ee,, ethertype IPv4 (0 x0800), length 66年,172.17.8.2.36180 和gt;, 10.96.0.1.443:, Flags (。), ack 4125年,win 2465年,options [nop、nop TS val 603758497, ecr 331780572),, length 0