用户态协议栈学习,DKDK基本用法介绍

2023-05-16

网络数据流,先了解一下用户态协议栈在什么位置

这里以DPDK为例:(目的是为了获得原始的网络数据,除了DPDK,socket raw,netmap也能获取获取以太网数据)
在这里插入图片描述

1 默认数据流

默认情况下,网络数据经物理网卡,内核协议栈,VFS,最后到达APP

2 DPDK

DPDK接管网卡,它可以把数据送入用户态协议栈,也可以把数据传到sk_buffer中。
因为dpdk的这种特性,实现的用户态协议栈可以直接读写应用程序内存,更加灵活地控制网络数据流,实现更多自定义功能;可以避免系统调用、内核态切换等开销,减少网络数据包传输时的延迟和CPU使用率,提高处理吞吐量。

DPDK 编译与配置

设置环境变量

sudo su
cd 至 dpdk-stable-19.08.2
export RTE_SDK=“路径/”dpdk-stable-19.08.2/
export RTE_TARGET=x86_64-native-linux-gcc

运行./usertools/dpdk-setup.sh ,部分选项解释

Step 1: Select the DPDK environment to build 选择一种编译器编译


[1] arm64-armada-linuxapp-gcc
[2] arm64-armada-linux-gcc
[3] arm64-armv8a-linuxapp-clang
[4] arm64-armv8a-linuxapp-gcc
[5] arm64-armv8a-linux-clang
[6] arm64-armv8a-linux-gcc
[7] arm64-bluefield-linuxapp-gcc
[8] arm64-bluefield-linux-gcc
[9] arm64-dpaa2-linuxapp-gcc
[10] arm64-dpaa2-linux-gcc
[11] arm64-dpaa-linuxapp-gcc
[12] arm64-dpaa-linux-gcc
[13] arm64-octeontx2-linuxapp-gcc
[14] arm64-octeontx2-linux-gcc
[15] arm64-stingray-linuxapp-gcc
[16] arm64-stingray-linux-gcc
[17] arm64-thunderx2-linuxapp-gcc
[18] arm64-thunderx2-linux-gcc
[19] arm64-thunderx-linuxapp-gcc
[20] arm64-thunderx-linux-gcc
[21] arm64-xgene1-linuxapp-gcc
[22] arm64-xgene1-linux-gcc
[23] arm-armv7a-linuxapp-gcc
[24] arm-armv7a-linux-gcc
[25] i686-native-linuxapp-gcc
[26] i686-native-linuxapp-icc
[27] i686-native-linux-gcc
[28] i686-native-linux-icc
[29] ppc_64-power8-linuxapp-gcc
[30] ppc_64-power8-linux-gcc
[31] x86_64-native-bsdapp-clang
[32] x86_64-native-bsdapp-gcc
[33] x86_64-native-freebsd-clang
[34] x86_64-native-freebsd-gcc
[35] x86_64-native-linuxapp-clang
[36] x86_64-native-linuxapp-gcc
[37] x86_64-native-linuxapp-icc
[38] x86_64-native-linux-clang
[39] x86_64-native-linux-gcc 我这里选择 x86_64-native-linux-gcc,因为我用的系统 ubuntu server x64
[40] x86_64-native-linux-icc
[41] x86_x32-native-linuxapp-gcc
[42] x86_x32-native-linux-gcc


Step 2: Setup linux environment


[43] Insert IGB UIO module // 插入Intel Gigabit Ethernet驱动程序的用户态I/O(UIO)模块。这个模块可以帮助操作系统与Intel网卡进行通信,并提供网络连接服务。

[44] Insert VFIO module // 将物理设备分配给虚拟机以进行直接访问。这使得虚拟机可以在不影响主机性能的情况下获得更好的 I/O 性能,并提供更高的安全性和隔离性。

