当前位置: 首页 > news >正文

linux内核网络子系统初探---概述

linux内核网络子系统初探—概述

一、网络模型 简单介绍

学习网络时,必定能在各种教材资料里见到以下三种网络模型:
在这里插入图片描述
三种模型间的差异:

  • OSI七层模型是理论上的网络模型,从功能方面分成了相对独立的7个层次,由于太复杂所以仅停留在理论上,并没有实际应用。
  • TCP/IP四层模型是商用的模型,是由实际应用发展总结出来的。
  • 五层模型一般是教学目的,为了介绍网络原理设计的,采取折中的方法结合了OSI与TCP/IP模型的特点。

下图是七层与四层模型具体功能的对比图,可基本了解网络子系统的功能组成:
在这里插入图片描述
这几种模型是根据功能划分的,内核的实现代码不是按这样分层次编写的,每一模型层可能对应着许多具体的驱动接口层。
PS:本系列提及的“应用层”、“传输层”、“网络层”、“数据链路层”、“物理层”均指代的是五层模型中对应的层。

二、 网络基础知识

  • 互联:在internet里,互联表示多个计算机网络在物理与逻辑上的连接。网络协议即是统一规定了互联的具体规则。
  • PDU(protocol data unit):网络模型中,每一层使用自己的协议与另一系统内的对应层相互通信,每层协议在对等层间交换的信息叫PDU协议数据单元。
    在这里插入图片描述
  • 网络数据的封装、解封:
    在这里插入图片描述
    在这里插入图片描述
  • ipv4与ipv6:ipv6被称为下一代互联网的协议,是由于ipv4地址逐渐耗尽才设计的ipv6。两者最直观的差异在于ip地址。ipv4地址共32bit,ipv6地址扩展到128bit。目前一般提到的ip协议指的是ipv4。

三、最初的linux内核网络模块

内核版本号时间内核版本发展情况
v0.011991/9第一个正式向外发布的Linux内核版本,此时代码里还没有网络支持
v0.961992/5开始加入网络支持,此时linux/net里只支持本地socket处理,没有tcp/ip相关协议族,不算严格意义上的网络模块
v1.01994/3Linux 1.0版本正式发布,linux的使用逐渐广泛
从linux v1.0开始,内核才真正实现了网络协议栈功能。
linux v1.0代码中网络部分:
[root@localhost linux-1.0]# ls net/
ddi.c  inet  Makefile  socket.c  Space.c  unix
[root@localhost linux-1.0]# ls net/inet/
arp.c       dev.h   icmp.h  loopback.c  protocol.c  README    skbuff.h  tcp.h    utils.c
arp.h       eth.c   inet.h  Makefile    protocol.h  route.c   sock.c    timer.c
datagram.c  eth.h   ip.c    packet.c    raw.c       route.h   sock.h    udp.c
dev.c       icmp.c  ip.h    proc.c      raw.h       skbuff.c  tcp.c     udp.h
[root@localhost linux-1.0]# ls net/unix/
Makefile  proc.c  sock.c  unix.h

其中,unix子文件夹是unix域协议族的相关代码。

PS:关于unix
unix域协议族是client/server在同一台主机上通信时使用的一种机制,分为两类套接字:字节流套接字(类似于TCP)和数据报套接字(类似于UDP)。UNIX域协议特点:在同一台主机上的传输速度比tcp/ip协议栈快大概两倍。

linux内核网络子系统初探 这个系列,将对照着最原始版本 v1.0 的代码,初步系统性的学习linux内核代码中的网络部分。后续文章将主要围绕socket层(对应着应用层)、tcp+udp层(对应着传输层)、ip层(对应着网络层)、ethernet层(对应着数据链路层) 这5个网络子系统核心部分(涉及到5层网络模型中的4层,内核中没有物理层)来讲解。

http://www.lryc.cn/news/65523.html

相关文章:

  • java版工程项目管理系统源代码-功能清单 图文解析
  • 【chapter30】【PyTorch】[动量与学习率衰减】
  • 【键入网址到网页显示】
  • Nacos配置中心、配置热更新、及配置共享的记录
  • MATLAB | 绘图复刻(八) | 堆叠柱状图+哑铃图
  • Scala之集合(2)
  • 【图像分割】视觉大模型SEEM(Segment Everything Everywhere All at Once)原理解读
  • Linux: command: ibstat; infiniband
  • UML简介与类图详解
  • 【每日一题】1994.好子集的数目
  • 坚持伙伴优先,共创数据存储新生态
  • 树形结构的三级分类如何实现?
  • SSM整合完整流程
  • 虹科方案 | 助力高性能视频存储解决方案-2
  • java版深圳 工程管理系统软件 自主研发,工程行业适用 软件源码
  • 云原生Istio架构和组件介绍
  • 吹爆,全网第一个手把手教你从零开始搭建Spring Cloud Alibaba的笔记
  • 企业短信遭疯狂盗用,可能是没配置验证码
  • 【UE】直升机沿样条线移动
  • GaussDB_200_6.5.1部署安装
  • 软件工具 | Python调用运筹优化求解器(一):以CVRPVRPTW为例
  • 如何在JAVA中实现网络编程?
  • 【redis】redis的缓存过期淘汰策略
  • ASP.NET动态Web开发技术第8章
  • 【旋转编码器如何工作以及如何将其与Arduino一起使用】
  • Tre靶场通关过程(linpeas使用+启动项编辑器提权)
  • java多线程下
  • 使用无标注的数据训练Bert
  • 《Netty》从零开始学netty源码(五十二)之PoolThreadCache
  • 放弃40k月薪的程序员工作,选择公务员,我来分享一下看法