透析计算机网络

透析计算机网络

计算机网络由若干个节点和连接这些节点的链路组成,网络中的节点可以是计算机,交换机,路由器。链路使用的介质可以是网线,电磁波。

五层网络

在这里插入图片描述
1,应用层: 应用层协议定义的是应用进程之间通信交互的规则,比如在jvm进程中,使用netty进行通讯,netty的编码器,解码器就是应用层的规则。
2,**传输层:**当数据到达了目的计算机,想象一下如果计算机上有redis进程,也有jvm进程,那数据要送到哪个进程进行处理呢,这时候就需要传输层的端口号。每个进程都有端口号。根据端口进行数据转发。传输层协议有UDP协议(不可靠传输),以及TCP/IP协议(可靠传输)。
先看下upd协议的头部,指定了源端口,以及目的端口。
在这里插入图片描述
tcp/ip协议头部较为复杂。如下:
在这里插入图片描述
3,网络层: 数据在节点跟链路中传输,MAC地址是不断的去改变的,为了保证数据的唯一标识,所以出现了IP地址。每台机器都有IP地址,数据传输过程mac地址不断的在改变。但是ip地址不会变。这就有点像微服务调用过程的traceId,通过相同的traceId可以追踪整个调用的链路。
4,**数据链路层:**在两个相邻节点之间传输时,数据链路层将网络层交下来的ip数据包组装成帧,在两个相邻加点进行传输,每一帧还包括了必要的控制信息(如同步信息,地址信息,差错控制),控制信息使得接收端能够判断收到的帧有无差错,如果有差错就直接丢弃。所以在传输层有TCP/IP协议,如果对方没接到数据,需要做重发。以保证可靠传输。帧的最大传输单元叫MTU,可以看到我们机器上MTU为1500字节。
在这里插入图片描述

5,物理层: 这个理解成我们常用的网线,电信号或者光信号物理传输的媒体。

NAT

在这里插入图片描述
1,内网机器ip为192.168.0.3的机器想要给主机B,ip地址为21.18.2.4的机器发数据,第一步将ip数据包发给路由器。
2,路由器接收到数据,发现目标地址是需要通过公网发送出去,这时需要做网络地址转换,也就是NAT。将源地址改为172.38.1.5。然后通过网络服务提供商ISP进行转发到主机B

VPN

在这里插入图片描述
局域网A一台机器10.1.0.1想要访问局域网B10.2.0.3这台机器,由于这两个ip地址都为内网地址无法在公网上传输,这时需要通过vpn软件,将ip数据包再包一层,将原来的ip数据包加密,然后在加上ip层头部,源地址,目标地址。数据报到了目的网络,经过vpn软件进行解密。还原到原来的ip数据包。发给目标机器上进行处理。在k8s中flannel 技术实现虚拟局域网的原理跟vpn的原理极其相似。

K8S虚拟网络

目前我们生产环境用的cni插件,使用的是calico。首先了解下另外一款cni插件flannel。
在这里插入图片描述

1、数据从源容器中发出后,经由所在主机的docker0网桥转发到flannel0虚拟网卡,这是虚拟网卡,flanneld服务监听在网卡的另外一端。
2、Flannel通过Etcd服务维护了一张节点间的路由表,该张表里保存了各个节点主机的子网网段信息。
3、源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达以后被解包,然后直接进入目的节点的flannel0虚拟网卡,然后被转发到目的主机的docker0虚拟网卡,最后就像本机容器通信一样的由docker0路由到达目标容器。
这个flanneld服务相当于就是vpn软件,把原来的ip数据包再包一层转发出去。

calicoIPIP模式原理:其实原理跟flannel差不多,也是会进行封包,然后通过宿主机发送出去。
在这里插入图片描述
IPIP 是linux内核的驱动程序,可以对数据包进行隧道,上图可以看到两个不同的网络 vlan1 和 vlan2。基于现有的以太网将原始包中的原始IP进行一次封装,通过tunl0解包,这个tunl0类似于ipip模块,和Flannel vxlan的veth很类似。
Pod 1访问Pod 2大致流程如下:

1,数据包从容器1出到达Veth Pair另一端(宿主机上,以cali前缀开头);
进入IP隧道设备(tunl0),由Linux内核IPIP驱动封装在宿主机网络的IP包中(新的IP包目的地之是原IP包的下一跳地址,即192.168.31.63),这样,就成了Node1到Node2的数据包;
2,数据包经过路由器三层转发到Node2;
3,Node2收到数据包后,网络协议栈会使用IPIP驱动进行解包,从中拿到原始IP包;然后根据路由规则,根据路由规则将数据包转发给cali设备,从而到达容器2。
那路由规则如何维护呢,这个就要借助BGPClient,Calico为每一台Host部署一个BGP Client,使用BIRD实现,BIRD是一个单独的持续发展的项目,实现了众多动态路由协议比如BGP、OSPF、RIP等。在Calico的角色是监听Host上由Felix注入的路由信息,然后通过BGP协议广播告诉剩余Host节点,从而实现网络互通。BIRD是一个标准的路由程序,它会从内核里面获取哪一些IP的路由发生了变化,然后通过标准BGP的路由协议扩散到整个其他的宿主机上,让外界都知道这个IP在这里,你们路由的时候得到这里来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值