【业务领域】以太Mac/IP/UDP/TCP报文格式简介_mac层 packet格式-程序员宅基地

技术标签: udp  tcp/ip  

在这里插入图片描述

以太mac格式:

在这里插入图片描述

长度/类型域段:
在这里插入图片描述

VLAN

VLAN (Virtual Local Area Network)意为虚拟局域网,是在交换机实现过程中涉及到的概念,由802.1Q标准所定义。由于交换机是工作在链路层的网络设备,连接在同一台交换机的终端处于同一个三层网中,同时也处于同一个广播域。当交换机接入较多的终端时,任意一台终端发送广播报文时(例如:ARP请求),报文都会传遍整个网络。对于规模较大的组网场景,广播报文的泛滥对于网络通信将会造成较大的影响。

VLAN技术为这一问题提供了解决方案,VLAN将同一网络划分为多个逻辑上的虚拟子网,并规定当收到广播报文时,仅仅在其所在VLAN中进行广播从而防止广播报文泛滥。VLAN技术在链路层的层次中实现了广播域的隔离。

在这里插入图片描述
VLAN数据帧:
VID字段:唯一标识了一个VLAN,12bit长度的VID可以表示4096个不同的值,除去两个保留值,一个以太网最多可以划分为4094个VLAN。

字段 长度 含义 取值
TPID 2Byte Tag Protocol Identifier(标签协议标识符),表示数据帧类型。 表示帧类型,取值为0x8100时表示IEEE 802.1Q的VLAN数据帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。 各设备厂商可以自定义该字段的值。当邻居设备将TPID值配置为非0x8100时, 为了能够识别这样的报文,实现互通,必须在本设备上修改TPID值,确保和邻居设备的TPID值配置一致。
PRI 3bit Priority,表示数据帧的802.1Q优先级。 取值范围为0~7,值越大优先级越高。当网络阻塞时,设备优先发送优先级高的数据帧。
CFI 1bit Canonical Format Indicator(标准格式指示位),表示MAC地址在不同的传输介质中是否以标准格式进行封装,用于兼容以太网和令牌环网。 CFI取值为0表示MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0。
VID 12bit VLAN ID,表示该数据帧所属VLAN的编号。 VLAN ID取值范围是0~4095。由于0和4095为协议保留取值,所以VLAN ID的有效取值范围是1~4094。
设备利用VLAN标签中的VID来识别数据帧所属的VLAN,广播帧只在同一VLAN内转发,这就将广播域限制在一个VLAN内。

VLAN原理详解中讲述了VLAN的出现原因和使用方法:VLAN原理详解
VLAN基础知识

两层VLAN/QinQ

QinQ(802.1Q in 802.1Q)技术是一项扩展VLAN空间的技术,通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩展VLAN空间的功能。

随着以太网技术在网络中的大量部署,利用VLAN对用户进行隔离和标识受到很大限制。因为IEEE802.1Q中定义的VLAN Tag域只有12个比特,仅能表示4096个VLAN,无法满足城域以太网中标识大量用户的需求,于是QinQ技术应运而生。

如下图所示用户报文在公网上传递时携带了两层Tag,内层是私网Tag,外层是公网Tag。

在这里插入图片描述

QinQ封装报文是在无标签的以太网数据帧的源MAC地址字段后面加上两个VLAN标签构成.

在这里插入图片描述

arp、rarp

ARP 协议的全称是 Address Resolution Protocol(地址解析协议),它是一个通过用于实现从 IP 地址到 MAC 地址的映射,即询问目标 IP 对应的 MAC 地址 的一种协议。ARP 协议在 IPv4 中极其重要。

注意:ARP 只用于 IPv4 协议中,IPv6 协议使用的是 Neighbor Discovery Protocol,译为邻居发现协议,它被纳入 ICMPv6 中。

简而言之,ARP 就是一种解决地址问题的协议,它以 IP 地址为线索,定位下一个应该接收数据分包的主机 MAC 地址。如果目标主机不在同一个链路上,那么会查找下一跳路由器的 MAC 地址。

