交换机芯片驱动开发
Ethernet for Switch
名词 | 解释 |
---|---|
BCM88680 | 博通公司(Broadcom)生产的一款高性能网络处理器芯片,属于Broadcom’s Jericho2系列。它用于构建高端路由器、交换机和其他网络设备,支持多种网络协议,包括IPv4、IPv6、MPLS等。 |
RFC2544 | 由 IETF (Internet Engineering Task Force) 定义的一套用于测试和评估网络设备性能的标准。它提供了一系列测试方法,主要用于评估以太网设备的性能。这些测试包括吞吐量、延迟、帧丢失率、背靠背帧测试和系统恢复测试。 |
Ethernet基本格式
标准以太网数据帧示例:
+-------------------------+-------------------------+-------------------------+
| Destination MAC Address | Source MAC Address | Ethernet Type |
+-------------------------+-------------------------+-------------------------+
| 6 bytes | 6 bytes | 2 bytes |
+-------------------------+-------------------------+-------------------------+
| Payload/Data |
+-------------------------------------------------------------------------+
| 46-1500 bytes |
+-------------------------------------------------------------------------+
| CRC (4 bytes) |
+-------------------------------------------------------------------------+
标准以太网帧的数据字段最小为46字节,最大为1500字节。加上其他字段,整个帧的长度为:
- 最小帧长度:46 + 18 = 64字节
- 最大帧长度:1500 + 18 = 1518字节
=>以太网的MTU是1500
802.3与EthII的区别:
IEEE 802.3是以太网的标准化规范,而Ethernet II则是早期在以太网发展中使用的一种帧格式。
=>两者的区别主要在于 对 Ethernet Type的解释有差异。在IEEE 802.3中,如果长度字段的值小于等于1500(0x05DC),则被解释为帧长度;如果大于这个值,则被解释为帧类型。Ethernet II只解释为帧类型,比如IPv4(0x0800)、ARP(0x0806)等。
随着技术的进步,现代以太网通常更多地遵循IEEE 802.3标准,但Ethernet II仍然在某些特定的应用场景中得到使用和支持。
VLAN
VLAN:
VLAN(Virtual Local Area Network)是一种逻辑上的网络划分技术。实现通过在以太网帧的头部添加额外的VLAN标签(即802.1Q标签),这个标签的存在使得交换机能够识别和处理不同的VLAN,并且在不同的VLAN之间进行隔离和通信。
引入VLAN概念后,数据帧只在相应的VLAN进行交换。用通俗一点的话来讲,一个交换机被虚拟出了多个逻辑交换机,每一个VLAN内的端口都是一个逻辑上的交换机。
带VLAN标记的以太网数据帧结构(IEEE 802.1Q):
+-------------------------+-------------------------+-------------------------+
| Destination MAC Address (6 bytes) | Source MAC Address (6 bytes) | TPID (2 bytes, 0x8100) |
+-------------------------+-------------------------+-------------------------+
| TCI (2 bytes) | Ethernet Type (2 bytes) |
+-------------------------+-------------------------+
| Payload/Data (46-1500 bytes) |
+-------------------------------------------------------------------------+
| CRC (4 bytes) |
+-------------------------------------------------------------------------+
TPID (0x8100):表示这是一个带有VLAN标签的以太网帧。
TCI:包含VLAN ID和优先级信息。
Ethernet Type:指示上层协议类型,例如IPv4(0x0800)或IPv6(0x86DD)。
=>VLAN标签就是在Ethernet Type之前插入由TPID (0x8100)+TCI组成的四字节长的标签,增加VLAN标签后,以太帧最大长度会增加4字节到1522字节。
MPLS
MPLS位于TCP/IP协议栈中的链路层和网络层之间,MPLS以标签交换替代IP转发。标签是一个短而定长的、只具有本地意义的连接标识符,标签封装在链路层和网络层间。
L2VPN
MPLS L2VPN数据帧:
+-----------------------------------------------------------------------------------------------+
| Ethernet Header (14 bytes) + MPLS Header (4 bytes) |
+-------------------------+-------------------------+-------------------------+-----------------+
| Destination MAC Address | Source MAC Address | Ethernet Type (0x8847) | MPLS Label Stack |
+-------------------------+-------------------------+-------------------------+-----------------+
| 00:11:22:33:44:55 | 66:77:88:99:AA:BB | 0x8847 | Label 1 |
| | | | Label 2 |
| | | | |
+-------------------------+-------------------------+-------------------------+-----------------+
| |
| Ethernet Frame (Payload) (IPv4 + TCP + Application) |
| |
+-------------------------+-------------------------+-------------------------+-----------------+
| Destination MAC Address | Source MAC Address | Ethernet Type (0x0800) | IPv4 Header |
+-------------------------+-------------------------+-------------------------+-----------------+
| Destination MAC Address | Source MAC Address | Ethernet Type (0x0800) | IPv4 Header |
| | | | TCP Header |
| | | | Application Data |
+-------------------------+-------------------------+-------------------------+-----------------+
| |
| CRC (4 bytes) |
| |
+-----------------------------------------------------------------------------------------------+
目的MAC地址为
00:11:22:33:44:55
,源MAC地址为66:77:88:99:AA:BB
。Ethernet类型字段为
0x8847
,表示这是一个MPLS帧。MPLS标签栈包含了两个标签(Label 1和Label 2),用于指示数据包的转发路径。
MPLS Payload部分是一个完整的以太网帧,包含目的MAC地址、源MAC地址、Ethernet类型字段(0x0800表示IPv4)和IPv4数据包的头部、TCP头部以及应用数据。
CRC字段包含帧的循环冗余校验值,用于帧的错误检测
=>L2VPN包括VPWS与VPLS
其中VPLS有以下功能:
MAC地址学习,MAC地址迁移: 以太网交换原理可以概括为 ‘源MAC学习,目的MAC转发’
FRR保护: (Fast Reroute,快速重路由) 旨在当网络中链路或者节点失效后,为这些重要的节点或链路提供备份保护,实现快速重路由,减少链路或节点失效时对流量的影响,使流量实现快速恢复。
ECMP/LAG
L3VPN
MPLS L3VPN数据帧:
+---------------------------------------------------------------------------------------------------+
| Ethernet Header (14 bytes) + MPLS Header (4 bytes) |
+-------------------------+-------------------------+-------------------------+---------------------+
| Destination MAC Address | Source MAC Address | Ethernet Type (0x8847) | MPLS Label Stack |
+-------------------------+-------------------------+-------------------------+---------------------+
| 6 bytes | 6 bytes | 2 bytes | 4 bytes |
+-------------------------+-------------------------+-------------------------+---------------------+
| IPv4 Header (20 bytes)
+-------------------------+-------------------------+-------------------------+---------------------+
| TCP/UDP Header | Application Data | Padding/Options | CRC (4 bytes) |
+-------------------------+-------------------------+-------------------------+---------------------+
| Variable length | Variable length | Variable length | 4 bytes |
+-------------------------+-------------------------+-------------------------+---------------------+
=>可以看到L3VPN相对于L2VPN来说,不用包两层以太头了。即便加入了MPLS,以太网帧长度仍不会超过1518字节。
各式报文
ARP报文
ARP(Address Resolution Protocol,地址解析协议)报文用于将IP地址解析为MAC地址。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination MAC Address (6 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source MAC Address (6 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ethernet Type (2 bytes) = ARP (0x0806) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ARP Message |
| (28 to 46 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Ethernet Type:以太网类型字段,2字节,表示数据帧中的上层协议类型。对于ARP消息,以太网类型为0x0806,表示后续数据是ARP协议的数据部分。
- ARP Message:ARP消息的内容部分,包括以下字段:
- Hardware Type:硬件类型,2字节。
- Protocol Type:协议类型,2字节。
- Hardware Addr Len:硬件地址长度,1字节。
- Protocol Addr Len:协议地址长度,1字节。
- Opcode:操作码,2字节,指示ARP报文的类型。
- Sender MAC Address:发送ARP请求或应答的设备的MAC地址,6字节。
- Sender IP Address:发送ARP请求或应答的设备的IP地址,4字节。
- Target MAC Address:目标MAC地址,在ARP请求中通常为全0,在ARP应答中为目标设备的MAC地址,6字节。
- Target IP Address:目标IP地址,ARP请求或应答中的目标设备的IP地址,4字节。
ARP消息被封装在以太网帧中,以太网帧的头部包含了目的MAC地址、源MAC地址和以太网类型字段,而ARP消息本身作为以太网帧的数据部分。这种封装方式使得ARP消息能够在以太网中进行传输和处理,从而实现IP地址到MAC地址的解析和映射。
ICMP报文
ICMP(Internet Control Message Protocol,互联网控制报文协议)是一种网络层协议,用于在IP网络中传递控制消息。常见的ICMP报文类型包括“回显请求”和“回显应答”,也就是通常所说的ping操作。
IPv4数据报格式:
以太网类型:指示上层协议类型为IPv4(0x0800)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version (4 bits)| IHL (4 bits) |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags (3 bits)| Fragment Offset (13 bits)|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum (16 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source IP Address (32 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination IP Address (32 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ICMP Message (variable length) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
版本(Version):IPv4版本号。
IHL(Internet Header Length):IPv4头部长度。
Type of Service:服务类型。
Total Length:整个IPv4数据报的总长度。
Identification、Flags、Fragment Offset:用于分片的字段。
Time to Live:生存时间,用于限制数据报在网络中的生存时间。
Protocol:指示上层协议为ICMP(1)。
Header Checksum:IPv4头部校验和。
Source IP Address:发送ICMP消息的设备的IP地址。
Destination IP Address:目标设备的IP地址。
=>除了ARP报文之外,ICMP,OSPF等均在IPv4协议上传输.
最小长度:IPv4头部的最小长度是20字节,没有数据部分。
最大长度:IPv4报文的最大长度是65535字节(2^16 - 1),包括头部和数据部分。
当IPv4报文的长度超过链路层的MTU时,IP层会将报文分成多个片段,每个片段都包含原始IP头部的副本,并在适当的位置加入分片偏移量。
OSPF报文
OSPF(Open Shortest Path First)是一种用于内部网关协议(IGP)的链路状态路由协议,用于在路由器之间交换路由信息。
OSPF报文主要有5种:Hello报文、DD (Database Description,数据库描述)报文、LSR (LinkState Request,链路状态请求)报文、LSU(LinkState Update,链路状态更新)报文和LSAck(LinkState Acknowledgment,链路状态应答)报文。它们各自在OSPF路由更新中所担当的用途不一样,报文格式也存在比较大的差别。
RSVP报文
RSVP(Resource Reservation Protocol)是一种用于实时流量管理和服务质量(QoS)保证的网络协议。它允许网络设备(如路由器)在网络路径上设置资源预约,以确保能够满足特定流量的带宽、延迟、抖动等需求。RSVP通过控制消息来协商和建立这些资源预约。
IGMP报文
IGMP(Internet Group Management Protocol)是一种用于管理多播组成员的协议。它在IPv4网络中允许主机向路由器报告其多播组成员身份。
补充:驱动开发
内核模式驱动(Kernel Mode Driver)和用户模式驱动(User Mode Driver)是操作系统中的两种驱动程序,它们在运行环境、权限、性能、安全性等方面存在显著的区别。
=>内核模式驱动 高风险高性能开发复杂 如网络适配器、硬盘控制器驱动、GPU驱动等。用户模式驱动, 如打印机驱动、USB设备驱动、音频设备驱动等。
内核模式驱动通常用于需要直接访问硬件资源、需要高性能和低延迟的设备,如网络适配器、硬盘控制器和GPU。这些驱动程序运行在内核空间,具有高权限和直接硬件访问能力,但也因此带来更高的风险和开发复杂性。
用户模式驱动通常用于对性能要求不高、需要较高安全性和稳定性的设备,如打印机、USB设备和某些音频设备。这些驱动程序运行在用户空间,权限受限,开发和调试相对简单,更安全且不易导致系统崩溃。
内核模式驱动通常有以下两种编译: 内核模块通常作为独立的模块编译,不需要与内核一起编译。它们可以在需要时加载或卸载,而无需重启系统。内核模块编译生成
.ko
文件,可以通过insmod
或modprobe
命令动态加载到内核中。某些驱动程序可能需要与内核一起编译,成为内核的一部分。这通常是出于需要在启动时立即可用或对性能有特殊要求的考虑。核内置驱动程序会与内核一起编译和链接,生成的内核映像包含这些驱动程序。这需要重新编译内核并重启系统以生效。
用户模式驱动则不需要与内核一起编译,它们作为普通的用户空间程序编译和运行:用户模式驱动通常使用常规的用户空间编译工具(如
gcc
)进行编译。用户模式驱动以可执行文件或库的形式存在,通常与应用程序一起部署,可以通过普通的用户空间方式加载和运行。总结
- 内核模式驱动可以作为内核模块独立编译和动态加载,不需要与内核一起编译;但某些情况下(如启动时需要加载)也可以选择与内核一起编译。
- 用户模式驱动完全在用户空间运行,不需要与内核一起编译,通过普通的编译和部署方式进行操作。