当前位置: 首页 > news >正文

企业网站官网模板网站首页制作

企业网站官网模板,网站首页制作,wordpress post id清理,百度app智能小程序当一些网络包到来触发了中断#xff0c;内核处理完这些网络包之后#xff0c;我们可以先进入主动轮询 poll 网卡的方式#xff0c;主动去接收到来的网络包。如果一直有#xff0c;就一直处理#xff0c;等处理告一段落#xff0c;就返回干其他的事情。当再有下一批网络包…当一些网络包到来触发了中断内核处理完这些网络包之后我们可以先进入主动轮询 poll 网卡的方式主动去接收到来的网络包。如果一直有就一直处理等处理告一段落就返回干其他的事情。当再有下一批网络包到来的时候再中断再轮询 poll。这样就会大大减少中断的数量提升网络处理的效率这种处理方式我们称为 NAPI。 在网卡驱动程序初始化的时候我们会调用 ixgb_init_module注册一个驱动 ixgb_driver并且调用它的 probe 函数 ixgb_probe。 在 ixgb_probe 中我们会创建一个 struct net_device 表示这个网络设备并且 netif_napi_add 函数为这个网络设备注册一个轮询 poll 函数 ixgb_clean将来一旦出现网络包的时候就是要通过它来轮询了。 当一个网卡被激活的时候我们会调用函数 ixgb_open-ixgb_up在这里面注册一个硬件的中断处理函数。 如果一个网络包到来触发了硬件中断就会调用 ixgb_intr这里面会调用 __napi_schedule。 __napi_schedule 是处于中断处理的关键部分在他被调用的时候中断是暂时关闭的但是处理网络包是个复杂的过程需要到延迟处理部分所以 ____napi_schedule 将当前设备放到 struct softnet_data 结构的 poll_list 里面说明在延迟处理部分可以接着处理这个 poll_list 里面的网络设备。 然后 ____napi_schedule 触发一个软中断 NET_RX_SOFTIRQ通过软中断触发中断处理的延迟处理部分也是常用的手段。 在 net_rx_action 中会得到 struct softnet_data 结构这个结构在发送的时候我们也遇到过。当时它的 output_queue 用于网络包的发送这里的 poll_list 用于网络包的接收。 在 net_rx_action 中接下来是一个循环在 poll_list 里面取出网络包到达的设备然后调用 napi_poll 来轮询这些设备napi_poll 会调用最初设备初始化的时候注册的 poll 函数对于 ixgb_driver对应的函数是 ixgb_clean。 在网络设备的驱动层有一个用于接收网络包的 rx_ring。它是一个环从网卡硬件接收的包会放在这个环里面。这个环里面的 buffer_info[]是一个数组存放的是网络包的内容。i 和 j 是这个数组的下标在 ixgb_clean_rx_irq 里面的 while 循环中依次处理环里面的数据。在这里面我们看到了 i 和 j 加一之后如果超过了数组的大小就跳回下标 0就说明这是一个环。 ixgb_check_copybreak 函数将 buffer_info 里面的内容拷贝到 struct sk_buff *skb从而可以作为一个网络包进行后续的处理然后调用 netif_receive_skb。 从 netif_receive_skb 函数开始我们就进入了内核的网络协议栈。 接下来的调用链为netif_receive_skb-netif_receive_skb_internal-__netif_receive_skb-__netif_receive_skb_core。 在 __netif_receive_skb_core 中我们先是处理了二层的一些逻辑。例如对于 VLAN 的处理接下来要想办法交给第三层。 在网络包 struct sk_buff 里面二层的头里面有一个 protocol表示里面一层也即三层是什么协议。deliver_ptype_list_skb 在一个协议列表中逐个匹配。如果能够匹配到就返回。 网络协议栈的 IP 层从 ip_rcv 函数开始我们的处理逻辑就从二层到了三层IP 层。 在 ip_rcv 中得到 IP 头然后又遇到了我们见过多次的 NF_HOOK这次因为是接收网络包第一个 hook 点是 NF_INET_PRE_ROUTING也就是 iptables 的 PREROUTING 链。如果里面有规则则执行规则然后调用 ip_rcv_finish。 ip_rcv_finish 得到网络包对应的路由表然后调用 dst_input在 dst_input 中调用的是 struct rtable 的成员的 dst 的 input 函数。在 rt_dst_alloc 中我们可以看到input 函数指向的是 ip_local_deliver。 在 ip_local_deliver 函数中如果 IP 层进行了分段则进行重新的组合。接下来就是我们熟悉的 NF_HOOK。hook 点在 NF_INET_LOCAL_IN对应 iptables 里面的 INPUT 链。在经过 iptables 规则处理完毕后我们调用 ip_local_deliver_finish。 在 IP 头中有一个字段 protocol 用于指定里面一层的协议在这里应该是 TCP 协议。于是从 inet_protos 数组中找出 TCP 协议对应的处理函数。这个数组的定义如下里面的内容是 struct net_protocol。 在系统初始化的时候网络协议栈的初始化调用的是 inet_init它会调用 inet_add_protocol将 TCP 协议对应的处理函数 tcp_protocol、UDP 协议对应的处理函数 udp_protocol放到 inet_protos 数组中。 在上面的网络包的接收过程中会取出 TCP 协议对应的处理函数 tcp_protocol然后调用 handler 函数也即 tcp_v4_rcv 函数。 接收网络包的上半部分分以下几个层次。 硬件网卡接收到网络包之后通过 DMA 技术将网络包放入 Ring Buffer。硬件网卡通过中断通知 CPU 新的网络包的到来。网卡驱动程序会注册中断处理函数 ixgb_intr。中断处理函数处理完需要暂时屏蔽中断的核心流程之后通过软中断 NET_RX_SOFTIRQ 触发接下来的处理过程。NET_RX_SOFTIRQ 软中断处理函数 net_rx_actionnet_rx_action 会调用 napi_poll进而调用 ixgb_clean_rx_irq从 Ring Buffer 中读取数据到内核 struct sk_buff。调用 netif_receive_skb 进入内核网络协议栈进行一些关于 VLAN 的二层逻辑处理后调用 ip_rcv 进入三层 IP 层。在 IP 层会处理 iptables 规则然后调用 ip_local_deliver交给更上层 TCP 层。在 TCP 层调用 tcp_v4_rcv。 此文章为11月Day25学习笔记内容来源于极客时间《趣谈Linux操作系统》推荐该课程。
http://www.hkea.cn/news/14343291/