[45] Insert KNI module // (KNI)模块,以支持在用户空间和内核空间之间传输数据包。
[46] Setup hugepage mappings for non-NUMA systems //设置巨页系统,
[47] Setup hugepage mappings for NUMA systems
// NUMA systems是一种多处理器计算机体系结构,在多核,多内存条,实现统一编址访问
// 如果接收10G数据,只设置4k大小的内存页的话,就需要频繁访问页表,内存页置换,效率不高,这里根据实际情况设置巨页就很有必要。
[48] Display current Ethernet/Baseband/Crypto device settings
// 显示当前以太网/基带/加密设备的设置。这通常指的是计算机或网络设备上的硬件设置,例如网络适配器的速度、双工模式、MAC地址和加密协议等
[49] Bind Ethernet/Baseband/Crypto device to IGB UIO module // 将以太网/基带/加密设备绑定到IGB UIO模块
[50] Bind Ethernet/Baseband/Crypto device to VFIO module // 将以太网/基带/加密设备绑定到VFIO模块的
[51] Setup VFIO permissions // 为VFIO设备分配权限,以便可以在虚拟机中使用该设备


Step 3: Run test application for linux environment


[52] Run test application ( R T E T A R G E T / a p p / t e s t ) [ 53 ] R u n t e s t p m d a p p l i c a t i o n i n i n t e r a c t i v e m o d e ( RTE_TARGET/app/test) [53] Run testpmd application in interactive mode ( RTETARGET/app/test)[53]Runtestpmdapplicationininteractivemode(RTE_TARGET/app/testpmd)


Step 4: Other tools


[54] List hugepage info from /proc/meminfo


Step 5: Uninstall and system cleanup


[55] Unbind devices from IGB UIO or VFIO driver
[56] Remove IGB UIO module
[57] Remove VFIO module
[58] Remove KNI module
[59] Remove hugepage mappings

[60] Exit Script

Option: // 这里输入39回车,就对应step1中的编译环境([39] x86_64-native-linux-gcc)编译了

编译一次即可,编译完成后,就可以按需step2。配置好后,可运行step3中的测试程序。step4,5可根据实际情况使用。

运行./usertools/dpdk-setup.sh shell步骤记录

  1. 输入43, 设置uio module
Option: 43

Unloading any existing DPDK UIO module
Loading uio module
Loading DPDK UIO module
  1. 输入44, 设置VFIO module
Option: 44

Unloading any existing VFIO module
Loading VFIO module
chmod /dev/vfio
OK
  1. 输入45, 设置KNI module
Option: 45

Unloading any existing DPDK KNI module
Loading DPDK KNI module
  1. 输入46,设置hugepages
Option: 46

Removing currently reserved hugepages
Unmounting /mnt/huge and removing directory

  Input the number of 1048576kB hugepages
  Example: to have 128MB of hugepages available in a 2MB huge page system,
  enter '64' to reserve 64 * 2MB pages
Number of pages: 512
Reserving hugepages
Creating /mnt/huge and mounting as hugetlbfs
  1. 输入47,设置hugepages for each node
Option: 47

Removing currently reserved hugepages
Unmounting /mnt/huge and removing directory

  Input the number of 1048576kB hugepages for each node
  Example: to have 128MB of hugepages available per node in a 2MB huge page system,
  enter '64' to reserve 64 * 2MB pages on each node
Number of pages for node0: 512
Reserving hugepages
Creating /mnt/huge and mounting as hugetlbfs
  1. 输入48,显示设备
Network devices using kernel driver
===================================
0000:02:01.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=eth2 drv=e1000 unused=igb_uio,vfio-pci 
0000:02:06.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=eth3 drv=e1000 unused=igb_uio,vfio-pci 
0000:03:00.0 'VMXNET3 Ethernet Controller 07b0' if=eth0 drv=vmxnet3 unused=igb_uio,vfio-pci 
0000:0b:00.0 'VMXNET3 Ethernet Controller 07b0' if=eth1 drv=vmxnet3 unused=igb_uio,vfio-pci *Active*

No 'Baseband' devices detected
==============================

No 'Crypto' devices detected
============================

No 'Eventdev' devices detected
==============================

No 'Mempool' devices detected
=============================

No 'Compress' devices detected
==============================

No 'Misc (rawdev)' devices detected
===================================
  1. 输入49,修改绑定的设备,这里是: bind to IGB UIO driver: eth0(或者填入:0000:03:00.0 都可以)
    这里的绑定是为了让DPDK接管网卡
