软件工程

本类阅读TOP10

·PHP4 + MYSQL + APACHE 在 WIN 系统下的安装、配置
·Linux 入门常用命令(1)
·Linux 入门常用命令(2)
·使用 DCPROMO/FORCEREMOVAL 命令强制将 Active Directory 域控制器降级
·DirectShow学习(八): CBaseRender类及相应Pin类的源代码分析
·基于ICE方式SIP信令穿透Symmetric NAT技术研究
·Windows 2003网络负载均衡的实现
·一网打尽Win十四种系统故障解决方法
·数百种 Windows 软件的免费替代品列表
·收藏---行百里半九十

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
数据包在Linux中的流程

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

1.中断处理函数中:

网卡收到一帧------------------------〉

引发中断-------------------〉

cpu调用相应的中断处理函数(指向此网卡驱动中的相应的处理函数)(把此packet读到ram中)--------------------〉

呼叫netif_rx函数来打上timestamp,并把此skb放入到cpu设置的队列中-----------------〉

标记软中断(__cpu_raise_softirq)---------------------〉中断完成。

 

2.当软中断被调用时(一共在三个地方调用),呼叫NET_RX_SOFTIRQ(其实就是net_rx_action()函数)来处理网络方面的软中断。-----------------〉

net_rx_action()根据数据包的协议类型在数组ptype_base[16]里找到相应的协议,并从中知道了接收的处理函数,然后把数据包交给处理函数,这样就交给了上层处理,实际调用处理函数是通过net_rx_action()里的pt_prev->func()这一句。例如如果数据包是IP协议的话,ptype_base[ETH_P_IP]->func()(ip_rcv()),这样就把数据包交给了IP协议。根据包的类型,查找系统中注册了的相应的包处理函数,对于ipv4的ip包,呼叫ip_rcv-------------〉
NF_IP_PRE_ROUTING--------------〉

ip_rcv_finish(进行对此包的路由操作)---------------------〉

根据路由的结果,呼叫ip_local_deliver(给本机的包)/ip_forwardd(要转发的包)/ip_error()(出现错误的包)/ip_mr_input()(多播包的处理)ip_forward:要进行转发的包,check ttl, mtu, call NF_IP_FORWARDS,--------------〉

ip_forwmard_finish(check other ip options for forwardd!)-------------------〉

ip_send(如果需要分片,则调用ip_fragment,否则调用ip_finish_output()(call NF_IP_POST_ROUTING,然后时ip_finish_output2(填充链路层头部到skb结构中)--------------〉

hh->hh_output/dsr->neighbour->output




相关文章

相关软件