在这里插入图片描述
域段含义
前面 14 个字节构成标准以太网的首部,前两个字段 DST 和 SRC 分别表示 以太网的目的地址 和 以太网的源地址,以太网的目的地址如果是 ff:ff:ff:ff:ff:ff 全部为 1 表示广播地址,在同一广播域中的所有以太网接口可以接收这些帧。后面紧跟着的是 ARP 请求的长度/类型,ARP 请求 和 ARP 应答这个值为 0x0806。
硬件类型表示硬件地址的类型,硬件地址常见的有 MAC 物理或者以太网地址,对于以太网来说,此值为 1。
协议类型 指出映射的协议地址类型,对于 IPv4 地址,这个值是 0x0800。
硬件大小协议大小 分别指出硬件地址和协议地址的字节数。对于以太网中使用 IPv4 的 ARP 请求或应答,它们的值分别是 6 和 4。
Op 字段指出如果是 ARP 请求,Op = 1,ARP 应答 ,Op = 2,RARP 请求 Op = 3,RARP 应答,Op = 4。
紧跟在 Op 之后的是 发送方硬件地址(MAC 地址),发送方的协议地址(IPv4 地址),目的硬件地址目的协议地址。后面四个字段写入的是一些物理地址和协议地址。不一定全部有值。 对于ARP Request 而言,我们不知道目的MAC地址是什么,因此 Target’s Hardware Address 全部填充为0。

ARP帧的交互:当主机接收到一个针对其协议地址的ARP Request时,它会回应ARP Reply. 该Reply消息内容为:对调sender 和 Target 地址字段,然后将Sender’s Hardware Address(即原来的Target’s Hardware Address )修改为本机的Hardware Address。另外OP字段有1变为2.

RARP 协议

Reverse Address Resolution Protocol 反向地址转换协议,用于获得已知 MAC 地址的 IP 地址。

一般在主机刚接入网络时,通过本地 MAC 地址来发送 RARP 请求,如果局域网内有 RARP Server 且 Server 上存在关于此 MAC 地址的映射 IP,则会返回 RARP Reply 响应,此时主机就获取了 IP 地址。

  • 需要 RARP 服务器,一般用于无法使用 DHCP 或没有任何输入接口的小型嵌入式设备
  • 主机以广播的形式发送 RARP 请求包,声明自己的 MAC 地址,并请求分配一个 IP 地址
  • RARP 服务器收到 RARP 请求包后,检查 RARP 列表,查找该 MAC 地址对应的 IP 地址;
    若存在,则返回 RARP 响应包,成功分配 IP 地址;
    若不存在,则不做任何响应,分配 IP 地址失败;

解释一下arp的含义

cnp

LLDP

LLDP定义:
LLDP(Link Layer Discovery Protocol)是IEEE 802.1ab中定义的链路层发现协议。LLDP是一种标准的二层发现方式,可以将本端设备的管理地址、设备标识、接口标识等信息组织起来,并发布给自己的邻居设备,邻居设备收到这些信息后将其以标准的管理信息库MIB(Management Information Base)的形式保存起来,以供网络管理系统查询及判断链路的通信状况。

LLDP存在的目的:
随着网络规模越来越大,网络设备种类繁多,并且各自的配置错综复杂,对网络管理能力的要求也越来越高。传统网络管理系统多数只能分析到三层网络拓扑结构,无法确定网络设备的详细拓扑信息、是否存在配置冲突等。

因此需要有一个标准的二层信息交流协议。LLDP提供了一种标准的链路层发现方式。通过LLDP获取的设备二层信息能够快速获取相连设备的拓扑状态;显示出客户端、交换机、路由器、应用服务器以及网络服务器之间的路径;检测设备间的配置冲突、查询网络失败的原因。企业网用户可以通过使用网管系统,对支持运行LLDP协议的设备进行链路状态监控,在网络发生故障的时候快速进行故障定位。

LLDP报文格式
在这里插入图片描述

Destination MAC address: 目的MAC地址,为固定的组播MAC地址0x0180-C200-000E。
Source MAC address: 源MAC地址,为端口MAC地址或设备桥MAC地址(如果有端口地址则使用端口MAC地址,否则使用设备桥MAC地址)
Type: 报文类型,固定为0x88CC。
Data: 数据,为LLDPDU
FCS: 帧检验序列

其中LLDPDU 就是封装在LLDP报文数据部分的数据单元。只不过在组成LLDPDU之前,设备会先将本地的相关信息封装成TLV,然后再将多个TLV组合成一个LLDPDU,封装在LLDP报文的数据部分进行传送。
在这里插入图片描述

LLDP报文发送机制

当使能LLDP功能时,设备会周期性地向邻居设备发送LLDP报文。如果设备的本地配置发生变化则立即发送LLDP报文,以将本地信息的变化情况尽快通知给邻居设备。为了防止本地信息的频繁变化而引起LLDP报文的大量发送,每发送一个LLDP报文后都需延迟一段时间后再继续发送下一个报文。

