当前位置:首页 » 网络连接 » 计算机网络中使用隧道技术
扩展阅读
苹果平板电脑八核 2025-09-29 08:53:30

计算机网络中使用隧道技术

发布时间: 2023-04-26 10:47:56

计算机网络名词解释知识点简答题整理

基带传输:比特流直接向电缆发送,无需调制到不同频段;

基带信号:信源发出的没有经过调制的原始电信号;

URL :统一资源定位符,标识万维网上的各种文档,全网范围唯一;

传输时延:将分组的所有比特推向链路所需要的时间;

协议:协议是通信设备通信前约定好的必须遵守的规则与约定,包括语法、语义、定时等。

网络协议:对等层中对等实体间制定的规则和约定的集合;

MODEM :调制解调器;

起始(原始)服务器:对象最初存放并始终保持其拷贝的服务器;

计算机网络:是用通信设备和线路将分散在不同地点的有独立功能的多个计算机系统互相连接起来,并通过网络协议进行数据通信,实现资源共享的计算机集合;

解调:将模拟信号转换成数字信号;

多路复用:在一条传输链路上同时建立多条连接,分别传输数据;

默认路由器:与主机直接相连的一台路由器;

LAN :局域网,是一个地理范围小的计算机网络;

DNS :域名系统,完成主机名与 IP 地址的转换;

ATM :异步传输模式,是建立在电路交换和分组交换基础上的一种面向连接的快速分组交换技术;

Torrent :洪流,参与一个特定文件分发的所有对等方的集合;

Cookie :为了辨别用户、用于 session 跟踪等而储存在用户本地终端的数据;

SAP :服务访问点;

n PDU : PDU 为协议数据单元,指对等层之间的数据传输单位;第 n 层的协议数据单元;

PPP :点对点传输协议;

Web caching :网页缓存技术;

Web 缓存:代替起始服务器来满足 HTTP 请求的网络实体。

Proxy server :代理服务器;

Go-back-n :回退 n 流水线协议;允许发送方连续发送分组,无需等待确认,若出错,从出错的分组开始重发;接收方接收数据分组,若正确,发 ACK ,若出错,丢弃出错分组及其后面的分组,不发任何应答;

Packet switching :分组交换技术;

CDMA :码分多路复用技术;各站点使用不同的编码,然后可以混合发送,接收方可正确提取所需信息;

TDM :时分多路复用,将链路的传输时间划分为若干时隙,每个连接轮流使用不同时隙进行传输;

FDM :频分多路复用,将链路传输频段分成多个小的频段,分别用于不同连接信息的传送;

OSI :开放系统互连模型,是计算机广域网体系结构的国际标准,把网络分为 7 层;

CRC :循环冗余检测法,事先双方约定好生成多项式,发送节点在发送数据后附上冗余码,使得整个数据可以整除生成多项式,接收节点收到后,若能整除,则认为数据正确,否则,认为数据错误;

RIP :路由信息协议;

Socket (套接字):同一台主机内应用层和运输层的接口;

转发表:交换设备内,从入端口到出端口建立起来的对应表,主要用来转发数据帧或 IP 分组;

路由表:路由设备内,从源地址到目的地址建立起来的最佳路径表,主要用来转发 IP 分组;

存储转发:分组先接收存储后,再转发出去;

虚电路网络:能支持实现虚电路通信的网络;

数据报网络:能支持实现数据报通信的网络;

虚电路:源和目的主机之间建立的一条逻辑连接,创建这条逻辑连接时,将指派一个虚电路标识符 VC.ID ,相关设备为它运行中的连接维护状态信息;

毒性逆转技术: DV 算法中,解决计数到无穷的技术,即告知从相邻路由器获得最短路径信息的相邻路由器到目的网络的距离为无穷大;

加权公平排队 WFQ :排队策略为根据权值大小不同,将超出队列的数据包丢弃;

服务原语:服务的实现形式,在相邻层通过服务原语建立交互关系,完服务与被服务的过程;

透明传输:在无需用户干涉的情况下,可以传输任何数据的技术;

自治系统 AS :由一组通常在相同管理者控制下的路由器组成,在相同的 AS 中,路由器可全部选用同样的选路算法,且拥有相互之间的信息;

分组丢失:分组在传输过程中因为种种原因未能到达接收方的现象;

隧道技术:在链路层或网络层通过对等协议建立起来的逻辑通信信道;

