dpdk课程学习之练习笔记二(arp, udp协议api测试)

简介: dpdk课程学习之练习笔记二(arp, udp协议api测试)

基于dpdk,测试udp/tcp协议栈基础功能

这里更倾向与练习笔记,详细实现以及逻辑细节梳理,后期逐渐完善。

1:有关arp的支持

已经练习了arp response的功能。

为了支撑udp/tcp协议栈,需要完善arp的功能,这里测试支持arp request,和arp表的功能。

1.1:梳理arp功能支持(初步理解,如有不对,请指正)

1:arp基础报文可以分为两种arp request(请求报文)arp response(对请求报文的回复报文)

2:以我们所处的dpdk的环境节点进行分析:

===》我们可能收到其他环境发来的arp request(请求报文),我们需要构造arp response(与之对应的回复报文),进行回应。

===》我们需要主动发送arp request(请求报文),探测局域网中网络,则我们可以收到自己探测报文的回复报文arp response,包含了能识别的的网络中的ip和mac地址等基本信息。

===》为了支持网络环境,我们需要**提取收到的arp response(回复报文)**中的ip和mac地址等重要信息,保存在本地(arp缓存表)。

===》使用:在进行udp/tcp通信时,会首先查看arp缓存表,找到ip和mac的映射关系提取数据去构造报文,如果没有找到,会先发送arp探测报文,探测到目标ip和对应的mac,进行保存及使用。

3:arp相关其他细节(arp代理,欺骗,攻击等等)深入,暂不探究

1.2:梳理demo的实现思路

我的理解是arp的基础功能(初步认识arp,详细细节未探究)可以有三个点:

1:定义数据结构,支持arp表数据的存储。(查看arp表显示结果,主要包含ip,mac,和type三个主要字段)

2:发送:本机对环境中arp的探测,我们需要主动发送探测报文,提供支持。(定时发送/udp发送前查表找不到时发送?)

3:接收:可能收到其他环境的探测报文和我们探测报文的回复报文,区分类型进行处理。

===》其他环境的探测报文,需要我们获取本机ip和mac地址,构造报文进行回复。

===》对本机探测报文的回复报文,提取相关回复中的其他机器的ip和mac地址,保存在本地arp表中。

1.3:测试demo的运行

测试demo的实现如下(直接取老师的05_arptable):

===》1:调用dpdk定时器接口,定时发送arp探测请求(查表,广播/给特定mac地址的发送)。

===》2:dpdk接管网卡数据的接口,对接收到的数据进行arp报文过滤,提取arp相关类型报文区分处理。(存表)

===》3:在进行udp通信前,查找arp缓存表去进行数据报文的构造并发送。

测试时,我们关注接收到response报文,关注arp缓存表中的内容:

===》通过日志,可以看到定时器已发送,arp缓存表中已经开始写入数据:

2:协议栈框架调整

个人理解:dpdk接管网卡接收到的所有数据,如果单线程同步执行,可能会造成丢失,延迟处理等,需要对框架进行调整,使其高效,可靠处理接收数据。

目的:优化上述demo,使用多线程的方式,把接收和业务处理进行分离。

2.1:思路描述

1:增加中间缓冲区,网卡涉及发送与接收两个业务,这里的缓冲区也对应两个,一个存放接收到的数据,一个存放待发送的数据。

2:使用多线程的方式,

===》线程1,专门处理/过滤网卡的接收与发送,放入接收缓冲区/从发送缓冲区取数据

===》线程2,业务处理,消费接收缓冲区中的消息,进行业务处理/根据业务逻辑,往发送缓冲区中放数据。

2.2:测试代码描述

直接取老师的可运行demo 06_netarch进行测试。

===》1:使用dpdk提供的ringbuff对接收数据/待发送数据进行存储。

===》2:使用dpdk提供的多线程接口,创建专门的线程进行业务处理。(udp的报文解析和构造回复报文),从接收ringbuffer中取数据进行解析,并构造数据放入待发送ringbuffer中。

===》3:主线程/新建线程 专门处理网卡的接收,对网卡接收的数据过滤后放入接收ringbuffer中。如果待发送ringbuffer不为NULL,取数据进行发送。

测试:这里只是修改了处理架构,测试运行观察,arp和udp相关业务功能要正常。

如图:可以看到,定时器发送arp探测ok,dpdk接收udp数据并回复udp数据ok。

3:udp相关api接口实现测试

udp用户数据报协议,是不可靠的,相对于tcp协议栈,udp的业务接收/发送处理比较简单。

除此之外,我们在使用udp/tcp协议栈时,通常使用的是内核封装后,提供给我们对应的接口。

