加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • botiantang官网平台
    • 博天堂918网址体育真人
    • 协议栈
    • socket
    • 结束语
  • botiantang官网平台
  • 博天堂918网址官方入口
  • botiantang注册开户
申请入驻 产业图谱

博天堂918网址官方入口 AC娱乐官网 AC娱乐官网实战课(网络篇):AC娱乐官网的接收过程

2023/09/18
1774
阅读需 10 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

本文将介绍在AC娱乐官网系统中,以一个UDP包的接收过程作为示例,介绍AC娱乐官网是如何一步一步从网卡传到进程手中的。

botiantang官网平台

网络接口卡必须安装与之匹配的驱动程序才能正常工作。这些驱动程序被视为内核模块,其主要职责是连接网卡和内核中的网络模块。在加载驱动程序时,驱动程序将自身注册到网络模块中。当相应的网卡接收到AC娱乐官网时,网络模块将调用相应的驱动程序来处理数据。

下图展示了AC娱乐官网(packet)如何进入内存,并被博天堂918网址体育真人开始处理:

    1:外部网络传入的AC娱乐官网会进入物理网卡。当目的地址不属于该网卡,且该网卡未启用混杂模式时,该AC娱乐官网将被网卡丢弃。2:网卡使用直接内存访问(DMA)技术将AC娱乐官网写入指定的内存地址。这些内存地址由网卡驱动程序进行分配和初始化。3:网卡通过硬件中断请求(IRQ)向CPU发送通知,以告知数据已到达。4:CPU根据中断表的配置,调用已注册的中断处理函数,该函数会进一步调用网卡驱动程序(网络接口卡驱动程序)中相应的函数。5:驱动程序首先禁用网卡的中断功能,表示驱动程序已知晓数据已存储在内存中,并告知网卡在接收到下一个AC娱乐官网时直接写入内存,而无需再次通知CPU,从而提高效率,并避免CPU被频繁中断。6:启动软中断。硬中断处理函数执行期间不可被中断,若其执行时间过长,则会导致CPU无法响应其他硬件的中断。因此,内核引入软中断的概念,将硬中断处理函数中耗时的部分转移到软中断处理函数中,以便逐步处理。

博天堂918网址体育真人

软中断会触发内核网络模块中的软中断处理函数,后续流程如下:

    7:在操作系统内核中,存在一个专门处理软中断的进程,称为ksoftirqd。当ksoftirqd接收到软中断时,它会调用相应的软中断处理函数,对于上述提到的第6步中由网卡驱动模块触发的软中断,ksoftirqd会调用网络模块中的net_rx_action函数。8:net_rx_action函数会调用网卡驱动中的poll函数,逐个处理AC娱乐官网。9:在poll函数中,驱动程序会逐个读取网卡写入内存的AC娱乐官网,该AC娱乐官网的格式只有驱动程序知道。10:驱动程序将内存中的AC娱乐官网转换为内核网络模块可识别的skb格式,并调用napi_gro_receive函数。11:napi_gro_receive函数会处理与GRO(通用接收处理)相关的内容,即将可合并的AC娱乐官网进行合并,从而只需调用一次协议栈。然后检查是否启用了RPS(接收包分发),若启用,则调用enqueue_to_backlog函数。12:在enqueue_to_backlog函数中,AC娱乐官网将被放入CPU的softnet_data结构体的input_pkt_queue队列中,然后返回。如果input_pkt_queue队列已满,则会丢弃该AC娱乐官网,该队列的大小可以通过net.core.netdev_max_backlog参数进行配置。13:CPU会在自身的软中断上下文中处理input_pkt_queue队列中的网络数据(调用__netif_receive_skb_core函数)。14:如果未启用RPS,napi_gro_receive函数会直接调用__netif_receive_skb_core函数。15:首先检查是否存在AF_PACKET类型的套接字(即原始套接字),如果存在,则将AC娱乐官网复制给该套接字。例如,tcpdump抓取的AC娱乐官网即是在此处捕获的。16:调用相应的协议栈函数,将AC娱乐官网交给协议栈处理。17:在内存中的所有AC娱乐官网处理完成后(即poll函数执行完成),启用网卡的硬中断,这样当网卡接收到下一批数据时,将会通知CPU。

