自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (4)
  • 收藏
  • 关注

原创 UDP/TCP与fork

<br />1.既然UDP是无连接不保证送达的,那么就没有必要在关闭时通知对方了,因为这个“关闭”消息也不能保证送达,不仅如此,任何的控制信息诸如确认都不便在传输层发送,因为不能保证送达。UDP是基于数据报的,第一个数据报和随后同源同目的的第二个数据报之间没有任何的关系。因此不要指望对端能收到自己closesocket的消息,即使是有人想出用带外数据传输也是徒劳的,因此只能通过超时机制或者心跳机制来保活;<br />2.对于tcp,其比udp开销大,大就大在协议头的空间开销和重传以及ip分段的时间开销,

2010-06-30 22:32:00 5031

原创 UNIX的流模式影响以及和套接字的PK

<br />分层驱动的设计在windows上应用很多,但是实际上却是从unix开始的,早在unix为前途纷争的时代,那时还没有tcp/ip,有人就提出“将一个流压入另一个流”来进行堆栈式的流组合,用以适应多个不同的协议,所谓流,用OO语言讲就是一个对象,包含一个或者多个模块,每个模块拥有两个队列(输入队列和输出队列)以及一套方法,比如“流压入”,“数据放入”,“取出”,“服务”等,一个流的最下端模块压入另一个流的最上端模块时候就需要调用“另一个流”的压入方法用以衔接,数据通过一个流时就要调用该流的服务方法,

2010-06-30 22:29:00 3476

原创 使用linux的几个需要注意的问题(后续增补)

<br />一.vim编辑文件时可以实现单词自动补全吗?<br />vim自动补全的功能请尝试ctrl-n<br />二.vim编辑器可以打开多个窗口吗?<br />vim在终端中执行,并且在执行时独占整个终端,但是在vim内部,你却可以使用:new name/:vnew name/:split name等命令来将vim“窗口”进行分割,实现windows文档-视图结构的多个平铺窗口的效果,若干个vim分割窗口将永远平分一个shell,“窗口”之间不会留下任何间隙,你可以通过ctrl-w w来实

2010-06-28 21:45:00 3164

原创 linux中的优先搜索树的实现--prio_tree

