
内核编程
文章平均质量分 79
小小程序员ing
这个作者很懒,什么都没留下…
展开
-
协议栈数据包快速转发的实现(2)
前言上一篇博客大体上讲解了什么是SNAT和DNAT。然后在博客的最后引入了一个知识点-连接跟踪(conntrack)。今天我们就来看看连接跟踪和我们的数据包快转实现有什么关系,怎么利用连接跟踪来实现数据包快转的功能数据报文唯一性四元组是: 源IP地址、目的IP地址、源端口、目的端口五元组是:源IP地址、目的IP地址、协议号、源端口、目的端口七元组是:源IP地址、目的IP地址、协议号、源端口、目的端口,服务类型以及接口索引协议号:IP是网络层协议,IP头中的协议号用来说明IP报文中承载原创 2020-09-08 15:18:48 · 1221 阅读 · 0 评论 -
协议栈数据包快速转发的实现(1)
前言上一篇博客还是2020-8-17发表的,这篇博客已经推迟了2周了。推迟的原因很简单。第一: 个人知识点有限,以前做的时候似是而非。这次算先给自己充了一次电。第二:这次分享的技术点和知识点晦涩难懂。涉及到很多的知识面。相关的知识我一个人也是讲解不明白的。我也是查找了很多的资料和别人的技术博客。所以在本篇博客中我会大量引用别人的博客和相关资料,原因很简单,其他人在某一个知识点讲解的很好,我比不上。同时,我也建议大家一定要先去看我贴出的一些相关文章的连接地址。不然直接看代码会很麻烦。背景路由转发,原创 2020-09-01 22:43:33 · 888 阅读 · 0 评论 -
论网卡数据是如何从驱动到桥接/ip层(NAPI方式)
前言上一篇博客我们分析了普通的中断方式接收数据包的流程。并且在分析流程和代码的过程中看到napi的入口函数(napi_schedule)。当时提到了该函数,大家应该还有印象。我们这里再次把代码截取一份,来回顾一下调用的地方。__IRAM_GEN static inline void rtl_rx_interrupt_process(unsigned int status, struct dev_priv *cp){ #if defined(REINIT_SWITCH_CORE) if(rtl865原创 2020-08-17 18:56:53 · 680 阅读 · 2 评论 -
论网卡数据是如何从驱动到桥接/ip层(网卡驱动中断分析-中断方式非NAPI)
前言在上一讲中我们分析了网卡驱动的注册流程和中断的注册。这里再回顾一下上一讲的注册中断的代码。在网卡的open函数中调用了request_irq函数注册了网卡中断。网卡一旦有数据到来就会进入该中断rc = request_irq(dev->irq, interrupt_isr, IRQF_DISABLED, dev->name, dev);linux内核接收帧方式在分析网卡中断之前,我们需要来了解一下,驱动接收网卡数据包的方式。(NAPI和中断方式)中断接收方式在老的2.5.x内核原创 2020-08-10 01:01:24 · 1101 阅读 · 2 评论 -
论网卡数据是如何从驱动到桥接/ip层(网络设备注册-网卡驱动)
前言今天这篇文章涉及到一部分linux驱动以及硬件相关的知识。因为数据包最开始肯定是从芯片中的寄存器读出来的,然后经过一系列的处理才会交给协议栈。这当中就会涉及到linux中断的注册,linux中断上半部和下半部、网卡接收数据包的几种方式等等。如果有什么疑惑的我们可以一起讨论,我也是边查资料边看代码来进行分析。因为我是从单片机->嵌入式arm(底层驱动开发,应用开发)->linux网络这样一步一步走上去的,所以我会用尽量通俗的语言来讲解。相信大家都可以看得懂。...原创 2020-07-30 00:08:35 · 806 阅读 · 0 评论 -
无线黑名单实现(将终端踢下线同时禁止终端再次连接)
前言在实际中我们有时候会产生这样一个需求:进制某一台设备接入无线网络,如果已经接入 则让其强制下线。并且,下线后不能再次接入,除非放行该设备这里产生了两个需求:1.将终端设备踢下线。 2.不能让终端设备再次上线。下面我们来分析这两个需求实现的原理无线设备认证和交互流程...原创 2020-07-25 17:53:07 · 2874 阅读 · 0 评论 -
linux内核中如何修改skb报文
前言在内核开发中,我们很多时候需要修改linux网络数据包的内容。那么怎样修改skb报文才正确?这个问题在网上的资料讲解的不是很全,下面是我这几天梳理的步骤skb修改数据包流程-内核代码中有许多用于计算校验和的API,一下是linux网络技术内幕相关API的截图修改数据包的流程分析和相关api的介绍在内核中构造数据包的时候,我们需要关注三个校验和:分别是sk_buf中的csum,ip_summed,ip头部中的check和udp或者tcp头部中的check用于计算校验和的API:L3原创 2020-07-17 18:21:37 · 3499 阅读 · 0 评论 -
http 404强制跳转到指定的网页地址
前言有时候我们可能遇到这样一个情况:当我们访问一个不存在的网页,http协议返回给我们404,浏览器会跳转到一个固定的网页(可以是我们产品的官网)。那么对于这样一个需求,我么应该怎样修改内核呢方案思路我这里不会详解http协议,关于http协议可以查看图解http协议这本书。这里我只讲一下我们的思路以及http请求和返回的数据包。http协议本质上是tcp协议。http发送报文http响应报文我们可以看到http的响应格式和发送的格式还是有区别的,我们可以通过判断数据包原创 2020-07-08 15:17:12 · 8936 阅读 · 0 评论 -
linux内核DNS拦截程序及分析(设备域名绑定)-写法一
前言我们经常有这么一个需求,我们可以通过ip地址来登录我们的设备。但是如果ip地址变化,我们又不知道设备的ip地址的时候,就不能够正常登录到设备,或者很难登录到设备(需要查看设备当前的ip地址才可以)。那么能不能实现我可以通过一个域名来登录设备(即:给设备绑定一个随意的域名,通过域名来访问设备)linux内核数据包桥流程分析这里应用网上比较好的博客,让大家对于linux桥接有一个直观的认识什么是桥接?简单来说,桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复原创 2020-07-02 18:52:55 · 3159 阅读 · 6 评论