LLDP报文接收机制

当使能LLDP功能时,设备会对收到的LLDP报文及其携带的TLV进行有效性检查,通过检查后再将邻居信息保存到本地设备,并根据LLDPDU报文中TLV携带的TTL值设置邻居信息在本地设备的老化时间。如果接收到的LLDPDU中的TTL值等于零,将立刻老化掉该邻居信息。

LLDP简介

PAUSE

Pause报文是IEEE802.3协议中描述的一种用于控制MAC数据流量的报文。

当对端数据量过大,将无法及时处理数据时,会向数据上游MAC发送Puase报文,告诉上游MAC在一段时间内停止发送数据,停止时间记录在报文的PAUSE_TIMING字段。当上游MAC接受到对端的有效Puase报文时,会开始计时,并会停止发送数据,防止对端无法及时处理数据,导致对端FIFO溢出或者数据丢失。若计时结束,并且没有收到新的pause报文,将重新发送数据。若计时没有结束,且新收到的pause报文PAUSE_TIMING字段为全0,则表示可以重新发送数据,此时停止计时,重新开始发送数据。

在这里插入图片描述
Pause报文由IEEE802.3协议规定,与标准以太帧格式相似:

DA表示目的地址,地址数据固定为0x180c2000001;

SA表示源地址 地址由发送方确定

TYPE为报文类型字段,固定为0X8808

OPCODE为操作码,固定为0X0001

PAUSE_TIMING字段为上游MAC停止发送数据的时间,每单位为512bit传输时间,数值为16’d1024表示暂停时间为MAC传输1024*512bit数据所需要的时间

PAD:为填充字段,所有值为0

FCS: 为校验字段,通常为CRC校验值

PFC PAUSE

基于优先级的流量控制(PFC:Priority-based Flow Control)在IEEE:802.1Qbb标准文档中定义,对传统流控的暂停机制一种增强。

与传统的流控机制相比,当出现拥塞时传统流控但会阻止一条链路上的所有流量。而PFC允许在一条以太网链路上创建8个虚拟通道,并为每条虚拟通道指定一个IEEE 802.1P优先等级(cos),允许单独暂停和重启其中任意一条虚拟通道,同时允许其它虚拟通道的流量无中断通过。

这一方法使网络能够为单个虚拟链路创建无丢包类别的服务,使其能够与同一接口上的其它流量类型共存。其实PFC就是普通流控功能的一种增强。

报文格式:
在这里插入图片描述

Destination address:目的MAC地址,取值固定为01-80-c2-00-00-01。
Source address:源MAC地址。
Ethertype :以太网帧类型,取值为8808。
Control opcode:控制码,取值为0101。
Priority enable vector:反压使能向量。
Time(0)~Time(7):其中E(n)和优先级队列n对应,表示优先级队列n是否需要反压。当E(n)=1时,表示优先级队列n需要反压,反压时间为Time(n);当E(n)=0时,则表示该优先级队列不需要反压。
Pad:预留。传输时为0。
CRC:循环冗余校验。

IPv4报文格式:

在这里插入图片描述

ipv4 option

IPv6报文格式:

在这里插入图片描述

ipv6 option

UDP报文格式:

在这里插入图片描述

TCP报文格式

在这里插入图片描述
在这里插入图片描述

GRE

GRE(Generic Routing Encapsulation),通用路由封装协议。顾名思义,这种隧道协议对链路两端实际所使用的网络协议没有要求,是一种很常用的隧道协议。

有这样场景,如果我在原始IP报文(本机IP:8.8.8.8)前面再封装一层IP头+隧道头,目的地址就是节点A的地址x.x.x.x,这样,在网络中的各个设备就会根据这个x.x.x.x去路由查找,最终找到节点A,节点A对原始报文处理之后再扔出去,最终路由到8.8.8.8上面。这个就是隧道技术,也可以说是overlay技术,顾名思义就是把原始报文隐藏在里面,外面再封装一层,在网络中的路由器和交换机识别的都是外层封装的信息,就相当于戴了个面具,中间设备认识的是你这个面具,等到了隧道端点,解除隧道封装后,还原原始报文,面具摘掉了,露出庐山真面目。这个原始报文也就是私有报文,在GRE协议中叫做乘客协议,顾名思义,就像乘客一样。

隧道有很多种,有二层隧道,比如VxLAN,也有三层隧道,比如GRE、IPSec等等,具体是二层隧道还是三层隧道,最简单明了的就是看overlay的原始报文是IP报文还是以太报文(是否有MAC地址),如果只有IP头,则是三层隧道,如果有MAC头,就是二层隧道。