移动接入:也称无线接入,是指那些常常是移动的端系统与网络的连接;

面向连接服务:客户机程序和服务器程序发送实际数据的分组前,要彼此发送控制分组建立连接;

无连接服务:客户机程序和服务器程序发送实际数据的分组前,无需彼此发送控制分组建立连接;

MAC 地址:网卡或网络设备端口的物理地址;

拥塞控制:当网络发生拥塞时,用响应的算法使网络恢复到正常工作的状态;

流量控制:控制发送方发送数据的速率,使收发双方协调一致;

Ad Hoc 网络:自主网络,无基站;

往返时延:发送方发送数据分组到收到接收方应答所需要的时间;

电路交换:通信节点之间采用面向连接方式,使用专用电路进行传输;

ADSL :异步数字用户专线,采用不对称的上行与下行传输速率,常用于用户宽带接入。

多播:组播,一对多通信;

路由器的组成包括:输入端口、输出端口、交换结构、选路处理器;

网络应用程序体系结构:客户机 / 服务器结构、对等共享、混合;

集线器是物理层设备,交换机是数据链路层设备,网卡是数据链路层设备,路由器是网络层设备;

双绞线连接设备的两种方法:直连线和交叉线,同种设备相连和计算机与路由器相连都使用交叉线;不同设备相连用直连线;

MAC 地址 6 字节, IPv4 地址 4 字节, IPv6 地址 16 字节;

有多种方法对载波波形进行调制,调频,调幅,调相;

IEEE802.3 以太网采用的多路访问协议是 CSMA/CD ;

自治系统 AS 内部的选路协议是 RIP 、 OSPF ;自治系统间的选路协议是 BGP ;

多路访问协议:分三大类:信道划分协议、随机访问协议、轮流协议;

信道划分协议包括:频分 FDM 、时分 TDM 、码分 CDMA ;

随机访问协议包括: ALOHA 、 CSMA 、 CSMA/CD(802.3) 、 CSMA/CA(802.11) ;

轮流协议包括:轮询协议、令牌传递协议

ISO 和 OSI 分别是什么单词的缩写,中文意思是什么?用自己的理解写出 OSI 分成哪七层?每层要解决的问题和主要功能是什么?

答:ISO:international standard organization 国际标准化组织;OSI:open system interconnection reference model 开放系统互连模型;

OSI分为 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层;

层名称解决的问题主要功能

应用层实现特定应用选择特定协议;针对特定应用规定协议、时序、表示等,进行封装。在端系统中用软件来实现,如HTTP;

表示层压缩、加密等表示问题;规定数据的格式化表示,数据格式的转换等;

会话层会话关系建立,会话时序控制等问题;规定通信的时序;数据交换的定界、同步、建立检查点等;

传输层源端口到目的端口的传输问题;所有传输遗留问题:复用、流量、可靠;

网络层路由、拥塞控制等网络问题;IP寻址,拥塞控制;

数据链路层相邻节点无差错传输问题;实现检错与纠错,多路访问,寻址;

物理层物理上可达;定义机械特性,电气特性,功能特性等;

因特网协议栈分层模型及每层的功能。

分层的优点:使复杂系统简化,易于维护和更新;

分层的缺点:有些功能可能在不同层重复出现;

​​



假设一个用户 ( 邮箱为: [email protected]) 使用 outlook 软件发送邮件到另一个用户 ( 邮箱为: [email protected]) ,且接收用户使用 IMAP 协议收取邮件,请给出此邮件的三个传输阶段,并给出每个阶段可能使用的应用层协议。

用户 [email protected] 使用outlook软件发送邮件到 163 邮件服务器

163邮件服务器将邮件发送给用户 [email protected] 的yahoo邮件服务器

用户 [email protected] 使用IMAP协议从yahoo邮件服务器上拉取邮件

第1、2阶段可以使用SMTP协议或者扩展的SMTP协议:MIME协议,第3阶段可以使用IMAP、POP3、HTTP协议

三次握手的目的是什么?为什么要三次(二次为什么不行)?

为了实现可靠数据传输,TCP协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的。三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤。

如果只是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认。

选择性重传 (SR) 协议中发送方窗口和接收方窗口何时移动?分别如何移动?

发送方:当收到ACK确认分组后,若该分组的序号等于发送基序号时窗口发生移动;向前移动到未确认的最小序号的分组处;