相关文章:

  • 网站建设毕业设计综述百度识图软件
  • 合江做网站软装设计专业
  • 好的网站建设启示完整的软件开发流程
  • seo工具助力集群式网站升级连云港网站建设 连云港网站制作
  • 营销型网站如何制作一个网站多大
  • 湖南网站建设设计网站开发手机自适应
  • 网站域名收费吗asp网站模板安装
  • 烟台高端网站开发微营销软件免费下载
  • 网站建设调研报告高仿微博wordpress
  • 网站色彩搭配营销型网站建设的五力原则
  • 免费注册网站怎么做链接网站开发的账务处理
  • 鞍山网站制作三牛网络推广
  • 公司网站维护主要做什么深圳电商页面设计那家好
  • 网站的视频网站seo策划方案案例分析
  • 营销型网站seo公司网站域名如何申请
  • 网站搭建策划书自己做网站的网址
  • 我的世界是怎么做的视频网站旅游做攻略网站好
  • 无锡网站制作电话多少深圳市龙华区民治街道
  • 代码编辑器做热点什么网站好网站开发主要技术路线
  • 上海平台网站建设哪家有学做网站要代码
  • 在网站中搜索关键字建立网站的技术
  • 苏州网站建设品牌公司麻豆秋白色蕾丝半身裙
  • 企业网站管理系统c郑州企业健康码二维码怎么申请
  • 电子商务网站建设的首要问题搜索网站排名优化
  • 大画册设计网站网页设计教程多少钱
  • 建设我们的网站教案租车网站模板下载
  • 网站建设新闻asp网站 证书
  • 建各企业网站多少钱网站备案就是合法的
  • 延边省建设局网站官网中国建设人才专业服务网
  • 网站建设的要点网站免费创建