- 博客(33)
- 收藏
- 关注
原创 Dpdk介绍
Dpdk绕过了Linux内核态协议栈,以提升报文处理效率。直接截获网卡的原始数据,让用户自行处理,解析协议等等。网卡是将数字信号与模拟信号进行转换的设备。可用作:防火墙、测试工具、CDN(对网络要求比较高的场景都可以使用)
2026-01-07 19:58:32
510
原创 老汪与灯盏
老汪和银瓶共生了四个孩子,三个男孩,一个女孩。老汪有学问,但给孩子起的都是俗名,大儿子叫大货,二儿子叫二货,三儿子叫三货,一个小女儿叫灯盏。大货二货三货都生性老实,唯一个灯盏调皮过人。别的孩子调皮是扒房上树,灯盏不扒房,也不上树,一个女娃家,爱玩畜牲。而且不玩小猫小狗,一上手就是大牲口。一个六岁的孩子,爱跟骡子马打交道。喂牲口的老宋不怕别人,就怕这个灯盏。晚上他正铡草或淘草,突然回头,发现灯盏骑在牲口圈里的马背上,边骑边打牲口:“驾哟,带你去姥姥家找你妈!” 马在圈里嘶叫着踢蹬,她也不怕。大货二货三货没让
2026-01-07 16:50:09
56
原创 基于DPDK实现UDP收发理解网络协议
环境抽象层,是 DPDK 框架的核心基础组件。dev:device设备nb:number数量sys:system系统mempool:memory pool 内存池mbuf:memory buffer内存缓冲区desc:Descriptor描述符txq: Tx Queue 发送队列hdr:header头部mtod:mbuf to data 从mbuf结构体获取数据区指针IP:Internet Protocol 互联网协议。
2026-01-07 15:52:49
594
原创 epoll面向事件的代码优化
此代码是面向IO处理的程序,即有新的连接到来怎么处理,有了新的数据怎么处理。将 更改事件类型、处理新连接、接收新数据、发送数据 都封装成一个函数。此代码是面向事件的程序,即有了读事件怎么处理,有了写事件怎么处理。将 fd,接收的数据,发送的数据,操作函数 封装成一个结构体。将 fd,以及从这个fd中接收到的数据 封装成一个结构体。此代码对02的代码进行了优化。将 函数的调用 改为回调函数。
2025-12-30 11:28:08
115
原创 IO复用select_poll_epoll
是一种允许监视(通常是网络套接字),并在其中任何一个或多个描述符就绪(可读、可写或发生异常)时,通知应用程序进行相应I/O操作的机制。常见的IO复用技术,select(),poll(),epoll()。
2025-12-28 15:19:15
909
原创 LT和ET模式
水平触发(LT,Level Trigger):只要文件描述符处于“就绪状态”(比如读缓冲区有数据),每次调用epoll_wait都会返回此事件,知道就绪状态消失(数据被读完)。边缘触发(ET,Edge Trigger):仅在文件描述符“由未就绪变为就绪状态的瞬间”返回一次时间,后续即使仍然为就绪状态,epoll_wait也不会返回,除非又来了新数据。
2025-12-28 15:16:32
398
原创 网络io基础
加一个while循环,每来一个连接就开辟一个线程。每个线程里面还有一个while循环,用于每个连接的持续收发。见下方代码multi_io_03.c。实现一对一连接持续收发信息,使用while循环。见下方代码multi_io_02.c。编译multi_io_03.c的时候,需要加上**-lpthread**见下方代码multi_io_01.c。这样每来一个连接就开辟一个线程有什么优缺点呢?可以多客户端连接,并持续收发数据。代码multi_io_01.c。代码multi_io_03.c。后续有相关文章介绍。
2025-12-27 15:07:34
185
原创 打开网站的流程分析-五层网络模型的角度
如果此协议不可用,就使用http(明文协议),这样最终的URL变为:https://www.baidu.com。拆分URL各个部分,协议(https协议),域名(www.baidu.com),端口(https默认443)等。如果应用层使用的HTTPS协议,会先进行TLS握手,作用是对连接会话进行加密。HTTP请求会 被传输层的TCP协议进行封装,加上TCP头部(包括源端口,目的端口,序列号等信息) 形成。将数字信号转换成物理信号(光、电等物理信号),通过光纤、网线、电磁波等传输出去。
2025-10-27 19:55:17
312
原创 打开网站的详细流程,以百度为例
我输入www.baidu.com后,出现了对应的页面,然后我有进行搜索、点击链接、观看视频等操作,跳转到了另一个页面,那么TCP连接是在每次服务器发送响应回来都要关闭吗?浏览器会自动为域名补全通信协议,默认使用https(加密协议),如果此协议不可用,就使用http(明文协议),这样最终的URL变为:https://www.baidu.com。百度服务器接收到请求后,会对请求进行解析,然后将解析出来的数据进行相应的业务处理,再将需要发送的响应封装成HTTP响应,然后进行发送。会确定加密算法,交换秘钥等等。
2025-10-24 18:17:04
475
原创 dpdk基本流程
网卡用来收发数据,还可以对部分网络协议进行处理,每个网卡都有全球唯一标识地址MAC地址。直接运行,配合轮询模式驱动(PMD)与大页内存、无锁队列、CPU亲和性等技术,显著提升吞吐、降低时延与抖动,常用于对性能“极苛刻”的网络场景。网卡通过DMA将报文写入到预分配的内存中,DPDK在用户态直接轮询接收队列即可获得数据,全程绕过内核网络栈。使用DPDK时, 一定要支持多队列网卡,所修改的 zerovoice.vmx中的vmxnet3 就是为了支持多队列网卡。多队列网卡可以多核并行处理,增加吞吐量。
2025-10-20 17:31:55
359
原创 TIME_WITE错误
服务端第一次运行程序,运行完,第二次再运行。报错:bind: Address already in use。Debug:程序出现大量的TIME_WITE核心原因是因为服务端主动断开了连接,所以尽量让客户端去断开。TIME_WITE出现时,不能运行程序,一段时间后TIME_WITE状态消失,就可以运行程序了。netstat -anop | grep 2048 查看端口网络的状态。查看服务端的端口状态:TIME_WAIT。如果服务端可以换一个端口,然后运行。如何查看端口网络的状态。
2025-10-13 21:45:16
97
原创 Http连接百万并发的实现
因为设备有限,所以采用一台服务端和一台客户端,如果条件允许可以多加几个客户端,测试事件更短一些。测试代码在最后面,并记录中间出现的错误以及解决办法,错误主要是内存问题以及一些参数的限制。客户端代码:mul_port_client_epoll.c。客户端:sudo vim /etc/sysctl.conf。客户端:alientek:192.168.88.129。服务端:ulimit -n 1048576 临时设置。客户端:ulimit -n 1048576。客户端:ulimit -n 1048576。
2025-10-13 17:36:45
1034
原创 linux内存占用率高,但单个进程占用却很低
我出现这样的情况是大页的设置,设置了5个1G的大页,导致占用了5G的内存。有的大页会在 sudo vim /etc/sysctl.conf 这个文件里面设置,请仔细检查这两个文件。这里显示大页设置为1G,数量5G,也就是使用了5G的内存。使用命令查看大页设置: sudo vim /etc/default/grub。我这里已经改过了,大页设置为2M,使用了10个,也就是占用了20MB的内存。ubuntu使用命令sudo update-grub 使设置生效。我的是在/etc/default/grub设置的。
2025-10-12 22:23:56
256
原创 对网路基础函数的一些理解
在编程的开始socket()函数返回的sockfd是服务端的sockfd。accept()函数返回的sockfd是一个新的sockfd,即已经和服务端建立连接的客户端的sockfd,一般写为clientfd。在服务端编程,bind()、listen()、accept() 使用的sockfd都是服务端的。send() 和 recv() 使用的sockfd是客户端的。既然是网络通信的端点,肯定会有网络通信的属性,所以struct sockaddr_in 这个结构体里面存放的是IPV4网络的一些属性,包括。
2025-10-10 17:14:18
166
原创 如何禁用win+F
这里会出现Feedback Hub,点击后 会进入它的设置页面,里面有 卸载 这个选项,选择卸载即可。win+F会自动跳出Feedback Hub 反馈中心。我这里是因为已经卸载了,所以没有显示。
2025-09-23 21:31:51
402
原创 conda 创建环境问题
比如:conda create --name myenv python=3.13.0。在G:\Anacond\envs\scan_env中没有python.exe。在pycharm中选择scan_env,但解释器确是base的解释器。创建环境时最好指定版本,要不然创建的就是个空环境,里面什么也没有。但其他环境却有,怎么回事?
2025-09-18 10:38:35
223
原创 C语言程序是怎么被执行的
1. “编译”阶段是通过GCC完成的,分有四个子阶段。编写源代码→编译→链接→加载→执行五大核心步骤。Linux环境下,C语言程序的执行需经历。linux下C语言程序是怎么被执行的?预处理→编译→汇编→链接。
2025-09-04 17:43:36
146
原创 红黑树构建,插入,删除以及代码
/可以修改key的类型//节点的键值//节点存储的值,void *类型可以指向任意类型的数据//根节点//哨兵节点//红黑树中所有的叶子结点都要指向哨兵节点,它不是传统的NULL空指针,它具有节点的属性}rbtree;更近 一步可以下面的代码,更具有拓展性和复用性//定义//可以修改key的类型//这个宏的作用是将红黑树节点的公共部分(即与具体数据类型无关的部分)抽象出来,便于复用。//后面需要扩展功能或者将红黑树用于不同的数据类型,只需要修改。
2025-08-18 12:05:35
423
原创 vivado不关联modelsim,并用modelsim仿真
1.找到自己需要仿真的文件,测试文件和源文件。一般vivado存放测试文件路径如下。一般vivado存放源文件路径如下。2.打开modelsim新建工程。
2025-08-01 15:42:04
201
原创 部分重映射与完全重映射的重要注意事项
还有个问题如果定时器2使用第一种部分重映射通道1,2到PA15,PB3 ,但只使用通道1进行PWM输出,那么PB3和PA1都可以做正常IO引脚使用吗?定时器通道1和通道2默认引脚PA6,PA7,可以部分重映射到PB4、PB5,如果要重映射到PC6、PC7就只能开启完全重映射。有些功能只有一种重映射,而有些功能既可以部分重映射也可以完全重映射,但部分重映射的引脚与完全重映射的引脚可能不一样。可以看到定时器3有部分重映射和完全重映射两种映射。重映射也分部分重映射和完全重映射。而定时器2有三种重映射。
2025-02-17 18:02:28
331
原创 LED初始化使用define简化
// #define LED1_ON GPIO_SetBits(LED1_PORT, LED1_PIN)// #define LED1_OFF GPIO_ResetBits(LED1_PORT, LED1_PIN)// #define LED1_TOGGLE GPIO_ToggleBits(LED1_PORT, LED1_PIN)// #define BUZ_ON GPIO_SetBits(BUZ_PORT, BUZ_PIN)
2025-01-26 16:30:25
149
原创 keil text completion空白终极解决方案
链接: https://pan.baidu.com/s/1zgMuTtRMN3CRefVKZfDrzQ?pwd=6666 提取码: 6666。下载后,用解压到当前文件夹,然后用压缩软件打开,解压exe文件后,将UV4,复制到自己已安装的文件下,选择替换。确保没打开任何文件,通常会默认打开最近一次的工程,下面可以取消这个默认。然后下载这个keil文件,(不要用自己的文件,重新下载下面的文件)通过网盘分享的文件:Keil uvision5 MDK版.rar。本人试了好几天才解决。
2024-12-31 20:42:16
1214
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