Linux Kernel TCP/IP Stack|Linux网络硬核系列

news/2024/5/5 17:34:56/文章来源:https://www.cnblogs.com/windyrainy/p/16663141.html

 

 介绍Linux网络技术中最核心的部分--TCP/IP协议栈 。

我们先看一下抽象的网络协议栈模型

 

 再按分层思想看Linux内核协议栈实现框架

 

 1. socket layer

 

 socket框架

 

 

  • socket系统调用(socket,bind,listen,accept,send,recv等)

  • BSD socket API

  • 协议栈sock抽象适配层

  • tcp/udp/icmp/raw/packet/netlink/... socket管理

  • socket选项

2. tcp/udp layer

 

 

  • TCP报文收发

  • TCP Socket连接管理

  • TCP协议状态机,定时器处理

  • TCP滑动窗口,拥塞控制框架

L3 IP layer

 

 1. IP handle

 

 

  • 报文分片和重组

  • IP协议字段处理,IP选项,Qos,TTL,校验等处理

  • 报文接收(解封装)和发送(IP协议封装,提供给上层接口)

  • 组播,ICMP协议处理等

2. netlfilter框架

 

 

5个HOOK点:

PREROUTING:数据包进入路由表之前

INPUT:通过路由表后目的地为本机

FORWARD:通过路由表后,目的地不为本机

OUTPUT:由本机产生,向外发送

POSTROUTIONG:发送到网卡接口之前。

 

每个HOOK点都会执行一些函数,大致分为下面几个表:

NAT表: 用于实现nat功能,端口映射,地址映射等

mangle表: 用来修改报文,例如更改IP标头的TOS / DSCP / ECN位

filter表:用来过滤报文

raw表:用来提前标记报文不走一些流程(比如不需要建会话)

conntrack表:连接跟踪表,跟踪连接会话,用来实现状态防火墙,NAT功能的基础,可扩展更多功能。

核心处理流程

 

 

主要功能

  • 无状态数据包过滤(IPv4和IPv6)

  • 有状态的数据包过滤(IPv4和IPv6)

  • 各种网络地址和端口转换,例如NAT / NAPT(IPv4和IPv6)

  • 灵活可扩展的基础架构

  • 第三方扩展的API

3. 路由系统

协议栈处理位置

 

 路由子系统架构

 

 

  • FIB(The Forwarding Information Base )

  • 策略路由 Policies

  • 路由匹配HASH,LC-tries等

主要功能

  • 三层路由转发

4. 邻居系统

 

 

  • ARP协议(IPV4),NDP协议(IPV6)

  • 邻居表新建,更新,老化机制,状态转化等

  • API接口

主要功能

  • 获取mac地址

L2 link layer(driver)

 

 

1. Link layer

Bridge

 

 

  • FDB(mac forwarding database)管理

  • port,bridge对象管理和报文接收,转发

  • STP,vlan协议相关处理

主要功能

  • 实现二层mac转发

链路协议

 

 Packt Type

 

 

  • Protocol handler

  • Packet_type list

主要功能

  • 链路层报文协议分发

 

Traffic control

 

 

  • qdisc :通过队列将数据包缓存起来,用来控制网络收发的速度

  • class :用来表示控制策略

  • filter :用来将数据包划分到具体的控制策略

主要功能

  • 提供的流量限速、整形和策略控制机制(Qos)

 

2. hardware driver layer

 

 

  • 网络设备管理

  • RPS,RFS,XPS,GRO,GSO,TSO等优化特性

  • 网卡软中断收发,NAPI,DMA

  • 支持各种网卡驱动实现

     

协议栈文件系统

Proc FileSystem

  • /proc/net

  • /proc/sys/net

      ipv4

          core

Sys FileSystem

  • /sys/class/net/ethx

主要功能

  • 提供协议栈相关配置查询和设置

最后

整体架构图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_5772.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图论——欧拉回路

一、前置知识 1、连通、极大联通子图连通:图中任意两点皆可互达 极大连通子图:对连通图来说:是这个连通图本身 对非连通图来说: 有多个极大联通子图2、回路、简单回路、简单路径回路:从一个点到经过一些其他节点,再回到该点的一个路径。此时,除了起点和终点,其他节点也…

Python做一个中秋节嫦娥投食小游戏

山河远阔,烟火人间,又一年,千里婵娟~ 今天给大家带来的是给玉兔投喂月饼的小游戏。八月十五中秋夜晚,让我们对着月亮许愿:希望我们在意和在意我们的人,诸邪避退、百事无忌、平安喜乐、万事胜意。提前祝大家…

VMware Workstation虚拟机怎么和主机之间互传文件?

VMware Workstation虚拟机怎么和主机之间互传文件?前言 工具/材料 操作方法前言 在使用Windows 10工作时会遇到形形色色的问题,比如虚拟机需要与主机之间互传文件。那么如何进行设置呢?下面小编与你分享具体步骤和方法。 工具/材料 Windows 10操作系统 操作方法启动Windows …

前端JS-Day21

client系列:获得可视区域的相关信息clientWidth和offsetWidth区别:clientWidth只包含内容和padding,offsetWidth包含内容和内外边框。 立即执行函数:无需调用,直接执行。且独立创建了一个作用域。(function() {})(); (function(){}()); 两种写法 像素比:即devicePixe…

STM32使用串口空闲中断(IDLE)和 DMA接收一串数据流

STM32使用串口空闲中断(IDLE)和 DMA接收不定长数据 方法一、使用宏定义判断IDLE标志位 空闲的定义是总线上在一个字节的时间内没有再接收到数据,USART_IT_IDLE空闲中断是检测到有数据被接收后,总线上在一个字节的时间内没有再接…