Option: 49
Network devices using kernel driver
===================================
0000:02:01.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=eth2 drv=e1000 unused=igb_uio,vfio-pci 
0000:02:06.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=eth3 drv=e1000 unused=igb_uio,vfio-pci 
0000:03:00.0 'VMXNET3 Ethernet Controller 07b0' if=eth0 drv=vmxnet3 unused=igb_uio,vfio-pci 
0000:0b:00.0 'VMXNET3 Ethernet Controller 07b0' if=eth1 drv=vmxnet3 unused=igb_uio,vfio-pci *Active*

No 'Baseband' devices detected
==============================

No 'Crypto' devices detected
============================

No 'Eventdev' devices detected
==============================

No 'Mempool' devices detected
=============================

No 'Compress' devices detected
==============================

No 'Misc (rawdev)' devices detected
===================================
Enter PCI address of device to bind to IGB UIO driver: (这里输入pci地址)0000:0b:00.0
Warning: routing table indicates that interface 0000:0b:00.0 is active. Not modifying  ====> 注意有警告,是因为这个设备被占用了,
					这个是后可以另起一个终端,执行sudo ifconfig eth0 down, 把它关掉
					(查看网卡信息  lspci -k | grep -A 2 -i "Ethernet")
OK

绑定好的可以通过输入55,删除绑定,如下,vmxnet3正是.vmx文件中设置的 (删除绑定)
Enter PCI address of device to unbind: 0000:03:00.0
Enter name of kernel driver to bind the device to: vmxnet3

注意事项

在有多个网卡的情况下,ifconfig 看到的eth0,eth1与.vmx文件中的 ethernet0, ethernet1可能不是一一对应的关系

测试

Option: 53


  Enter hex bitmask of cores to execute testpmd app on
  Example: to execute app on cores 0 to 7, enter 0xff
bitmask: 7
Launching app
EAL: Detected 4 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: PCI device 0000:02:01.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:02:06.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:03:00.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 15ad:7b0 net_vmxnet3
EAL: PCI device 0000:0b:00.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 15ad:7b0 net_vmxnet3
Interactive-mode selected
testpmd: create a new mbuf pool <mbuf_pool_socket_0>: n=163456, size=2176, socket=0
testpmd: preferred mempool ops selected: ring_mp_mc

Warning! port-topology=paired and odd forward ports number, the last port will pair with itself.

Configuring Port 0 (socket 0)
Port 0: 00:0C:29:A3:11:BF
Checking link statuses...
Done
testpmd> help

Help is available for the following sections:

    help control                    : Start and stop forwarding.
    help display                    : Displaying port, stats and config information.
    help config                     : Configuration information.
    help ports                      : Configuring ports.
    help registers                  : Reading and setting port registers.
    help filters                    : Filters configuration help.
    help traffic_management         : Traffic Management commmands.
    help devices                    : Device related cmds.
    help all                        : All of the above sections.

testpmd> help control

Control forwarding:
-------------------

start
    Start packet forwarding with current configuration.

start tx_first
    Start packet forwarding with current config after sending one burst of packets.

stop
    Stop packet forwarding, and display accumulated statistics.

quit
    Quit to prompt.

testpmd> start
io packet forwarding - ports=1 - cores=1 - streams=1 - NUMA support enabled, MP allocation mode: native
Logical Core 1 (socket 0) forwards packets on 1 streams:
  RX P=0/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00

  io packet forwarding packets/burst=32
  nb forwarding cores=1 - nb forwarding ports=1
  port 0: RX queue number: 1 Tx queue number: 1
    Rx offloads=0x0 Tx offloads=0x0
    RX queue: 0
      RX desc=0 - RX free threshold=0
      RX threshold registers: pthresh=0 hthresh=0  wthresh=0
      RX Offloads=0x0
    TX queue: 0
      TX desc=0 - TX free threshold=0
      TX threshold registers: pthresh=0 hthresh=0  wthresh=0
      TX offloads=0x0 - TX RS bit threshold=0
testpmd> show port info 0

********************* Infos for port 0  *********************
MAC address: 00:0C:29:A3:11:BF
Device name: 0000:03:00.0
Driver name: net_vmxnet3
Connect to socket: 0
memory allocation on the socket: 0
Link status: up
Link speed: 10000 Mbps
Link duplex: full-duplex
MTU: 1500
Promiscuous mode: enabled
Allmulticast mode: disabled
Maximum number of MAC addresses: 1
Maximum number of MAC addresses of hash filtering: 0
VLAN offload: 
  strip off 
  filter off 
  qinq(extend) off 
