
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
修改应用层协议控制包使用了ip_conntrack,iptables的REDIRECT target也使用了ip_conntrack,另外包括iptables的state模块也是如此,使用ip_conntrack,可见ip_conntrack的重要性,ip_conntrack的一个无比重要的作用是实现nat,可以说REDIRECT target和对诸如ftp的修改以实现server回连client
很多协议的控制信息在应用层数据中被包含,这些信息直接影响到了链路的建立,比如ftp协议就是这样,ftp分为port模式和pass模式,port模式中,起初client连接server的21端口,然后当需要传输data的时候,client发送一个控制包给server,包中包含client端开启的端口和自己的ip地址,server收到之后用自己的20端口去连接client控制包中建议的ip和端口,在这
linux内核对插入的内核模块进行严格的版本检查,即使一个小版本号不一致也会导致加载的不成功,这完全是为了内核本身运行安全。由于linux内核的发布是基于版本号的,而所有的内核模块的开发必须依赖内核头文件--其使用的内核导出符号均在头文件中,该头文件肯定属于一个特定版本的源码树,因此模块也就间接依赖了该版本的源码树。那么到底为何内核对模块的版本检查如此严格呢?因为每当一个新的版本发布,可能导致接口
linux内核的内存管理中有一个2.6内核才加入的并不很张扬的结构体,那就是pagevec:struct pagevec {unsigned long nr;unsigned long cold;struct page *pages[14];};以往要加入到lru链表的page都要加入到这个pagevec了,并不再直接往lru中加入了。可是不加入lru的page就不会...
linux内核使用了lru算法来置换内存页面,但是实际上并不是纯的lru算法,里面掺杂了很多别的思想,比如第二次机会,比如双时钟指针等等。这里着重说一下第二次机会的体现。在内核中有一个mark_page_accessed函数,它实际上体现一个状态机,这是它的实现:if (!PageActive(page) && PageReferenced(page) &a
在觉得自己内功已经很强的前提下想参与到linux内核的开发一共有两个重要的工作要做,如果没有接触过内核源码,本文也可以看看,因为几乎所有的开源代码都遵循本文所提到的这种方式。这两个工作是:1.用git下载源码树,建立自己的开发分支,修改/添加代码,生成补丁2.配置一个支持透明纯文本的邮件客户端,用于向maillist发送邮件第一个工作的配置很简单,主要就是几条命令,但是能否修改代码或者...
netfilter的实现机制基于四个层次的匹配,数据包在每个层次都要经过一个过滤链表,第一个层次就是hook,众所周知linux内核中一共拥有5个hooks,当然你也可以自己修改内核在任何地方添加hook;第二个层次就是每个hook下面的tables,每一个hook都过挂载零个或者若干个tables,数据包要一个一个经过这些tables;第三个层次就是rule,每个table下面拥有零个或者若干个
linux内核实现了crypto接口,用于类似IPSec之类要在内核中实现的与操作系统绑定的安全机制,如果不是用于这样的机制,不要使用内核中的crypto接口,总的来说,linux的crypto中最重要的结构体有两个:crypto_tfm和crypto_algstruct crypto_tfm {u32 crt_flags;union {struct cipher_tfm ...
linux的内核当中处处充满了设计模式,本文先讨论一下外观模式。外观模式就是将客户和子系统解耦,为客户将复杂的子系统进行封装,从而使得客户可以使用简单易用的接口。众所周知,linux和unix是十分的相似以至于很多人都把linux当作unix的一种,实际上他们一点也不同,一个linux程序员可以毫不费力的 转到unix下编程不是因为这个人水平多高,而是因为linux和unix遵循了几乎相同的...
linux中的线程分为用户线程和内核线程,用户线程是标准的线程,完全的自主性,完全的抢占性;但是内核线程就不那么好了,某种意义上没有用户线程那么清闲,这个怎么理解呢?用户线程的编写者只需要实现应用逻辑就可以,至于调度,信号处理等工作完全有内核代劳,用户进程根本不需要操这些心,比如说调度, 在2.6完全可抢占内核之前,内核线程必须显式放弃处理器,否则它将永远不会被抢占,这就给了内核线程的开发者很大的







