- 博客(87)
- 资源 (5)
- 收藏
- 关注
原创 Linux内核发送网络数据
我们开始今天对 Linux 内核⽹络发送过程的深度剖析。还是按照我们之前的传统,先从⼀段代码作为切⼊。上述代码中,调⽤ send 之后内核是怎么样把数据包发送出去的。本⽂基于Linux 3.10,⽹卡驱动采⽤Intel的igb举例。
2024-05-14 21:12:24 965
原创 内核是如何接收⽹络包的?
⽹络模块是 Linux 内核中最复杂的模块了,看起来⼀个简简单单的收包过程就涉及到许多内核组件之间的交互,如⽹卡驱动、协议栈,内核ksoftirqd 线程等。
2024-04-15 15:17:20 1298
原创 linux GDB and GDB Sever
GDB(GNU Debugger)是一个用于调试程序的强大工具。它是GNU项目的一部分,支持多种编程语言,包括C、C++等。GDB 提供了一组命令和功能,允许跟踪检查程序的内部状态,跟踪代码的执行过程,以及定位和修复程序中的错误。:set follow-fork-mode parent 是 GDB 的一个命令,用于在多进程调试时控制在 fork() 调用之后 GDB 应该跟踪哪个进程。问题出在:函数accessInvalidMemory,代码的第五行。前面是单子进程的调试。
2024-01-13 16:04:54 1129
原创 linux线程与进程
在Linux系统中,进程(Process)和线程(Thread)是操作系统中两个重要的概念,它们都是用于执行程序的执行单元,但有一些关键的区别。
2024-01-01 13:36:00 1030
原创 进程间通信
进程间通信(Inter-Process Communication,IPC)是指在操作系统中,两个或多个独立的进程之间进行数据交换和信息共享的机制。
2023-12-22 16:27:47 147
原创 基于ubuntu tun虚拟网卡设备完成ping的发送与模拟接收
前面我们初步认识了什么是tun设备及基础的工作原理与接收文件的设备文件(节点)、虚拟网卡的启动、添加路由表等操作,为什么进一步理解tun设备与协议栈的通信理解,这次我们将应用层控制tun设备发送ping,通过read读取到,后经过手动组装icmp网络包write到协议栈,模拟远程主机回复给我们的 icmp reply,顺便熟悉下icmp 网络包的协议。
2023-09-06 17:15:25 1077
原创 Linux tun虚拟网卡通信初识
Linux TUN 设备是一种虚拟网络设备,用于在用户空间和内核空间之间建立数据通道,使用户空间程序可以通过这个设备与内核网络栈进行交互。TUN 设备是一种通用的网络隧道设备,常用于实现虚拟专用网络(VPN)和其他网络隧道技术。
2023-08-08 20:13:52 2506
原创 成为wifi驱动工程师应该从什么开始学习
写了这么多文章,都很零散,这次收集整理了下我们应该学习的大概框架和思路,希望大家喜欢,如果有其他的想要学习的或者思考的想法可以在评论区发言哦,我会尽量出一些实践的小原理的文章分享出来,谢谢!作为初学者想成为驱动工程师,首先需要打下坚实的计算机基础,然后逐步学习与驱动开发相关的知识和技能。以下是初学者成为驱动工程师的建议学习路径:参考书籍和在线资源:阅读与驱动开发相关的书籍和在线资源,这将帮助你加深对驱动开发的理解。成为WiFi驱动工程师是一个专业性较高的领域,需要对计算机网络、操作系统、无线通信以及硬件驱动
2023-07-22 12:19:37 752 1
原创 IP地址转换函数
在Unix网络编程中,我们常用到地址转换函数,它将ASCII字符串(如"206.62.226.33")与网络字节序的二进制值(这个值保存在套接口地址结构中)间进行地址的转换。当然也包含主机字节序与网络字节序的转换结构体熟悉// ip地址的网络字节序 };上述结构体为 struct sockaddr_in 中的参数 3 struct sockaddr_in {// 地址簇 in_port_t sin_port;// 端口的网络字节序 struct in_addr sin_addr;概念熟悉。
2023-07-21 12:57:29 292
原创 Ioctl()方式实现与驱动交互简洁框架
ioctl是linux中一种除read和write之外的数据传递机制以上函数参数的含义如下。inode和fp用来确定被操作的设备。request就是用户程序下发的命令。args就是用户程序在必要时传递的参数。在2.6.36以后ioctl函数已经不存在了,用unlocked_ioctl和compat_ioctl两个函数代替。参数去除了原来ioctl中的structinode参数,返回值也发生了改变。新的代码。
2023-06-14 10:58:06 1672
原创 实现ifconfig配置功能基础框架
因为要实现类似ifconfig工具的作用,所以我们先要了解下argc和argv,接触linux系统,我们往往就需要用命令行的方式来编译和执行程序。那么在命令行方式下,此时这两个参数就很有作用了,能够非常方便地帮助我们实现一些功能。
2023-05-31 23:34:20 652
原创 linux ioctl 理解
在计算机中,ioctl(input/output control)是一个专用于设备输入输出操作的系统调用,该调用传入一个跟设备有关的请求码,系统调用的功能完全取决于请求码。ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制ioctl函数其中fd就是用户程序打开设备时使用open函数返回的文件描述符,cmd就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和cmd的意义相关的。
2023-05-22 21:07:59 927
原创 Linux socket
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。应用程序也可以用IP+端口号进行唯一标识。那么这个程序的入口就被称作Socket。建立连接发送数据接收数据。我们可以把Socket编程理解为对TCP协议的具体实现。
2023-05-10 16:07:04 1486
原创 Linux字符设备驱动
代码结构简单,旨在用最简单的原理理解最主要的框架逻辑,细节需要自行延伸。-----------------学习的基础底层逻辑。
2023-05-01 23:20:17 885
原创 字符、块、网络设备
网络设备是特殊设备的驱动,它负责接收和发送帧数据,可能是物理帧,也可能是ip数据包,这些特性都有网络驱动决定。一个字节一个字节读写的设备,读取数据需要按照先后顺序读取,常见的字符设备有鼠标、键盘、串口、控制台和LED设备,每个字符设备在/dev目录下对应一个设备文件,linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备。这些设备文件和普通文件之间的唯一差别在于对普通文件的访问可以前后移动访问位置,而大多数字符设备是一个只能顺序访问的数据通道。,设备驱动的代码量占了大部分内核程序。
2023-04-30 22:23:00 1388
原创 钩子函数理解
某些情况下,对于需求不明朗,可能还不知道它会完成什么功能,这时候留下函数指针作为接口,可以挂上不同的函数完成不同的功能,究竟执行什么功能由钩子函数的编写者完成。在的代码中,常常把挂钩子的过程叫做注册,会提供一个注册函数,让使用者把自己编写的钩子函数挂在已经声明的函数指针上,这个注册函数的参数就是我们的函数指针了。max,min函数就是钩子函数了,把函数指针g_pFun指向函数Max,Min的过程,就是“挂钩子”的过程,把钩子函数“挂”到函数指针上,很形象。是通过函数指针来实现的。
2023-04-25 00:25:46 759
原创 基于LINUX实现ping发送与接收
由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全0或全1(具体看实现了,本质一样)如果结果不是全0或全1,那么表示数据错误。注意一下上面说到的ICMP报文格式中的“类型”字段,我们在组包的时候可以向该字段填写不同的值来标定该ICMP报文的类型。Linux ping 命令用于检测主机:执行 ping 会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
2023-04-19 00:06:59 1101
原创 基于linux 实现DNS Client请求
属于应用层的编程,对于我i们后续的协议理解是很有帮助的。上面提供的所有代码可以直接编译运行,执行的时候请检查电脑是否有网络,否则无法正常执行。
2023-03-05 14:41:58 627
原创 无线网络概论_4
对于由客户端送至服务器的帧而言,发送端就是客户端这边的接入点,而接收端就是服务器这边的接入点将来源地与传送端分开的好处是,当服务器这边的接入点送出必要的802.11响应给对方的接入点时,不会干扰到有线链路层。在infrastructure(基础结构型)网络中,发送端地址即为接入点(AP)上无线接口的地址,同时也是 BSSID最后,该会记载的来源MAC地址。在基础结构型网络里,接入点会以其无线接口的地址创建相应的BSS,这就是为什么接收端地址 (Address 1) 会被设定为 BSSID 的原因。
2023-01-29 11:42:44 914 1
原创 了解Wi-fi频段概念
信道带宽,应该了解wi-fi频段,这样才能分析有多少信道带宽可用,以及如何在没有任何干扰(失真)的情况下有效地使用它。2.4 GHz Wi-Fi频段:在2.4 GHz频段,可用带宽为100 MHz,范围为2.4-2.5 GHz(2400-2500MHz)。因此,总可用带宽为100MHz,因此也相应地分配了信道宽度,使得信道之间没有重叠。就像如果我们分配20 MHz信道,那么我们只能分配4个信道,如果我们分配了4个以上的信道,那么信道之间会有重叠,并且在传输干扰发生时。5GHz Wi-fi频段:5GHz频段
2022-12-05 11:20:18 10116
原创 A-MSDU、A-MPDU、PLCP、MSDU、MPDU、PPDU
A-MPDU:针对MPDU的聚合,将多个MSDUs聚合在一起形成AMSDU,AMSDU+MACheadr之后形成MPDU发送到PHY层。A-MSDU报文是由若干个A-MSDU Subframe组成的,每个Subframe均是由Subframe header (Ethernet Header)、一个MSDU和0-3字节的填充组成。帧聚合技术又包含针对MSDU的聚合(A-MSDU)和针对MPDU的聚合(A-MPDU)。
2022-11-02 14:09:32 3888
原创 无线网络概论_3
整个事务就分为两个步骤,分别由两个工作站控制,在事务过程中,两个station必须相互合作,依次取得网络媒介的控制权以便进行传输操作。图3-5,一开始,原子操作和一般传送并无差别,在可以开始传送之前,原子操作同样必须等候一段时间间隔(DIFS),不过气候的步骤使用SIFS,而非DIFS。利用帧的分段,无线局域网工作站可以让干扰只影响较小的帧片段,而非较大的帧。当上层封包的大小超过网络管理人员所设定的分段阈值,就会进行帧的分段,每个帧片段都有相同的帧序号,以及一个递增的帧片段号以便重组。
2022-09-26 19:13:18 768
原创 无线网络概论_2
每个接入点的硬件设备可以创建两组BSS,其中一组可供客户访问,称之为guest,另外一组则宫内部使用,称之为internal。举个例子,各机构会有访客,其中很多人就有80211设备,而且需要于因特网连接,这些方可并非可信的用户,为了满足要求,将会在相同的实体上另辟两个扩展服务集。和移动电话一样,允许基本服务区域相互重叠,不仅可以让工作站与基本服务区域之间的转换的成功率提高,又可以提高最高层次的网络覆盖。概念上,帧的传递是根据MAC地址,但是帧的传递时不可靠的。
2022-09-12 20:02:52 354
原创 android wifi 抓sniffer log
空口 WiFi log无线产品如蓝牙、zigbee开发过程中,由于没有直接连接,通常开发中都要用到一个dongle用于抓取空中数据包,然后分析定位网络、通讯问题。Wi-Fi开发中同样需要空中抓包,Wi-Fi用于抓包的设备不叫dongle,通常叫sniffer。 无论有线以太网还是无线Wi-Fi,在正常工作模式下,mac层只处理广播包或者发给自己的数据包,目标地址与自己mac地址不符的数据包都将会被丢弃。sniffer其实是将Wi-Fi芯片设置为混杂模式,该模式下Wi-Fi芯片将会把收到的所有数据都传到
2021-10-08 21:21:16 3538 2
转载 android无线调试
直接上操作流程,在网上看到一个写的很简洁的例子:1、手机和电脑连接同一局域网(连同一个 WiFi)2、在手机的设置、网络连接查看连接的 WiFi 下手机的 IP 地址3、手机连上电脑,输入命令:adb tcpip <端口号>,<端口号> 可任意取,只要没被占用,如 66664、拔掉数据线输入命令:adb connect <手机IP地址>:<端口号> ,输出 connected to <手机IP地址> 即为连接成功,如下输入:adb conn
2021-09-07 17:28:04 634
原创 android R wifi setting 开启流程图
前言:分流程进行流程总结,如下流程只包含了用户开启wifi后的一系列服务,状态机变化,及驱动加载流程。流程图:欢迎大佬们提建议,我们可以一起探讨,共同学习
2021-07-19 11:46:00 667 3
原创 andriod R wifi 开启流程
前言:wifi chip 的开机初始化流程在这里我们就后面加上,本博客就暂时只有wifi的开启到wifi的连接成功.虽然都是andriod R,但是还是有可能不同的基线版本代码还是有些许差别,所以我在设备下看了下基线和wifi的软件信息:/system/bin # iwpriv wlan0 version wlan0 version:Host SW:5.2.022.4Z, FW:1.0.1.0.31.0, HW:HW_VERSION=ff
2021-06-23 21:21:02 2031 1
原创 Qcom平台测试wifi TIS需要关闭wifi扫描、漫游和休眠
在测试QCA系列IC wifi功能时,需要禁用wifi扫描、漫游和休眠:1、禁止wifi扫描:描述:因为需要开启wifi时测试wifi TlS,需求是关闭wifi scan 。需要的工具:iwpriv工具免费下载地址:https://download.csdn.net/download/weixin_42271802/16232478禁用方法:进入设备shell(adb shell进入)#iwpriv wlan0 setUnitTestCmd 9 2 1 0#iwpriv wlan0 s
2021-03-30 12:54:18 1607
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人