慢慢欣赏linux 网络协议栈一 全景图

一文了解Linux 内核的网络协议栈 本文主要记录 Linux 内核网络协议栈的运行原理。 阅读详情
用户态软件
	/\
	||
	\/
系统库函数
	/\
	||
	\/
C标准库或者glibc
	/\
	|| 系统调用
	\/
内核态系统调用接口
	/\
	||
	\/
内核协议栈L3到最上层
	/\
	||
	\/
L2协议栈以及驱动
	/\
	||
	\/
L1硬件网卡NIC

网络初始化入口

int __init net_dev_init(void)
	dev_proc_init()
	=>int __init dev_proc_init(void)
		return register_pernet_subsys(&dev_proc_ops);
			static struct pernet_operations __net_initdata dev_proc_ops = {
				.init = dev_proc_net_init,
				.exit = dev_proc_net_exit,
			};
		=>int register_pernet_subsys(struct pernet_operations *ops)
			error =  register_pernet_operations(first_device, ops);
			=>int register_pernet_operations(struct list_head *list, struct pernet_operations *ops)
				error = __register_pernet_operations(list, ops);
				=>int __register_pernet_operations(struct list_head *list, struct pernet_operations *ops)
					err = ops_init(ops, &init_net);
					=>int ops_init(const struct pernet_operations *ops, struct net *net)
						return ops->init(net);
						=>int __net_init dev_proc_net_init(struct net *net)
							proc_net_fops_create(net, "dev", S_IRUGO, &dev_seq_fops)
							proc_net_fops_create(net, "softnet_stat", S_IRUGO, &softnet_seq_fops)
							proc_net_fops_create(net, "ptype", S_IRUGO, &ptype_seq_fops)
	netdev_kobject_init()
	=>int netdev_kobject_init(void)
		return class_register(&net_class);//在/sys/class下注册net类
		
	INIT_LIST_HEAD(&ptype_all);
	for (i = 0; i < PTYPE_HASH_SIZE; i++)
		INIT_LIST_HEAD(&ptype_base[i]);
		
	register_pernet_subsys(&netdev_net_ops)
		struct pernet_operations __net_initdata netdev_net_ops = {
			.init = netdev_init,
			.exit = netdev_exit,
		};
		... ...//同register_pernet_subsys(&dev_proc_ops);
			=>int __net_init netdev_init(struct net *net)
				INIT_LIST_HEAD(&net->dev_base_head);
				net->dev_name_head = netdev_create_hash();
				net->dev_index_head = netdev_create_hash();
	
	for_each_possible_cpu(i)
		struct softnet_data *queue;

		queue = &per_cpu(softnet_data, i);
		skb_queue_head_init(&queue->input_pkt_queue);
		queue->completion_queue = NULL;
		INIT_LIST_HEAD(&queue->poll_list);

		queue->backlog.poll = process_backlog;
		queue->backlog.weight = weight_p;
		queue->backlog.gro_list = NULL;
		queue->backlog.gro_count = 0;
		
	register_pernet_device(&loopback_net_ops)
	
	register_pernet_device(&default_device_ops)
	
	open_softirq(NET_TX_SOFTIRQ, net_tx_action);
	open_softirq(NET_RX_SOFTIRQ, net_rx_action);
	
	hotcpu_notifier(dev_cpu_callback, 0);
	dst_init();
	dev_mcast_init();

理解 Linux 网络栈(1):Linux 网络协议栈简单总结
https://www.cnblogs.com/sammyliu/p/5225623.html

网络设备模块初始化(net/core/dev.c/net_dev_init)
https://blog.youkuaiyun.com/sun172270102/article/details/80643164

register_pernet_subsys相关学习
https://blog.youkuaiyun.com/lickylin/article/details/18013879

Linux 以太网驱动
https://blog.youkuaiyun.com/dongkun152/article/details/74906670

环回设备接口(loopback)上如何发送和接收数据报      //上下文的网口驱动文章可以学习一下
http://blog.chinaunix.net/uid-26675482-id-3067061.html

suiming2005的ChinaUnix博客
http://blog.chinaunix.net/uid-23250294-id-5790231.html