Supported RSS offload flow types:
  ipv4
  ipv4-tcp
  ipv6
  ipv6-tcp
Minimum size of RX buffer: 1646
Maximum configurable length of RX packet: 16384
Current number of RX queues: 1
Max possible RX queues: 16
Max possible number of RXDs per queue: 4096
Min possible number of RXDs per queue: 128
RXDs number alignment: 1
Current number of TX queues: 1
Max possible TX queues: 8
Max possible number of TXDs per queue: 4096
Min possible number of TXDs per queue: 512
TXDs number alignment: 1
Max segment number per packet: 255
Max segment number per MTU/TSO: 16

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用户态协议栈学习,DKDK基本用法介绍 的相关文章

  • spring security验证流程

    工作需要 xff0c 又弄起了权限的管理 虽然很早以前都了解过基于容器的权限实现方式 xff0c 但是一直都觉得那东西太简陋了 后来使用liferay时发现它的权限系统的确做得很优秀 xff0c 感觉这也可能是它做得最出色的地方吧 但是当时
  • On make and cmake

    你或许听过好几种 Make 工具 xff0c 例如 GNU Make xff0c QT 的 qmake xff0c 微软的MS nmake xff0c BSD Make xff08 pmake xff09 xff0c Makepp xff0
  • 制作html css 步骤进度条(完整代码)

    这个动画步骤进度条的css制作的非常简单 那里有两个按钮可以控制步骤 xff0c 它们将逐步进行 我在这个多步骤进度条 css 中使用了 4 个步骤 如果你愿意 xff0c 你可以使用更多 我使用了一些 javascript 来创建这一步进
  • 搜狗语料库word2vec获取词向量

    一 中文语料库 本文采用的是搜狗实验室的搜狗新闻语料库 xff0c 数据链接 http www sogou com labs resource cs php 首先对搜狗语料库的样例文件进行分析 搜狗语料库由搜狗实验室提供 xff0c 我们使
  • c++堆排序原理和实现

    堆排序 xff0c C 43 43 实现 堆是一种特殊的树形数据结构 xff0c 即完全二叉树 堆分为大根堆和小根堆 xff0c 大根堆为根节点的值大于两个子节点的值 xff1b 小根堆为根节点的值小于两个子节点的值 xff0c 同时根节点
  • TCP流量控制和拥塞控制

    先来了解2个TCP的概念 xff1a MSS xff1a Maximum Segment Size xff0c TCP一次传输发送的最大数据段长度 RTT xff1a Round Trip Time xff0c 往返时延 xff0c 表示从
  • c++static关键字的作用

    c 43 43 static关键字的作用 c c 43 43 共有 1 xff09 xff1a 修饰全局变量时 xff0c 表明一个全局变量只对定义在同一文件中的函数可见 2 xff09 xff1a 修饰局部变量时 xff0c 表明该变量的
  • git合并解决

    远程分支被修改了 xff0c 本地分支落后修改 xff0c 合并 方法一 xff1a 在你自己的分支上 xff0c 如果有本地修改先 git stash git pull git merge origin master 如果本地分支是mas
  • TCP Keepalive

    TCP Keepalive的起源 TCP协议中有长连接和短连接之分 短连接环境下 xff0c 数据交互完毕后 xff0c 主动释放连接 xff1b 长连接的环境下 xff0c 进行一次数据交互后 xff0c 很长一段时间内无数据交互时 xf
  • 【转载】深入浅出讲解FOC算法与SVPWM技术——自制FOC驱动器

    原文链接 xff1a https zhuanlan zhihu com p 147659820 参考文献 xff1a https zhuanlan zhihu com p 364247816 https www zhihu com ques
  • Linux 基本用户和组命令

    Linux 基本用户和组命令 1有关用户的命令 1 新增用户 Useradd 43 用户名 2 查看用户是否存在 id 43 用户名 3 删除用户 sudo userdel 用户名 只会删除用户本身 sudo userdel r 43 用户
  • Linux文件及权限

    Linux文件及权限 1 xff0e 查看文件权限 1 ls l 命令 ll 命令 显示详细信息 例 xff1a root 64 localhost Desktop ll total 178752 rwxr xr x 1 root root
  • 各种排序算法和应用场景

    简介 插入排序 插入排序是一种较为简单的排序算法 xff0c 它的基本思想是通过构建有序序列 xff0c 对于未排序数据 xff0c 在已排序序列中从后向前扫描 xff0c 找到相应位置并插入 形象的可以理解为打扑克抓拍的过程 xff0c
  • C/C++(3)C++调用C语言的函数和头文件

    C 43 43 语言支持函数重载 xff0c C语言不支持函数重载 函数被C 43 43 编译后在库中的名字与C语言的不同 xff0c C xff0b xff0b 和C是两种完全不同的编译链接处理方式 xff0c 如果直接在C xff0b
  • 一文了解IMU原理、误差模型、标定、惯性传感器选型以及IMU产品调研(含IMU、AHRS、VRU和INS区别)

    在此记录一下测试IMU过程中的其它文章 xff0c 便于以后查看 xff1a IMU的误差标定以及姿态解算ROS下通过USB端口读取摄像头数据 包括笔记本自带摄像头 激光 摄像头 IMU等传感器数据同步方法 message filters
  • windows安装Ubuntu子系统以及图形化界面记录

    文章目录 1 windows环境设置2 开始安装3 ubuntu使用3 1 启动和退出 Linux 子系统3 2 安装位置3 3 更换源 4 安装图形化界面4 1 安装VcXsrv4 2 安装桌面环境 xff08 1 xff09 方法1 x
  • STM32 DMA正常模式等待传输完成和开始下一次传输

    选择DMA的正常模式 xff0c 即DMA只传输一次 如果当传输完一次后 xff0c 还想再传输一次 xff0c 就需要重启DMA xff1a DMA Cmd DMA1 Channel6 DISABLE 重新设置源地址 重新设置目的地址 重
  • 增量式编码器和绝对式编码器,ABI信号和UVW信号、编码器PWM信号

    一 编码器的分类 根据检测原理 xff0c 编码器可分为光学式 磁式 感应式和电容式 xff0c 根据其刻度方法及信号输出形式 xff0c 可分为增量式 绝对式以及混合式三种 1 增量式编码器 增量式编码器是直接利用光电转换原理输出三组方波
  • 路由器接口管理 控制端口 辅助端口 物理端口 逻辑端口 局域网

    路由器接口管理 路由器的接口相对于交换机来说最大的特点就是接口类型和配置更为复杂 xff0c 一般吧路由器上的接口分为三大类 xff1a 1 局域网的LAN接口 xff0c 2 用于广域网接入 互联的WAN接口 xff0c 3 应用于LAN
  • C++各大有名库的介绍

    C 43 43 各大有名库的介绍 在C 43 43 中 xff0c 库的地位是非常高的 C 43 43 之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论 现实中 xff0c C 43 43 的