接收方:当收到分组的序号等于接收基序号时窗口移动;窗口按交付的分组数量向前移动;

简述可靠传输协议 rdt1.0, rdt2.0, rdt2.1, rdt2.2 和 rdt3.0 在功能上的区别。

rdt1.0:经可靠信道上的可靠数据传输,数据传送不出错不丢失,不需要反馈。

rdt2.0(停等协议):比特差错信道上的可靠数据传输,认为信道传输的数据可能有比特差错,但不会丢包。接收方能进行差错检验,若数据出错,发送方接收到NAK之后进行重传。

rdt2.1:在rdt2.0的基础上增加了处理重复分组的功能,收到重复分组后,再次发送ACK;

rdt2.2:实现无NAK的可靠数据传输,接收方回发带确认号的ACK0/1,

收到出错分组时,不发NAK,发送接收到的上一个分组的ACK;

rdt3.0:实现了超时重发功能,由发送方检测丢包和恢复;

电路交换和虚电路交换的区别?哪些网络使用电路交换、报文交换、虚电路交换和数据报交换?请各举一个例子。

电路交换时整个物理线路由通讯双方独占;

虚电路交换是在电路交换的基础上增加了分组机制,在一条物理线路上虚拟出多条通讯线路。

电路交换:电话通信网

报文交换:公用电报网

虚电路交换:ATM

数据报交换:Internet

电路交换:面向连接,线路由通信双方独占;

虚电路交换:面向连接,分组交换,各分组走统一路径,非独占链路;

数据报交换:无连接,分组交换,各分组走不同路径;

交换机逆向扩散式路径学习法的基本原理:

交换表初始为空;

当收到一个帧的目的地址不在交换表中时,将该帧发送到所有其他接口(除接收接口),并在表中记录下发送节点的信息,包括源MAC地址、发送到的接口,当前时间;

如果每个节点都发送了一帧,每个节点的地址都会记录在表中;

收到一个目的地址在表中的帧,将该帧发送到对应的接口;

表自动更新:一段时间后,没有收到以表中某个地址为源地址的帧,从表中删除该地址;

非持久 HTTP 连接和持久 HTTP 连接的不同:

非持久HTTP连接:每个TCP连接只传输一个web对象,只传送一个请求/响应对,HTTP1.0使用;

持久HTTP连接:每个TCP连接可以传送多个web对象,传送多个请求/响应对,HTTP1.1使用;

Web 缓存的作用是什么?简述其工作过程:

作用:代理原始服务器满足HTTP请求的网络实体;

工作过程:

浏览器:与web缓存建立一个TCP连接,向缓存发送一个该对象的HTTP请求;

Web缓存:检查本地是否有该对象的拷贝;

若有,就用HTTP响应报文向浏览器转发该对象;

若没有,缓存与原始服务器建立TCP连接,向原始服务器发送一个该对象的HTTP请求,原始服务器收到请求后,用HTTP响应报文向web缓存发送该对象,web缓存收到响应,在本地存储一份,并通过HTTP响应报文向浏览器发送该对象;

简要说明无线网络为什么要用 CSMA/CA 而不用 CSMA/CD ?

无线网络用无线信号实施传输,现在的技术还无法检测冲突,因此无法使用带冲突检测的载波侦听多路访问协议CSMA/CD,而使用冲突避免的载波侦听多路访问协议CSMA/CA;

简述各种交换结构优缺点,并解释线头 HOL 阻塞现象。

内存交换结构:以内存为交换中心;

       优点:实现简单,成本低;

       缺点:不能并行,速度慢;

总线交换结构:以共享总线为交换中心;

       优点:实现相对简单,成本低;

       缺点:不能并行,速度慢,不过比memory快;

纵横制:以交叉阵列为交换中心;

       优点:能并行,速度快,比memory和总线都快;

       缺点:实现复杂,成本高;

线头HOL阻塞:输入队列中后面的分组被位于线头的一个分组阻塞(即使输出端口是空闲的),等待交换结构发送;

CSMA/CD 协议的中文全称,简述其工作原理。

带冲突检测的载波侦听多路访问协议;

在共享信道网络中,发送节点发送数据之前,先侦听链路是否空闲,若空闲,立即发送,否则随机推迟一段时间再侦听,在传输过程中,边传输边侦听,若发生冲突,以最快速度结束发送,并随机推迟一段时间再侦听;