Linux网络设备驱动框架
http://t.zoukankan.com/linfeng-learning-p-9547356.html

Linux Kernel TCP/IP Stack — Overview 目录 文章目录目录协议栈的全景图协议栈的逻辑架构协议栈的分层架构协议栈的数据结构 协议栈的全景图 协议栈的逻辑架构 L1 物理层:主要提供各种连接的物理设备,如各种网卡,串口卡等。 L2 链路层:主要提供对物理层进行访问的各种接口卡的驱动程序,如网卡驱动等。 L3 网路层:是负责将网络数据包传输到正确的位置,最重要的网络层协议是 IP 协议,此外还有如 ICMP,ARP,RARP 等协议。 L4 传输层:为应用程序之间提供端到端连接,主要为 TCP 和 UDP 协议。 L5-7 应用层:顾名思义,主要 阅读详情

相关推荐

网络协议栈全景图

了解网络协议(Network Protocol)之间的关系对网络分析是非常必要的,网络协议图(Network Protocols Map)对网络管理人员来讲,是必备的网络协议学习工具之一,但我们看到,网上内容比较全面的网络协议图并不是很多,这些网络协议图虽然遵循OSI七层网络协议,但是对于网络七层协议分类并不清晰,特别对于 TCP/IP协议不够直观。另一方面,现在网上能找到的协议图全都是英文版本,使用起来不是很方便,如果您是网络初学者,就更难理解

TCP/IP协议栈全图。

非常难得的一张TCP/IP协议栈全图,供参考:资料来自网络,非营利性提供给大家学习参考,如果侵犯了您的版权请通知我删除,谢谢!

weixin_34146986的博客 197

linux网络数据包走向图

linux网络数据包走向图(2.6.21)

协议栈图解

HideInTime的博客 1030

解决创建conda环境时Solving environment: failed 和 ResolvePackageNotFound 的错误

环境配置文件是在别的机器上导出的,文件里的软件包是按照导出文件的机器配置的,因此导出的时候,把这些包的详细信息也导了出来,即第二个等号后面跟着的信息,当我们按照这个文件创建环境时,conda就会根据我们机器的配置信息,按照配置文件里包的详细信息,去找这个包,那当然找不到,结果发现“查无此包”,因此也就会报上面的错误。上面找到了问题的所在之处,解决起来就很简单了,只需要在配置文件 environment.yml 中将包的详细信息删除,也就是第二个等号后面的内容。然而升级超级慢不说,也没有解决我的问题。...

番茄炒蛋三分糖 4万+

资产监测设备中130dBm的GPS信号注入天线端口,C/N0一般是多少?

笔者的团队一直从事于资产监测设备的开发,在开发过程中,涉及到很多细节的问题,针对新入职的同事来说较为陌生。同时,在团队外,还有需要对智能硬件终端开发感兴趣的用户。基于此背景下,笔者将在下面的内容主要介绍资产监测设备以及对设备中的GPS相关的问题:130dBm的GPS信号注入天线端口,C/N0一般是多少?作出详细的解答。 资产监测设备概述: 资产监测设备是基于物联网通信技术基础上的智能硬件终端,其主要作用是帮助用户监测资产在仓库、运输途中、交付整个流通环节中,提供资产的实时位置与状态参数。用户只需要登录资产

瑞奇聊通信模组 1229

TCP/IP协议栈全图

如果,TCP/IP协议栈全图,来自网络。

听雨轩 657

HWSD2.0土壤数据处理实战:从下载到属性提取全流程解析

本文详细解析了HWSD2.0全球土壤数据库从数据下载、属性筛选到GIS空间连接与提取的全流程实战方法。重点介绍了如何利用ArcGIS Pro等工具,将土壤单元编码与黏粒含量等属性表关联,最终生成全球土壤属性专题栅格图,为农业规划与生态研究提供关键数据支撑。

weixin_29214691的博客 610

深入理解Linux内核系列-内核网络协议栈架构