GRE就是一种比较简单的三层隧道。

在这里插入图片描述

GRE安全机制:GRE本身提供两种基本的安全机制。

  • 校验和验证:校验和验证是指对封装的报文进行端到端校验。
    若GRE报文头中的C位标识位置1,则校验和有效。发送方将根据GRE头及Payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃。
    隧道两端可以根据实际应用的需要决定配置校验和或禁止校验和。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查,但对发送的报文计算校验和;相反,如果本端没有配置校验和而对端已配置,则本端将对从对端发来的报文进行校验和检查,但对发送的报文不计算校验和。

  • 识别关键字:识别关键字(Key)验证是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。
    RFC1701中规定:若GRE报文头中的K位为1,则在GRE头中插入一个四字节长关键字字段,收发双方将进行识别关键字的验证。
    关键字的作用是标志隧道中的流量,属于同一流量的报文使用相同的关键字。在报文解封装时,GRE将基于关键字来识别属于相同流量的数据报文。只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。这里的“完全一致”是指两端都不设置识别关键字,或者两端都设置相同的关键字。

最后,GRE协议并不提供数据加密和身份验证等安全机制,因此在使用时需要考虑安全性问题。

在RFC1701中规定了GRE Header的格式,如下图所示:
在这里插入图片描述
C(bit0):校验和存在位,置位1则表示Checksum存在且包含有效信s息。
R(bit1):路由存在位,置位1则表示Offset和Routing存在且包含有效信息。
K(bit2):key存在位,置位1则表示Key存在且包含有效信息。
S(bit3):序列号存在位,置位1则表示Sequence Number存在且包含有效信息。
s(bit4):Strict Source route,置位1则表示,路由信息全部为严格源路由。
bit5~bit15都默认置0。
:如果C和R任意一个置位1,则表示Checksum和Offset都存在GRE报文中。——???

Protocol Type(2字节): “协议类型”字段包含负载报文的协议类型。通常,该值将是数据包的以太网协议类型字段。下面列出了当前定义的协议类型。其他的值可以在其他文档中定义。
Offset(2字节):offset字段表示要检测的主源路由表项从“Routing”字段开始到第一个字节的偏移量。当Routing present位或Checksum present位设置为1时,该字段才会出现。只有当Routing present位设置为1时,该字段才会包含有效的信息。
Checksum(2字节):校验和字段包含GRE报文头以及负载。
Key(4字节):Key字段长度为四个字节,是由封装者封装在报文中。可以被接收者用来验证报文的来源。
Sequence Number(4字节):序列号字段长度为四个字节,是由封装者封装在报文中。接收者使用序列号来对接收的报文进行排序.
Routing(变长):Routing的长度是可变的,是由一系列的SREs(Source Route Entries)组成的,其报文结构如下图所示:
在这里插入图片描述

RFC总结之GRE协议

SCTP

ICMP

IGMP

STP/RSTP/MSTP

Spanning Tree Protocol,即 STP 协议,用于为以太网构建无环路的逻辑拓扑。

STP 协议的作用
 STP 协议通过阻塞交换机端口,令其不再转发数据帧,使得环路被裁剪成一棵树,达到 在逻辑上消除环路的目的 在链路发生故障后,激活备份链路,及时恢复网络连通性。

消除环路:允许网络物理拓扑中存在备份链路,消除逻辑拓扑上的二层环路
备份链路:发生故障后使用备份链路,及时恢复网络,提高网络的可靠性

STP 协议的缺点
  由上可知,当网络中的某个设备发生故障不可用时,需要等待所有的网络设备接收和传播 BPDU,重新选举根桥、根端口、指定端口和阻塞端口,收敛速度慢。而且在网络设备端口状态的转换过程中,数据流量会被阻塞,可能会加剧延时。除此之外,STP 协议对局域网仅生成一棵树,对于所有 VLAN 都使用相同的拓扑。这意味着在多个 VLAN 环境中,可能存在不必要的阻塞端口。如果需要不同的拓扑或特定的 VLAN 配置,可能需要手动配置。

总结一下,STP 协议的缺点有以下两条:收敛速度慢,不支持 VLAN;

RSTP、MSTP 协议
针对 STP 协议缺点的改进,出现了 RSTP 和 MSTP 协议

RSTP 协议
RSTP 是 STP 的改进版本,它的主要目标是加速 STP 的收敛速度。

