LinuxJiaoCheng

LinuxJiaoCheng.com
Linux教程网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Linux内核网络协议栈的细节介绍

2023年8月27日 300点热度

合同栈的细节

下边将介绍一些内核网路合同栈中往往涉及到的概念。

sk_buff

内核也许须要一个数据结构来表示报文,这个结构就是sk_buff(socketbuffer的简称),它等同于在中描述的BSD内核中的mbuf。

sk_buff结构自身并不储存报文内容,它通过多个表针指向真正的报文显存空间:

linux内核栈是就一个吗_linux内核栈与用户栈_linux内核协议栈

sk_buff是一个贯串整个合同栈层次的结构,在各层间传递时,内核只须要调整sk_buff中的表针位置就行。

net_device

内核使用net_device表示网卡。网卡可以分为化学网卡和虚拟网卡。化学网卡是指真正能把报文发出本机的网卡,包括真实化学机的网卡以及VM虚拟机的网卡,而像tun/tap,vxlan、vethpair这样的则属于虚拟网卡的范畴。

如右图所示,每位网卡都有两端,一端是合同栈(IP、TCP、UDP),另一端则有所区别,对化学网卡来说,这一端是网卡生产厂商提供的设备驱动程序,而对虚拟网卡来说差异就大了,正是因为虚拟网卡的存在,内核能够支持各类隧洞封装、容器通讯等功能。

linux内核协议栈_linux内核栈与用户栈_linux内核栈是就一个吗

【文章福利】小编推荐自己的Linux内核技术交流群:【891587639】整理了一些个人认为比较好的学习书籍、视频资料共享在群文件上面,有须要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)

socket&sock

用户空间通过socket()、bind()、listen()、accept()等库函数进行网路编程。而这儿提及的socket和sock是内核中的两个数据结构,其中socket向下面向用户,而sock向上面向合同栈。

如右图所示,这两个结构实际上是一一对应的。

linux内核栈是就一个吗_linux内核栈与用户栈_linux内核协议栈

注意到,这两个结构上都有一个叫ops的表针,但它们的类型不同。socket的ops是一个指向structproto_ops的表针红旗linux5.0,sock的ops是一个指向structproto的表针,它们在结构被创建时确定。

追忆网路编程中socket()函数的原型:

实际上,socket->ops和sock->ops由前两个参数socket_family和socket_type共同确定。

假如socket_family是最常用的PF_INET合同簇,则socket->ops和sock->ops的取值就记录在INET合同开关表中:

L3->L4

我们晓得网路合同栈是分层的linux内核协议栈,但实际上,具体到实现,内核合同栈的分层只是逻辑上的,本质还是函数调用。发送流程(下层调用上层)一般是直接调用(由于没有不确定性linux命令手册,例如TCP晓得下边一定IP),但接收过程不一样了,例如报文在IP层时,它里面可能是TCP,也可能是UDP,或则是ICMP等等,所以接收过程使用的是注册-反弹机制。

还是以INET合同簇为例,注册插口是:

在内核网路子系统初始化时,L4层合同(如下边的TCP和UDP)会被注册:

而在IP层,查询过路由后,假如该报文是须要上送本机的,则会依照报文的L4合同,献给不同的L4处理:

L2->L3

L2->L3如出一辙。只不过注册插口弄成了:

谁会注册呢?其实起码IP会:

而在报文接收过程中,设备驱动程序会将报文的L3类型设置到skb->protocol,之后在内核netif_receive_skb收包时,会依照这个protocol调用不同的反弹函数:

Netfilter

Netfilter是报文在内核合同栈必然会通过的路径,我们从下边这张图就可以看见,Netfilter在内核的5个地方设置了HOOK点,用户可以通过配置iptables规则,在HOOK点对报文进行过滤、修改等操作。

linux内核栈与用户栈_linux内核协议栈_linux内核栈是就一个吗

在内核代码中,我们经常可见NF_HOOK这样的调用。我的建议是,假如你暂时不考虑Netfilter,这么就直接跳过,跟踪okfn就行。

dst_entry

内核须要确定收到的报文是应当本地上送(localdeliver)还是转发(forward),对本机发送(localout)的报文须要确定是从那个网卡发送出去linux内核协议栈,这都是内核通过查询fib(forwardinformationbase,转发信息表)确定。fib可以理解为一个数据库,数据来源是用户配置或则内核手动生成的路由。