Linux内核层还提供网络防火墙的框架netfilter,基于netfilter框架编写网络过滤程序是 Linux 环境下内核层网络处理的常用方法。 视频教程:内核网络协议栈架构详解 1、Linux内核源代码结构 Linux 的内核源代码可以从 https://www.kernel.org/网站上下载,Linux-3.9.5以上的版本(含)。 其代码目录结构如下: Documentation:这个目录下面没有内核的代码,有一套有用的内核文档。其中文档质量良莠不齐,有很多内核文档的质量很优秀并且相当完整

技术Q君样:202432010的博客 1860

反激开关电源变压器设计实战:从理论到绕制的完整流程解析

本文详细解析了反激开关电源变压器的完整设计流程,从核心理论到实战绕制。文章以24W电源为例,手把手讲解如何根据输入输出电压、功率和频率等关键参数,计算匝比、峰值电流、电感量,并完成磁芯选择、匝数确定、气隙计算及线径选取。重点阐述了CCM模式下的设计要点与绕制工艺,旨在帮助工程师设计出稳定高效的反激变压器,避免常见陷阱。

weixin_29305313的博客 684

JavaSwing_1.1: FlowLayout(流式布局)

FlowLayout,流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。

谢TS的博客 7万+

Java面试真题解析火爆全网,统统给你解决!

前言 Linux 网络协议栈是根据 TCP/IP 模型来实现的,TCP/IP 模型由应用层、传输层、网络层和网络接口层,共四层组成,每一层都有各自的职责。 应用程序要发送数据包时,通常是通过 socket 接口,于是就会发生系统调用,把应用层的数据拷贝到内核里的 socket 层,接着由网络协议栈从上到下逐层处理后,最后才会送到网卡发送出去。 而对于接收网络包时,同样也要经过网络协议逐层处理,不过处理的方向与发送数据时是相反的,也就是从下到上的逐层处理,最后才送到应用程序。 网络的速度往往跟用户体验是挂钩

m0_56662340的博客 349

复现《水化硅铝酸钙微结构和性能的分子动力学模拟研究》的分子动力学模拟

本文详细复现了杨军博士论文中关于水化硅铝酸钙(C-A-S-H)凝胶的分子动力学模拟方法。研究内容包括:1)基于11Å Tobermorite构建C-A-S-H分子模型,通过缺陷引入和Al掺杂调节Ca/Si比;2)使用ReaxFF力场模拟交联C-A-S-H的结构与力学性能;3)采用ClayFF力场研究纳米孔道中水和离子传输行为。研究提供了完整的LAMMPS输入脚本、Python分析代码和力场参数设置,为水泥基材料纳米尺度模拟提供可复现的技术方案。

huanghm88的专栏 106

linux内核网络协议栈架构分析,全流程分析-干货

内核协议栈架构分析,全流程分析,干货

zxorange321的专栏 4万+

39、信号流图:解决线性代数方程组的图论方法

本文介绍了信号流图理论在求解线性代数方程组中的应用,重点阐述了Coates方法和Mason方法的原理、步骤及对比分析。通过图论视角,将矩阵运算转化为对有向图结构的分析,利用1-因子、1-阶连接、前向路径和反馈回路等概念,推导出方程组解的拓扑公式。文章结合具体实例演示两种方法的计算过程,并总结其在电路分析、控制系统和通信系统等领域的拓展应用,展示了信号流图理论的直观性与有效性。

pear55的博客 88

YOLO26改进 - C2PSA | C2PSA融合CPIASA跨范式交互与对齐自注意力机制 : 交互对齐机制,提升小目标与遮挡目标判别力 | ACM MM2025

