Flannel是一种容器网络解决方案,它使用overlay网络模型来连接不同的容器和主机。
MTU(最大传输单元)是网络中能够通过的最大数据包大小。

从flannel0读取数据的buffer缓冲区大小defaultMTU是1472,为什么是1472而不是默认的1500呢?
原因是flanneld从flannel0收到数据后会封装成UDP数据,发出去的UDP数据包会增加一个IP头(20字节)和一个UDP头(8)字节。
如果flannel0的MTU继续设置1500,加上IP和UDP头的28字节数据,到达宿主机eth0的时候最大报文会超过eth0的MTU,eth0会把该数据包丢弃。
对于Flannel网络,通常建议将MTU设置为1450或更小。
这是因为Flannel使用了额外的封装层来实现容器之间的通信,这些封装层会增加数据包的大小。
在一些网络环境中,如果MTU设置过大,可能会导致数据包被分片,从而引起性能问题。
因此,将MTU设置为1450或更小可以确保数据包不会被分片,从而提高网络性能。
请注意,具体的MTU设置可能因网络环境而异,建议根据实际情况进行调整。
如果多个节点相互通信,flanneld是怎么确定数据包该发往哪台主机呢?
其实很简单,我们可以借助etcd维护网段与节点IP的关系,flanneld收到数据包后,解析出报文中的目的IP,再与etcd中的维护的网段做计算,就可以得到目标宿主机的IP。
主机间通信使用“不可靠”的UDP协议?
flanneld是把收到的数据包以UDP的形式发到其它机器,UDP协议不是“不可靠”协议吗?如果数据包丢了怎么办?
其实 flanneld在这里充当的是链路层的角色,是允许丢包的,而丢包重传是上层该考虑的事情。
举个例子,比如文章中的1.1.1.2与1.1.2.2建立的是TCP连接,在某个数据报文中flanneld发出去的报文丢了,此时TCP协议会有重传机制。
网友评论