RSTP 引入了两种端口状态:指定端口(Designated Port)和替代端口(Alternate Port)。
RSTP 使用不同的 BPDU 格式和机制,以快速传播拓扑变化。
RSTP 的收敛速度较快,通常可以在数秒内响应拓扑变化,而不是 STP 的 30 秒或更长时间。

MSTP 协议
MSTP 是 STP 的另一种改进版本,旨在提供更大的灵活性,特别是在多 VLAN 环境下。

MSTP 引入了多个实例(Instance),每个实例可以关联到一个或多个 VLAN。
MSTP 允许管理员为每个实例配置独立的树状拓扑,支持不同 VLAN,从而提高网络的灵活性。
MSTP 使用单一 BPDU 格式,但在每个实例中维护独立的树状拓扑,因此可以减少网络开销。

STP vs RSTP vs MSTP
在这里插入图片描述
STP有两种报文结构,一种是配置BPDU(configuration BPDU),另一种拓扑变化通知BPDU(TCN BPDU)
在这里插入图片描述
在这里插入图片描述

VxLAN

VxLAN是什么?

VxLAN(Virtual eXtensible LAN,可扩展虚拟局域网络)是基于IP网络、采用“MAC in UDP”封装形式的二层VPN技术。VxLAN可以基于已有的服务提供商或企业IP网络,为分散的物理站点提供二层互联,并能够为不同的租户提供业务隔离。VXLAN主要应用于数据中心网络。

VXLAN具有如下特点:

  • 支持大量的租户:使用24位的标识符,最多可支持2的24次方(16777216)个VxLAN,使支持的租户数目大规模增加,解决了传统二层网络VLAN资源不足的问题。
  • 易于维护:基于IP网络组建大二层网络,使得网络部署和维护更加容易,并且可以充分地利用现有的IP网络技术,例如利用等价路由进行负载分担等;只有IP核心网络的边缘设备需要进行VxLAN处理,网络中间设备只需根据IP头转发报文,降低了网络部署的难度和费用。
    (目前,设备只支持基于IPv4网络的VXLAN技术,不支持基于IPv6网络的VXLAN技术.——为啥?)

VXLAN由RFC7348定义,这是2014年定稿的一个协议。

VXLAN报文格式:

在这里插入图片描述
在这里插入图片描述

VXLAN报文的封装格式为:在原始二层数据帧外添加8字节VXLAN头、8字节UDP头和20字节IP头。其中,UDP头的目的端口号为VXLAN UDP端口号(缺省为4789)。

VXLAN头主要包括两部分:
· 标记位:“I”位为1时,表示VXLAN头中的VXLAN ID有效;为0,表示VXLAN ID无效。其他位保留未用,设置为0。
· VNI: VXLAN Network Identifier,VXLAN 网络标识符。即VXLAN ID:用来标识一个VXLAN网络,长度为24比特。

VXLAN与VLAN之间有何不同?

VLAN不足点:
(1)VLAN作为传统的网络隔离技术,在标准定义中VLAN的数量只有4000个左右,无法满足大二层网络的租户间隔离需求。(2)VLAN的二层范围一般较小且固定,无法支持虚拟机大范围的动态迁移。

VxLAN改进点:
(1)VXLAN完美地弥补了VLAN的上述不足,一方面通过VXLAN中的24比特VNI字段,提供多达16M租户的标识能力,远大于VLAN的4000;
(2)VXLAN本质上在两台交换机之间构建了一条穿越基础IP网络的虚拟隧道,将IP基础网络虚拟成一个巨型“二层交换机”,即大二层网络,满足虚拟机大范围动态迁移的需求。

虽然从名字上看,VXLAN是VLAN的一种扩展协议,但VXLAN构建虚拟隧道的本领已经与VLAN迥然不同了。

NVGRE

NVGRE:Network Virtualization using Generic Routing Encapsulation,网络虚拟化通用路由封装;NVGRE是一种用于数据中心网络虚拟化的技术,与VXLAN类似,但使用了不同的封装协议。

在这里插入图片描述

NVGRE报文的封装格式为:在原始二层数据帧外添加8字节GRE头和20字节IP头。其中,GRE头主要包括以下几部分:

· 标记位:4比特。第一位(Checksum Present位)为0,表示GRE头不携带GRE校验和;第二位未定义;第三位(Key Present位)为1,表示GRE头中携带VSID;第四位(Sequence Number Present位)为0,表示GRE头不携带序列号。
· 版本:GRE协议版本号。
· 协议类型:GRE头内封装的载荷数据的协议类型,取值为0x6558,表示透明以太网桥接,即GRE头内封装二层以太网数据帧。
· VSID(Virtual Subnet Identifier,虚拟子网标识符):用来标识一个NVGRE网络,长度为24比特。

