编辑
2025-03-26
学习记录
0

目录

DPDK相关知识
1.概念
2.面向的岗位
3. 七层网路模型
4.dpdk主要学习的东西
5.windows向指定的网卡添加路由
6.网络协议栈数据格式
7.协议栈架构设计优化
8.一些网络的命令
9.VPP: 高性能、模块化、可扩展的网络数据包处理框架
9.1概念:

DPDK相关知识

1.概念

DPDK(Data Plane Development Kit)是一个由Intel开发的开源软件库,它提供了一系列用于快速数据包处理的工具和驱动程序。VPP(Vector Packet Processing)则是由思科开发的高性能、模块化、可扩展的网络数据包处理框架。结合DPDK和VPP可以实现高性能的网络功能,如防火墙、路由器、负载均衡器等。 DPDK与VPP的结合

DPDK提供了底层的数据包处理加速能力,而VPP则在此基础上提供了丰富的网络功能。VPP运行在用户空间,支持多种收包方式,常用的是DPDK。VPP平台可以用于构建任何类型的数据包处理应用程序,它的架构允许通过插件的形式轻松扩展新功能。

  1. VPP: 高性能、模块化、可扩展的网络数据包处理框架
  2. OvS: open virtual switch 开源的虚拟交换机,旨在通过支持可编程扩展来实现大规模的网络自动化。
  3. DDOS:分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。
  4. SDN: SDN字面意思是软件定义网络,其试图摆脱硬件对网络架构的限制,这样便可以像升级、安装软件一样对网络进行修改,便于更多的APP(应用程序)能够快速部署到网络上。
  5. 多队列网卡:一个网卡有多个接收通道并可能每个通道对应一个cpu中断

2.面向的岗位

面向的岗位有:网络工程师、存储网络工程师、SDN工程师(虚拟网络)

3. 七层网路模型

image.png

4.dpdk主要学习的东西

  1. 网络协议栈:arp地址解析协议,根据ip地址获取物理地址、ethernet以太网协议 ip icmp用于验证网络是否畅通,比如常用的ping命令 udp tcp

  2. 组件:mp多核中间的接口、acl(Access Control List)访问控制列表,是由多条“deny|permit”(拒绝|允许)语句组成,每一条都是一条规则,用于控制网络流量的进出。、KNI(Kernel Net Interface)是DPDK为用户态和内核协议栈交互提供的一种机制。本质上就是在内核注册一个虚拟网口,使用队列机制和用户态进行报文交换,和其他虚拟口的实现差不多。Timer定时器、bpf、mbuf/mempool

  3. 经典项目:dns、网关getway、nat网络地址映射、firewall防火墙、switch交换机、pktgen能够以10Gbit的线速率生成64字节帧的流量,并且可以作为发送器或接收器进行线速操作。

  4. dpdk框架:vpp(c/c++)、ovs、nff-go(golang )、snabb(lua)、spdk(c)

  5. dpdk源码:内核驱动(igb_uio、vdio、kni)、内存(mbuf、mempool)、协议(ipsec、bpf、pci、flow_classify)、虚拟化(vhost、virtio)、cpu(affinity侵和性把两个逻辑内核(CPU core)模拟成两个物理芯片、rcu(Read-copy update)、schedule)、安全(security、cryptodev、compresseddev)、性能(吞吐量bps、拆链和建链pps、并发、时延、丢包率)、测试方法(测试用例、vpp的sandbox、perf3灌包、rfc2544)、测试工具(perf3、trex、testpmd、pkegen-dpdk)

  6. dpdk环境搭建

bash
export RTE_SDK=/home/zzw/share/dpdk-stable-19.08.2 export RTE_TARGET=x86_64-native-linux-gcc

5.windows向指定的网卡添加路由

  1. 查看网络信息找到网卡的Idx:netsh i i show in
  2. 添加:netsh -c i i add neighbors 19 192.168.0.106 00-0c-29-6b-32-b2
  3. 查看是否有相应的路由:arp -a

