Linux网络:基于OS的网络架构

news2025/2/24 8:56:46

Linux网络:OS视角下的网络架构

    • 网络分层模型
      • OSI 七层模型
      • TCP/IP 五层模型
    • 协议
    • 操作系统与网络
    • 网络相关命令
      • ifconfig
      • ping
      • netstat


本博客将基于操作系统,讲解计算机网络的设计理念,帮助大家理解操作系统与网络之间的关系。

网络分层模型

网络设计之初,国际标准组织就设计了第一套互联网标准,用于规范互联网,并在全世界推行。这套标准叫做OSI,即(Open System Interconnection)开放式系统互连参考模型。

OSI 七层模型

OSI模型如下:

分层功能
应用层提供网络服务给应用程序,处理特定应用的网络协议
表示层数据表示格式的转换和加密、解密,确保数据格式兼容性
会话层管理会话(连接)的建立、维护和终止
传输层管理端到端的数据传输,确保数据完整传输
网络层负责路径选择和逻辑地址管理,实现跨网络的数据传输
数据链路层负责节点到节点之间的数据传输和错误检测
物理层处理物理介质上的比特流传输,将数据转化为电信号或光信号

OSI模型通过将网络通信分为七个独立的层,允许每一层专注于特定的功能。这种模块化设计使得开发、测试和维护变得更加容易。每一层可以独立开发、更新或替换,而不影响其他层。

在主流的教材中,把这种模型称为”法律上的标准“,因为其没有被广泛推行。七层模型有点过于冗余了,实际开发中并不实用。其实七层模型的设计理念是非常优秀的,最后使用的虽然是五层模型,但是在编程时,依然使用七层模型的思想!


TCP/IP 五层模型

TCP/IP模型如下:

分层功能
应用层提供应用程序与网络之间的接口,处理特定应用的网络协议
传输层负责端到端的数据传输和连接管理,确保数据可靠传输
网络层处理跨网络的数据包传输和路由选择,使用IP协议进行逻辑地址管理
数据链路层负责节点到节点之间的数据帧传输和错误检测,确保局部网络数据传输可靠
物理层处理实际的物理介质上的比特流传输,将数据转化为电信号或光信号

相比于OSI模型,TCP/IP模型将应用层表示层会话层合为了应用层。这是因为在编程中,这三层的功能都由程序员实现,所以最后干脆都合为应用层了。

对于一个基于TCP的网络通信过程,用户首先要建立TCP连接,连接建立成功后就可以收到来自其他主机的数据,此时就要对数据的格式进行处理,比如对数据进行解密,最后将解密的数据进行业务处理。

以上是一个程序员进行网络编程的基本流程,在该流程中,每个步骤都对应一个OSI的分层:

  1. 会话层:建立TCP连接
  2. 表示层:对数据的格式进行处理,比如对数据进行解密
  3. 应用层:将解密的数据进行业务处理

就是因为这三层的功能都由自己编码完成,所以最后这三层就被合并成了应用层


协议

在教材中,协议的定义为:

协议是控制两个对等实体进行逻辑通信的规则的集合

协议的目的是为了更加准确高效地在网络传递数据,协议的三要素是:语法语义同步

三要素的含义如下:

  • 语法:规定通信双方交换信息的结构和格式
  • 语义:规定通信双方交换信息的含义和目的
  • 同步:规定通信双方的时序关系

接下来简单说一个生活中的小案例,帮助理解协议:

在班级中有一群爱打篮球的同学,他们每天最后一节课都要互相问去不去打篮球,决定要不要抢篮球场。但是课堂上是不允许说话的,如果聊天的话会被老师批评。于是同学之间约定,每天最后一节课篮球队长都会敲桌子:

  1. 如果敲一次桌子:打篮球,下课要去抢篮球场
  2. 如果敲两次桌子:不打球
  3. 如果敲三次桌子:踢足球,篮球场已经没有了

队长为了统计有哪些人要参加篮球,于是又约定:等敲完桌子后,谁想参加篮球,就打一个喷嚏,篮球队长就可以更具喷嚏数量来得知篮球的人数。