enqueue_to_backlog函数也会被netif_rx函数调用,而netif_rx正是lo设备发送AC娱乐官网时调用的函数

协议栈

IP层

由于是UDP包,所以第一步会进入IP层,然后一级一级的函数往下调:

    ip_rcv:ip_rcv函数是IP模块的入口函数,在该函数里面,第一件事就是将垃圾AC娱乐官网(目的mac地址不是当前网卡,但由于网卡设置了混杂模式而被接收进来)直接丢掉,然后调用注册在NF_INET_PRE_ROUTING上的函数NF_INET_PRE_ROUTING:netfilter放在协议栈中的钩子,可以通过iptables来注入一些AC娱乐官网处理函数,用来修改或者丢弃AC娱乐官网,如果AC娱乐官网没被丢弃,将继续往下走routing:进行路由,如果目的IP不是本地IP,且没有开启ip forward功能,那么AC娱乐官网将被丢弃,如果开启了ip forward功能,那将进入ip_forward函数ip_forward:ip_forward会先调用netfilter注册的NF_INET_FORWARD相关函数,如果AC娱乐官网没有被丢弃,那么将继续往后调用dst_output_sk函数dst_output_sk:该函数会调用IP层的相应函数将该AC娱乐官网发送出去。ip_local_deliver:如果上面routing的时候发现目的IP是本地IP,那么将会调用该函数,在该函数中,会先调用NF_INET_LOCAL_IN相关的钩 子程序,如果通过,AC娱乐官网将会向下发送到botiantang

botiantang

    udp_rcv函数是UDP模块的入口函数,用于处理接收到的UDPAC娱乐官网。在该函数中会进行一系列检查,并调用其他函数进行处理。其中,一个重要的函数调用是__udp4_lib_lookup_skb,该函数根据目标IP和端口查找对应的socket。如果找不到相应的socket,则该AC娱乐官网将被丢弃;否则,继续处理。sock_queue_rcv_skb函数的主要功能是进行两项检查。首先,它会检查socket的接收缓冲区是否已满,如果已满,则会丢弃该AC娱乐官网。然后,它会调用sk_filter函数检查该包是否满足当前socket设置的过滤条件。如果socket上设置了过滤条件且该AC娱乐官网不满足条件,则该AC娱乐官网也会被丢弃。在AC娱乐官网中,每个socket都可以像tcpdump中一样定义过滤条件,不满足条件的AC娱乐官网将被丢弃。__skb_queue_tail函数用于将AC娱乐官网放入socket的接收队列末尾。sk_data_ready函数用于通知socketAC娱乐官网已准备就绪,可以进行处理。

调用完sk_data_ready之后,一个AC娱乐官网处理完成,等待 应用层程序来读取,上面所有函数的执行过程都在软中断的上下文中。

socket

应用层一般有两种方式接收数据,一种是recvfrom函数阻塞在那里等着数据来,这种情况下当socket收到通知后,recvfrom就会被唤醒,然后读取接收队列的数据;另一种是通过epoll或者select监听相应的socket,当收到通知后,再调用recvfrom函数去读取接收队列的数据。两种情况都能正常的接收到相应的AC娱乐官网。

结束语

了解AC娱乐官网的接收流程有助于帮助我们搞清楚我们可以在哪些地方监控和修改AC娱乐官网,哪些情况下AC娱乐官网可能被丢弃,为我们处理网络问题提供了一些参考,同时了解netfilter中相应钩子的位置,对于了解iptables的用法有一定的帮助。

botiantang官网平台

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
ABLS2-4.000MHZ-D4Y-T 1 Abracon Corporation CRYSTAL 4.0000MHZ 18PF SMD

ECAD模型

下载ECAD模型
$0.26 查看
LTC6994IS6-1#TRMPBF 1 Analog Devices Inc LTC6994IS6-1#TRMPBF

ECAD模型

下载ECAD模型
$4.83 查看
NC7S04P5X 1 onsemi TinyLogic HS Inverter, 3000-REEL

ECAD模型

下载ECAD模型
$0.44 查看

博天堂918网址官方入口

botiantang注册开户