skb
  • 2024-09-18接收网络包的过程——从硬件网卡解析到IP层
    当一些网络包到来触发了中断,内核处理完这些网络包之后,我们可以先进入主动轮询poll网卡的方式,主动去接收到来的网络包。如果一直有,就一直处理,等处理告一段落,就返回干其他的事情。当再有下一批网络包到来的时候,再中断,再轮询poll。这样就会大大减少中断的数量,提升网络处理的效率,这
  • 2024-08-25Linux 内核源码分析---NIC 数据包接收与发送
    网络接口控制器(networkinterfacecontroller,NIC),又称网络接口控制器,网络适配器(networkadapter),网卡(networkinterfacecard),或局域网接收器(LANadapter),是一块被设计用来允许计算机在计算机网络上进行通信的计算机硬件。由于其拥有MAC地址,因此属于OSI模型的第2层。它使
  • 2024-08-24第12章 网络 (2)
    目录12.5网络命名空间12.6套接字缓冲区12.6.1使用sk_buff管理数据12.6.2管理套接字缓冲区数据本专栏文章将有70篇左右,欢迎+关注,查看后续文章。12.5网络命名空间一个网卡可能只在某个特定命名空间可见。struct  net:        表示一个网络命名空间,
  • 2024-07-29eBPF skb字段pkt_type
    pkt_type取值范围https://elixir.bootlin.com/linux/v6.5/source/include/uapi/linux/if_packet.h#L33skb中pkt_type值,由网卡驱动层函数eth_type_trans,在tcingress之前,根据目的mac决定。https://elixir.bootlin.com/linux/v6.5/source/net/ethernet/eth.c#L155如果目的mac
  • 2024-06-20不为人知的网络编程(十六):深入分析与解决TCP的RST经典异常问题
    本文由腾讯技术kernel分享,原题“TCP经典异常问题探讨与解决”,下文进行了排版和内容优化等。1、引言TCP的经典异常问题无非就是丢包和连接中断,在这里我打算与各位聊一聊TCP的RST到底是什么?现网中的RST问题有哪些模样?我们如何去应对和解决?本文将从TCP的RST技术原理、排查手段、
  • 2024-06-11【Linux驱动设备开发详解】14.Linux网络设备架构
    1.Linux网络设备驱动的结构与字符设备和块设备不同,网络设备并不对应于/dev目录下的文件,应用程序最终使用套接字完成与网络设备的接口。Linux系统对网络设备驱动定义了4个层次,这4个层次为:网络协议接口层:向网络层协议提供同一的数据包收发接口,无论是IP还是ARP,都是通过dev_queue_
  • 2024-06-01free batches of packets in tcp_prune_ofo_queue()
      之前在做waf并发压力测试的时候,遇到一个问题,仪器测试正常,但是真实环境测试超时丢包的验证的时候,并发cps都很低。查看cat/proc/net/netstat发现OfoPruned对应值很大,看内核代码才发现,内存不够或rmem超过sk_rcvbuf,就会私房ofo队列,还是全部释放。当时将全部释放改为释放最高的5
  • 2024-05-31udp的收发包的思考
      在测试radius性能时,想到一个问题,以前tcp报文在ip层处理时,涉及到路由查找,对于tcp协议报文;skb中没有路由缓存,没有关联的sock;且非分片报文;ip_early_demux设置为true;则调用early_demux函数提前在IP层做established状态的sock查找,并负责将sock结构体成员sk_rx_dst的路由缓存赋值
  • 2024-05-09mac80211子系统学习-rx部分
    mac80211子系统学习-rx部分wifi网卡架构Linux将wifi芯片分成了fullmac和softmac两种类型,两种类型的区别在于mlme被driver+hardware实现还是被kernel实现,用wirelesswiki上的话来讲:SoftMACisatermusedtodescribeatypeofWNICwheretheMLMEisexpectedtobema
  • 2024-04-14Linux内核协议栈skb成员
    struct__sk_buff{ __u32len; __u32pkt_type; __u32mark; __u32queue_mapping; __u32protocol; __u32vlan_present; __u32vlan_tci; __u32vlan_proto; __u32priority; __u32ingress_ifindex; __u32ifindex; __u32tc_index; __u32cb[5]; __u32has
  • 2024-04-053.6 ICMPv6 报文接收和发送
    3.6ICMPv6报文接收和发送1.ICMPv6数据包接收流程当有IP报头协议是58的数据包到来之后,会调用icmpv6_rcv()进行处理。数据包的处理流程在上面的流程图中说明的非常清楚,下面就来看一下代码是怎么实现的。staticinticmpv6_rcv(structsk_buff*skb){ structnet*net=de
  • 2024-04-053.7 ICMPv6 数据包处理
    目录3.7ICMPv6数据包处理1.echo请求和应答2.错误报文处理3.发送错误报文3.1超时差错3.2目的地不可达差错3.3需要分段差错3.4参数异常差错3.7ICMPv6数据包处理1.echo请求和应答处理echo请求:icmpv6_echo_reply()处理echo回应:ping_rcv()staticvoidicmpv6_ec
  • 2024-04-053.3 ICMPv4 数据包的接收和发送
    目录3.3ICMPv4数据包的接收和发送1.接收ICMPv4数据包2.ICMPv4报文处理2.1ping请求和应答2.2时间戳请求与应答2.3地址掩码请求和回应2.4消息不可达信息的回应与请求2.4.1消息不可达信息的处理2.4.2消息不可达信息的发送情况2.5网关发出的重定向2.6时间戳超时信息3.IC
  • 2024-03-24Linux收到一个网络包是怎么处理的?
    目录摘要​编辑1从网卡开始2硬中断,有点短2.1GameOver3接力——软中断3.1NET_RX_SOFTIRQ软中断的开始3.2数据包到了协议栈3.3网络层处理3.4传输层处理4应用层的处理5总结摘要    一个网络包的接收始于网卡,经层层协议栈的解析,终于应用层。
  • 2024-01-30收包
     整体流程图三、网络接口层3.1概述数据包在本层主要处理流程有五:网卡收到数据包,DMA方式写入RingBuffer,发出硬中断;内核收到硬中断,NAPI加入本CPU的轮询列表,发出软中断;内核收到软中断,轮询NAPI并执行poll函数从RingBuffer取数据;GRO操作(默认开启),合并多个数
  • 2024-01-20TCP三次握手源码分析(服务端接收ACK&TCP连接建立完成)
    内核版本:Linux3.10内核源码地址:https://elixir.bootlin.com/linux/v3.10/source(包含各个版本内核源码,且网页可全局搜索函数)《TCP三次握手源码分析(客户端发送SYN)》《TCP三次握手源码分析(服务端接收SYN以及发送SYN+ACK)》《TCP三次握手源码分析(客户端接收SYN+ACK以及发送ACK
  • 2023-12-25Linux收包之数据L3层是如何流转的
    一、环境说明内核版本:Linux3.10内核源码地址:https://elixir.bootlin.com/linux/v3.10/source(包含各个版本内核源码,且网页可全局搜索函数)网卡:Intel的igb网卡网卡驱动源码目录:drivers/net/ethernet/intel/igb/二、L3层概览 本章主要介绍收包的流程,在L3层是如何处理的。
  • 2023-11-27接收网络包的过程——从硬件网卡解析到IP层
    当一些网络包到来触发了中断,内核处理完这些网络包之后,我们可以先进入主动轮询poll网卡的方式,主动去接收到来的网络包。如果一直有,就一直处理,等处理告一段落,就返回干其他的事情。当再有下一批网络包到来的时候,再中断,再轮询poll。这样就会大大减少中断的数量,提升网络处理的效率,这
  • 2023-11-09btmon获取hci数据流程
    btmon获取hci数据流程背景最近在看蓝牙相关的驱动代码,追到hci接收数据处理函数hci_rx_work()(net/bluetooth/hci_core.c),瞄到下面一段代码:C...while((skb=skb_dequeue(&hdev->rx_q))){/*Sendcopytomonitor*/hci_send_to_monitor(hdev,skb);...
  • 2023-06-01lINUX iCmp协议
    ICMP是(InternetControlMessageProtocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的
  • 2023-06-01发送IP封包到高层协议
    intip_local_deliver(structsk_buff*skb){/**ReassembleIPfragments.*/structnet*net=dev_net(skb->dev);if(ip_is_fragment(ip_hdr(skb))){if(ip_defrag(net,skb,IP_DEFRAG_LOCAL_DELIVER))return0;}returnNF_HOOK
  • 2023-05-25tracee源码初探(二)TCP处理流程
    handleEvents(ctx),processNetCaptureEvents(若开启Capture.Net)协程一直常驻,并等待netCapChannel消息通知.当有事件传过来时,程序先看该事件是否需要处理,也就是说tracee是上报所有事件的,然后过滤来处理事件。在tracee.go中的initBPF函数里t.bpfModule.InitPerfBuf( "net_cap_
  • 2023-05-08UDP内核发包流程
    背景工作中遇到客户反馈,上层应用UDP固定间隔100ms发包,但本地tcpdump抓包存在波动,有的数据包之间间隔107ms甚至更多,以此重新梳理了下udp的发送流程。udp发包流程udp_sendmsgUDPcorking是一项优化技术,允许内核将多次数据累积成单个数据报发送。在用户程序中有两种方法可以启
  • 2023-04-06Unable to handle kernel NULL pointer dereference at virtual address 分析
    引用:https://blog.csdn.net/agave7/article/details/119875023虽然问题不一样,但是分析问题的方法是一致的。UnabletohandlekernelNULLpointerdereferenceatvirtualaddress分析现象[136.847780]br-lan:receivedpacketoneth0.1withownaddressassourceadd
  • 2023-02-21内核通用xdp
    目前想做个功能,一些简单转发就在内核中直接转发走,所以想到了XDP,但是呢,部分网卡驱动不支持XDP程序,能不能在netif_recv收包接口或者驱动的hook钩子挂载一个通用接口来处理XD