针对udp相关协议的使用,有必要对用户层提供一些可用的api相关接口

3.1:udp协议栈相关api接口

参考unix系统已有接口,udp协议栈需要主要实现如下接口(测试级别):

socket() ===>做对应的初始化,申请接收/发送ringbuffer,返回对应的标识socketfd

bind() ===>在socket()函数的基础上,用返回的socketfd, 传入我们需要监听的本机的ip,和端口进行绑定,使其通过socketfd可以识别到。

recvfrom() ===>根据socketfd, 从对应接收缓冲区中取出接收到的数据,通过参数传递返回给用户层。

sendto() ===>把要发送的用户数据存入socketfd对应的发送缓冲区中,并写入发送队列

除此之外,需要业务支持:

1:dpdk对网卡接收到的udp数据,需要根据头信息(目的ip和端口)找到我们用户层申请并绑定的那块区域,并把接收到的udp数据放入对应的这块区域接收缓冲区。

===》(有一个结构,包含socketfd,本机ip,本机监听端口,接收缓存,发送缓存),这里根据ip和port可以找到对应区域,往该区域对应的接收缓存中存数据。

2:这里的测试:sendto()的时候,把socketfd对应的发送缓冲要放入dpdk发送缓冲区中,可优化保障。

3:主线程对udp报文的业务逻辑适配,触发检测发送缓冲区和接收缓冲区。

3.2:demo测试

测试方法:手动实现需要的相关api, 适配业务处理逻辑,通过调用api实现udp数据的接收与发送,观察接口使用是否ok:

注意点:

====》1:注意配置网卡绑定的ip,是测试机发送的目标ip

====》2:注意demo中使用的bind接口绑定的ip和端口号,是测试机发送的目标ip。

观察:查看接口调用是否正确:可以正常接收到数据

描述:仅供测试初步理解,内部很多细节和使用都有待优化,比如arp用的定时器,如果发送前定时器没有探测等。

下一步练习:tcp相关协议栈及用户层使用的api的测试。

参考免费课程链接:https://ke.qq.com/course/417774?flowToken=1040954

目录
相关文章
|
9月前
|
网络协议 开发者
探讨UDP协议中connect函数的作用及影响
总结来看,虽然UDP是无连接的,`connect()` 函数的使用在UDP编程中是一种可选的技术,它可以带来编程上的便利和某些性能上的改进,同时它改变的是程序逻辑上的行为,而非UDP协议本身的无连接特性。在实际应用中,根据通信模式和需求的不同,开发者可以根据情况选择是否调用 `connect()` 函数。
382 8
|
11月前
|
监控 网络协议 视频直播
UDP协议(特点与应用场景)
UDP(用户数据报协议)是传输层的一种无连接协议,具有简单高效、低延迟的特点。其主要特点包括:无连接(无需握手)、不可靠传输(不保证数据完整性)、面向数据报(独立传输)。尽管UDP不如TCP可靠,但在实时通信(如语音通话、视频会议)、在线游戏、多媒体流媒体(如直播、点播)及网络监控等领域广泛应用,满足了对速度和实时性要求较高的需求。
1597 19
|
12月前
|
网络协议
为何UDP协议不可靠?DNS为何选择UDP?
总的来说,UDP和TCP各有优势,选择哪种协议取决于应用的具体需求。UDP可能不如TCP可靠,但其简单、快速的特性使其在某些场景下成为更好的选择。而DNS就是这样的一个例子,它利用了UDP的优势,以实现快速、高效的名字解析服务。
618 14
|
12月前
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
675 1
|
缓存 网络协议
Jmeter如何对UDP协议进行测试?
`jmeter-plugins`是JMeter的插件管理器,用于管理和组织所有插件。访问[官网](https://jmeter-plugins.org/install/Install/)下载并放置于`lib/ext`目录下,重启JMeter后可在“选项”中看到插件管理器。
559 1
Jmeter如何对UDP协议进行测试?
|
存储 数据可视化 测试技术
一个测试工程师的实战笔记:我是如何在Postman和Apipost之间做出选择的?
优秀的API测试工具应该具备: 分层设计:既有可视化操作,也开放代码层深度定制 场景感知:自动识别加密需求推荐处理方案 协议包容:不强迫开发者为了不同协议切换工具 数据主权:允许自主选择数据存储位置
408 7
|
XML JSON 算法
【JavaEE】——自定义协议方案、UDP协议
自定义协议,序列化,xml方案,json方案,protobuffer方案,UDP协议,校验和,比特翻转,CRC算法,md5算法
|
存储 网络协议 安全
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
1128 2
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
10月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1392 23
下一篇
开通oss服务