于是后续每天最后一节课都会发出敲桌子和打喷嚏的声音,因为只有短短几声,老师注意不到,而同学们却都知道了下课要不要打篮球。

这个过程中敲桌子就是一个协议,三要素对应如下:

  • 语法:通过敲桌子,打喷嚏来传输信息,敲桌子有不同敲击次数
  • 语义:敲桌子和打喷嚏的含义不同,而不同敲击次数的含义也不同
  • 同步:先敲桌子,再打喷嚏,因为喷嚏是敲桌子的响应

你会发现,在规定协议前想去打篮球,要说:“今天下午去篮球场打球,记得抢篮球场”,而现在只需要敲一次桌子。由于协议的存在,大幅度压缩了传递信息的成本,并且老师听不懂敲桌子的含义,所以还有一定的加密效果

在实际的计算机网络中,两个主机之间的距离可能是几十公里,几百公里,甚至半个地球。传递信息的成本非常高,此时协议的重要性就不言而喻了。

你也许见过很多理论课程中的协议格式,比如说TCP的报头:

在这里插入图片描述

但是你多半没有见识过真正的协议,以上图片只是TCP报头的一个图示,而实际上TCP报头的本质就是C/C++中的一个结构体!

Linux 2.6.10源码中,TCP报头的结构体如下:

struct tcphdr {
	__u16	source;
	__u16	dest;
	__u32	seq;
	__u32	ack_seq;
#if defined(__LITTLE_ENDIAN_BITFIELD)
	__u16	res1:4,
		doff:4,
		fin:1,
		syn:1,
		rst:1,
		psh:1,
		ack:1,
		urg:1,
		ece:1,
		cwr:1;
#elif defined(__BIG_ENDIAN_BITFIELD)
	__u16	doff:4,
		res1:4,
		cwr:1,
		ece:1,
		urg:1,
		ack:1,
		psh:1,
		rst:1,
		syn:1,
		fin:1;
#else
#error	"Adjust your <asm/byteorder.h> defines"
#endif	
	__u16	window;
	__u16	check;
	__u16	urg_ptr;
};

比如source是源地址,dest是目的地址,中间的finsyn是标志位。此处使用了C语言结构体的位段语法,不了解的自行学习。

那么为什么TCP的报头就是C/C++的结构体?这就和操作系统有关了。


操作系统与网络

我先前在博客[Linux系统:冯诺依曼结构 & OS管理机制]中讲解了操作系统的架构:

在这里插入图片描述

这个结构其实和计算机网络有非常大的关系,如下:

在这里插入图片描述

其实计算机网络中的每一层都在操作系统中有对应的层次:

网络层次系统层次关系
物理层底层硬件物理层基于操作系统的硬件设备网卡
数据链路层驱动程序数据链路层协议在网卡的驱动程序实现
网络层操作系统IP协议在操作系统内部实现
运输层操作系统TCP / UDP 协议在操作系统内部实现
应用层用户应用层协议由用户自己实现

其实网络也属于操作系统源代码的一部分,而主流操作系统是C语言写的,因此计算机运输层以下的网络协议,都是C语言结构体完成的。

目前主流的WindowsLinuxMacOS系统的核心也是C/C++,对应的网络协议栈也就是C/C++完成。假设现在新出现一个操作系统,是其他语言编写的,那么这个操作系统就无法解析C/C++的结构体,进而导致无法理解协议的内容,最后无法联网!

世界上所有操作系统,想要联网,就必须遵顼TCP/IP协议栈,进而必须使用C/C++完成网络部分内核


网络相关命令

本博客是Linux的网络入门文章,接下来再简单了解以下Linux中基本的网络命令。

ifconfig

不带任何参数运行 ifconfig 会显示所有活动的网络接口的当前配置,如 IP 地址、子网掩码、广播地址、MTU(最大传输单元)等。通过该指令可以了解当前主机的网络接口相关信息。

在这里插入图片描述

