pizinanren 于 2008-03-04 20:47:58发表:
因为我在学习这方面的知识,英文看不懂,还是恳求高手能把翻译做的好一些,方便学习. 谢谢了
pizinanren 于 2008-03-04 19:57:28发表:
尽管不太通顺,还是谢谢了
Magnate 于 2008-03-04 13:05:16发表:
这个文件描述了旅途的一个网络包内的Linux内核2.4.x.这有了很大的改变,因为2.2 ,因为在全球范围内系列化上下半段是被遗弃在支持这一新的softirq制度。 1 。前言 我要为借口,为我的无知,但这项文件有强烈的重点,对"违约案" : x86架构和IP数据包获得转交。 我绝对没有内核大师和所提供的资料,这份文件可能有错误。所以不要期待太多,我会永远欣赏你的意见和错误修正。 2 。接到包 2.1接收中断 如果网卡收到一个以太网帧以配合当地的MAC地址或者是一个linklayer播出,它的问题,一个中断。该网络驱动器,为这个特殊卡处理中断,读取数据包的数据通过DMA的/条/无论到内存。然后分配新光银行,并要求一个函数的与协议无关的设备支持套路:网/核心/ dev.c : netif_rx (新光银行) 。 如果驾驶员没有已经戳了新光银行,它是timestamped现在。事后新光银行获得enqueued在apropriate队列为处理器处理这个包。如果排队积压充满包跌落在这个地方。后该enqueuing新光银行接收softinterrupt其标志是为执行途经包括/ Linux的/ interrupt.h : __cpu_raise_softirq ( ) 。 中断处理程序的指示牌以及所有中断是reenabled 。 2.2网络收发softirq 现在,我们遇到的一大变化介于2.2和2.4 :整个网络协议栈不再是一个自下而上的一半,但softirq 。 softirqs有重大的优势,他们可能会遇到不止一个CPU同时进行。波黑的人,保证只运行于一个CPU上一段时间。 我们的网络得到softirq是注册网/核心/ dev.c : net_init ( )使用功能内核/ softirq.c : open_softirq ( )所提供的softirq子系统。 进一步的处理,我们的包是在网络接收softirq ( net_rx_softirq ) ,即所谓的从内核/ softirq.c : do_softirq ( ) 。 do_softirq ( )本身就是所谓的由3个名额的内核: 从arch/i386/kernel/irq.c : do_irq ( ) ,这是通用的IRQ处理程序 从arch/i386/kernel/entry.s万一内核刚刚回来,从syscall 里面主要过程调度内核/ sched.c :附表( ) 因此,如果执行的通行证之一,这点, do_softirq ( )被调用,它能够测net_rx_softirq标志着电话网/核心/ dev.c : net_rx_action ( ) 。这里sbk是dequeued从这个CPU的接收队列和事后处理向apropriate包处理。在案件的IPv4 ,这是IPv4的数据包处理机制。 2.3 IPv4的数据包处理 该IP数据包的处理程序是经注册网/核心/ dev.c : dev_add_pack ( )所谓从net/ipv4/ip_output.c : ip_init ( ) 。 在IPv4的数据包处理功能,是net/ipv4/ip_input.c : ip_rcv ( ) 。经过初步检查(如数据包的是这主, … … ) IP校验的计算方法。额外的检查,这样做对的长度和IP协议版本4 。 每包不上其中一个最理智的检查,是减少在这一点上。 如果包通过测试,我们决定赔偿的规模,该IP包和压缩新光银行,以防运输中已附在一些填料。 现在这是第一次,其中的Netfilter的鱼钩是所谓的。 Netfilter的提供了一个generict和抽象的接口标准路由代码。这是目前用于包过滤,损坏, NAT和排队包,以使用者。为进一步提到,看到我的会议文件'的netfilter子系统在Linux 2.4 '或其中之一rustys不可靠指南,即Netfilter的黑客指南。 成功后遍历的netfilter钩子, net/ipv4/ipv_input.c : ip_rcv_finish ( )被调用。 内ip_rcv_finish ( ) ,数据包的目的地是取决于通话路由功能net/ipv4/route.c : ip_route_input ( ) 。此外,如果我们的IP包的IP选项,他们是加工。根据路由作出的决定net/ipv4/route.c : ip_route_input_slow ( ) ,征途上我们的包继续在下列情形之一的职务: net/ipv4/ip_input.c : ip_local_deliver ( ) 数据包的目的地是本地的,我们已处理了第4层协议,并通过它以一个使用者的进程。 net/ipv4/ip_forward.c : ip_forward ( ) 数据包的目的地是不是地方,我们要转发给另一个网络 net/ipv4/route.c : ip_error ( ) 发生错误,我们无法找到一个apropriate路由表条目这个包。 net/ipv4/ipmr.c : ip_mr_input ( ) 这是一个组播包,我们必须做一些组播路由。 3 。包转发到其他装置 如果路由决定这包已被转交给另一设备,功能net/ipv4/ip_forward.c : ip_forward ( )被调用。 第一位的任务,这一职能是检查IP报头的对焦TTL 。如果是< = 1我们放下包,并返回一个ICMP的时间超过讯息给寄件人。 我们入住头的tailroom如果我们有足够tailroom为目的地设备的链路层头和扩大新光银行,如果必要的。 明年这款是decremented逐一阐述。 如果我们的新的数据包大于的MTU的目的地装置和不片段位在IP头的是一套,我们放下包,并发送一份ICMP的frag需要讯息给寄件人。 最后,现在是时候致电另一之一的netfilter钩-这一次是n f_ip_forward钩。 假定该Netfilter的鱼钩是寄回nf_accept判决,功能net/ipv4/ip_forward.c : ip_forward_finish ( ) ,是下一步我们包的征程。 ip_forward_finish ( )本身检查,如果我们需要设置任何其它选项,在IP报头,并已ip_optfixme了这种做法。事后,它呼吁包括/网/ ip.h : ip_send ( ) 。 如果我们需要一些支离破碎的现象,修正我: ip_fragment得到所谓的,否则,我们将继续在net/ipv4/ip_forward : ip_finish_output ( ) 。 ip_finish_output ( )又是否什么都没有超过呼唤Netfilter的postrouting钩nf_ip_post_routing并呼吁ip_finish_output2 ( )成功穿越这一厄运。 ip_finish_output2 ( )呼吁prepends硬件(链路层)头,以我们的新光银行,并呼吁net/ipv4/ip_output.c : ip_output ( ) 。
pizinanren 于 2008-03-04 20:47:58发表:
因为我在学习这方面的知识,英文看不懂,还是恳求高手能把翻译做的好一些,方便学习.
谢谢了
pizinanren 于 2008-03-04 19:57:28发表:
尽管不太通顺,还是谢谢了
Magnate 于 2008-03-04 13:05:16发表:
这个文件描述了旅途的一个网络包内的Linux内核2.4.x.这有了很大的改变,因为2.2 ,因为在全球范围内系列化上下半段是被遗弃在支持这一新的softirq制度。
1 。前言
我要为借口,为我的无知,但这项文件有强烈的重点,对"违约案" : x86架构和IP数据包获得转交。
我绝对没有内核大师和所提供的资料,这份文件可能有错误。所以不要期待太多,我会永远欣赏你的意见和错误修正。
2 。接到包
2.1接收中断
如果网卡收到一个以太网帧以配合当地的MAC地址或者是一个linklayer播出,它的问题,一个中断。该网络驱动器,为这个特殊卡处理中断,读取数据包的数据通过DMA的/条/无论到内存。然后分配新光银行,并要求一个函数的与协议无关的设备支持套路:网/核心/ dev.c : netif_rx (新光银行) 。
如果驾驶员没有已经戳了新光银行,它是timestamped现在。事后新光银行获得enqueued在apropriate队列为处理器处理这个包。如果排队积压充满包跌落在这个地方。后该enqueuing新光银行接收softinterrupt其标志是为执行途经包括/ Linux的/ interrupt.h : __cpu_raise_softirq ( ) 。
中断处理程序的指示牌以及所有中断是reenabled 。
2.2网络收发softirq
现在,我们遇到的一大变化介于2.2和2.4 :整个网络协议栈不再是一个自下而上的一半,但softirq 。 softirqs有重大的优势,他们可能会遇到不止一个CPU同时进行。波黑的人,保证只运行于一个CPU上一段时间。
我们的网络得到softirq是注册网/核心/ dev.c : net_init ( )使用功能内核/ softirq.c : open_softirq ( )所提供的softirq子系统。
进一步的处理,我们的包是在网络接收softirq ( net_rx_softirq ) ,即所谓的从内核/ softirq.c : do_softirq ( ) 。 do_softirq ( )本身就是所谓的由3个名额的内核:
从arch/i386/kernel/irq.c : do_irq ( ) ,这是通用的IRQ处理程序
从arch/i386/kernel/entry.s万一内核刚刚回来,从syscall
里面主要过程调度内核/ sched.c :附表( )
因此,如果执行的通行证之一,这点, do_softirq ( )被调用,它能够测net_rx_softirq标志着电话网/核心/ dev.c : net_rx_action ( ) 。这里sbk是dequeued从这个CPU的接收队列和事后处理向apropriate包处理。在案件的IPv4 ,这是IPv4的数据包处理机制。
2.3 IPv4的数据包处理
该IP数据包的处理程序是经注册网/核心/ dev.c : dev_add_pack ( )所谓从net/ipv4/ip_output.c : ip_init ( ) 。
在IPv4的数据包处理功能,是net/ipv4/ip_input.c : ip_rcv ( ) 。经过初步检查(如数据包的是这主, … … ) IP校验的计算方法。额外的检查,这样做对的长度和IP协议版本4 。
每包不上其中一个最理智的检查,是减少在这一点上。
如果包通过测试,我们决定赔偿的规模,该IP包和压缩新光银行,以防运输中已附在一些填料。
现在这是第一次,其中的Netfilter的鱼钩是所谓的。
Netfilter的提供了一个generict和抽象的接口标准路由代码。这是目前用于包过滤,损坏, NAT和排队包,以使用者。为进一步提到,看到我的会议文件'的netfilter子系统在Linux 2.4 '或其中之一rustys不可靠指南,即Netfilter的黑客指南。
成功后遍历的netfilter钩子, net/ipv4/ipv_input.c : ip_rcv_finish ( )被调用。
内ip_rcv_finish ( ) ,数据包的目的地是取决于通话路由功能net/ipv4/route.c : ip_route_input ( ) 。此外,如果我们的IP包的IP选项,他们是加工。根据路由作出的决定net/ipv4/route.c : ip_route_input_slow ( ) ,征途上我们的包继续在下列情形之一的职务:
net/ipv4/ip_input.c : ip_local_deliver ( )
数据包的目的地是本地的,我们已处理了第4层协议,并通过它以一个使用者的进程。
net/ipv4/ip_forward.c : ip_forward ( )
数据包的目的地是不是地方,我们要转发给另一个网络
net/ipv4/route.c : ip_error ( )
发生错误,我们无法找到一个apropriate路由表条目这个包。
net/ipv4/ipmr.c : ip_mr_input ( )
这是一个组播包,我们必须做一些组播路由。
3 。包转发到其他装置
如果路由决定这包已被转交给另一设备,功能net/ipv4/ip_forward.c : ip_forward ( )被调用。
第一位的任务,这一职能是检查IP报头的对焦TTL 。如果是< = 1我们放下包,并返回一个ICMP的时间超过讯息给寄件人。
我们入住头的tailroom如果我们有足够tailroom为目的地设备的链路层头和扩大新光银行,如果必要的。
明年这款是decremented逐一阐述。
如果我们的新的数据包大于的MTU的目的地装置和不片段位在IP头的是一套,我们放下包,并发送一份ICMP的frag需要讯息给寄件人。
最后,现在是时候致电另一之一的netfilter钩-这一次是n f_ip_forward钩。
假定该Netfilter的鱼钩是寄回nf_accept判决,功能net/ipv4/ip_forward.c : ip_forward_finish ( ) ,是下一步我们包的征程。
ip_forward_finish ( )本身检查,如果我们需要设置任何其它选项,在IP报头,并已ip_optfixme了这种做法。事后,它呼吁包括/网/ ip.h : ip_send ( ) 。
如果我们需要一些支离破碎的现象,修正我: ip_fragment得到所谓的,否则,我们将继续在net/ipv4/ip_forward : ip_finish_output ( ) 。
ip_finish_output ( )又是否什么都没有超过呼唤Netfilter的postrouting钩nf_ip_post_routing并呼吁ip_finish_output2 ( )成功穿越这一厄运。
ip_finish_output2 ( )呼吁prepends硬件(链路层)头,以我们的新光银行,并呼吁net/ipv4/ip_output.c : ip_output ( ) 。