6.网络协议栈数据格式

  1. 以太网(位于数据链路层)数据帧格式:目的地址(6Byte)+源地址(6Byte)+类型(2Byte)+数据(46~1500Byte)+帧校验序列(4Byte)。其中地址为MAC地址、类型表示上层用的什么协议。
  2. TCP协议(位于传输层),头部+数据部分,头部如果没有可选项的话固定是20个字节:源端口号(16b)+目标端口号(16b)+序列号(32b)+确认号(32b)+首部长度(4b)+保留位(6b)+控制位(6b)+窗口大小(16b)+校验和(16b)+紧急指针(16b)+可选项(0-40Byte)。序列号和确认号用于保证消息传输完整性,在TCP发送一个数据包时,会将这个数据包放到重发队列中,同时启动定时器,如果收到了这个包的确认消息,便将这个数据包从队列中删除。如果计时器超时,则重新发送该数据包。序列号保证所有数据按照正常顺序重组。窗口大小是在发送数据前,设备间协商以最小单位发送数据。三次握手:A发送连接+B响应并发起连接+A回应。四次挥手:A请求断开+B确认信息+B请求断开+A收到请求。
  3. UDP协议(位于传输层),8Byte头部+数据。头部为:源端口(2B)+目的端口(2B)+UDP长度(2B)+UDP校验和(2B)。常见的UDP应用:TFTP协议、DNS协议、NTP协议、DHCP协议。
  4. ICMP协议(位于网络层和传输层之间)是网络控制消息协议,在传输ICMP协议时先封装ICMP头部,在封装IP头部,再交给数据链路层:
  5. ip(位于网络层)数据帧格式:固定部分20Byte+可选部分0-40Byte(一般没有)。固定部分的20个Byte分为4部分,每个部分4Byte。具体为:版本(4b)+固定部分长度(4b)+优先级与服务类型(8b)+总长度(16b)+标识符(16b)+标志(3b)+段偏移(13b)+TTL(8b)+协议号(8b)+固定部分校验和(16b)+源地址(32b)+目的地址(32b)。其中版本表示ipv4还是ipv6、总长度表示固定部分和可选部分总长、标志段偏移是将拆开的数据包进行组合、TTL是生命值经过一台路由器就减一、协议号1表示ICMP协议6表示TCP协议7表示 是UDP协议。
  6. arp协议(位于网络层),基于目标IP获得目标的MAC地址,从而完成数据帧的二层头部封装,实现消息的快速转发。数据帧共28个字节:硬件类型(2B)+协议类型(2B)+硬件地址长度(1B)+协议地址长度(1B)+OP(2B)+发送端以太网地址(6)+发送端ip地址(4)+目的地以太网地址(6)+目的ip地址(4)。

7.协议栈架构设计优化

接收到数据后放到buffer队列里面,发送的时候从buffer队列里面取。要用两个ringbuffer,开线程去处理。(分层分离架构思想)

ring数据结构

三个线程夹两个ring_buf

image.png

8.一些网络的命令

  1. 抓某个网卡的xxx包:tshark eth0 xxx
  2. 测试dns性能:dnsperf

9.VPP: 高性能、模块化、可扩展的网络数据包处理框架

9.1概念:

  1. 数据面:所有产生的数据
  2. 控制面:数据分发给谁这种控制
  3. Vpp的开发为了简化协议栈控制栈相当于一个包,vpp的开发就是开发vpp plugin,开发好的产品以插件的形式存在vpp之上。写plugin和写驱动模块类似。每个plugin有多个node,每个node可以作为一个小功能,比如vpn,ddos攻击等。
  4. Vpp的作用:1.为数据面的开发提供了完整的数据开发方案。2.以plugin和node组成,是可拆卸的。
  5. Vpp的缺陷:1.不带持久化。

开发plugin的流程:1.init_plugin:将plugin插入到vpp框架中。2.set_command:设置plugin命令,以便在vpp中调用这个命令准备启动这个plugin。 3.function:每个数据来的时候,plugin要执行的操作。

本文作者:zzw

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 License 许可协议。转载请注明出处!