ifconfig 输出中,显示了两个网络接口的信息:eth0lo,大多数计算机系统都有多个网络接口。

  • eth0 是一个有线以太网接口,通常用于连接到外部网络
  • lo 接口是一个特殊的回环接口,通常被称为本地回环接口,数据包发送到这个接口时会被回送到发送者自身

对于eth0,可以看到:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  • eth0: 这是网络接口的名称,通常表示第一个以太网接口。
  • flags=4163<UP,BROADCAST,RUNNING,MULTICAST>: 这些标志表示接口的状态和功能。
    • UP: 接口已启用,处于活动状态。
    • BROADCAST: 接口支持广播功能。
    • RUNNING: 接口正在运行,通常表示接口已连接到网络。
    • MULTICAST: 接口支持多播功能。
  • mtu 1500: MTU(最大传输单元)是接口可以传输的最大数据包大小,单位是字节。对于以太网,默认通常是 1500 字节。
inet 172.29.202.116  netmask 255.255.240.0  broadcast 172.29.207.255
  • inet 172.29.202.116: 接口的 IPv4 地址。
  • netmask 255.255.240.0: 子网掩码,用于确定网络地址和主机地址的部分。
  • broadcast 172.29.207.255: 广播地址,数据包发送到这个地址时,将会被发送到同一网络中的所有设备。
inet6 fe80::216:3eff:fe10:ec6d  prefixlen 64  scopeid 0x20<link>
  • inet6 fe80::216:3eff:fe10:ec6d: 这是接口的链路本地 IPv6 地址。fe80::/10 是链路本地地址范围。
  • prefixlen 64: 表示子网前缀长度为 64 位。
  • scopeid 0x20<link>: 表示地址的作用域为链路本地(link),即只在本地链路上有效。
ether 00:16:3e:10:ec:6d  txqueuelen 1000  (Ethernet)
  • ether 00:16:3e:10:ec:6d: 这是接口的 MAC 地址,用于在以太网层识别设备。
  • txqueuelen 1000: 这是接口的传输队列长度,通常用于控制传输队列的大小。
  • (Ethernet): 表示接口使用的是以太网协议。

ping

ping 是一个用于测试网络连通性和诊断网络问题的命令行工具。它通过向目标主机发送 ICMP回显请求数据包,并等待接收目标主机返回的回显应答数据包,来判断目标主机是否可达以及网络的延迟情况。

基本语法:

ping [选项] 目标主机
  • 目标主机:可以是目标主机的 IP 地址、域名(如 www.example.com)、或者主机名(如 localhost)。

尝试ping www.baidu.com

在这里插入图片描述

最后所有报文都收到,说明该主机与baidu之间的连通性是通畅的。

常见选项:

  • -c <次数>:指定发送的请求次数。默认情况下,ping 会一直发送请求,直到被用户手动中断(通常使用 Ctrl+C)。例如,-c 4 会发送 4 个请求。

  • -i <间隔秒数>:指定每个请求之间等待的时间间隔(以秒为单位)。默认是 1 秒。

  • -f:洪水模式(flood ping)。在这种模式下,ping 会尽可能快地发送数据包并显示结果。这种模式通常用于压力测试,普通用户不建议使用。

  • -q:安静模式。只显示 ping 命令的汇总统计信息,而不是每个数据包的应答。


netstat

netstat用于查看网络状态,常用选项如下:

  • n:显示IP地址而不限制主机名
  • l:列出在监听状态下的服务
  • p:显示建立该连接的程序名
  • t:只显示TCP连接相关的服务
  • u:只显示UDP连接相关的服务
  • a:显示所有服务,如果不带a,则只显示在当前终端启动的服务

常用的组合是:npuanpta

在这里插入图片描述

使用npta,展示的所有进程都是TCP连接,但是由于我们没有root权限,只能看到少量信息,此时可以sudo提权:

在这里插入图片描述

此时最右侧的pragma name显示出来了,这些就是使用TCP的服务的名称,比如常见的数据库mysql


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DIAdem 与 LabVIEW

