ITPub博客

首页 > 数据库 > 数据库开发技术 > Linux Kernel TCP/IP Stack|Linux网络硬核系列

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

原创 数据库开发技术 作者:极客重生 时间:2023-06-26 12:17:34 0 删除 编辑


大家好,这里是极客重生,今天给大家介绍Linux网络技术中最核心的部分--TCP/IP协议栈 。     


欢迎大家加入极客星球圈子:

  • 修炼基本功:分享多年基础技术深度理解(比如深入理解系列),基础概念深度解析,经典书籍推荐和阅读经验分享,经典开源软件源码理解分析等;

  • 扩展技术和商业视野:真正的分享海内外技术发展,大厂技术内幕,业界解决方案;

  • 校招/社招:关于一切找工作问题分享,面试问题,简历修改,面试经验,面试问题答疑,各类方向后端学习路线和就业指导;

  • 职场普升/技术专家:分享各种不同公司宝贵的职场普升经验,核心员工,职场潜规则, 团队合作,做事经验,普升经验,技术深耕经验,少走弯路;

  • 专属交流群:高手交流,开阔眼界,分享心得,每天成长,厚积薄发,任何技术问题,任何疑难杂症,都可以咨询,讨论,交流!

  • 深入理解系列

已完成:

  • 深入理解计算机系统

  • 深入理解操作系统(调度,内存,网络,IO)

  • 深入理解并发技术全景指南

  • 深入理解编程语言

  • 深入理解算法与数据结构

  • 深入理解网络协议

  • 深入理解网络编程

  • 深入理解性能优化

敬请期待:

  • 深入理解分布式技术

  • 深入理解数据库

  • 深入理解代码设计

  • 深入理解架构设计

详细了解:极客星球  ,现在加入超级优惠,早点加入一起学习成长,早点突破成长瓶颈:

扫码加入,加我微信:fr35331508,拉你进VIP群。

 


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


TCP/IP四层(参考)模型

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


自顶向下

Socket/ L4 TCP layer

1. socket layer

socket对象层次结构


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转发

链路协议

  • IEEE 802协议族(STP,VLAN,以太网,无线wifi,令牌环等)


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

主要功能

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

最后

整体架构图


如果想了解更多细节,请阅读Linux内核源码或者参考下面两本经典著作:

《The Linux Networking Architecture》

《Understanding Linux Network Internals》

公众号回复"协议栈"可获取经典PDF

我们下次见!


看完记得一键三连在看,转发,点赞

是对文章最大的赞赏,感谢



推荐阅读


‍计算机网络硬核指南|网络设计核心思想‍

网络排障全景指南手册v1.0pdf 全网发布

TCP/IP协议精华指南pdf

一个奇葩的问题

欢迎大家加入极客星球圈子:

  • 修炼基本功:分享多年基础技术深度理解(比如深入理解系列),基础概念深度解析,经典书籍推荐和阅读经验分享,经典开源软件源码理解分析等;

  • 扩展技术和商业视野:真正的分享海内外技术发展,大厂技术内幕,业界解决方案;

  • 校招/社招:关于一切找工作问题分享,面试问题,简历修改,面试经验,面试问题答疑,各类方向后端学习路线和就业指导;

  • 职场普升/技术专家:分享各种不同公司宝贵的职场普升经验,核心员工,职场潜规则, 团队合作,做事经验,普升经验,技术深耕经验,少走弯路;

  • 专属交流群:高手交流,开阔眼界,分享心得,每天成长,厚积薄发,任何技术问题,任何疑难杂症,都可以咨询,讨论,交流!

  • 深入理解系列

已完成:

  • 深入理解计算机系统

  • 深入理解操作系统(调度,内存,网络,IO)

  • 深入理解并发技术全景指南

  • 深入理解编程语言

  • 深入理解算法与数据结构

  • 深入理解网络协议

  • 深入理解网络编程

  • 深入理解性能优化

敬请期待:

  • 深入理解分布式技术

  • 深入理解数据库

  • 深入理解代码设计

  • 深入理解架构设计

详细了解:极客星球  ,现在加入超级优惠,早点加入一起学习成长,早点突破成长瓶颈:

扫码加入,加我微信:fr35331508,拉你进VIP群。

求点赞关注,在看,分享一键三连

原文作者:极客重生;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-01-23

  • 博文量
    165
  • 访问量
    67591