Kernel
文章平均质量分 80
dolphin98629
这个作者很懒,什么都没留下…
展开
-
linux的vm相关参数介绍
linux的vm相关参数介绍1. 保证linux有足够的物理内存,可以调整vm的如下参数 vm.min_free_kbytes=409600;//默认值是3797,保证物理内存有足够空闲空间,防止突发性换页vm.vfs_cache_pressure=200;//默认是100,增大这个参数设置了虚拟内存回收directory和i-node缓冲的倾向,这个值越大转载 2016-07-23 12:43:34 · 557 阅读 · 0 评论 -
网络数据包收发流程(一):从驱动到协议栈
早就想整理网络数据包收发流程了,一直太懒没动笔。今天下决心写了一、硬件环境intel82546:PHY与MAC集成在一起的PCI网卡芯片,很强大bcm5461: PHY芯片,与之对应的MAC是TSECTSEC: Three Speed Ethernet Controller,三速以太网控制器,PowerPc 架构CPU里面的MAC模块转载 2014-11-06 13:57:22 · 413 阅读 · 0 评论 -
Linux vlan 功能模块分析
本文代码基于linux2.6.21Vlan即虚拟局域网,一个vlan能够模拟一个常规的交换网络,实现了将一个物理的交换机划分成多个逻辑的交换网络。而不同的vlan之间如果要进行通信就要通过三层协议来实现。 在linux中vlan的配置使用vconfig,使用vconfig配置一个交换网络,大致的流程如下: # # vconfig add eth0 1转载 2015-01-09 15:21:08 · 1598 阅读 · 0 评论 -
Linux下VLAN功能的实现
1.Linux网络栈下两层实现1.1简介 VLAN是网络栈的一个附加功能,且位于下两层。首先来学习Linux中网络栈下两层的实现,再去看如何把VLAN这个功能附加上去。下两层涉及到具体的硬件设备,日趋完善的Linux内核已经做到了很好的代码隔离,对网络设备驱动也是如此,如下图所示:这里要注意的是,Linux下的网络设备net_dev并不一定都对应实际的硬件设备转载 2015-01-09 15:28:07 · 811 阅读 · 0 评论 -
Linux多队列网卡
多队列网卡是一种技术,最初是用来解决网络IO QoS (quality of service)问题的,后来随着网络IO的带宽的不断提升,单核CPU不能完全处满足网卡的需求,通过多队列网卡驱动的支持,将各个队列通过中断绑定到不同的核上,以满足网卡的需求。常见的有Intel的82575、82576,Boardcom的57711等,下面以公司的服务器使用较多的Intel 82575网卡为例,分析转载 2015-01-09 16:10:57 · 7096 阅读 · 0 评论 -
Linux netfilter 学习笔记 之九 ip层netfilter的连接跟踪模块代码分析
基于linux2.6.21上一节分析了连接跟踪模块相关的初始化代码,本节分析连接中hook函数。在分析之前,我们再次回顾一下数据包在连接跟踪模块中的走向。 发往本地的数据:对于连接跟踪来说,只在hook点NF_IP_PRE_ROUTING、NF_IP_LOCAL_IN两个hook点进入到连接跟踪模块,按优先级顺序,依次调用ipv4_conntrack_def转载 2014-12-09 13:49:58 · 1457 阅读 · 0 评论 -
Linux netfilter 学习笔记 之十一 ip层netfilter的NAT模块初始化以及NAT原理
1.NAT的原理NAT会修改数据包的ip层的源或者目的ip地址。在实际应用中,NAT 主要用于实现私有网络访问公共网络的功能。1.1 SNAT源目的地址转换,即对ip数据包的源ip地址进行转换操作,典型的应用即是网关,网关的lan侧会下挂至少两台设备,而这两台设备的ip地址都是lan侧地址,而lan侧设备又要访问公网,这就需要SNAT大展身手了,通过将lan侧发送的ip数据转载 2014-12-08 16:08:38 · 682 阅读 · 0 评论 -
Linux netfilter 学习笔记 之八 ip层netfilter的连接跟踪模块初始化
基于linux2.6.21在上一节中分析了连接跟踪模块相关的数据结构,本节就开始分析连接跟踪模块相关的初始化,下一节理解连接跟踪模块的hook机制。 在分析连接跟踪模块代码之前,先说明几点:1.连接跟踪模块的helper结构能够实现期望连接的建立以及相关协议的ALG功能。2.连接跟踪为NAT或者状态防火墙的实现提供了依据 连接跟踪模块的初始化转载 2014-12-09 13:47:35 · 817 阅读 · 0 评论 -
Linux netfilter 学习笔记 之十三 netfilter的SNAT模块是否支持UDP打洞
在分析SNAT模块的代码时,就已经分析过函数get_unique_tuple与find_appropriate_src,那时对于为什么要调用find_appropriate_src函数使用已经转换的源ip、端口不清楚,最近听说这个功能可以用于udp打洞功能,就重新看了udp打洞的概念,就写下了这篇文档1.SNAT转换的特殊处理linux netfilter模块中,对于SNAT转转载 2014-12-08 16:25:56 · 744 阅读 · 0 评论 -
网络数据包收发流程(四):协议栈之packet_type
进入函数netif_receive_skb()后,skb正式开始协议栈之旅。先上图,协议栈大致过程如下所示:跟OSI七层模型不同,linux根据包结构对网络进行分层。比如,arp头和ip头都是紧跟在以太网头后面的,所以在linux协议栈中arp和ip地位相同(如上图)但是在OSI七层模型中,arp属于链路层,ip属于网络层..... 这里就不死抠概念,我们就说arp,ip都转载 2014-11-06 14:05:40 · 678 阅读 · 0 评论 -
Linux发送函数dev_queue_xmit分析 --转
当上层准备好一个包之后,交给下面这个函数处理[cpp] view plaincopyint dev_queue_xmit(struct sk_buff *skb) { struct net_device *dev = skb->dev; struct netdev_queue *txq; struc转载 2014-11-18 14:56:58 · 935 阅读 · 0 评论 -
Linux内核中的九个技巧
关于Linux的内核编译有不少系统管理员都不知道如何去处理。其实就像平时的Linux系统管理一样Linux内核编译也有技巧可以掌握。在本文中我们就向大家介绍下Linux内核编译九个技巧。1构建泛型宏 (./linux/include/linux/kernel.h)#define min(x, y) ({ \typeof(x) _min1 = (x); \typeof(y) _min转载 2014-07-03 11:15:37 · 1598 阅读 · 0 评论 -
Linux Call Trace原理分析
本文介绍了在Linux环境下根据EABI标准进行call trace调试的一般性原理。本文所说的call trace是指程序出问题时能把当前的函数调用栈打印出来。本文只介绍了得到函数调用栈的一般性原理,没有涉及Linux的core dump机制。下面简单介绍powerpc环境中如何实现call trace。内核态call trace转载 2014-07-03 14:56:24 · 1882 阅读 · 0 评论 -
Linux网络协议栈之数据包处理过程
1 前言本来是想翻译《 The journey of a packet through the linux 2.4 network stack 》 这篇文章的。但在查阅相关的资料时,发现需要补充一些技术细节,才使得我这种菜鸟理解更加深刻,所以综合了上面两篇文档,在加上自己的裁减和罗嗦,就有了下面的文字。我不知道这是否侵犯了作者权益。如果有的话,请告知,我会及时删除这篇拼凑起来的文档。引转载 2014-11-10 15:48:34 · 919 阅读 · 0 评论 -
Linux 内核IP和UDP检验和计算
IP checksuma. 接收报文struct iphdr *iph = ip_hdr(skb);if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl)))goto checksum_error; b. 发送报文ip_send_check(iph);{ i转载 2014-11-14 13:44:59 · 3256 阅读 · 0 评论 -
netlink简单实例
一、netlink简介netlink协议是一种基于socket的IPC机制,可用于内核与用户空间进程、用户空间进程与用户空间进程通信,如图所示:netlink协议基于BSD socket和AF_NETLINK地址簇(address family),使用32位的端口号寻址(以前称作PID),每个netlink协议(或称作总线,man手册中则称之为netlink famil转载 2014-10-30 16:28:32 · 1380 阅读 · 0 评论 -
LINUX netlink机制
Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 Linux 内核(2.6.14)中使用netlink 进行应用与内核通信的应用很多,包括:路由 daemon(NETLINK_ROUTE),1-wire 子系统(NETLINK_W1),用户态 socket 协议(NETLINK_USERSOCK),防火转载 2014-10-30 16:03:43 · 494 阅读 · 0 评论 -
generic_netlink_howto
This document gives a brief introduction to Generic Netlink, some simpleexamples on how to use it and some recommendations on how to make the most ofthe Generic Netlink communications interface. W转载 2014-10-30 16:37:09 · 534 阅读 · 0 评论 -
Linux上的基础网络设备详解
网络虚拟化是 Cloud 中的一个重要部分。作为基础知识,本文详细讲述 Linux 抽象出来的各种网络设备的原理、用法、数据流向。您通过此文,能够知道如何使用 Linux 的基础网络设备进行配置以达到特定的目的,分析出 Linux 可能的网络故障原因。 Linux 抽象网络设备简介 和磁盘设备类似,Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操转载 2014-11-18 14:52:53 · 747 阅读 · 0 评论 -
Linux netfilter 学习笔记 之七 ip层netfilter的连接跟踪模块的概念及相关的数据结构分析
内核版本 2.6.21 连接跟踪(CONNTRACK)就是跟踪并且记录连接状态。包括 TCP 、UDP、ICMP 等协议类型的连接。其主要是判断该数据包是什么状态。根据数据包的源ip地址、目的ip地址、源端口、目的端口、协议号来确定一条连接。 因为连接跟踪支持TCP、UDP、ICMP等协议,而不同的协议,其处理上会有一些不同,因此增加了协议相关的连接跟踪结构,即n转载 2014-12-09 13:45:34 · 805 阅读 · 0 评论 -
Linux netfilter 学习笔记 之十二 ip层netfilter的NAT模块代码分析
本节主要是分析NAT模块相关的hook函数与target函数,主要是理清NAT模块实现的原理等。 1.NAT相关的hook函数分析NAT模块主要是在NF_IP_PREROUTING、NF_IP_POSTROUTING、NF_IP_LOCAL_OUT、NF_IP_LOCAL_IN四个节点上进行NAT操作,在上一节中我们知道nat表中只有PREROUTING、POSTROUTI转载 2014-12-08 16:05:56 · 724 阅读 · 0 评论 -
手把手教你调Oops(powerpc版)
前一阵子搞动态替换内核函数,过程十分痛苦,特写此文,纪念那些该死的Oops一、源代码文件forward.c 驱动模块的文件#define CODESIZE 4int (* orig_rtc_dev_open) (struct inode *inode, struct file *file) = ( int(*)(struct转载 2015-03-13 10:14:14 · 1452 阅读 · 0 评论 -
在linux内核中修改TCP MSS值
MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小MSS最大传输大小的缩写,是TCP协议里面的一个概念。MSS就是 TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往 往用MTU值代替(需要减去IP转载 2015-05-07 16:33:12 · 990 阅读 · 0 评论 -
反向路径过滤——reverse path filter
一、原理先介绍个非对称路由的概念参考《Understanding Linux Network Internals》三十章,30.2. Essential Elements of RoutingSymmetric routes and asymmetric routesUsually, the route taken from Host A to Host B is the sa转载 2015-06-12 08:47:55 · 994 阅读 · 0 评论 -
TCP的ACK确认系列 — 延迟确认
主要内容:TCP的延迟确认、延迟确认定时器的实现。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 延迟确认模式 发送方在发送数据包时,如果发送的数据包有负载,则会检测拥塞窗口是否超时。如果超时,则会使拥塞窗口失效并重新计算拥塞窗口。如果此时距离最近接收到数据包的时间间隔足够短,说明双方处于你来转载 2016-01-25 13:53:09 · 744 阅读 · 0 评论 -
TCP的ACK确认系列 — 快速确认
主要内容:TCP的快速确认、TCP_QUICKACK选项的实现。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 快速确认模式 (1) 进入快速确认模式设置快速确认模式标志,设置在快速确认模式中可以发送的ACK数量。[java] view plain copy转载 2016-01-25 13:54:17 · 827 阅读 · 0 评论 -
TCP的ACK确认系列 — 发送状态转换机
主要内容:TCP的ACK发送方式,以及ACK发送状态转换机的实现。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 概述 TCP采用两种方式来发送ACK:快速确认和延迟确认。在快速确认模式中,本端接收到数据包后,会立即发送ACK给对端。在延迟确认模式中,本端接收到数据包后,不会立即发送ACK给对端转载 2016-01-25 13:55:32 · 517 阅读 · 0 评论 -
kernel 3.10内核源码分析--hung task机制
一、相关知识长期以来,处于D状态(TASK_UNINTERRUPTIBLE状态)的进程都是让人比较烦恼的问题,处于D状态的进程不能接收信号,kill不掉。在一些场景下,常见到进程长期处于D状态,用户对此无能为力,也不知道原因,只能重启恢复。其实进程长期处于D状态肯定是不正常的,内核中设计D状态的目的是为了让进程等待IO完成,正常情况下IO应该会顺利完成,然后唤醒相应的D状态进程,即使在异常转载 2016-07-23 12:33:59 · 500 阅读 · 0 评论 -
文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别
这两天在调优数据库性能的过程中需要降低操作系统文件Cache对数据库性能的影响,故调研了一些降低文件系统缓存大小的方法,其中一种是通过修改/proc/sys/vm/dirty_background_ration以及/proc/sys/vm/dirty_ratio两个参数的大小来实现。看了不少相关博文的介绍,不过一直弄不清楚这两个参数的区别在哪里,后来看了下面的一篇英文博客才大致了解了它们的不同。转载 2016-07-23 12:37:23 · 860 阅读 · 0 评论 -
ebtables之BROUTING和PREROUTING的redirect的区别
ebtables和iptables实用工具都使用了Netfilter框架,这是它们一致的一方面,然而对于这两者还真有一些需要联动的地方。很多人不明白ebtales的broute表的redirect和nat表PREROUTING的redirect的区别,其实只要记住两点即可,那就是对于相同点,它们都将数据包导向了本地的IP层;对于不同点,broute表的redirect将数据包的接收设备设置成了实际转载 2015-01-06 10:52:38 · 649 阅读 · 0 评论 -
Linux-网桥原理分析
Linux-网桥原理分析 http://biancheng.dnbcw.info/linux/244269.html 目 录1..... 前言... 62 网桥的原理... 72.1 桥接的概念... 72.2 linux的桥接实现... 82.3 网桥的转载 2015-01-05 12:39:07 · 1788 阅读 · 0 评论 -
RCU 机制
《RCU是什么?》第一部分概述Read-copy update (RCU) 是一种 2002 年 10 月被引入到内核当中的同步机制。通过允许在更新的同时读数据,RCU 提高了同步机制的可伸缩性(scalability)。相对于传统的在并发线程间不区分是读者还是写者的简单互斥性锁机制,或者是哪些允许并发读但同时不 允许写的读写锁,RCU 支持同时一个更新线程和多个读线程的并发。RC转载 2015-01-16 10:33:27 · 585 阅读 · 0 评论 -
NAT网关自动去掉TCP syn包的时间戳
猛士设计了Netfilter,在失眠的时候就有事做了,安息日应守为圣日,否则会激怒神,因此双休日我一般不学习和工作,相反,我会在午夜玩一些自己喜欢的东西。我没有受过洗,不是因为不是笃信者,没有安息夜...NAT和timestamps问题这个问题就不多说了,总之,NAT设备将所有数据包的大量不同的源地址都转换为了单一的或者少数几个地址,这个转换动作和TCP服务器的PAWS机制一起工作转载 2014-12-29 12:48:35 · 942 阅读 · 0 评论 -
Linux的Netfilter框架深度思考-对比Cisco的ACL-
在前面0.1.本文不涉及具体实现,也不涉及源代码,不剖析代码0.2.本文不争辩Linux或者Cisco IOS不同版本之间的实现细节0.3.本文不正确处请指出Cisco无疑是网络领域的领跑者,而Linux则是最具活力的操作系统内核,Linux几乎可以实现网络方面的所有特性,然而肯定还有一定的优化空间,本文首先向Cisco看齐,然后从不同的角度分析Netfilter的对应特性,最转载 2014-12-29 15:50:33 · 682 阅读 · 0 评论 -
Linux实现的IEEE 802.1Q VLAN
第一部分:VLAN的核心概念说起IEEE 802.1q,都知道是VLAN,说起VLAN,基本上也没有盲区,网络基础。然而说到配置,基本所有人都能顺口溜一样说出Cisco或者H3C设备的配置命令,对于Linux的VLAN配置却存在大量的疑问。这些疑问之所以存在我觉得有两点原因:1.对VLAN的本质还是没有理解。不管你的Cisco/H3C命令敲得再熟练,如果看不懂Linux的vconfig转载 2014-12-29 15:42:50 · 523 阅读 · 0 评论 -
内核发出的sigkill信号
红帽Linux故障定位技术详解与实例是本文要介绍的内容,主要是来了解并学习红帽linux中故障定位技术的学习,故障定位技术分为在线故障定位和离线故障定位,一起来看详解。 1、故障定位(Debugging)场景分类 为便于描述问题,将Linux上各种软件故障定位的情形分成两类 (1)在线故障故障定位 在线故障定位(online-debugging)就是在故障发转载 2015-01-21 15:26:28 · 738 阅读 · 0 评论 -
Linux内核bridge中的数据包处理流程
Linux内核bridge中的数据包处理流程本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。msn: yfydz_no1@hotmail.com来源:http://yfydz.cublog.cn1. 前言本文简要介绍数据包在进入桥网卡后在Linux网络协议栈的处理流程,并描述netfilt转载 2015-01-05 14:41:46 · 2237 阅读 · 0 评论 -
BUILD_BUG_ON
BUILD_BUG_ON()在编译时调用,可以提前发现错误,这里利用了一些不常用的特性,当数组个数元素为负时会发生编译器错误,对于位域宽度而言,其为负数时也会发生编译器错误。 1 #define BUILD_BUG_ON_ZERO(e) (sizeof(struct{int : -!!(e);}))2 #define BUILD_BUG_ON_NULL(e)转载 2015-01-05 14:47:12 · 557 阅读 · 0 评论 -
Linux网桥的实现分析与使用
一、Linux内核网桥的实现分析Linux 内核分别在2.2 和 2.4内核中实现了网桥。但是2.2 内核和 2.4内核的实现有很大的区别,2.4中的实现几乎是全部重写了所有的实现代码。本文以2.4.0内核版本为例进行分析。在分析具体的实现之前,先描述几个概念,有助于对网桥的功能及实现有更深的理解。冲突域一个冲突域由所有能够看到同一个冲突或者被该冲突涉及到的设备转载 2015-01-05 12:35:08 · 875 阅读 · 0 评论 -
根据内核Oops 定位代码
内核开发时有时候出现Oops,例如一个野指针会导致内核崩溃,如运行时出现以下log:现在有三种方法可以找出具体出现野指针的地方 5.438972] bells bells: wm5102-aif1 samsung-i2s.0 mapping ok [ 5.443812] bells bells: Failed to add route OPCLK->Su转载 2014-04-03 17:16:04 · 1004 阅读 · 0 评论