1、DH 算法会因为传输随机数被破解吗?
答:DH 算法的交换材料要分公钥部分和私钥部分,公钥部分和其他非对称加密一样,都是可以传输的,所以对于安全性是没有影响的,而且传输材料远比传输原始的公钥更加安全。私钥部分是谁都不能给的,因此也是不会截获到的。
2、移动网络是如何控制不同优先级的用户的上网流量的吗?
答:这个其实是 PCRF 协议进行控制的,它可以下发命令给 PGW 来控制上网的行为和特性。
3、SDN 控制器是什么东西?
答:SDN 控制器是一个独立的集群,主要是在管控面,因为要实现一定的高可用性。
主流的开源控制器有 OpenContrail、OpenDaylight 等。当然每个网络硬件厂商都有自己的控制器,而且可以实现自己的私有协议,进行更加细粒度的控制,所以江湖一直没有办法统一。
流表是在每一台宿主机上保存的,大小限制取决于内存,而集中存放的缺点就是下发会很慢。
4、iptables 如何通过 QUEUE 实现负载均衡?
答:可以在 iptables 里面添加下面的规则:
-A PREROUTING -p tcp -m set --match-set minuteman dst,dst -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j NFQUEUE --queue-balance 50:58
-A OUTPUT -p tcp -m set --match-set minuteman dst,dst -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j NFQUEUE --queue-balance 50:58
NFQUEUE 的规则表示将把包的处理权交给用户态的一个进程。–queue-balance 表示会将包发给几个 queue。
libnetfilter_queue 是一个用户态库,用户态进程会使用 libnetfilter_queue 连接到这些 queue 中,将包读出来,根据包的内容做决策后,再放回内核进行发送。
5、一个控制云中的虚拟机的入口流量的方式
答:在云平台中,我们可以限制一个租户的默认带宽,我们仍然可以配置点对点的流量控制。
在发送方的 OVS 上,我们可以统计发送方虚拟机的网络统计数据,上报给管理面。在接收方的 OVS 上,我们同样可以收集接收方虚拟机的网络统计数据,上报给管理面。
当流量过大的时候,我们虽然不能控制接收方的入口流量,但是我们可以在管理面下发一个策略,控制发送方的出口流量。
6、对于 HTB 借流量的情况,借出去的流量能够抢回来吗?
答:借出去的流量,当自己使用的时候,是能够抢回来的。
7、虽然 VXLAN 可以支持组播,但是如果虚拟机数目比较多,在 Overlay 网络里面,广播风暴问题依然会很严重,你能想到什么办法解决这个问题吗?
答:很多情况下,物理机可以提前知道对端虚拟机的 MAC 地址,因而当发起 ARP 请求的时候,不用广播全网,只要本地返回就可以了,在 Openstack 里面称为 L2Population。
8、通过 Flannel 的网络模型可以实现容器与容器直接跨主机的互相访问,那你知道如果容器内部访问外部的服务应该怎么融合到这个网络模型中吗?
答:Pod 内到外部网络是通过 docker 引擎在 iptables 的 POSTROUTING 中的 MASQUERADE 规则实现的,将容器的地址伪装为 node IP 出去,回来时再把包 nat 回容器的地址。
有的时候,我们想给外部的一个服务使用一个固定的域名,这就需要用到 Kubernetes 里 headless service 的 ExternalName。我们可以将某个外部的地址赋给一个 Service 的名称,当容器内访问这个名字的时候,就会访问一个虚拟的 IP。然后,在容器所在的节点上,由 iptables 规则映射到外部的 IP 地址。
9、将 Calico 部署在公有云上的时候,经常会选择使用 IPIP 模式,你知道这是为什么吗?
答:一个原因是中间有路由,如果 VPC 网络是平的,但是公有云经常会有一个限制,那就是器的 IP 段是用户自己定义的,一旦出虚拟机的时候,云平台发现不是它分配的 IP,很多情况下直接就丢弃了。如果是 IPIP,出虚拟机之后,IP 还是虚拟机的 IP,就没有问题。
10、 用Service Mesh时 希望 Envoy 能够在服务不感知的情况下,将服务之间的调用全部代理了,你知道怎么做到这一点吗?
iptables 规则可以这样来设置:
首先,定义的一条规则是 ISTIO_REDIRECT 转发链。这条链不管三七二十一,都将网络包转发给 envoy 的 15000 端口。但是一开始这条链没有被挂到 iptables 默认的几条链中,所以不起作用。
接下来,在 PREROUTING 规则中使用这个转发链。从而,进入容器的所有流量都被先转发到 envoy 的 15000 端口。而 envoy 作为一个代理,已经被配置好了,将请求转发给 productpage 程序。
当 productpage 往后端进行调用的时候,就碰到了 output 链。这个链会使用转发链,将所有出容器的请求都转发到 envoy 的 15000 端口。
这样,无论是入口的流量,还是出口的流量,全部用 envoy 做成了“汉堡包”。envoy 根据服务发现的配置,做最终的对外调用。
这个时候,iptables 规则会对从 envoy 出去的流量做一个特殊处理,允许它发出去,不再使用上面的 output 规则。
此文章为10月Day14学习笔记,内容来源于极客时间《趣谈网络协议》,推荐该课程。