如果不是流入本机的,而是要转发给其他主机的,则必然涉及到另一个流出网卡,此时数据包必须从流入网卡完整地转发给流出网卡,这要求Linux主机能够完成这样的转发。...但Linux主机默认未开启ip_forward功能,这使得数据包无法转发而被丢弃。...Linux主机和路由器不同,路由器本身就是为了转发数据包,所以路由器内部默认就能在不同网卡间转发数据包,而Linux主机默认则不能转发。...如果Linux主机有多块网卡,如果不开启数据包转发功能,则这些网卡之间是无法互通的。...例如eth0是172.16.10.0/24网段,而eth1是192.168.100.0/24网段,到达该Linux主机的数据包无法从eth0交给eth1或者从eth1交给eth0,除非Linux主机开启了数据包转发功能
Linux 在每个 CPU 上会创建一个 ksoftirqd 内核线程。 softirqs 是在 Linux 内核编译时就确定好的,例如网络收包对应的 NET_RX_SOFTIRQ 软中断。...event PIW: 0 0 Posted-interrupt wakeup event heidsoft@heidsoft-dev:~$ /research/linux...NAPI 或新 API 的编写是为了更有效地处理传入卡的数据包。硬中断是昂贵的,因为它们不能被中断。即使有中断 合并(稍后详细描述),中断处理程序将独占一个 CPU 内核 完全地。...NAPI 的设计允许驱动程序进入轮询模式而不是被 为每个需要的数据包接收硬中断。在正常操作下,会引发初始硬中断或 IRQ,然后是 SoftIRQ 处理程序 它使用 NAPI 例程轮询卡。.../about-linux-smp_affinity https://web.archive.org/web/20200225050436/http://blog.yufeng.info/archives
Linux 支持流量控制(traffic control)的功能,此功能允许系统管理员控制数据包如何从机器发送出去。流量控制系统包含几组不同的 queue system,每种有不同的排队特征。...可以将 qdisc 视为调度程序, qdisc 决定数据包的发送时间和方式。 Linux 上每个 device 都有一个与之关联的默认 qdisc。...当 flow 的所有 outstanding(需要确认的)数据包都已确认时,TCP 协议层将设置此标志。当发生这种情况时,内核可以为此数据包选择不同的 TX 队列。...include/linux/netdevice.h: /* * Returns a Tx hash for the given packet when dev->real_num_tx_queues...Reference: https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data
本系列文章1-4,来源于陈莉君老师公众号“Linux内核之旅” 1....前言 本文首先从宏观上概述了数据包发送的流程,接着分析了协议层注册进内核以及被socket的过程,最后介绍了通过 socket 发送网络数据的过程。 2....数据包发送宏观视角 从宏观上看,一个数据包从用户程序到达硬件网卡的整个过程如下: 使用系统调用(如 sendto,sendmsg 等)写数据 数据穿过socket 子系统,进入socket 协议族(protocol...family)系统 协议族处理:数据穿过协议层,这一过程(在许多情况下)会将数据(data)转换成数据包(packet) 数据穿过路由层,这会涉及路由缓存和 ARP 缓存的更新;如果目的 MAC 不在...总结 了解Linux内核网络数据包发送的详细过程,有助于我们进行网络监控和调优。本文只分析了协议层的注册和通过 socket 发送数据的过程,数据在传输层和网络层的详细发送过程将在下一篇文章中分析。
最近要给团队做一个长期的内部分享,主题就是Linux内核中数据包的处理流程。 这几天抽空画了一部分流程图。...内核网络模块非常复杂,完整的流程图需要慢慢完善,以后会借内部分享的机会不断完善这个流程图,欢迎大家指正和提出宝贵意见。
这些卡通常希望在与处理器共享的内存中建立一个循环缓冲区(通常称为DMA 环形缓冲区);每个传入的数据包都放在环中的下一个可用缓冲区中,并发出中断信号。...然后驱动程序将网络数据包传递给内核的其余部分,并在环中放置一个新的 DMA 缓冲区。 所有这些情况下的处理步骤都强调有效的 DMA 处理依赖于中断报告。...https://www.oreilly.com/library/view/linux-device-drivers/0596000081/ch13s04.html https://en.wikipedia.org.../ https://blog.packagecloud.io/monitoring-tuning-linux-networking-stack-receiving-data/ https://www.linuxjournal.com.../content/queueing-linux-network-stack
数据包扩展 HTTP和HTTPS的区别 图片 HTTPS协议需要CA申请证书,一般免费的证书很少,收费 HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL...所有的传输的内容都是经过加密的 HTTP和HTTPS使用的连接方式不同,所使用的端口也不一样 HTTP是80 HTTPS是443 HTTPS可以有效方式运营商劫持 HTTP通信过程 HTTP通信过程建立连接-->发送请求数据包...-->返回数据响应包-->关闭连接 浏览器建立与web服务器之间的连接 浏览器将请求数据包打包(生成请求数据包)发送到web服务器 web服务器将处理结果打包(生成响应数据包)发送到浏览器 web服务器关闭连接...建立通信 服务器使用KEY对数据进行对称加密并返回给客户端 客户端使用相同的秘钥解密 HTTPS缺点: HTTPS 需要更多的服务器资源,也会导致成本的升高 Request请求数据包的数据格式 Request...Response响应数据包格式 一个响应由四个部分组成;状态行、响应头标、空行、响应数据。
抓包分析软件 四.ICMP协议的封装格式 (1)Type 类型值,标识ICMP分组类型 (2)Code 代码值,标识ICMP分组类型的某一种具体分组 (3)Checksum 校验和,用于检验数据包是否完整或是否被修改...当同时与多个目的通信时,通过本字段来区分 (5)Sequence Number 序列号,标识本地到目的的数据包序号,一般从序号1开始 五.实验内容及步骤 1)ping 和Traceroute实验 (1...把不同类型报文填入 1)R1路由器上f0/0的第一次探测UDP数据包信息(TTL=1) 2)R2利用ICMP协议返回的TTL超时报文结构(type=11,code=0)...3)R1路由器上f0/0的第二次UDP数据包信息(TTL=2) 4)R2路由器上f0/1的第二次UDP数据包信息(TTL=1) 5)R3路由器上利用ICMP协议返回端口不可达报文的结构
1. Serial 2. Input 3. I2C 4. USB 5. Video 6. Audio 7. Block 8. MTD
内核模块 实验目的 内核模块是Linux操作系统中一个比较独特的机制。...通过这一章学习,希望能够理解Linux提出内核模块这个机制的意义;理解并掌握Linux实现内核模块机制的基本技术路线;运用Linux提供的工具和命令,掌握操作内核模块的方法。...上述实验过程中,将会遇到Linux为此开发的内核模块操作工具lsmod、insmod、rmmod等。...由于引入了模块机制,Linux的内核可以达到最小,即内核中实现一些基本功能,如从模块到内核的接口,内核管理所有模块的方式等等,而系统的可扩展性就留给模块来完成。...3.3 模块实用程序modutils Linux内核模块机制提供的系统调用大多数都是为modutils程序使用的。可以说,是Linux的内核模块机制和modutils两者的结合提供了模块的编程接口。
Linux内核的作用 ? 管理内存 提高效率,管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。 调度任务 某些机制执行从用户空间到内核的函数调用。...内核模块 ?...arch 表示各种各样的平台 crypto 安全加密 drivers 驱动各种各样的硬件 fs 文件系统 lib 各种各样的库 net 网络功能 sound 声卡 查看所有模块 lsmod...查看指定模块的详细信息 modinfo 模块名 动态加载模块 modprobe 模块名 动态卸载模块 modprobe -r 模块名 ?...详细学习可参考官网: http://www.tldp.org/LDP/tlk/tlk.html https://mirrors.edge.kernel.org/pub/linux/ ?
例题:如何使用tcpdump监听来自eth0适配卡且通信协议为port 22,目标来源为192.168.1.100的数据包资料?
本文将介绍在Linux系统中,以一个UDP包的接收过程作为示例,介绍数据包是如何一步一步从应用程序到网卡并最终发送出去的。 socket层 socket(...)...UDP层 udp_sendmsg:udp模块发送数据包的入口,该函数较长,在该函数中会先调用ip_route_output_flow获取路由信息(主要包括源IP和网卡),然后调用ip_make_skb...IP层 ip_send_skb:IP模块发送数据包的入口,该函数只是简单的调用一下后面的函数 __ip_local_out_sk:设置IP报文头的长度和checksum,然后调用下面netfilter...Traffic Control模块进行处理 Traffic Control:这里主要是进行一些过滤和优先级处理,在这里,如果队列满了的话,数据包会被丢掉,详情请参考文档,这步完成后也会走到dev_hard_start_xmit...从sendto函数的帮助文件里面看到这样一句话:(Normally, this does not occur in Linux.
大家好,我是「云舒编程」,今天我们来聊聊Linux是怎么从网络上接收数据包的。...本文将继续介绍「数据包怎么从网线到进程,在被应用程序使用」。...通过本文你可学到: Linux 是怎么发送数据包到网络上的 Linux 是怎么从网络上接收数据包的 软中断、硬中断 Linux 是怎么从网络上接收数据包的 整体流程: 系统初始化时,网卡驱动程序会向内核申请一块内存...❝ Linux设计为硬中断在哪个CPU上被响应,那么软中断也是在这个 CPU 上处理的。...参考资料 深入理解Linux网络技术内幕(文中的图大部分来自该书) Linux内核源码剖析:TCP/IP实现
本文将介绍在Linux系统中,以一个UDP包的接收过程作为示例,介绍数据包是如何一步一步从网卡传到进程手中的。 网卡到内存 网络接口卡必须安装与之匹配的驱动程序才能正常工作。...这些驱动程序被视为内核模块,其主要职责是连接网卡和内核中的网络模块。在加载驱动程序时,驱动程序将自身注册到网络模块中。当相应的网卡接收到数据包时,网络模块将调用相应的驱动程序来处理数据。...下图展示了数据包(packet)如何进入内存,并被内核的网络模块开始处理: 1:外部网络传入的数据包会进入物理网卡。当目的地址不属于该网卡,且该网卡未启用混杂模式时,该数据包将被网卡丢弃。...UDP层 UDP层 udp_rcv函数是UDP模块的入口函数,用于处理接收到的UDP数据包。...如果socket上设置了过滤条件且该数据包不满足条件,则该数据包也会被丢弃。在Linux中,每个socket都可以像tcpdump中一样定义过滤条件,不满足条件的数据包将被丢弃。
1.概述 数据包络分析方法(Data Envelopment Analysis,DEA)是评价多输入指标和多输出指标的较为有效的方法,将多投入与多产出进行比较,得到效率分析,可广泛使用于业绩评价。...数据包络分析是一种具有相同类型决策单元进行绩效评价的方法(相同类型是指这类决策单元有相同性质的投入和产出。比如说医院投入的是医护人员面积,床位数,医疗设施等等,产出的是门诊病人人次,住院人次。...数据包络分析DEA时,首先需要分析综合效益值θ,即首先判断DMU是否有DEA有效,如果有效,则说明该DMU较优,反之说明‘非DEA有效’。...投入冗余投入过多,需要减少多少才更优(松驰变量S-)产出不足产出过少,需要增加多少才更优(松驰变量S+) 数据包络分析DEA时,首先需要分析综合效益值θ,即首先判断DMU是否有DEA有效,如果有效
这个可以让非常清楚的看到各个协议在整个数据包中占用的比例,这样对于分析数据包是非常有帮助的。如上图中,整个数据包主要是TCP的数据包,在TCP下面可以看到主要是HTTP。...Python程序就可以很容易取出 root@kali:~# python3 Python 3.7.4 (default, Jul 11 2019, 10:43:21) [GCC 8.3.0] on linux...tcpdump tcpdump是linux上非常好用的抓包工具,并且数据可以通过wireshark分析工具进行分析 tcpdump -D可以查看网卡列表 root@kali:~# tcpdump -D...Up, Running, Loopback] 3.any (Pseudo-device that captures on all interfaces) [Up, Running] 4.nflog (Linux...netfilter log (NFLOG) interface) [none] 5.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
前言 Linux内核网络 UDP 协议层通过调用 ip_send_skb 将 skb 交给 IP 协议层,本文通过分析内核 IP 协议层的关键函数来分享内核数据包发送在 IP 协议层的处理,并分享了监控...如果 nf_hook 返回 1,则表示允许数据包通过,并且调用者应该自己发送数据包。...出于讨论目的,我们假设 nf_hook 返回 1,表示调用者(在这种情况下是 IP 协议层)应该自己发送数据包。 3.2 目的(路由)缓存 dst 代码在 Linux 内核中实现协议无关的目标缓存。...总结 Linux内核网络数据包发送时,主要用到 ip_send_skb、 ip_local_out、ip_output、ip_finish_output、ip_finish_output2、 dst_neigh_output...等函数,本文通过分析这些函数来分享Linux内核数据包发送在 IP 层的处理,并对 IP 层进行了数据监控。
背景| Linux 内核模块 Linux 内核模块在概念和原理层面与动态链接模块(DLL或so)类似。...正是因为内核模块这种机制,方便了Linux 贡献者选择设备驱动成为进入 Linux 复杂系统的一个入口点,而不会被 Linux 代码的复杂性而压倒。...也正是因为内核模块这个特点,Rust for Linux 项目的目标就是让 Rust 成为Linux内核模块开发的第二语言。...现在这篇文章就是带你了解如何通过 Rust 为 Linux 编写内核模块。...以上就是模块的整个生命周期,也可作为我们编写内核模块的一个宏观的心智模型。 从零编写一个字符驱动 Linux 中设备通常被分为三类,每个驱动模块通常实现为这三类中的其中一种: 字符设备。
领取专属 10元无门槛券
手把手带您无忧上云