基于linux的qos编程接口研究与分析(7)[完].docVIP

基于linux的qos编程接口研究与分析(7)[完].doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Linux的QoS编程接口研究与分析(7)[完] 第四章 Linux的QoS编程接口4.1 QoS 数据通道 全局的数据通道的略图见图4.1,灰色部分是 QoS:图 4.1 网络数据加工 数据包的处理过程是:Input Interface → Ingress Policing → Input Demultiplexing (判断分组是本地使用还是转发) → Forwarding → Output Queuing → Output Interface。入口的流量限制(Ingress Policing)和出口 的队列调度(Output Queuing)是由 Linux 核心的流量控制的代码实现的。入口 的流量限制(Ingress Policing)丢弃不符合规定的分组,确保进入的各个业务 流分组速率的上限,出口的队列调度(Output Queuing)依据配置实现分组的排 队、丢弃。 以下是分析Linux 2.4 的代码得出的数据通道,根据在图4.1中的位置,分为 Ingress policing的数据通道和 Output Queuing 的数据通路,一下分别阐述: 4.1.1 Ingress policing 的数据通道 Ingress policing 的 QoS 的部分是通过 HOOK 实现的。HOOK 是 Linux 实现 netfilter 的重要手段,数据从接收到转发得通路上有5个HOOK点①,每个 HOOK点有若干个挂钩处理函数: (typedef unsigned int nf_hookfn(unsigned int hooknum, struct sk_buff **skb, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *)); )。Ingress policing 用 的 是 NF_IP_PRE_ROUTING 这个 HOOK 点,其挂钩处理函数用的是 net/sched/sch_ingress.c ing_hook()。Ingress policing 的数据通道的略图,灰色部分是 QoS,黑色部分是 HOOK 的处理过程②:图 4.2 Ingress policing 的总概图 1其中,HOOK 点NF_IP_PRE_ROUTING:刚刚进入网络层的数据包通过此点(刚刚进行完版本号,校验和等检测),源地址转换在此点进行;NF_IP_LOCAL_IN:经路由查找后,送往本机的通过此检查点,INPUT 包过滤在此点进行; NF_IP_FORWARD:要转发的包通过此检测点,FORWORD 包过滤在此点进行;NF_IP_LOCAL_OUT:本机进程发出 的包通过此检测点,OUTPUT 包过滤在此点进行;NF_IP_POST_ROUTING:所有马上便要通过网络设备出去的 包通过此检测点,内置的目的地址转换功能(包括地址伪装)在此点进行 2以下数据通路是以 ipv4 为例,ipv6 类似图 4.3 Ingress policing 的数据通道的略图 netif_rx()- 数据接收队列队列- Bottom Half③ 程序中通过软中断调用 net_rx_action()将硬件层得到的数据传输到IP层- ip_rcv() #net/ipv4/ip_input.c 丢弃校验和不正确的ip包-> nf_hook_slow()#net/core/netfilter.c- nf_iterate()#net/core/netfilter.c- ing_hook() ④#net/sched/sch_ingress.c-> QoS:如果设置了 qdisc_ingress,则调用 ingress_dequeue()⑤,此处可以对流量进行限制#net/sched/sch_ingress.c-> ip_rcv_finish()#net/ipv4/ip_input.c(sch_ingress.c 的 enqueue()有限流制作用,然而 dequeue() 却是空函数。)-> 以下路由:ip_route_input() #net/ipv4/route.c- 如 果 转 发 ip_route_input_slow() #net/ipv4/route.c , 如 果 本 地 处 理 ip_route_input_mc() #net/ipv4/route.c 3 为了避免处理长中断服务程序的时候,关中时间过长,Linux 将中断服务程序一分为二,各称作 top half和 bottom half,前者读取来自设备的数据,保存到预定的缓冲区(队列),然后通知 bottom half 在适当的时候完成

文档评论(0)

134****7338 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档