首页 > 系统相关 >Linux Kernel TCP/IP Stack|Linux网络硬核系列

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

时间:2022-09-06 20:00:16浏览次数:83  
标签:协议 layer socket Kernel IP 报文 TCP Linux 硬核

 

 介绍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

主要功能

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

最后

整体架构图

 

标签:协议,layer,socket,Kernel,IP,报文,TCP,Linux,硬核
From: https://www.cnblogs.com/windyrainy/p/16663141.html

相关文章

  • Linux学习笔记:mkdir创建文件夹
    Linux学习笔记:mkdir创建文件夹文件夹,即目录,在linux中使用mkdir创建。语法:mkdirdir_name通过mkdir命令可以实现在指定位置创建以dir_name(指定的文件名......
  • [安装配置] Linux安装配置maven
    第一步:上传压缩包第二步:解压压缩包tar-zxvfapache-maven-3.5.4-bin.tar.gz-C/usr/local第三步:配置settings.xml文件进入配置文件目录cd/usr/local/apache-mave......
  • [安装配置] Linux安装git
    第一步:在线安装Gityuminstallgit 询问输入'y'第二步:测试git--version......
  • [安装配置] Linux安装tomcat
    第一步:上传压缩包第二步:解压压缩包tar-zxvfapache-tomcat-8.5.57.tar.gz-C/usr/local第三步:启动进入tomcat根目录下的bin文件夹中cd/usr/local/apache-tomcat-8......
  • [安装配置] Linux安装MySQL
    第一步:查看mysql相关的软件查询当前系统中安装的名称带mysql的软件rpm-qa|grepmysql查询当前系统中安装的名称带mariadb的软件rpm-qa|grepmariadb第二步:卸载......
  • [安装配置] Linux安装配置JDK
    第一步:上传压缩包jdk8.tar.gz第二步:解压压缩包tar-zxvfjdk8.tar.gz-C/usr/local第三步:配置环境变量打开环境变量配置文件vim/etc/profile在文件的最后加上以......
  • Linux调度系统全景指南(上篇)
    导语:本文主要是讲Linux的调度系统,由于全部内容太多,分三部分来讲,调度可以说是操作系统的灵魂,为了让CPU资源利用最大化,Linux设计了一套非常精细的调度系统,对大多数场景都进......
  • 记录一下~~~Linux配置定时任务备份数据库dmp文件
    1.创建备份目录:mkdir-p/dcits/sx_xmz/sx_data_bakchown-Roracle18c:oinstall/dcits/sx_xmz/sx_data_bak2.脚本文件编写vidatabak.sh输入如下内容#设置环节......
  • Linux 系统优化
    题目系统资源限制设置:设置所有用户的硬件跟软件的最大进程数、最大文件打开数为65535;开启IPV4恶意icmp错误消息保护;开启SYN洪水攻击保护;允许系统打开的端口范......
  • linux tar打包压缩排除某个目录或文件
    用tar打包时想剔除打包目录中的某个子目录或文件:比如你想打包/home这个目录,但是/home/afish/目录和/home/www/afish.php文件你都不想打包,方法是:tar-zcvfhome.tar.gz......