spring cloud alibaba (一)

Spring Cloud Alibaba官网:https://spring.io/projects/spring-cloud-alibaba gitHub:https://github.com/alibaba/spring-cloud-alibaba这节主要目标:掌握nacos使用 了解服务与服务之间调用1、简介 1.1、什么是分布式 将一套系统拆分成不同子系统部署在不同服务器上(这叫分…

flex常用布局

公共样式:<style>* {margin: 0;padding: 0;}.has-flex {display: flex;}</style> 垂直居中 子元素左右分布 css.father-one {width: 100%;height: 200px;background-color: #fffcef;align-items: center; /*纵轴)方向上的对齐方式。*/justify-content: space-bet…

5.2 创建个人中心页面-前端部分

&#x1f60a;如果写的可以帮到你&#xff0c;可以点个赞吗&#xff0c;你的支持就是我写下去的动力。&#x1f60a; 本文阅读大概 10 分钟, 自己写加思考大概 1 ~ 2 小时。建议&#xff1a;代码可以手抄&#xff0c; 但不要复制。 1. 整体框架 2. 前端页面布局 使用 bootstra…

达梦数据库图形化工具

图形化工具列表 (1)DM数据库配置助手 (2)DM服务查看器 (3)DM管理工具 (4)DM控制台工具 (5)DM数据库迁移工具 (6)DM性能监测工具图形化工具详解 界面展示DM数据库配置助手[dmdba@localhost tool]$ ./dbca.sh DM服务查看器DM管理工具DM控制台工具DM数据库迁移工具DM性能监测工具功…

马拉车算法

这篇博客写的非常清晰 https://zhuanlan.zhihu.com/p/549242325 给定一个字符串,问有多少个以 k,f,c 结尾的回文子串。#include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long const int maxn=1e6+5; int n,sum; ll len[maxn…

22-09-04 西安 谷粒商城(01)MySQL主从复制、MyCat读写分离、MyCat分库分表

人人尽说江南好&#xff0c;游人只合江南老。 春水碧于天&#xff0c;画船听雨眠。 MySQL主从复制 mysql主从复制&#xff1a;分摊读写压力&#xff08;cpu计算压力&#xff09; 写交给主库&#xff0c;读有主从分摊处理&#xff08;原因是写操作较少&#xff0c;读操作较多&…

面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!

由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。 时间片 多任务系统往往需要同时执行多道作业。作业数往往大…

ABAP-LP01和PDF打印机配置

事务代码SPAD1.LP01配置2.PDF配置

Netty+WebSocket整合STOMP协议

1.STOMP协议简介 常用的WebSocket协议定义了两种传输信息类型:文本信息和二进制信息。类型虽然被确定,但是他们的传输体是没有规定的,也就是说传输体可以自定义成什么样的数据格式都行,只要客户端和服务端约定好,得到数据后能够按照约定的语义解析数据就好。相较于Http协议…

猿创征文|我的后端成长之路(985科班两年,我发现了大学正确打开方式)

零.前言 当看到官方的这个活动的时候&#xff0c;我突然感到手指充满了力量&#xff0c;好像是我的键盘要向我尖端放电&#xff0c;谁还不是怀着满腔的热忱来写这篇文章帮助未来的学弟学妹们避坑呢&#xff1f;(其实是为了活动的奖励&#x1f917;)。不过不要在意这些细节&…

本地连接是干什么的?

当您创建家庭或小型办公网络时&#xff0c;运行 windows XP Professional 或 windows XP home edition 的计算机将连接到局域网 (Lan)。 安装 windows XP 时&#xff0c;将检测您的网络适配器&#xff0c;而且将创建本地连接。 像所有其他连接类型一样&#xff0c;它将出现在…

【深蓝学院】- Multiplane Images and Neural Rendering

01 view Synthesis problem Definition 02 View synthesis with multiplane Image(MPI) MPI的缺陷&#xff1a; 不是真正的三维表达不同视角观测的RGB是不变的 与MPI不一样的地方&#xff1a;不是手工设计的&#xff0c;而是整体输入 不同视角的RGB是不一样的 缺陷&#xff1…

Pytorch优化器全总结(一)SGD、ASGD、Rprop、Adagrad

目录 写在前面 一、 torch.optim.SGD 随机梯度下降 SGD代码 SGD算法解析 1.MBGD&#xff08;Mini-batch Gradient Descent&#xff09;小批量梯度下降法 2.Momentum动量 3.NAG(Nesterov accelerated gradient) SGD总结 二、torch.optim.ASGD随机平均梯度下降 三、torc…

【手把手】ios苹果打包——遇见项目实战|超详细的教程分享

六年代码两茫茫&#xff0c;不思量&#xff0c;自难忘 6年资深前端主管一枚&#xff0c;只分享技术干货&#xff0c;项目实战经验 关注博主不迷路~ 文章目录前言weex介绍eeui介绍一、安装CocoaPods1.CocoaPods介绍2.CocoaPods的安装二、登录开发者中心四、添加测试手机设备五、…

2022最新iOS证书(.p12)、描述文件(.mobileprovision)申请和HBuider打包及注意注意事项

制作p12证书1、在钥匙串界面中,选中安装好的开发者证书,【右键】选择导出在弹出的界面中3、在接下来的弹窗中填写p12文件的安装密码(后面他人安装该p12文件时需要输入这个密码,重要)4、继续上面的步骤,这里需要输入电脑的开机密码,p12开发者证书到这里即制作完成。以上就…