GENEVE

GENEVE(Generic Network Virtualization Encapsulation,通用网络虚拟化封装),是一种虚拟化隧道通信技术,定义于RFC 8926

相比于之前类似的技术,GENEVE的一点重大区别在于:协议的元数据本身是可扩展的。GENEVE提供了可扩展的GENEVE header,让业务更加灵活。

IPv4的Geneve数据包格式如下:
在这里插入图片描述

在这里插入图片描述

字段 长度(bit) 含义
Version 2 版本号,目前为0
Opt Len 6 表明Variable Length Options的长度,这里的一位代表Variable Length Options的4字节。因为只有6bit,所以Variable Length Options最多是252(63*4)字节。
O 1 表明这是一个OAM包,包含了控制信息,而非数据。Endpoint可以根据这个bit来优先处理这个包。
C 1 表明在Variable Length Options里面,存在一个或者多个Critical的option。当C被置位时,Variable Length Options必须被解析,如果当前Endpoint不支持GENEVE解析,那么应该丢弃数据包。如果C没有被置位,那么Endpoint可以根据Opt Len直接丢弃所有的Variable Length Options。
Reserved 6 保留字段
Protocol Type 16 被封装的协议类型,如0x6558代表以太网
VNI 24 同VxLan的VNI,虚拟网络标识符
Variable Length Options 可变长,长度为Opt Len*4 可扩展的元数据

这里的O和C字段是出于性能考虑,GENEVE报文的可扩展性很好,那就意味着其长度可能比较长,处理起来就比较耗资源,加入这两个字段可以使得Endpoint能够更灵活的处理数据。

在兼容性上,如果不考虑Variable Length Options,GENEVE与VxLAN是不冲突的,一些现有的针对VXLAN的优化可以直接应用在GENEVE上。

在考虑ECMP的情况下,ECMP设备看到的不是虚机的IP/MAC,而是Tunnel Endpoint的IP/MAC。也就是说,连接到同一台Tunnel Endpoint的机器的外层报文除了UDP port都是相同的。GENEVE协议认为应该使用source port的整个16bit(而不是常用的50000-65535)做Overlay流区分(RFC 8926 Section 2.3)

详细来看Geneve的封装帧,从外到里依次是:
外层以太头 > 外层IP头(V4或V6) > 外层UDP头 > Geneve头(变长) > 内层以太头 > Payload > 外层以太头的FCS

当中UDP的目标port默认是IANA分配的6081。而且支持可配置。UDP的校验和必须计算正确。也可配置为0。

Geneve支持单播、多播和广播。

GENEVE产生的背景:
网络虚拟化最基础的技术莫过于分层(Overlay、Underlay),要实现分层有两种手段。一个是映射(Mapping),一个是封装(Encapsulation)。
映射,主要思路是转发时替换报文语义,怎样替换将须要设备进行查询。
封装,则是把须要的报文语义加入到网包中。处理的时候一层层的解封装就可以,尽量对设备透明。

不少协议都实现了封装的部分或完整功能。包含IP-in-IP、Vlan、MPLS、VXLAN、NVGRE、STT等。这些协议各有各的特点,不少都是为了简单地隔离或者通过隧道连通不同网络。特别是后面几种。设计理念大同小异,仅仅是实现细节不同。

对通用的封装协议标准的需求已经越来越强烈。于是有了Geneve: Generic Network Virtualization Encapsulation。Geneve的出发点是解决封装时候加入的metadata信息问题(究竟多少位。该怎么用),尝试适应各种虚拟化场景,Underlay的协议是最通用的IP协议(准确的说是UDP)。

跟大部分的封装协议类似。实现Geneve一般须要两类设备:隧道终端(tunnel endpoints)和传输设备(transit devices)。前者用来处理封装头终止隧道,后者则是非必需的。一般是支持IP转发的设备。

之前介绍过通用路由封装协议GRE和虚拟可扩展局域网VxLAN,他们都是隧道协议的一种实现。
这两种协议的初衷和实现形式都是类似的。从初衷上说,这两种协议都是想实现一种对原始网络数据的一种扩展和封装:以一定的格式封装原始网络数据,再辅以一定的元数据(metadata),来实现附加的功能。例如,VxLAN中的网络标识符VNI就是一种元数据,实现的功能是对租户进行区分。
但是,随着网络的扩展以及业务的发展,有时候需要一种符合自己网络情况以及业务逻辑的协议,例如采用自己独特的业务元数据。这时候就需要一种技术来实现一种通用的封装方式,来符合自己的需求。这种封装最好可长可短,来实现自己的逻辑