奇偶校验、二维奇偶校验、 CRC 校验三者比较:

奇偶校验能检测出奇数个差错;

二维奇偶校验能够检测出两个比特的错误,能够纠正一个比特的差错;

CRC校验能检测小于等于r位的差错和任何奇数个差错;

GBN 方法和 SR 方法的差异:

GBN:一个定时器,超时,重发所有已发送未确认接收的分组,发送窗口不超过2的k次方-1,接收窗口大小为1,采用累计确认,接收方返回最后一个正确接受的分组的ACK;

SR:多个定时器,超时,只重发超时定时器对应的分组,发送窗口和接收窗口大小都不超过2的k-1次方,非累计确认,接收方收到当前窗口或前一窗口内正确分组时返回对应的ACK;

㈡ 计算机网络-k8s网络

K8S网络模型设计:扁平的可连通的网络

K8S的网络是一个极其复杂的网络,如果想要用两个简单的词来描述K8S网络,那么我觉得扁平和可连通是K8S网络最大的特点(不懂隔离性)。

何为连通呢?

二层网络的连通:如果能够直接通过MAC帧直接通信的网络便是二层连通的网络,LAN就是这种网络

比如无限WIFI网络,比如以太网

三层网络的连通:如果能够通过IP报直接通信的网络便是三层连通的网络,便是三层连通

三层网络的连通分为两个部分,第一个部分是三层网络中的每一个LAN都是二层连通的,其次需要存在能够连通的路由来保证;这里可以简单回顾下三层网络通信的流程

通过路由表确定目标ip是否在链路上

如果在链路上,通过arp协议获取对应主机的mac地址,发送mac帧到链路上;

如果不在同一个链路上,通过本地路由表发送mac帧给下一跳,然后下一跳解析mac帧,分析ip报,继续路由直到最终跳到目标网络再次通过mac帧发送到目标主机或者到达ttl消失。

假如其中任何一个步骤不满足或者出问题,三层网络就无法连通

何为扁平呢?

就是希望可以在pod内直接通过IP进行互相通信而不需要在pod内部使用vpn之类的东西来连接其他pod(基础架构化),具体的可以看下k8s对网络的设计与要求。

k8s在设计其网络时,就希望网络对运行在其中的pod是透明的,因此提出了以下的一些要求与原则

k8s组网要求

所有的Pods之间可以在不使用 NAT网络地址转换 的情况下相互通信

所有的Nodes之间可以在不使用NAT网络地址转换的情况下相互通信

每个Pod自己看到的自己的ip和其他Pod看到的一致

k8s网络模型设计原则

每个Pod都拥有一个独立的 IP地址,而且 假定所有 Pod 都在一个可以直接连通的、扁平的网络空间中 。

不管它们是否运行在同 一 个 Node (宿主机)中,都要求它们可以直接通过对方的 IP 进行访问。

设计这个原则的原因 是,用户不需要额外考虑如何建立 Pod 之间的连接,也不需要考虑将容器端口映射到主机端口等问题。

而要想深入了解K8S的网络,就不得不去了解Linux操作系统中的网络以及计算机网络协议栈和一些网络技术

其中关于计算机网络协议栈道部分上次分享已经分享过了,所以本次的主题更多是Linux操作系统的网络以及一些网络技术

Linux操作系统中的网络

首先,我们来看下基本的linux网络,如下图所示

一个APP生成socket数据,然后经过网络协议栈包装IP报文,然后封装成MAC帧,在经过网络协议栈的过程中,会存在netfilters对数据进行一定的处理,同时也会存在路由的过程,

如果在同一个物理链路内,将直接通过ARP协议获取目标IP地址的MAC地址最终发送出去;

如果不在同一个物理链路则通过路由表确定下一跳的MAC地址,封装成MAC帧发送到目标地址。

在这个过程中,会根据路由表选择对应的端口,如果是lo端口,则会将帧原封不动的返回计算机网络协议栈,然后回到监听对应端口的SOCKET里。

如果是以太网端口则走以太网端口,如果是蓝牙或者无线网端口同理。

iptables与netfilters

iptables是一个用户空间的应用程序,通过该程序可以修改一些配置文件,这些文件定义了防火墙的一些行为,netfilters是操作系统内核的一部分,netfilters里有5个回调钩子会触发iptables里的规则;iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是

