前沿

在学代码审计,然后最近做Linux协议栈的审计,发现Linux不愧是一个久经考验的系统,本来以为可以找到个DoS的,结果发现其在TCP/IP协议栈的链路层实现,利用了各种技术,用来提高性能与安全性。

工具

在跟踪数据从网卡到TCP/IP协议栈的过程中,使用4.10.0内核,利用understand查看代码,以及flawfinder来配合进行安全性的检查。以intel e1000 驱动为列。

分析

NAPI

首先,为了效率,Linux使用了NAPI机制。所谓NAPI机制,其就是当数据到来时,采用中断加轮询的方式,接受数据包。

如果Linux使用中断的方式,接受数据包的话,每次数据包的到来,就会产生中断,这样,当有大量数据包到来的话,其中断开销就比较大,如果CPU是单核,且频率较低的话,就有可能够造成DoS攻击。

如果只是使用轮询的话,那么当没有数据包到来时,会造成CPU浪费在无用功上。

所有Linux内核黑客发明了NAPI机制,中断与轮询相互结合的方式。

当数据到来时,会产生中断,设备首先会关闭自身中断,然后将该网卡设备,加入到轮询表中,然后进而触发软中断,使用轮询接受数据包,然后当该设备上没有数据时,打开该设备的中断。

其内核实现路径为:

数据到来,触发中断,调用网卡中断函数e1000_intr(/drivers/net/ethernet/intel/e1000/e1000_main.c),其会将该设备加入到轮询表中(struct softnet_data中的poll_list,其中softnet_data是每个CPU所独有的),然后触发软中断NET_RX_SOFTIRQ。软中断会进一步回调设备注册的轮询函数,e1000设备驱动是e1000_clean。然后调用e1000_clean_rx_irq轮询接受数据包。

GRO

GRO,其实就是Generic receive offload。通过在进入到Linux 内核TCP IP协议栈处理之前,将多个数据流合并成一个,减少内核协议栈处理,提高系统性能。

感觉这玩意涉及到数据包的合并,必然涉及到很多内存上面的操作,容易发生一些漏洞什么的,,但是通过结合flawfinder,加人工审计,并没有发现。也可能由于我对skb_buff结构不是很了解,它已经看到了我,我没有看到它。这块到跟进协议栈后,熟悉skb_buff结构体之后,回过来再次看一看。

其实现函数为:napi_gro_receive.就是从底层跟踪到高层协议,查看是否能合并,比如mac 地址相同,就看ip地址是否相同,。。。。

分析发现,其会将不能合并的加入到一个链表中,然后我就想,我是否可以够造恶意数据,让耗尽其内存,然后分析发现too young,too simple。其实现中,会限制链表大小,当超过限制,会强制发送到协议栈中。

RPS RFS

如果没有NAPI机制的话,就有可能耗尽多核中的一个CPU的运算量,但是RPS的出现,让其变得不可能。

RPS RFS 其全称分别是:Receive Packet Steering 与 Receive Flow Steering。顾名思义,其就是让数据处理均衡到每个CPU上。

RPS:用户通过 /sys/class/net/eth0/queues/rx-0/rps_cpus 设置参加负载均衡的CPU。当数据包到来时,会根据相关字段,如ip建立一个hash,然后用来选择一个CPU。

RFS:RFS其实是,RPS的补丁,想象一下,当用户进程等待在另一个CPU上,准备接受数据包时,但是RPS给其分配到了一个不相同的CPU上,这时,当数据包处理完后,该数据包到用户进程所在CPU进一步处理,这样会造成缓存失效,从而降低系统性能。RFS的出现就是为了解决该问题的。

内核函数:get_rps_cpu 选择一个CPU,然后enqueue_to_backlog加入到一个CPU的等待队列