GENEVE(Generic Network Virtualization Encapsulation) 是2016-17年开源界出现的一种新型开源数据虚拟化封装(隧道)协议,它设计的初衷就是解决当前数据传输缺乏灵活性,难以满足用户在安全,在业务应用支撑上的各种灵活要求的。2020年11月,IETF(全球互联网技术任务组)正式出版了详细的白皮书(RFC:8926),标志着该技术已经足够成熟。

1588

PTP(Precision Time Protocol)报文使用 UDP/IP 传输机制封装在以太网帧中,或者直接封装在以太网帧中的第 2 层。

PTP over IEEE 802.3/Ethernet(IEEE 1588v2协议附录F)
PTP over UDP over IPv4(IEEE 1588v2协议附录D)
PTP over UDP over IPv6(IEEE 1588v2协议附录E)

UDP/IP 封装
1588 的消息(v1 和 v2)可以使用 UDP/IP 多播(组播)消息进行传输。

下面的表格展示了为 PTP 定义的 IP 多播分组。该表还根据 RFC 1112(IP 的最后三个字节为固定值 01-00-5E)显示了他们各自的 MAC 层多播地址映射。
在这里插入图片描述
以太网封装 (PTPv2)
除了使用 UDP/IP 帧,IEEE 1588v2 还定义了使用 ethertype = 0x88F7 的本地以太网帧格式。以太网帧的有效负载直接包含 PTP 数据包,以 PTPv2 报头开始。

除此之外,版本 2 还增加了一个对等的延迟机制,以允许沿多个节点上的路径测量单个点对点链接之间的延迟。以下组播域也在 PTPv2 中定义。
在这里插入图片描述


致谢:
以上部分内容整理自网络,仅供学习,特此深表感谢,如有侵权,告知删除!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41360172/article/details/135576736

智能推荐

手打51程序使用AS608指纹模块_51单片机指纹录入代码-程序员宅基地

文章浏览阅读531次,点赞11次,收藏10次。这些都是使用AS608中的重要内容,希望对想使用AS608模块的人有所帮助若想获取以上程序的代码,可添加我微信15113224982获取,不免费,一瓶可乐的价格。_51单片机指纹录入代码

ubuntu16.04下的kvm+libvirt+webvirtmgr虚拟机配置_libvirt web-程序员宅基地

文章浏览阅读4.1k次。目录1简介1.1效果图1.1.1win10虚机1.1.2Ubuntu虚机2.安装2.1安装kvm+libvirt等2.2安装webvirtmgr3.配置3.1Libvirt配置Tcp监听3.2修改webvirtmgr登陆密码3.2.1修改用户登陆密码(可选)3.2.2重新创建用户(删除原来的admin账户,可选)4安装系统4.1win10安装..._libvirt web

harry-turtle画满天星案例_import turtle import random turtle.speed(0) turtle-程序员宅基地

