网络通信
内核中的洋葱
内核中的洋葱
展开
-
MIPL程序解读(1)
这是一年前研究移动ipv6时候写的一个文档。贴出来共享。 1、总体说明以MIPL项目组的mipv6-2.0.2版本为样本,进行程序分析。MIPL项目组的MIPv6的实现分成两部分,一部分是对内核的修改,对内核打了一个长长的补丁;另一部分是用户空间的一个守护进程。这一部分仅仅是MIPv6的用户空间部分的代码,内核空间的代码另外的文档进行解读。其结构可以用下图来表示(摘录自NEPL (NE原创 2008-10-04 09:38:00 · 3914 阅读 · 1 评论 -
MIPL程序解读(2)
这部分对主要的线程进行总体上的分析。 2、runner线程分析runner是从tq_list链表中,读取一项项的任务,分别执行。tq_list链表中的任务是按时间先后顺序进行排列,最先执行的程序放在前面,只有一个函数对这个链表进行插入操作,就是sorted_insert()。因此,只要看哪些地方调用了sorted_insert(),就可以知道一共有哪些任务会出现在队列中。只有一个函原创 2008-10-04 10:05:00 · 2453 阅读 · 0 评论 -
Linux中ipv6代码阅读(3)
三.路由模块的处理1. 路由节点结构是fib6_node的结构,通过这个结构来组织成一棵路由树。这个结构主要是用来组织路由结构树的,具体的路由信息是存放在fib6_node->leaf结构中,这是一个rt6_info的结构体。每个fib6_node伴随着一个rt6_info。查找路由的时候,遍历整个路由树,根据每个fib6_node节点的rt6_info信息,判断是否是自己需要的节点。如果是,原创 2009-01-09 16:46:00 · 4450 阅读 · 0 评论 -
Linux中ipv6代码阅读(4)
四、从用户空间到内核空间在内核空间,跟socket相关的调用都是在sys_socketcall()函数里面。入口函数就是asmlinkage long sys_socketcall(int call, unsigned long __user *args)。我们这部分就是分析如何从一个用户的程序,如后进入到sys_socketcall()函数。至于进入sys_socketcall()函数原创 2009-01-09 16:51:00 · 5053 阅读 · 0 评论 -
Linux中ipv6代码阅读(2)
二、在网络层的处理 这部分是说明数据报文在网络层的处理。上面一部分已经说明了在链路层的处理。在链路层的处理,基本都是在驱动中已经实现了的。接着链路层的处理,对于ipv6协议,处理过程在ipv6_recv()中。1. ipv6_rcv()中,会做一些必要的检查和更新MIB的一些信息,接着处理hopbyhop报头。然后进入NF_HOOK(PF_INET, NF_IP_PRE_ROUTING,原创 2009-01-08 18:13:00 · 6719 阅读 · 1 评论 -
tcp 协议3次连接握手和4次结束握手
协议连接建立时3次握手的过程4次结束连接 TCP协议连接建立时3次握手的过程。简述TCP协议连接建立时3次握手的过程。根据TCP头部,说明下列3个包在连接建立过程中的次序.0020 00 50 83 aa 46 49 3e dd 33 96 37 a3 a0 12 ...P..FI>.3.7...0030转载 2009-03-07 15:03:00 · 4903 阅读 · 0 评论 -
Linux中ipv6代码阅读(1)
一. 网卡接受数据的过程 这部分是说明数据报文在在链路层的处理,以及如何将报文送交给对应的网络层协议来处理。这些功能基本都是在驱动中实现的。1. 从网络中接收数据报文的时候,涉及到两个终端。一个是硬中断,一个是软中断。 (1).硬中断的中断处理函数是在驱动中注册,一般在device open()函数或者 device init()函数中注册,使用request_irq()来注册硬中断处理函原创 2008-12-25 16:19:00 · 4252 阅读 · 0 评论