<br />prio_tree在linux内核中被应用于反向内存映射,prio-tree是一棵查找树,它查找的是一个区间,为何将之组织成tree是一个数学问题,简单理解就是根节点包含了所有的区间,父节点代表的区间包含了子节点代表的区间,这里的包含不是现实意义的包含,而是heap/radix意义上的包含,只要满足heap的性质以及radix的性质即可,不过大多数情况下包含的意义就是现实意义的包含,Documentation中的prio_tree.txt中的图示可以看一下,[4,3,7]是[5,2,7]和[6,

2010-06-28 21:45:00 7634 2

原创 vi理解键盘的方式

<br />手还是不由得往方向键上移动,方向键近吗?如果近的话,ESC键或许更近,vi大行其道的时候,可能方向键并没有开始走向舞台,vi尽可能地使得键盘上的每一个键都有用,而且它做的很均匀,当时的按键很少,vi均匀地全部用上了,后来键渐渐多了,windows键盘也流行起来,键多了,可是使用率却不平均了,想想看,如今的键盘那些键用的最多?方向键,小键盘,ctrl,回车,还有很多所谓的多媒体键,字符键好像除了打字外再没有别的用处了,控制键只剩下了ctrl,shift,alt等等不多的几个,经常看到有些手指头短的

2010-06-25 21:48:00 3298

原创 linux内核netfilter之ip_conntrack模块的作用--抽象总结

<br />nat规则将数据流的地址信息进行转换,转换了之后需要将转换后的地址信息写入ip_conntrack结构体中,经过nat之后目的地址无非两个方向,一个是本机(redirect target),一个是其它机器(网关上的nat一般都这样),于是netfilter需要对这两个方向的转换记录提供支持。<br />     netfilter的ip_conntrack提供了下列两个HOOK,ip_conntrack_out_ops用于nat到其它机器的支持,ip_conntrack_local_in_o

2010-06-25 21:47:00 10269 5

原创 coreutils-5.0中几个命令的执行过程

<br />uname是怎么执行的?<br />随手在键盘敲击一个uname -a,系统信息就出来了:<br />Linux My 2.6.8-2-686-smp #1 SMP Tue Aug 16 12:08:30 UTC 2005 i686 unknown unknown GNU/Linux<br />可是执行该命令时,系统究竟做了什么?如果查阅coreutils的uname.c文件就会发现其实uname使用了一个系统调用sys_uname:<br />asmlinkage int sy

2010-06-24 21:52:00 4114

原创 王然的烦恼--她很精通linux啦

<br />宝贝王然最近十分想搞嫁祸于人的恶作剧!<br />一台linux主机上建立了一个用户wangran,一共有两个人王然和王其知道用户wangran的密码pw,其中王其还知道root密码而王然不知道,为了安全起见,远程用户都不得用root直接登录主机,也就是王然和王其只能通过wangran这个用户来登录,王然自认为是linux高手,她当然知道他们远程登录的终端是/dev/pts/n,n从0开始递增,而且她也知道/dev/pts/n的权限就是通过终端登录的用户也就是wangran的权限,任何su的用户

2010-06-24 21:51:00 7055 4

原创 linux终端闲谈

<br />为何向ssh之类的终端设备文件必须成对出现,而诸如tty或者串口或者slip之类的终端只有一个设备文件即可,这不得不从终端的本质说起,其实像串口或者s符合lip规程之类终端和tty/console终端本质是一样的,只不过tty的设备线路是用pci,agp之类的总线连接,其终端设备就是键盘,显示器/打印机之类的,而串口连接的终端是通过诸如RS232之类的接口连接的,这类终端只是延长了键盘,显示器而已,后来的X window的设计思想也是利用了这个思想,只不过终端完全进化成了一个图形服务器,以前的终

2010-06-24 21:47:00 6712

原创 linux内核netfilter之ip_conntrack模块的作用举例--nat和REDIRECT为例

<br />修改应用层协议控制包使用了ip_conntrack,iptables的REDIRECT target也使用了ip_conntrack,另外包括iptables的state模块也是如此,使用ip_conntrack,可见ip_conntrack的重要性,ip_conntrack的一个无比重要的作用是实现nat,可以说REDIRECT target和对诸如ftp的修改以实现server回连client最终都落实到了nat上,比如,所谓的REDIRECT就是内置一个nat规则,将符合matchs的包n

2010-06-24 21:45:00 14661

原创 linux内核netfilter之ip_conntrack模块的作用举例--ftp为例

<br />很多协议的控制信息在应用层数据中被包含,这些信息直接影响到了链路的建立,比如ftp协议就是这样,ftp分为port模式和pass模式,port模式中,起初client连接server的21端口,然后当需要传输data的时候,client发送一个控制包给server,包中包含client端开启的端口和自己的ip地址,server收到之后用自己的20端口去连接client控制包中建议的ip和端口,在这种情况下,如果client在nat后面使用私网地址,那么server将无法连接client,因此na

2010-06-24 21:44:00 11021 1

原创 linux网络配置和防火墙配置一例

<br />网络拓扑如下:hostA/B/C处于同一个局域网:<br />hostA:<br />eth0:192.168.0.2<br />----------------------<br />hostB:<br />eth0:192.168.0.1<br />eth1:10.0.0.1<br />----------------------<br />hostC:<br />eth0:192.168.0.3<br />eth1:10.0.0.3<br />-

2010-06-24 21:41:00 3861

原创 linux分类驱动对字符设备框架压力的卸载

<br />2.6内核引入了input字系统,usb子系统,misc子系统等一系列字符设备子系统,在熟练掌握这些子系统之后,我们来看一下linux内核设计这么些子系统的意义何在?可以连接的设备越来越多,这些设备的种类也越来越杂,传统的字符设备/块设备的分类已经不能满足要求,以字符设备为例,现在的linux字符设备体系已经不能代表所有支持的字符设备的最小交集,况且,在随着设备的增多,越来越长的线性设备链表给管理带来了诸多不便,因此“需要增加一个层”来给字符设备体系卸载一些压力了,于是就将所有的“一类”设备总结

2010-06-17 21:38:00 3764 3

原创 动态库在不同操作系统中的不同意义

<br />“Unix 至少设立了三层内部边界来防范恶意用户或有缺陷的程序。一层是内存管理:Unix 用硬件自身的内存管理单元(MMU)来保证各自的进程不会侵入到其它进程的内存地址空间。第二层是为多用户设置的真正权限组——普通用户(非 root用户)的进程未经允许,就不能更改或者读取其他用户的文件。第三层是把涉及关键安全性的功能限制在尽可能小的可信代码块上。在 Unix 中,即使是 shell(系统命令解释器)也不是什么特权程序。”----《Unix编程艺术》:小即是美,这个词有两个例子可以证实,一个是古希

2010-06-17 21:36:00 3533

原创 从配置文件的格式扯到GUI和CLI

<br />看一下windows的ini格式配置文件:<br />[startup]<br />cmd=a.bat<br />para=...<br />...<br />windows的配置都是诸如上述的ini文件,格式如下:<br />[section]<br />name=value<br />...<br />这种配置文件虽然没有二进制文件那般无耻可毕竟也是“格式化”的,比如上面的"[","]","="等都是格式,这种“格式”定义得越多,处理它的程序就越复杂和专业

2010-06-13 21:48:00 4376 1

原创 用C语言联合体和枚举描述数据库

数据库存储了几乎所有的业务数据,而这些数据毕竟不是静态的,那么就必然需要我们来写程序完成数据的加工和整合,数据库仅仅保存我们加工整合后的结果,因此必然的,我们需要把数据库中的数据读到程序中,然后加工后再存入数据库,同样必然的,我们需要在程序中维持数据库表的结构,那么很显然,我们需要在程序中定义很多结构体或者联合体数组来保存数据库查询的结果,每个结构体代表了一个纪录,很多纪录就用结构体数组来表示,如此一来,程序就会显得很臃肿,比如会出现下列的结构体:struct girl {    char *nam

2010-06-12 19:05:00 3987

原创 一个网络问题的解决

<br />网络环境:<br /><br />前提:所有涉及的机器都允许ping通过,手头只有上图中的机器。<br />问题描述:在PC上ping 10.11.12.13,无法联通,但是在路由器上却能ping通10.11.12.13。<br />排查过程:<br />1.    确定路由器的ip_forward为1。<br />结论:路由器可以路由。<br />2.    确定路由器上配置正确的路由和NAT,以及清空路由器iptables的filter表。<br />结论:可以暂时忽

2010-06-12 18:23:00 3905

原创 一个基于链表的内存管理方案

<br />在OpenVPN中,一种很不错的内存管理方案是基于链表的,该方案的实现使用了一个gc_arena结构体,该结构体的作用就是将所有的动态分配的内存块收集汇集起来,然后就可以在一个地方统一释放,c语言对动态内存管理的劣势就是无法跟踪动态内存,因此也就将管理动态内存的事情交给了程序员来完成,然后就有了无数次的由于内存泄露导致的bug,虽然c++实现了很多内存管理方案,比如智能指针之类的,但是其复杂性无不揉进了c++这种重量级语言本身,使得本已复杂的语言带上特定的库之后更加臃肿,并且在c++中实现的动态

2010-06-11 22:29:00 4485

原创 谁是头儿

<br />初到一家公司,不知道谁是领导,又不好意思问,怎么办?到饮水机旁守着,在大热天不管杯中是否有茶叶,总是接开水喝的十有八九是领导

2010-06-11 08:39:00 3220 2

原创 欧拉定理之我见

<br />欧拉定理是数论中一个很重要的定理,它的证明也是多种多样,有很多证法非常复杂,别说理解了,看都很难看懂,但是有的却是十分简洁,很多时候,数学证明就像是排兵布阵,一步错步步错,付出的代价远比你想象的要大,反之,如果你找到了突破口,那么胜利也就是一个必然结果了,在数学上,比如有两个定理,很多情况下它们是可以互推的,例如定理A和B,有一种证明B的方法是通过A将之推出(例如使用数学归纳法),而另一种方式则是使用和A以及B都不相关的一套体系,也就是说在A/B之上构建了一个理论,然后A被推出,B就是必然结果了

2010-06-08 20:39:00 3031

原创 linux下用文本处理器处理二进制文件后的终端乱码问题

乱码!乱码!在linux终端上不小心或不在意cat了一个elf文件,或者仅仅是cat了一个word文档,整个shell就成了乱码,连提示符都不例外,很多人包括我之前都是索性关掉shell,然后重新打开一个shell,这linux的终端未免也太脆弱了吧,一向宣称进程间隔离的linux系统,怎能对待如此重要终端如此如此,盈天地之唯美,只在一草一木之间,然linux却如何做到。     事实上,在彻底解决问题之前,我不得不先为linux平反,首先造成终端乱码的不是linux设计的漏洞,而是用户的有意为之,另外

2010-06-06 15:51:00 6196

原创 压力和秩序的崩塌

压力和秩序的崩塌

2010-06-02 08:37:00 3129

原创 MASQUERADE target在负载均衡中引出的问题

<br />linux中如何配置路由负载均衡是一个古老的问题,可是至今仍然没有什么好的解决方案,我指的解决方案是配置意义上的,如果可以触动内核源代码的话,补丁倒是有好几个,不过很多的linux服务器是不允许给内核打补丁的,成本太高了,要停机,编译同版本内核,如果不同版本内核还要编译所有驱动,测试应用兼容性等等。因此如果有人让你配置负载均衡了,那么你能做到的也就是仅仅“看起来像那么回事”罢了,所谓看起来像的意义就是在用户空间实现一个脚本,每隔一段时间刷新内核的路由表,而路由表中配置多条到同一目的地的路由,如此

2010-06-01 22:31:00 4038

原创 七号线上看历史--不一般的感觉

七号线上看历史--不一般的感觉

2010-06-01 18:48:00 2757

一个iptables的stateless NAT模块实现

如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题。不要从概念上分析,事实上,static双向NAT是完全对称的,一对一的 ,也只有在BOX两边的网络在拓扑级别是完全对等的情形下,这种NAT或许才是有用的,Cisco设备经常处在这样的位置,比如一个很大的stub节点的出口位置,比如两个domain的中间位置... 我将名字取为STATIC-2-WAY-NAT,比较长也比较怪,完全不符合UNIX的小写短名传统,我的想法是:这样可以少写很多的帮助信息,因为名字就是自解释的。

2014-12-27

模块化的nf-HiPAC

原版的nf-hipac需要为内核打patch,且只支持较低版本的内核,构建起来相对比较麻烦。 模块化后的nf-hipac可以直接作为内核可加载模块编译,且适配了高版本的Linux内核。为了移植工作简化,去掉了和iptables模块的联动支持!

2014-11-21

配置文件还有一些other

代码和配置iptables配置文件,还有一些别的东西

2010-04-16

关于linux内核以及其他个人体会的文集

本文集是我用将近两年的时间写成的,大多数文章是关于linux内核的,另外还有一些我自己对计算机的理解,还有一些历史,音乐方面的东西。适合于对linux内核思想感兴趣的阅读,文章偏重于对于思想的理解。

2009-09-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除