netfilter,它是Linux内核中实现包过滤的内部结构。

这里不具体讲述其实现的原理,仅仅列出netfilters的一些功能:

1)filter表——三个链:INPUT、FORWARD、OUTPUT

作用:过滤数据包 内核模块:iptables_filter.

2)Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT

作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat

3)Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)

4)Raw表——两个链:OUTPUT、PREROUTING

作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw

虚拟网络设备 tap/tun

TUN 和 TAP 设备是 Linux 内核虚拟网络设备,纯软件实现。TUN(TUNnel)设备模拟网络层设备,处理三层报文如 IP

报文。TAP 设备模拟链路层设备,处理二层报文,比如以太网帧。TUN 用于路由,而 TAP 用于创建网桥。OS 向连接到 TUN/TAP

设备的用户空间程序发送报文;用户空间程序可像往物理口发送报文那样向 TUN/TAP 口发送报文,在这种情况下,TUN/TAP

设备发送(或注入)报文到 OS 协议栈,就像报文是从物理口收到一样。

虚拟网络设备 veth-pairs

虚拟以太网电缆。使用双向有名管道实现。常用于不同 namespace 之间的通信,即 namespace 数据穿越或容器数据穿越。

虚拟网络设备 bridge

bridge是linux自带的虚拟交换机(网桥),其可以连接多个以太网设备,拥有智能处理MAC帧的能力,流向交换机的MAC帧将智能的被传输到相应的二层链路

网络命名空间

在 Linux 中,网络名字空间可以被认为是隔离的拥有单独网络栈(网卡、路由转发表、iptables)的环境。网络名字空间经常用来隔离网络设备和服务,只有拥有同样网络名字空间的设备,才能看到彼此。

从逻辑上说,网络命名空间是网络栈的副本,有自己的网络设备、路由选择表、邻接表、Netfilter表、网络套接字、网络procfs条目、网络sysfs条目和其他网络资源。

从系统的角度来看,当通过clone()系统调用创建新进程时,传递标志CLONE_NEWNET将在新进程中创建一个全新的网络命名空间。

从用户的角度来看,我们只需使用工具ip(package is iproute2)来创建一个新的持久网络命名空间。

从系统实现来说,就是原本一个数据结构是static公共的,后来变成进程私有的,在PCB里存在一个命名空间的结构,命名空间里有着网络命名空间,网络命名空间拥有着所有跟网络相关的配置数据

默认空的网络命名空间可能只有一个未启动的lo回环网卡。

两个网络命名空间可以通过以太网揽直接连着两个网络命名空间的网卡,也可以通过以太网网桥连接。

通过以太网网桥或者以太网揽连接的两个网络命名空间只能说是在二层连通的,如果希望在三层连通,还需要给每个网络命名空间配置相应的路由表规则以及分配IP地址。

如何使用虚拟网络设备联通网络命名空间

SingleHost容器网络

none模式

本质上就是创建一个网络命名空间,里面没有路由表,也没有通过veths-pair连接任何链路,外部无法访问这个容器,容器也无法访问外部

host模式

本质上就是使用宿主机的默认网络命名空间

container模式

本质上就是将当前容器部署在另一个容器所在的网络命名空间,这样发给本地的报文最终通过回环网卡回到了本机,这是同一个网络命名空间可以互通的原因

bridge模式

桥接模式就是在这些网络命名空间通过veth-pairs连接到同一个虚拟交换机上(二层连通),同时在对应的命名空间配置对应的路由表规则,但是从图片中可以看到交换机另一端连的上网络协议栈。

也就是那些MAC帧都会被宿主机接收,但是宿主机接收并不一定会处理,比如并没有开启ip转发功能(工作于路由器模式还是主机模式),那么不是本地ip的报文都会被丢弃;或者说netfilters拒绝处理

这些奇怪的报文。

理论上,这些容器发送给其他容器的mac报文是会被虚拟交换机智能转发到对应的容器的,这是同一主机不同容器互相连通的原因

假如宿主机配备了相应的路由规则和防火墙规则,那么容器的报文说能够通过路由最终转发出去的,这也是容器访问互联网的原理

但是这种模式是没法运用在多主机的情况下,因为宿主机不知道其他宿主机里的虚拟网络的路由,当相关ip报到达宿主机时,这些ip报将会被宿主机交给默认路由(下一跳:路由器)