本文介绍了跨范式表征与对齐Transformer(CPRAformer)及其核心的跨范式交互与对齐自注意力机制(CPIA - SA),并阐述了其在YOLO26中的结合应用。传统图像去雨模型特征提取局限大,CPIA - SA通过协同“空间 - 通道”与“全局 - 局部”范式解决该问题,由SPC - SA、SPR - SA和AAFM子模块构成,经双路提取、动态过滤、空间细化、对齐融合四步工作。我们将相关代码引入指定目录,在`ultralytics/nn/tasks.py`中注册,配置`yolo26 - C2PS

魔改工程师的博客 665

从网卡到协议栈:一张图看懂Linux网络数据包的‘合并拆分’之旅(TSO/GSO/LRO/GRO全解析)

本文深入解析Linux内核网络子系统中的TSO、GSO、LRO、GRO技术,揭示数据包在网卡与协议栈之间的高效流动机制。通过硬件卸载与软件优化的协同工作,显著提升网络性能,降低CPU占用率,适用于高性能服务器、虚拟化主机等场景。

weixin_33404102的博客 565

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux网络协议栈高清大图

原图链接: https://github.com/kernel-z/network

weixin_33712881的博客 780

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Linux内核全景图

任我行的博客 234

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Linux内核分层全景与关键机制可视化详解

通过上述全景主流程图和关键子机制流程图分层主线:系统调用、调度、内存、文件、网络、设备驱动层层递进,完成用户请求。特殊机制:中断嵌套、DMA链表、NUMA、多核调度、IO多队列、SR-IOV等,极大提升了系统性能和扩展性。可视化图谱:帮助开发者和运维人员整体把握操作系统内核架构,发现瓶颈和优化点。建议推荐将本文保存为Markdown文档,在Typora、Obsidian等支持Mermaid的编辑器中浏览。可按需拆分各子流程用于技术分享、团队培训或面试讲解。

IT技术学习与工作笔记分享 1804

计算机网络全景图-网络通信协议

精通TCP/IP协议栈,精通TCP、HTTP(S)、DNS、DHCP的工作原理,精通TCP状态机的每个状态的意义及转换条件,熟悉UDP、FTP协议。 2、3年以上linux系统运维经验,可以熟练的使用 Linux 常用命令,如tcpdump、netstat、ss、nc、awk、grep等。 3、精通抓包工具,可以解读其给出的专家信息背后的含义。熟悉tshark命令行工具,可以通过tshark分析抓包文件,拼接过滤条件过滤指定的数据包。熟悉wireshark自带的一系列命令行工具...

IT乌托邦官方博客 588

Linux内核--网络协议栈的工作过程

下图展示了在使用内核协议栈方案的场景中,分别在两台机器上运行的应用程序,在其互相通信的过程中需要用到的主要软件模块和硬件设备,以及它们的整体交互流程。软件部分全部运行在主机CPU上(数据保存在主机内存)。其中应用程序和它调用的动态链接库运行在用户态;Linux 网络协议栈和以太网卡驱动程序运行在内核态。Linux 网络协议栈:连接应用和驱动程序的中间层,负责按照应用程序的要求建立网络连接和封装(发送时)、解析(接收时)数据包。

m0_62266163的博客 506

在与sql server建立连接时出现与网络相关的或特定_西门子S7-1500通过OPC UA连接罗克韦尔FT SE...

写在前面(文中相关超链接仅在微信公众号"智能制造之家"有效)无论是工业自动化还是工业信息化项目,通讯是每个项目中必定会遇到的~前面我们总结了西门子PLC的多种通讯方式:S7-200/300/400/1200/1500全系列通信总结也介绍了施耐德M241和西门子PLC的通讯:当西门子遇上施耐德:S7-1200&1500与M241的Ethernet通讯还介绍了各种PLC、WinCC OA等连接...

weixin_39916479的博客 1063

如果TCP不握手三次,改成两次或者四次会怎样?

这个问题下面的回答不太适合小白阅读,看完一定一脸懵逼。 比如:TCP到底是个啥,又为啥要握手,怎么握手几次都还要管,还只能固定握手呢?哎呀,管好多啊,怎么肥事……外行人看来这简直是封建主义社会的真实写照了(手动狗头)。 1、到底啥是TCP? TCP的中文名叫做传输控制协议,是供已经连接因特网的计算机进行通信的通信协议。计算机通信协议是对那些计算机必须遵守以便彼此通信的的规则的描述。 TCP是互联网协议之一,也是主要的协议之一。 为啥? 因为它起源于最初的网络实施,在网络实施中,它对互联网协议

682

Linux内核网络协议栈流程及架构

linux内核网络协议栈

Hbw_aini的博客 2243
上一篇: 慢慢欣赏git
下一篇: 慢慢欣赏linux 网络协议栈二 net_device以及初始化注册
天麓
博客等级 码龄22年 323粉丝 437原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值