网卡驱动
狂奔的乌龟
1、博客介绍:专注分享ARM Trustzone/TEE/Linux/嵌入式等领域知识,大部分是个人学习笔记,关注我,一起学习!希望在这里能和大家一起进步,星光不负赶路人,加油!
2、个人介绍:ARM/TEE/Linux等领域忠实爱好者,个人长期专注于硬件安全、系统安全、嵌入式领域安全开发工作。
3、个人语录:积累是一个漫长的过程,未来很长,一起努力,只要路是对的,就不怕路远。
4、招聘广告:目前在国内大厂上班,长期招聘高级别&有经验的硬件安全、系统安全、嵌入式底层软件架构师&SE&MDE,寻求志同道合有志之士,有意向可私信我。
展开
-
TCP 传输层面试中常问的问题汇总(你所不知道的传输层)
TCP 传输层面试中常问的问题汇总1. 在开始传输前,需要进行三次握手建立链接2. 可靠性:在传输过程中,通信双方的协议模块继续进行通信3. 通信结束后,通信双方都会使用改进的三次握手来关闭链接如同我们自定义的应用层协议一样:协议只是给出了一组规范,规定我们应该怎么样(按什么规则)保存数据。在计算机间传输的永远都是二进制字节码(对于传输层,可以理解为传输的始终是下层的IP数据包),是计算机中的程序通过对这些字节码进行逻辑分析、判断,来控制程序完成差错控制等功能。至于解析这些字节码的程序,则可转载 2015-09-16 15:59:46 · 3704 阅读 · 0 评论 -
TCP的流量控制和拥塞控制 (小结)
1、TCP的流量控制1. 利用滑动窗口实现流量控制 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。2、TCP的拥塞控制1. 拥塞:即对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。 拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路原创 2015-09-07 16:38:29 · 1759 阅读 · 1 评论 -
TCP 握手和挥手图解(有限状态机)
TCP 这段看过好几遍,老是记不住,没办法找工作涉及到网络编程这块,各种问 TCP 。今天好好整理一下握手和挥手过程。献给跟我一样忙碌,找工作的童鞋,欢迎大神批评指正。本文主要是关于TCP3次握手,以及4次挥手过程分析。另外关于TCP有限状态机分析。原创 2015-09-07 22:12:28 · 30829 阅读 · 5 评论 -
Windows下基于socket多线程并发通信的实现
本文介绍了在Windows 操作系统下基于TCP/IP 协议Socket 套接口的通信机制以及多线程编程知识与技巧,并给出多线程方式实现多用户与服务端(C/S)并发通信模型的详细算法,最后展现了用C++编写的多用户与服务器通信的应用实例并附有程序。关键词:Windows;套接字;多线程;并发服务器; Socket 是建立在传输层协议(主要是TCP 和UDP)上的一种套接字规范,最初由美国加州Berkley 大学提出,为UNIX 系统开发的网络通信接口,它定义了两台计算机之间通信的规范,socket原创 2015-04-07 14:54:44 · 26750 阅读 · 8 评论 -
Winsocket通信测试
Winsocket通信初调试在学习网络编程之前,我们需要对Tcp/ip协议栈有个清楚地了解。Tcp/ip协议栈分以下五层,也有分成7层 5、应用层 4、传输层 3、网络层 2、数据链路层 1、物理层物理层是实实在在的物理链路,它为上层协议提供了一个传输数据的物理媒体,负责将数据以比特流的方式收发、接收。数据链路层主要负责物理传输的准备,MAC地址和交换机都工作在这一层。网络层主要负责管理网络地址、定位设备、决定路由。路由器就工作在这一层。作用是将网路地址翻译成物理地址,并原创 2015-03-30 18:08:04 · 2212 阅读 · 0 评论 -
Socket通信中碰到的链接问题
1>SocketSever.obj : error LNK2019: 无法解析的外部符号 __imp__WSACleanup@0,该符号在函数 _main 中被引用1>SocketSever.obj : error LNK2019: 无法解析的外部符号 __imp__WSAStartup@8,该符号在函数 _main 中被引用1>D:\c++\研二下学期\SocketSever\Debug\SocketSever.exe : fatal error LNK1120: 2 个无法解析的外部命令原创 2015-03-30 14:42:26 · 725 阅读 · 0 评论 -
dpdk l2fwd 应用流程分析
intMAIN(int argc, char **argv){ struct lcore_queue_conf *qconf; struct rte_eth_dev_info dev_info; int ret; uint8_t nb_ports; uint8_t nb_ports_available; uint8_t portid, last_原创 2015-08-23 16:11:37 · 7926 阅读 · 0 评论 -
DPDK 的 uio 以及 PMD 机制的实现
本文主要分析uio和PMD的实现main函数中首先调用了rte_eal_init初始化eal环境,其中主要是hugepage的初始化;ret = rte_eal_init(argc, argv);if (ret 0) rte_exit(EXIT_FAILURE, "Invalid EAL arguments\n");接着创建了mbuf po原创 2015-08-04 21:52:22 · 15126 阅读 · 0 评论 -
DPDK 中断机制 eal_intr_handle_interrupts
DPDK通过在线程中使用epoll模型,监听UIO设备的事件,来模拟操作系统的中断处理。 一、中断初始化在rte_eal_intr_init()函数中初始化中断。具体如下:1、首先初始化intr_sources链表。所有UIO设备的中断都挂在这个链表上,中断处理线程通过遍历这个链表,来执行设备的中断。2、创建intr_pipe管道,用于epoll模型的消息通转载 2015-08-04 21:38:45 · 2170 阅读 · 0 评论 -
DPDK 内存管理(三)(rte_malloc 内存管理)
rte_malloc()为程序运行过程中分配内存,模拟从堆中动态分配内存空间。1 void *2 rte_malloc(const char *type, size_t size, unsigned align)3 {4 return rte_malloc_socket(type, size, align, SOCKET_ID_ANY);5 }rte_mallo转载 2015-08-04 21:33:00 · 4527 阅读 · 1 评论 -
DPDK 内存管理(二)(rte_mempool 内存管理)
DPDK以两种方式对外提供内存管理方法,一个是rte_mempool,主要用于网卡数据包的收发;一个是rte_malloc,主要为应用程序提供内存使用接口。本文讨论rte_mempool。rte_mempool由函数rte_mempool_create()负责创建,从rte_config.mem_config->free_memseg[]中取出合适大小的内存,放到rte_config.mem_co转载 2015-08-04 21:31:38 · 6748 阅读 · 0 评论 -
DPDK 内存管理(一)(内存初始化)
1 前言 DPDK通过使用hugetlbfs,减少CPU TLB表的Miss次数,提高性能。2 初始化DPDK的内存初始化工作,主要是将hugetlbfs的配置的大内存页,根据其映射的物理地址是否连续、属于哪个Socket等,有效的组织起来,为后续管理提供便利。2.1 eal_hugepage_info_init()eal_hugepage_info_ini转载 2015-08-04 21:30:15 · 6028 阅读 · 0 评论 -
DPDK 收发包处理流程(二)(网卡初始化)
三、PCI驱动注册调用rte_eal_init()--->rte_eal_dev_init()函数,遍历dev_driver_list链表,执行网卡驱动对应的init的回调函数,注册PCI驱动。/* Once the vdevs are initalized, start calling all the pdev drivers */ TAILQ_FOREA转载 2015-08-04 21:25:11 · 11460 阅读 · 1 评论 -
DPDK 收发包处理流程(一)(网卡驱动注册)
本文基于DPDK-1.8.0分析。网卡驱动模型一般包含三层,即,PCI总线设备、网卡设备以及网卡设备的私有数据结构,即将设备的共性一层层的抽象,PCI总线设备包含网卡设备,网卡设备又包含其私有数据结构。在DPDK中,首先会注册设备驱动,然后查找当前系统有哪些PCI设备,并通过PCI_ID为PCI设备找到对应的驱动,最后调用驱动初始化设备。一、网卡驱动注册以e1000网卡驱动转载 2015-08-04 21:23:15 · 5879 阅读 · 0 评论 -
PDCP层功能
引入PDCP原因由于UE和PDSN/GW之间网关通信过程中,不需要对IP层信息(源/目的IP进行)进行处理,因此在空口传输这些数据比较浪费,因此在PDCP进行压缩。PDCP:Packet Data Convergence Protocol,分组数据汇聚协议。 PDCP协议发轫于WCDMA空中接口,壮大于LTE空中接口。PDCP位于RLC子层之上,是L2的最上面的一个子层,只负责处理分组业务的...转载 2019-04-08 21:47:24 · 10606 阅读 · 0 评论 -
Linux 网卡驱动学习(三)(net_device 等数据结构)
【摘要】前文对网络驱动例子进行一个简单的梳理总结,本文贴出 net_device 的数据结构以及一些驱动中常用的数据结构。1、网络设备驱动结构下图摘自http://blog.chinaunix.net/uid-20672257-id-3147768.html1)、网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit原创 2015-07-30 22:01:08 · 10058 阅读 · 0 评论 -
Linux 网卡驱动学习(四)(缓存描述符 Buffer Description)
Linux 网卡驱动学习(缓存描述符 Buffer Description)。BD 描述符包含了报文很多信息,比如长度,报文的缓存地址等等。原创 2015-07-30 22:12:45 · 4759 阅读 · 0 评论 -
Linux 网卡驱动学习(一)(分析一个虚拟硬件的网络驱动例子)
Linux 网卡驱动学习(分析一个虚拟硬件的网络驱动例子),网络设备驱动层是连接网络堆栈协议层和网络硬件的中间层。原创 2015-07-29 19:32:21 · 6615 阅读 · 0 评论 -
Linux 网卡驱动学习(六)(应用层、tcp 层、ip 层、设备层和驱动层作用解析)
本文将介绍网络连接建立的过程、收发包流程,以及其中应用层、tcp层、ip层、设备层和驱动层各层发挥的作用。原创 2015-08-11 21:56:10 · 4150 阅读 · 0 评论 -
Linux 网卡驱动学习(七)(MAC 与 IP)
IP 地址是服务商给你的,MAC地址是你的网卡物理地址。1、MAC 地址在OSI(Open System Interconnection,开放系统互连)7层网络协议(物理层,数据链路层,网络层,传输层,会话层,表示层,应用层)参考模型中,第二层为数据链路层(Data Link)。它包含两个子层,上一层是逻辑链路控制(LLC:Logical Link Control),下一层即是我们前面所提到的MAC原创 2015-08-17 22:02:55 · 3894 阅读 · 1 评论 -
Linux 网卡驱动学习(九)(层二转发)
1、mac 地址表的自学习过程端口1上的A计算机要与端口2上的B计算机通信时,A发到交换机上,交换机收到信息后,交换机先记录发端口1所对应的a的mac地址并记录在自己的mac表中,然后再查收方B的mac是否在表中,若在mac地址表中,直接转发给B所对应的端口2转发下去,如果不在mac表中,则向所有端口广播出去,当B收到后会回应交换机转到A,在回应这个过程中,交换机就会把B的mac地址记录在mac表中原创 2015-08-19 21:30:48 · 1657 阅读 · 0 评论 -
Linux 网卡驱动学习(五)(收发包具体过程)
函数接口设备初始化函数网络设备驱动在 Linux 内核中是以内核模块的形式存在的,对应于模块的初始化,需要提供一个初始化函数来初始化网络设备的硬件寄存器、配置 DMA 以及初始化相关内核变量等。设备初始化函数在内核模块被加载时调用,它的函数形式如下: static int __init xx_init (void) { …… } module_init(xx_原创 2015-08-08 22:05:15 · 9019 阅读 · 0 评论 -
Linux 网卡驱动学习(八)(基于 MAC 地址转发数据)
1、构建MAC地址表交换机技术在转发数据前必须知道它的每一个端口所连接的主机的MAC地址,构建出一个MAC地址表。当交换机从某个端口收到数据帧后,读取数据帧中封装的目的地MAC地址信息,然后查阅事先构建的MAC地址表,找出和目的地地址相对应的端口,从该端口把数据转发出去,其他端口则不受影响,这样避免了与其它端口上的数据发生碰撞。因此构建MAC地址表是交换机的首要工作。下面举例说明交换机建立地址表的过原创 2015-08-17 22:17:51 · 3685 阅读 · 0 评论 -
Linux 网卡驱动学习(二)(网络驱动接口小结)
【摘要】前文我们分析了一个虚拟硬件的网络驱动例子,从中我们看到了网络设备的一些接口,其实网络设备驱动和块设备驱动的功能比较类似,都是发送和接收数据包(数据请求)。当然它们实际是有很多不同的。1、引言首先块设备在/dev目录下有设备节点,而网络设备没有这样的设备入口。read,write等常规的文件接口在网络设备下也没有意义。 最大的区别在于:块设备只响应内核的数据请求;而网络设备驱动要异步地接收来原创 2015-07-29 20:01:37 · 8430 阅读 · 3 评论