Linux 从网卡到TCP IP协议栈数据流跟踪与审计
前沿
在学代码审计,然后最近做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协议栈数据流跟踪与审计的更多相关文章
- Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论
我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处 ...
- [转载]Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论
Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论 转载至:https://www.sdnlab.com/17530.html 我们使用Linux作为服务器操作系统时,为了达到高并发处理 ...
- [转帖]Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点
Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点 http://network.51cto.com/art/201909/603780.htm 可以毫不夸张的说现如今的互联网是基于TC ...
- linux OSI七层模型、TCP/IP协议栈及每层结构大揭秘
学习Linux,就算是像小编我这样的小萌新,也知道OSI模型.什么?!你不知道!!! 好吧,这篇秘籍拿走,不谢~~~ 一.两个协议 (1)OSI 协议模型(7层)国际协议 PDU:协议数据单元对 ...
- 用virtualbox+模拟串口+CDT调试linux内核 TCP/IP协议栈-起步
经常有人问一台机器如何将hello经网络发送给另一台机器,我确实是不知道,只能看代码了. 说明:本人对内核的研究学习也是刚刚起步,有很多不了解的,所以文中可能会有一些"一本正经的胡扯&quo ...
- TCP/IP协议栈在Linux内核中的运行时序分析
网络程序设计调研报告 TCP/IP协议栈在Linux内核中的运行时序分析 姓名:柴浩宇 学号:SA20225105 班级:软设1班 2021年1月 调研要求 在深入理解Linux内核任务调度(中断处理 ...
- UNIX/Linux网络编程基础:图解TCP/IP协议栈
目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(A ...
- TCP/IP协议栈源码图解分析系列10:linux内核协议栈中对于socket相关API的实现
题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈内核相关技术 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linu ...
- 计算机网络基础之TCP/IP 协议栈
计算机网络基础之TCP/IP 协议栈 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.TCP/IP 协议栈概述 1>.什么是TCP/IP协议栈 Transmission C ...
随机推荐
- Why is 'x' in ('x',) faster than 'x' == 'x'?
Question: >>> timeit.timeit("'x' in ('x',)") 0.04869917374131205 >>> tim ...
- javasript中var、let和const区别
let和const都是es5,es6新版本的js语言规范出来的定义,在这以前定义一个变量只能用var.let和const都是为了弥补var的一些缺陷而新设计出来的. 简单来说是: let是修复了var ...
- python字典按照value进行排序
先说几个解决的方法,具体的有时间再细说 d = {'a':1,'b':4,'c':2} 字典是这个,然后要对字典按照value进行排序 方法一: sorted(d.items(),key = lamb ...
- Python全栈学习_day010作业
1,继续整理函数相关知识点,写博客. 2,写函数,接收n个数字,求这些参数数字的和.(动态传参)def MySum(*args): sum = 0 for i in range(len(args)): ...
- python之约束, 异常处理, md5
1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError (重点) 2. 抽象类和抽象方法 # 语法 # from abc import ABCMet ...
- 【转】解决CentOS 64位系统vsftpd 530 login incorrect的问题
转自:http://www.centos.bz/2011/12/centos-64-install-vsftpd-530-login-incorredct/ 今天在centos 6 64位测试安装vs ...
- MongoDB的基本操作:服务端启动,客户端连接,CRUD操作
本文内容: MongoDB的介绍 MongoDB服务端的启动 MongoDB客户端连接 SQL与MongoDB相关概念解释 什么是BSON 数据库操作 集合操作 文档操作 测试环境:win10 软件版 ...
- BD是什么角色
BD是什么角色? 在一般创业公司里面,有了产品接下来就是运营了,而运营中很重要的一点就是BD,也就是所谓商务拓展了,俗一点说就是生意的合作拓展 https://www.jianshu.com/p/7d ...
- plsql备份表---只是表---不包含表数据
写这个的同时还在备份,表的数据进度很慢,数据太大了. 用的工具是plsql 导出表:点击 tool工具 ---> export user object 导出用户目标 ----> ...
- SSD 下的 MySQL(5.5) IO 优化
一 目录 一 目录 二 背景 三 SSD 特性 四 基于 SSD 的数据库优化 五 A 项目 MySQL 主从关系图 六 程序切换之前调优 6.1 修改系统 IO 调度算法 6.2 修改 innodb ...