最终路由器会把相关的ip报丢失或者到达ttl最终丢失

MultiHost容器网络

路由方案

回顾docker的单机网络模型,我们发现多主机不能通行的原因就在于你只能给当前主机配置路由规则和防火墙规则,而其他主机并不知道这些ip在你的虚拟网络中,假如能够将这些路由信息同步到其他

宿主机,那么网络便会打通。比较直接的想法就是给每台宿主机配置路由规则。而路由规则要求下一跳必须在当前网络,所以假如宿主机是二层互联的,那么通过给这些宿主机同步这些路由规则便能够

实现一个扁平的连通的网络。

其中布置在每一台宿主机可以通过k8s的daemonSet实现,而这种数据的管理可以交给etcd来实现。

这类方案便是基于路由,基于这个方案的实现有基于静态路由的flannel的host-gateway,以及基于动态路由的calico(使用边际路由协议以及一堆深奥的名词的实现)。

下面来看看Flannel的host-gateway原理(每一台宿主机都相当于本机容器网络的路由器):

通过路由方案构建的网络,宿主机也能访问这些虚拟网络里的Pod

询问基德大佬得知国际化sit环境的k8s网络接口实现就是Flannel的Host-gateway,而我们的办公网络和集群网络之间的路由是搭建好的,所以我们应该可以直接通过podId访问pod里的服务

下面是sit环境的两个服务

跟踪路由发现符合猜想

其中10.1.9.56和10.1.1.24就是宿主机的ip,这些宿主机在一个LAN里,这些宿主机相当于虚拟网络中的路由器;

猜测我们办公网和qunhe集群在一个VLAN里(二层可达)

隧道方案

隧道方案比较典型的就是UDP和XVLAN,两者都是使用Overlay网络(覆盖网络,所谓的大二层技术);其实用隧道技术最多的是VPN应用

其中UDP是XVLAN的替代品(早期Linux没有支持XVLAN协议,通过tun/tap技术将流量引到用户空间然后解包生成包再发,因为发生在用户空间而且多次导致性能较差,所以一般不推荐,除非你的linux版本比较低没法用xvlan)

下面就简单介绍下XVLAN技术的大概原理,下图是XVLAN的报文格式,可以发现就是在高层协议的报文里塞了二层报文

其中XVLAN头里有一个关键的字段,VNID这是个24位的字段,每个虚拟的网络主机都有一个自身的VNID作为标识,理论上支持2的24次方个虚拟网络。

在docker的桥接网络里,是使用docker0网桥,在Flannel的xvlan方案里则是使用cni0作为网桥(和docker0没啥区别),主要的不同是cni网桥后面连接的是flannel.1这个网络设备,应该是一个虚拟网卡

这个网卡将原始报文包装成XVLAN报文(linux高版本支持xvlan报文)

这时需要的信息有 源nodeId,目标nodeId,源vnid,源macId,目标macId,源podId,目标podId

其中目标nodeId,目标macId这两个信息是不存在的;因此需要有个方式根据目标podId获取目标nodeId以及目标macId

因此需要记录如何根据目标podId获取目标macId以及目标nodeId即可

这些数据是可以托管在某个地方的,Flannel就是将这些信息记录在etcd上

在每个node上的flannel.1网络设备通过etcd来通过对方的podId获取nodeId和macId

这样最终报文就变成了一个源ip是源nodeIp,目标ip是目标nodeIp的IP报文了(两台宿主机三层可达)

原本经过虚拟网桥是直接连接网络协议栈,但在xvlan模式下,则改为连接一个flannel1,在flannel1中将对原始报文封装成overlay报文转发

udp模式类似,只是udp转发报文说通过tap连通到用户空间,用户空间对报文进行处理然后发送(因为多次内核态用户态切换且数据问题,性能较差,仅在不支持xvlan的低版本linux中使用)

当然xvlan是一个技术,上面只是简单介绍最简单的形式

参考:

开发内功修炼之网络篇: https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5Njg5NDgwNA==&action=getalbum&album_id=1532487451997454337&scene=173&from_msgid=2247485270&from_itemidx=1&count=3&nolastread=1#wechat_redirect

K8S知识图谱: https://zhaohuabing.com/post/2020-02-22-k8s-mindmap/

VXLAN协议原理简介: https://cizixs.com/2017/09/25/vxlan-protocol-introction/