随机推荐

  • 树莓派搭建nas服务器的详细过程

    前奏 默认的登录帐号为 pi xff0c 密码是 raspberry 开启 ssh 在根目录 xff0c 新建一个名为 ssh 的空白文件就行了 然后 xff0c 重启就可以ssh访问了 命令行下配置 xff1a sudo raspi co
  • buffer overflow detected错误

    最近在写并行程序的时候遇到这个问题 在上网查询之后发现好多是由于sprintf的缓冲区不够造成的 对比自己程序发现一个很低级的错误 char sc 61 new char 100 sprintf sc 34 d 34 rank string
  • 聊一聊关于ROS开发常用的调试工具(rostopic,rosnode等等)

    ROS常用的调试工具有rosnode xff0c rostopic 1 rosnode 参数用法作用listrosnode list查看当前运行了哪些节点inforosnode info node name查看该节点发布 接受哪些话题以及服
  • 关于SLAM-Hector建图方法的一些基础点

    hector建图算法 1 简介 hector slam不需要里程计数据 xff0c 使用高斯牛顿方法 xff0c 直接使用激光雷达数据估算里程计信息 所以 xff0c 只需要激光雷达数据 xff0c 即可完成建图 2 优缺点 优点 xff1
  • 查全率(Recall)、查准率(Precision)以及综合评价指标(F1-Measure )

    xfeff xfeff 原文转载于 xff1a http www cnblogs com bluepoint2009 archive 2012 09 18 precision recall f measures html 在信息检索和自然语
  • 什么是码,主码,主属性,非主属性

    xfeff xfeff 码 xff1a 代表数目的符号 主码 我们在建立数据库的时候 xff0c 需要为每张表指定一个主码 xff0c 主码也叫主键 所谓主码就是在实体集中区分不同实体的候选码 一个实体集中只能有一个主码 xff0c 但可以
  • 整数二进制补码的数学原理(two's complement)

    转载自 整数二进制补码的数学原理 two 39 s complement 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • IP,子网掩码,默认网关和DNS都是什么,有什么用

    彻底明白IP 地址 完整版 xff08 含CIDR 讲解 xff09 不管是学习网络还是上网 xff0c IP 地址都是出现频率非常高的词 Windows 系统中设置IP 地址的界面如图1 所示 xff0c 图中出现了IP 地址 子网掩码
  • 催经的方法【吐血整理】

    xfeff xfeff 催经的方法 吐血整理 1 生姜红糖茶 2 益母草颗粒 xff0c 中成药 xff0c 很有效 3 乌鸡白凤丸 43 逍遥丸 艾灸 至少对我这个寒性体质导致的姨妈不来很有效 一周不到姨妈必来 4 把药膏贴在肚脐眼 气血
  • 向量的模和范数

    xfeff xfeff 向量的模 向量 的 大小 或长度 xff09 叫做向量的模 xff0c 记作 平面向量 61 x y xff0c 模长是 xff1a 空间向量 61 x y z xff0c 模长是 xff1a 对于向量 属于 n 维
  • 基于LMS的正弦信号去噪

    coding utf 8 34 34 34 Created on Thu May 30 21 17 42 2013 64 author Timchen525 34 34 34 import numpy as np import matplo
  • 查找本机 CD-Key 的方法

    背景 由于笔记本的硬盘快满了 xff0c 打算换个新硬盘并重装 windows系统还希望继续使用原来的正版CD Key 方法 1 powershell 搜索 powershell xff0c 以管理员身份运行 2 查找ProductKey
  • libSVM简介及核函数模型选择

    xfeff xfeff 转自 xff1a libSVM简介及核函数模型选择 1 libSVM简介 训练模型的结构体 struct svm problem 储存参加计算的所有样本 int l 记录样本总数 double y 指向样本类别的组数
  • opencv学习系列教程之一 整体框架

    现在就业人数最多的是计算机专业 xff0c 而这个专业的很多人都是做深度学习 xff0c 或者行为识别这块 xff0c 这讲主要介绍一下很常用的一个工具 opencv 很多人说 xff0c 这是一个程序 xff0c 有些人这是很多算法 xf
  • C/C++ Socket UDP 广播消息的发送与接收

    C C 43 43 Socket UDP 广播消息的发送与接收 局域网内全网段广播消息的IP地址为 xff1a 255 255 255 255 xff0c 向该IP地址发送广播消息 xff0c 局域网下的任何网段的客户机都能收到广播 对于发
  • A* 寻路算法

    A 寻路算法 原文地址 xff1a http www gamedev net reference articles article2003 asp 概述 虽然掌握了 A 算法的人认为它容易 xff0c 但是对于初学者来说 xff0c A 算
  • 防止头文件被重复引用

    一 下划线 属于编程风格的内容 xff0c 对程序没有影响 不用下划线也可以 xff0c 用几个下划线也由个人习惯 二 其实质是一个宏名 由此我们可以防止发生重复定义或声明 假设你的头文件名为head h xff0c 根据习惯 xff0c
  • UDP通信绑定指定IP

    由于测试需要 xff0c 自己用vconfig在自己的虚拟机里添加了很多ip xff0c 实现不同Ip间的通信 UDP客户端向服务器发送报文时 xff0c 绑定会有最近IP原则 xff0c 比如 xff0c 你机器上有如下几个IP xff1
  • C++中两个同名头文件的引用顺序

    明人不说暗话 xff0c 直接上代码 xff1a 这里有两个路径下的同名head h头文件 includea head h define A 100 int funA return A includeb head h define A 20
  • 用户态协议栈学习,DKDK基本用法介绍

    网络数据流 xff0c 先了解一下用户态协议栈在什么位置 这里以DPDK为例 xff1a xff08 目的是为了获得原始的网络数据 xff0c 除了DPDK xff0c socket raw xff0c netmap也能获取获取以太网数据