DIAdem 和 LabVIEW 都是 NI (National Instruments) 公司开发的产品&#xff0c;尽管它们有不同的核心功能和用途&#xff0c;但它们在工程、测试和测量领域中常常一起使用&#xff0c;以形成一个完整的数据采集、分析、处理和报告生成的解决方案。 1. 功能和用途 LabVIEW (Lab…

杭州造价信息_杭州造价信息网建设工程材料信息价

杭州造价信息&#xff0c;全称为《杭州造价信息》&#xff0c;简称为“杭州市信息价”或“杭州市建材信息价”&#xff0c;是杭州市建设工程主管部门发布的建筑建材市场指导价&#xff0c;也是杭州市建筑工程项目招标与结算的建材价格标准。这一信息由杭州市住建局或共享建材汇…

【深度学习基础】关于卷积神经网络你了解多少?

文章目录 卷积稀疏交互参数共享池化层全连接层转置卷积空洞卷积卷积神经网络与全连接神经网络 本篇博客主要是讲解一些本人对于卷积的理解&#xff0c;包括&#xff1a; 为什么会出现卷积操作&#xff1f;最基本的卷积操作&#xff1f;卷积的优缺点。空洞卷积等等。卷积操作牵扯…

启明智显借 AI 之翼重塑人机交互,强劲赋能智能硬件升级腾飞

在科技日新月异的今天&#xff0c;启明智显作为人机交互&#xff08;HMI&#xff09;与物联网人工智能&#xff08;AIoT&#xff09;硬件领域的领航者&#xff0c;正以前所未有的决心和行动力&#xff0c;推动着智能硬件行业的深刻变革。公司不仅致力于将最先进的人工智能技术融…

Java 中高级面试题:16题

1. Java 中有哪些不同类型的线程优先级&#xff1f;JVM 分配的线程默认优先级是多少&#xff1f; 线程优先级是这样的概念&#xff1a;每个线程都有一个优先级&#xff0c;用外行人的语言来说&#xff0c;可以说每个对象都有优先级&#xff0c;用 1 到 10 之间的数字表示。Jav…

Openleyer 获取features样式

目录 一、需求说明&#xff1a; 二、业务功能分析&#xff1a; 三、地图点击事件 四、地图要素select事件 五、地图双击事件 六、移动到地图点事件 一、需求说明&#xff1a; 若聚合情况下&#xff0c;点击聚合要素&#xff0c;若只有一个要素&#xff0c;则显示详情信息…

【安卓】WebView的用法与HTTP访问网络

文章目录 WebView的用法使用http访问网络使用HttpURLConnection使用OkHttp 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 WebView的用法 新建一个WebViewTest项目&#xff0c;然后修…

管易云与金蝶K3-WISE对接集成发货单查询打通新增其他出库

管易云与金蝶K3-WISE对接集成发货单查询打通新增其他出库 对接系统&#xff1a;管易云 管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌&#xff0c;先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务&#xff0c;涵盖电商业务全流程。…

本地连接服务器上docker中的redis

在上一篇本地连接服务器redis这篇文章中详细介绍了。 这里连接服务器中docker中的redis&#xff0c;同样的操作步骤 1.看一下服务器上redis实例的运行状态&#xff1a; [rootiZuf67k70ucx14s6zcv54dZ var]# ps aux | grep redis-server若显示&#xff1a; 则说明服务器上do…

Denser Retriever: RAG中更强大的AI检索器,让您10 分钟内构建聊天机器人应用

一、Denser Retriever 介绍 Denser Retriever 是一个企业级的RAG检索器&#xff0c;将多种搜索技术整合到一个平台中。在MTEB数据集上的实验表明&#xff0c;Denser Retriever可以显著提升向量搜索&#xff08;VS&#xff09;的基线&#xff08;snowflake-arctic-embed-m模型,…

如何在PyCharm使用conda虚拟环境,如何使用远程Linux系统上的conda虚拟环境。