fib查询的输入是报文sk_buff,输出是dst_entry.dst_entry会被设置到skb上:

而dst_entry中最重要的是一个input表针和output表针:

对于须要本机上送的报文:

对须要转发的报文:

对本机发送的报文:

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 内核 协议 报文 指针 网卡
最后更新:2023年8月27日

Linux教程网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux教程网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux文件恢复技巧,实用命令大揭秘 开源操作系统的分类及分类类的Linux操作方式 Linux安装实验报告:建议与注意事项 Linux操作系统——Linux移动端的发展史 Linux系统下解压xz文件的七步曲 Linux软件安装位置选择指南 linux 安装usb转串口驱动 USB的VID和PID号USB,区别在哪? linux安装bind Linux DNS服务器对比 linux cuda Linux CUDA:安装配置与应用实践 Linux中查看某个软件的安装路径(地址)命令 远程登录Linux服务器的技巧:Telnet命令详解 运维工程师简历范本(运维)(广州艾迪思电子科技有限公司) linux c and LinuxC编程精要 包和软件包管理器,就好比“App”和“应用商店”这样的关系 开源三剑客:Linux、PHP、MySQL评测 linux查看软件安装目录的方法和操作环境的教程方法 Linux文件恢复技巧 Linux查看软件安装目录及位置4种方法(Linux) 嵌入式工程师到底做些什么月薪有多少?月薪多少 修改Linux命令行字体大小的方法
Linux命令轻松查看系统版本Linux虚拟主机与Windows虚拟有哪些区别?怎么选Linux Kernel 4.0:开源世界的新篇章Linux命令大全用于检测与另一个主机之间的网络连接简洁明了:Linux安装虚拟机,轻松上手!自考《操作系统概论》博客中的知识归纳和总结Linux驱动解读Linux系统远程上传文件和目录命令应用命令参数CentOS搭建NTP服务器,详解步骤与注意事项Linux内核网络协议栈的细节介绍高效办公,红旗Linux桌面应用教程Linux内核链路层路径接收中断的条件下执行的范围释放技术潜能,掌握Linux版本命令腾讯的开源协议栈f-stack.pdf在DPDK技术峰会上推出的重要技术创新Linux RAID驱动:原理与应用解析嵌入式开发必备的基础知识-经典书籍推荐:linux多cpu 操作系统 2017年上海事业单位招聘考试:保研面试资料复习经验简洁易懂的标题:Linux安装targz,步骤技巧一览VMwareWorkstation15最新破解版含激活码,安装破解激活图文教程简洁高效:Linux防火墙配置攻略
《速度与激情8》丰田多媒体漏洞引发连环车祸 过程创建lvm分区的方法有哪些?-八维教育 Linux截屏软件评测:捕捉神器大比拼! 如何在Linux系统中查看端口的方法?命令介绍 Linux定时器:9个实用技巧! 一个面试流程,简简单单,但是却牵扯出来好多真实的问题 chronyChrony网络时间协议TimeProtocol 看习惯了大屏幕,再次使用13寸MacBookPro屏幕是不是有点 进程进程(Process)是计算机中的程序(Process) Linux计划任务,自动删除n天前的旧文件 白色球型有线迷你鼠标高尔夫鼠标运动纪念品送彩盒 轻松打破限制,虚拟机PXE安装Linux操作系统! Linux内核网络协议栈的细节介绍 亲身体验Linux命令,心得技巧,值得收藏! 解决OpenOffice Linux中文乱码问题的有效方法 全球运行最快的500台超级计算机,C位出道 操作系统的一个重要作用是管理计算机资源的重要性? 就是PHP定时执行任务的3种方式实现(图) 0x02为什么要做安全配置禁止mysql以管理员账号权限运行 CentOS安装Piwik,轻松实现网站数据分析
标签聚合
应用 linux系统 系统 操作 虚拟机 软件 linux服务器 操作系统开发 内核 命令
书籍
课程
技术群
技术干货大合集↓
  • 2023年9月 / 80篇
  • 2023年8月 / 120篇
  • 2023年7月 / 121篇
  • 2023年6月 / 119篇
  • 2023年5月 / 124篇
  • 2023年4月 / 113篇
  • 2023年3月 / 107篇
  • 2023年2月 / 81篇
  • 2023年1月 / 159篇
  • 2022年12月 / 172篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxjiaocheng.com ALL RIGHTS RESERVED.

京ICP备16058923号-3