最近要给团队做一个长期的内部分享,主题就是Linux内核中数据包的处理流程。 这几天抽空画了一部分流程图。...我本人对网卡驱动兴趣不大,但skb path又无法脱离网卡驱动,这里选择了Intel的e1000网卡驱动:原因有二,一是Intel网卡驱动是内核里面写得最清楚,可读性最高的;二是e1000是Intel里面比较简单的驱动
linux抓包命令是“tcpdump”,可以抓取流动在网卡上的数据包,可以将网络中传送的数据包的“头”完全截获下来提供分析;它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息...本教程操作环境:Red Hat Enterprise Linux 6.1系统、Dell G3电脑。 tcpdump命令是基于unix系统的命令行的数据报嗅探工具,可以抓取流动在网卡上的数据包。
内核——操作系统的内在核心 设备驱动程序 启动引导程序 命令行shell 其他种类的用户界面—-操作系统的外在表象 基本的文件管理工具和系统工具 Linux内核的组成 Linux内核源代码目录结构是什么...内存管理的主要作用是什么? 控制多个进程安全地共享主内存区域。当CPU提供内存管理单元(MMU)时,Linux 内存管理完成为每个进程进行虚拟内存到物理内存的转换。 进程的地址空间时怎样划分的?...只能通过系统调用和硬件中断完成 Linux内核的编译及加载 内核的配置系统由哪既部分组成? Makefile:分布在Linux 内核源代码中的Makefile,定义Linux 内核的编译规则。...MODULES 在X86 PC上从上电/复位到运行Linux 用户空间,进入与Linux 相关代码之前,会经历哪些阶段?...Linux下的C 编程 Linux中宏定义、变量名、函数名命名习惯是什么?
最近在做运维指标的梳理工作,其中一个就是Linux系统中的inode,这就想到了之前维护的某套系统,逻辑是将主机的报文,存储到本地文件,客户通过FTP下载这些文件,实现报文转发。...Linux中的inode作用到底是什么? 这篇文章介绍的很清晰,学习一下。...https://www.cnblogs.com/llife/p/11470668.html 操作系统的文件数据除了实际内容之外,通常含有非常多的属性,例如Linux操作系统的文件权限与文件属性。...而文件名存放在目录当中,但Linux系统内部不使用文件名,而是使用inode号码识别文件。对于系统来说文件名只是inode号码便于识别的别称。...一般情况下,每个inode号码对应一个文件名,但是Linux允许多个文件名指向同一个inode号码。
众所周知操作系统一直在不断的更新和发展,而在Linux驱动的架构上面也是不断的进步和完善。在早期的Linux内核和ARM架构中并没有采用设备树。...而随着智能终端设备,智能手机的发展,每年新出的ARM架构芯片都有数百款,从而导致Linux内核中的板机信息文件过多,使得Linux内核虚胖。...DTS、DTB和DTC 设备树源文件扩展名为.dts, 之前我跟着正点原子的教程时一直使用的是.dtb文件,这两个文件的关系是什么呢?...Linux内核会通过根节点的compoatible属性查看是否支持此设备,如果支持这个设备的话设备就会启动Linux内核。...,看看Linux内核是否支持。
Linux icmp 学习笔记 之一 icmp协议相关的格式 分类: linux 网络 2014-04-17 23:45 487人阅读 评论(0) 收藏 举报 Linux icmp...a) type类型 icmp类型目前有40个,下面几个是比较常用的,也是目前linux支持的类型。...4)、路由重定向(5)、时间戳请求与应答(13、14) 2、 主要的ICMP格式 a) 回显请求与应答 其中type值表示是一个回显请求或应答,code值为0,而identifier在linux...2、ping的工作原理是什么呢? 3、Traceroute的工作原理是什么呢?...2、ping的工作原理是什么呢? 3、Traceroute的工作原理是什么呢? 1、对于第一个问题,通过上一节的分析,应该有如下原因 a)加锁访问,保证同一时刻只能发送一个icmp报文。
,表示为接收中断,然后进入接收数据函数,通过netif_rx()将数据上交给上层 参考的内核中自带的网卡驱动:/drivers/net/cs89x0.c 如上图所示,通过获取的status标志来判断是什么中断...len字节 使用skb_put()函数后,其中sk_buff缓冲区变化: 6.写虚拟网卡驱动 本节便开始来写一个简单的虚拟网卡驱动,也就是说不需要硬件相关操作,所以就没有中断函数,我们通过linux的...linux/kernel.h> #include linux/types.h> #include linux/fcntl.h> #include linux/interrupt.h> #include...linux/ioport.h> #include linux/in.h> #include linux/skbuff.h> #include linux/slab.h> #include linux.../spinlock.h> #include linux/string.h> #include linux/init.h> #include linux/bitops.h> #include linux
查询一下 Linux 源代码中 __netif_receive_skb_core 函数的定义来确认一下丢包原因: static int __netif_receive_skb_core(struct sk_buff...skb_pfmemalloc_protocol(skb)) goto drop; ......drop: atomic_long_inc(&skb->dev->rx_dropped); kfree_skb(skb); /* Jamal, now you will not...此外,代码里能看到调用了 kfree_skb,侧面验证了 dropwatch 的工作原理。 如何判断我们问题中丢的包协议是什么呢,是时候表演真正的技术了, systemtap 出场: #!...从前面我们对 Linux 源代码的分析,skb_pfmemalloc_protocol 中支持的包 protocol 如下: #define ETH_P_ARP 0x0806 /* Address Resolution
在linux下,一个目录下放了很多文件,还有其他的子目录,但是目录的大小却总是只有4096字节。这是怎么回事呢?来听听北理工林思佳同学的分享。 先来看看这个目录: /usr ?...所以,linux的目录并没有存放文件本身。这是linux跟windows不同之处。 Linux的目录只是代表一个路径,存放的只是目录项。目录项由文件名和i-node number组成。...由此可以推出,inode和文件数据并不是在同一片地方的,这和linux的文件系统有关系。linux是先有路径,再有分区的,这个路径就像是一棵倒挂的树,由 / 根目录开始。...所以典型的linux分区如下: ? 也就可以推出在同一个分区内使用mv命令移动文件的时候,不管文件有多大,基本都是瞬间完成,因为只是目录项的改变而已,对于文件数据的位置并没有变化。
一:Linux和Windows是什么 1.Linux是什么 Linux 由Linus Torvalds模仿UNIX的操作系统,最初主要是用于PC(个人电脑)的操作系统,但现在被用于各种大小系统,如超级计算机...2.Windows是什么 Windows是Microsoft Corporation开发的操作系统。它广泛用于从家庭到企业。...二:Linux和Windows的区别是什么 主要区别就是: Linux内核是免费的,而且是开源的,许多Linux发行版基本上也是免费使用的。...Linux下的shell是什么? Shell俗称壳(用来区别于核 kernel),是一种“命令解析器”。...在linux/unix平台上,shell多半默认为Bash shell。
uevent helper是什么? 上文提到,在通过kmod向用户空间上报uevent的时候,会通过call_usermodehelper_exec直接执行用户空间的可执行文件。
本篇看图写话,主要是将下面这两张图结合在一起,看看当数据包从图1的vpeer1流出,流进veth1,再进入bridge时,data flow是什么样子的。这次二哥只聊数据流,不说细节。...Linux的软中断都是跑在专门的内核线程(ksoftirqd)中的,每个CPU核对应一个这样的内核线程。ISR还会在1.b处触发ksoftirqd/4运行。...poll()不断地从net_device的RingBuffer里面取出数据包,转成skb格式,并沿着网络设备子系统 -> IP协议层 -> TCP层一路调用内核里面的函数来分析和处理这个skb。...我把这个过程中每一层的入口函数都标示出来了,便于感兴趣的朋友自行到Linux内核代码搜索。...在网络设备层调用 __netif_receive_skb_core 函数时,skb不会进入协议栈,而是会进入网桥处理。 以上就是本文的全部内容。码字不易,喜欢本文的话请帮忙转发或点击“在看”。
TCP的经典异常问题无非就是丢包和连接中断,在这里我打算与各位聊一聊TCP的RST到底是什么?现网中的RST问题有哪些模样?我们如何去应对、解决?...分析:注意看上图最左边的第4和5这两行的时间间隔非常短,只有11微妙,11微妙是什么概念?查一次tcp socket的hash表可能都是几十微妙,这点时间完全可能会停顿在一个函数上。...机制,由此必然引入的不准确性导致并发的问题,我定位并分析出这个问题的并发的根因,由此提交了一份bugfix patch到社区被接收,链接:https://git.kernel.org/pub/scm/linux...-p tcp --port 1112 -j REDIRECT --to-ports 80 DNAT+netfilter的流程是什么样?.../ptrace.h> #include linux/tcp.h> #include linux/ip.h> #include #include <bcc
前言:昨天有个同学碰到发送udp包时收到destination unreachable的icmp包问题,本文简单介绍一下linux5.9中icmp包的处理流程。...(skb); ulen = ntohs(uh->len); // 源目的ip saddr = ip_hdr(skb)->saddr; daddr = ip_hdr(skb...(struct sk_buff *skb){ return skb_dst(skb)->input(skb);} input对应的是ip_local_deliver。...(skb, skb_network_header_len(skb)); rcu_read_lock(); ip_protocol_deliver_rcu(net, skb, ip_hdr...我们看看inet_protos是什么。
代码demo.c #include linux/module.h>#include linux/init.h>#include linux/moduleparam.h>#include linux.../module.h>#include linux/kernel.h>#include linux/slab.h> #include linux/fs.h>#include linux/errno.h...linux/version.h>#include linux/vmalloc.h>#include linux/delay.h>#include linux/ctype.h>#include...priv->stats.rx_dropped++; return; } skb_reserve(skb, 2); memcpy(skb_put(skb, len), buf..., len); skb->dev = dev; skb->protocol = eth_type_trans(skb, dev); // 不需要检查checksum skb-
虽然我自认为把原生 Linux 网络实现过程理解的还算不错了。但在看网络虚拟化相关的技术的时候,还是觉得不是很容易。 不过,飞哥有绝招,那就是先挑个软柿子来捏。...回想下在物理机组成的网络里,最基础,最简单的网络连接方式是什么?没错,那就是直接用一根交叉网线把两台电脑的网卡连起来。这样,一台机器发送数据,另外一台就能收到了。...在 Linux 下,我们可以通过使用 ip 命令创建一对儿 veth。其中 link 表示 link layer的意思,即链路层。...ndo_get_stats64 = veth_get_stats64, .ndo_set_mac_address = eth_mac_addr, }; 三、veth 网络通信过程 在 《25 张图,一万字,拆解 Linux...网络包发送过程》和《图解Linux网络包接收过程》两篇文章中,我们系统介绍了 Linux 网络包的收发过程。
1.3 安装对应版本的linux内核镜像 (1)目标机上安装对应版本的linux内核镜像 下载地址:http://security.ubuntu.com/ubuntu/pool/main/l/linux.../ (2)客户机上安装对应版本的带有符号表的linux内核镜像 下载地址:http://ddebs.ubuntu.com/pool/main/l/linux/,并且源码下载,建立软链接使得调试的时候能够跟踪源码...减少Linux 内核传输层和网络层的计算工作,将这些计算工作offload(卸载)到物理网卡。UDP协议层本身不对大的数据报进行分片,而是交给IP层去做。...六 影响版本 http://www.securityfocus.com/bid/100262 影响linux kernel 4.12.3之前的版本,在4.14的版本将移除UFO机制。...七 参考资料 Linux 内核源码剖析- TCP.IP 实现, 樊东东, 莫澜, 上册, 2011 A Guide to Kernel Exploitation Attacking the Core http
基本介绍 第三类是标准的网络接口Linux设备,本章介绍的内核,其余的交互网络接口描述 网络接口,必须使用特定的内核数据结构本身注册,与外部分组交换数据线打电话时准备 经常使用的文件上的网络接口操作是没有意义的...>) FDDI设备使用alloc_fddidev(linux/fddidevice.h>) 令牌环设备使用alloc_trdev(linux/trdevice.h>) register_netdev...该结构定义在linux/skbuff.h>中 传递经全hard_start_xmit的套接字缓冲区包括了物理数据包,并拥有完整的传输层数据包头 该传输函数仅仅运行了对数据包的一致性检查。...dev_kfree_skb_any(struct sk_buff *skb); 不使用接收中断 为了能提高Linux在宽带系统上的性能。...sk_buff *skb); void dev_kfree_skb(struct sk_buff *skb); void dev_kfree_skb_irq(struct sk_buff *skb);
Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能...在每个关键点上,有很多已经按照优先级预先注册了的回调函数(后面再说这些函数是什么,干什么用的。有些人喜欢把这些函数称为“钩子函数”,说的是同一个东西)埋伏在这些关键点,形成了一条链。...Netfilter使用NF_HOOK(include/linux/netfilter.h)宏在协议栈内部切入到Netfilter框架中。...在include/linux/socket.h中IP协议AF_INET(PF_INET)的序号为2,因此我们就可以得到TCP/IP协议族的钩子函数挂载点为: PRE_ROUTING: nf_hooks...小节:整个Linux内核中Netfilter框架的HOOK机制可以概括如下: 在数据包流经内核协议栈的整个过程中,在一些已预定义的关键点上PRE_ROUTING、LOCAL_IN、FORWARD、LOCAL_OUT
1、引言TCP的经典异常问题无非就是丢包和连接中断,在这里我打算与各位聊一聊TCP的RST到底是什么?现网中的RST问题有哪些模样?我们如何去应对和解决?...《不为人知的网络编程(八):从数据传输层深度解密HTTP》《不为人知的网络编程(九):理论联系实际,全方位深入理解DNS》《不为人知的网络编程(十):深入操作系统,从内核理解网络包的接收过程(Linux...分析:注意看上图最左边的第4和5这两行的时间间隔非常短,只有11微妙,11微妙是什么概念?查一次tcp socket的hash表可能都是几十微妙,这点时间完全可能会停顿在一个函数上。...-p tcp --port 1112 -j REDIRECT --to-ports 80DNAT+netfilter的流程是什么样?.../ptrace.h>#include linux/tcp.h>#include linux/ip.h>#include #include <bcc/proto.h
领取专属 10元无门槛券
手把手带您无忧上云