目录 在PyCharm使用conda虚拟环境&#xff08;windows&#xff09; 使用远程Linux系统上的conda虚拟环境 在PyCharm使用conda虚拟环境&#xff08;windows&#xff09; 首先请创建好虚拟环境 点击输入 conda create -n pyspark python3.8 # conda create -n 名字任取 py…

智谱AI与和鲸科技签署战略合作协议,共拓大模型产业应用与人才培养新未来

8月9日&#xff0c;北京智谱华章科技有限公司&#xff08;智谱 AI&#xff09;与上海和今信息科技有限公司&#xff08;和鲸科技&#xff09;在北京签署战略合作协议。智谱 AI 总裁王绍兰与和鲸科技创始人、CEO 范向伟亲临现场&#xff0c;发表致辞并见证签约。智谱 AI AIGC 事…

Python软件包和PIP镜像下载地址

一、Python软件下载地址 1. 官网下载 https://www.python.org/downloads/ 2. 国内第三方镜像 https://mirrors.huaweicloud.com/python/ https://registry.npmmirror.com/binary.html?pathpython/ 从以上国内镜像即可下载安装程序&#xff0c;Windows平台&#xff0c;不论是In…

网络安全 DVWA通关指南 DVWA File Inclusion(文件包含)

DVWA File Inclusion&#xff08;文件包含&#xff09; 文章目录 DVWA File Inclusion&#xff08;文件包含&#xff09;本地文件包含(LFI)漏洞利用 远程文件包含(RFL)漏洞利用 修复建议 LowMediumHighImpossible 本地文件包含(LFI) 文件包含漏洞的产生原因是 PHP 语言在通过引…

我的世界 异地联机教程 无需公网IP、服务器

主要内容 什么是Minecraft&#xff08;JAVA国际版&#xff09; 搭建该服务&#xff0c;需要准备什么 详细步骤 1.启动器 安装MC并运行MC 2.运行 MoleSDN 进行异地联机 3.小伙伴皮蛋加入鼠鼠的MC 完成联机 什么是我的世界 一款3D沙盒电子游戏&#xff0c;由Mojang Studio…

ComfyUI大猫咪写真工作流,哩布线上一键运行

前言 这次教程是用ComfyUI做的大猫咪写真。 视频教程 打开下面这个网站&#xff0c;点击【在线运行工作流】就可以一键运行ComfyUI工作流了 所有的AI设计工具&#xff0c;模型和插件&#xff0c;都已经整理好了&#xff0c;&#x1f447;获取~ 正面关键词&#xff1a; Chin…

基于二叉树的近似最近邻搜索-Annoy

在推荐系统的召回阶段&#xff0c;会实时计算用户的表征向量&#xff08;user/query&#xff09;&#xff0c;然后去物料库去寻找与用户最匹配的N个物料返回给用户&#xff1b;在搜索系统&#xff0c;也同样存在这样的需求&#xff0c;用户的搜素&#xff08;query&#xff09;…

Efficient DETR:别再随机初始化了,旷视提出单解码层的高效DETR | CVPR 2021

Efficient DETR结合密集检测和稀疏集合检测的优点&#xff0c;利用密集先验来初始化对象容器&#xff0c;弥补单层解码器结构与 6 层解码器结构的差距。在MS COCO上进行的实验表明&#xff0c;仅 3 个编码器层和 1 个解码器层即可实现与最先进的目标检测方法竞争的性能&#xf…

指针函数与函数指针的区别

1、指针函数 1-1、定义 指针函数&#xff0c;顾名思义&#xff0c;是一个函数&#xff0c;但其返回类型是指针。这意味着当这个函数被调用时&#xff0c;它会返回一个地址值&#xff0c;这个地址值指向某个类型的数据。 1-2、特点 函数性质&#xff1a;首先&#xff0c;它是…

【2024】20个高级 Java 面试问题及答案

1&#xff1a;解释Java序列化中transient关键字的意义。 在 Java 中&#xff0c;“ transient ”关键字用于指示变量在对象序列化期间不应被序列化。当变量被标记为“transient”时&#xff0c;意味着该变量应被序列化机制忽略。 这在处理不应持久的敏感或临时数据时特别有用…