Linux 从网卡到TCP IP协议栈数据流跟踪与审计的更多相关文章

  1. Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

    我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处 ...

  2. [转载]Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

    Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论 转载至:https://www.sdnlab.com/17530.html 我们使用Linux作为服务器操作系统时,为了达到高并发处理 ...

  3. [转帖]Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点

    Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点 http://network.51cto.com/art/201909/603780.htm 可以毫不夸张的说现如今的互联网是基于TC ...

  4. linux OSI七层模型、TCP/IP协议栈及每层结构大揭秘

    学习Linux,就算是像小编我这样的小萌新,也知道OSI模型.什么?!你不知道!!! 好吧,这篇秘籍拿走,不谢~~~ 一.两个协议 (1)OSI 协议模型(7层)国际协议    PDU:协议数据单元对 ...

  5. 用virtualbox+模拟串口+CDT调试linux内核 TCP/IP协议栈-起步

    经常有人问一台机器如何将hello经网络发送给另一台机器,我确实是不知道,只能看代码了. 说明:本人对内核的研究学习也是刚刚起步,有很多不了解的,所以文中可能会有一些"一本正经的胡扯&quo ...

  6. TCP/IP协议栈在Linux内核中的运行时序分析

    网络程序设计调研报告 TCP/IP协议栈在Linux内核中的运行时序分析 姓名:柴浩宇 学号:SA20225105 班级:软设1班 2021年1月 调研要求 在深入理解Linux内核任务调度(中断处理 ...

  7. UNIX/Linux网络编程基础:图解TCP/IP协议栈

    目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(A ...

  8. TCP/IP协议栈源码图解分析系列10:linux内核协议栈中对于socket相关API的实现

    题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈内核相关技术 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linu ...

  9. 计算机网络基础之TCP/IP 协议栈

    计算机网络基础之TCP/IP 协议栈 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.TCP/IP 协议栈概述 1>.什么是TCP/IP协议栈 Transmission C ...

随机推荐

  1. Why is 'x' in ('x',) faster than 'x' == 'x'?

    Question: >>> timeit.timeit("'x' in ('x',)") 0.04869917374131205 >>> tim ...

  2. javasript中var、let和const区别

    let和const都是es5,es6新版本的js语言规范出来的定义,在这以前定义一个变量只能用var.let和const都是为了弥补var的一些缺陷而新设计出来的. 简单来说是: let是修复了var ...

  3. python字典按照value进行排序

    先说几个解决的方法,具体的有时间再细说 d = {'a':1,'b':4,'c':2} 字典是这个,然后要对字典按照value进行排序 方法一: sorted(d.items(),key = lamb ...

  4. Python全栈学习_day010作业

    1,继续整理函数相关知识点,写博客. 2,写函数,接收n个数字,求这些参数数字的和.(动态传参)def MySum(*args): sum = 0 for i in range(len(args)): ...

  5. python之约束, 异常处理, md5

    1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError (重点) 2. 抽象类和抽象方法 # 语法 # from abc import ABCMet ...

  6. 【转】解决CentOS 64位系统vsftpd 530 login incorrect的问题

    转自:http://www.centos.bz/2011/12/centos-64-install-vsftpd-530-login-incorredct/ 今天在centos 6 64位测试安装vs ...

  7. MongoDB的基本操作:服务端启动,客户端连接,CRUD操作

    本文内容: MongoDB的介绍 MongoDB服务端的启动 MongoDB客户端连接 SQL与MongoDB相关概念解释 什么是BSON 数据库操作 集合操作 文档操作 测试环境:win10 软件版 ...

  8. BD是什么角色

    BD是什么角色? 在一般创业公司里面,有了产品接下来就是运营了,而运营中很重要的一点就是BD,也就是所谓商务拓展了,俗一点说就是生意的合作拓展 https://www.jianshu.com/p/7d ...

  9. plsql备份表---只是表---不包含表数据

    写这个的同时还在备份,表的数据进度很慢,数据太大了. 用的工具是plsql 导出表:点击    tool工具  ---> export user object 导出用户目标  ----> ...

  10. SSD 下的 MySQL(5.5) IO 优化

    一 目录 一 目录 二 背景 三 SSD 特性 四 基于 SSD 的数据库优化 五 A 项目 MySQL 主从关系图 六 程序切换之前调优 6.1 修改系统 IO 调度算法 6.2 修改 innodb ...