美文网首页转载部分
48 | 接收网络包(下)

48 | 接收网络包(下)

作者: AndyWei123 | 来源:发表于2020-05-25 00:28 被阅读0次
image.png
  • 硬件网卡接收到网络包之后,通过 DMA 技术,将网络包放入 Ring Buffer;
  • 硬件网卡通过中断通知 CPU 新的网络包的到来;
  • 网卡驱动程序会注册中断处理函数 ixgb_intr;
  • 中断处理函数处理完需要暂时屏蔽中断的核心流程之后,通过软中断 NET_RX_SOFTIRQ 触发接下来的处理过程;
  • NET_RX_SOFTIRQ 软中断处理函数 net_rx_action,net_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,这里面有三个队列需要处理,如果当前的 Socket 不是正在被读;取,则放入 backlog 队列,如果正在被读取,不需要很实时的话,则放入 prequeue 队列,其他情况调用 tcp_v4_do_rcv;
  • 在 tcp_v4_do_rcv 中,如果是处于 TCP_ESTABLISHED 状态,调用 tcp_rcv_established,其他的状态,调用 tcp_rcv_state_process;
  • 在 tcp_rcv_established 中,调用 tcp_data_queue,如果序列号能够接的上,则放入 sk_receive_queue 队列;
  • 如果序列号接不上,则暂时放入 out_of_order_queue 队列,等序列号能够接上的时候,再放入 sk_receive_queue 队列。至此内核接收网络包的过程到此结束,接下来就是用户态读取网络包的过程,这个过程分成几个层次。
  • VFS 层:read 系统调用找到 struct file,根据里面的 file_operations 的定义,调用 sock_read_iter 函数。sock_read_iter 函数调用 sock_recvmsg 函数。
  • Socket 层:从 struct file 里面的 private_data 得到 struct socket,根据里面 ops 的定义,调用 inet_recvmsg 函数。
  • Sock 层:从 struct socket 里面的 sk 得到 struct sock,根据里面 sk_prot 的定义,调用 tcp_recvmsg 函数。
  • TCP 层:tcp_recvmsg 函数会依次读取 receive_queue 队列、prequeue 队列和 backlog 队列。

相关文章

  • 48 | 接收网络包(下)

    image.png 硬件网卡接收到网络包之后,通过 DMA 技术,将网络包放入 Ring Buffer; 硬件网卡...

  • 监控网络

    Linux 网络收发流程 网络包的接收 当一个网络帧到达网卡后,网卡会通过 DMA 方式,把这个网络包放到收包队列...

  • 47 | 接收网络包(上)

    image.png 硬件网卡接收到网络包之后,通过 DMA 技术,将网络包放入 Ring Buffer。 硬件网卡...

  • Charles抓包

    使用Charles抓包 概念 什么是抓包 抓包(packet capture)就是将网络传输发送与接收的数据包进行...

  • 第十二、十三单元 Charles

    一、抓包概述 1. 抓包概念 抓包是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安...

  • Windows下Charles安装使用

    一、抓包概述 1. 抓包概念 抓包是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安...

  • Charles

    一、抓包概述 1. 抓包概念 抓包是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安...

  • Charles

    一、抓包概述 1. 抓包概念 抓包是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安...

  • 如何抓取手机端和PC端的HTTP包(抓包工具简介)

    本文主要介绍HTTP抓包。 抓包是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全...

  • 手把手教您抓包【图解】

    什么是抓包 有的小伙伴还不知道抓包是什么吗?我百度了一下,抓包就是将网络传输发送与接收的数据包进行截获、重发、编辑...

网友评论

    本文标题:48 | 接收网络包(下)

    本文链接:https://www.haomeiwen.com/subject/zjfeahtx.html