文章浏览阅读3.7k次。import turtleimport randomturtle.speed(0)turtle.pencolor(‘yellow’)turtle.bgcolor(‘black’)turtle.width(10)a = 0while a<100:a=a+1turtle.up()turtle.goto(random.randint(-350,350),random.randi..._import turtle import random turtle.speed(0) turtle.pencolor('yellow') turtle

ctf 网络安全比赛简介_简单的ctf竞赛-程序员宅基地

文章浏览阅读1k次。MISC(安全杂项):全称Miscellaneous。题目涉及流量分析、电子取证、人肉搜索、数据分析、大数据统计等等,覆盖面比较广。我们平时看到的社工类题目;给你一个流量包让你分析的题目;取证分析题目,都属于这类题目。主要考查参赛选手的各种基础综合知识,考察范围比较广。PPC(编程类):全称Professionally Program Coder。题目涉及到程序编写、编程算法实现。算法的逆向编写,批量处理等,有时候用编程去处理问题,会方便的多。当然PPC相比ACM来说,还是较为容易的。_简单的ctf竞赛

数学建模预测方法之 微分方程模型_微分方程预测模型-程序员宅基地

文章浏览阅读6.7k次,点赞7次,收藏42次。微分方程模型适用于基于相关原理的因果预测模型,大多是物理或几何方面的典型问题,假设条件,用数学符号表示规律,列出方程,求解的结果就是问题的答案。短、中、长期的预测都适合。反应事物内部规律及其内在关系,但由于方程的建立是以局部规律的独立性假定为基础,当作为长期预测时,误差较大,且微分方程的解比较难以得到。传染病的预测模型、经济增长(或人口)的预测模型、Lanchester战争预测模型、药物在体内的分布与排除预测模型、烟雾的扩散与消失模型..._微分方程预测模型

C#调用Oracle数据库_c# oracle-程序员宅基地

文章浏览阅读3.8k次。目前为止所用过的c#访问orale数据库的方式有两种,一种是使用 Oracle.ManagedDataAccess.Client方式来调用,另一种是使用System.Data.OracleClient方式来调用,两者的区别是第一种方式是最新的方式,使用起来也比第二种方式要简单的多,但是缺点可能无法访问旧版的Oracle数据库例如 9i,尤其是当oracle数据库的各种权限、角色等各种参数由于各种原因不允许对其修改时可能会无法访问的情况,第二种方式是一种过时的方式,它的优点是可以弥补第一种方..._c# oracle

随便推点

关于BISS Key的教程-程序员宅基地

文章浏览阅读3.5k次。网上我们一般查询到这样一些数据,如何识别? 例1:-----------------------------------------------------------------------------------------KBS World Telkom 1 at 108.0°E 3972 H 2100-3/4 DVB-S2/8PSK MPEG-4 SID(In Hex):_biss key

回炉夜话 - 序-程序员宅基地

文章浏览阅读159次。有志足风流,惜诺自可亲 这是我大学时代信奉的格言。转眼年至不惑,回想人生倒也是感慨万千。 在这里,作为一个老码农,我想梳理下自己的技术栈。为继续做一个码农而努力。 一、首先,对于各种技术的掌握程度作出如下定义: 了解: 阅读过相关资料或书籍,有可能..._回炉夜话全集

Android问题解决--“signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xxxxxxx” 又出现了_to unreadable libraries. for unwinds of apps, only-程序员宅基地

文章浏览阅读1.2w次。今天,调试一个app,又出现“signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xxxxxx”问题了。而且只在Android10以上版本才会有,导致的现象是app崩溃,这怎么怎?问题log:signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x739ae8d004全部log如下:05-08 10:21:31.065 D/a.module(1890.._to unreadable libraries. for unwinds of apps, only shared libraries

工件SSMwar exploded 部署工件时出错。请参阅服务器日志了解详细信息_正在构建工件 'ssm0950my8t:war exploded': 正在复制文件…-程序员宅基地

文章浏览阅读1.9k次。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。由于监听器过早的生效时间导致我们自动注入的bean的引用名称还没有生效(实际上bean已经注入了,但是监听器此时识别不到,小写类名首字母也没有用),这时候就要用到自定义bean名称了!仔细想一下,查看我监听器的代码,监听器实现了ServletContextListener接口,是一个全局监听器,也就是项目刚启动是就会生效,于是我添加了一条输出信息,就是“进入监听器”..._正在构建工件 'ssm0950my8t:war exploded': 正在复制文件…

字符串(python)_首先创建一个字符串str为“a little girl”,提取第3到13个字符,并组成新的字符串b-程序员宅基地

文章浏览阅读217次,点赞2次,收藏2次。(2)请统计字符串出现的每个字母的出现次数(忽略大小写,a 与 A 是同一个字母),并输出成一个字典。‘aAsmr3idd4bgs7Dlsf9eAF’,经过去除后,输出 ‘asmr3id4bg7lf9e’(4)按字符串中字符出现频率从高到低输出到列表,如果次数相同则按字母顺序排列。(3)请去除字符串多次出现的字母,仅留最先出现的一个,大小写不敏感。(1)请将字符串的数字取出,并输出成一个新的字符串。_首先创建一个字符串str为“a little girl”,提取第3到13个字符,并组成新的字符串b

JVisualVM 手动生成 Java Core Dump_手动生成coredump-程序员宅基地

文章浏览阅读2k次。最近在研究 Java Core Dump 查看及使用问题,这里我采了JDK自带工具jvisualvm ,这个工具可协助生成 Java Core Dump 文件1, Java Core Dump 文件是什么Java Core Dump 文件呢,是针对 JVM 虚拟机发生致命问题或者 JVM 中运行的程序造成致命问题时,所产生的记录文件,通常会存在2个文件1.1,Java Cor..._手动生成coredump