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

Linux网络——网络初识

目录

1. 认识协议

2. 协议的分层

3. OSI 七层模型 && TCP/IP 五层(四层)模型

4. 网络传输的基本流程

5. 以太网的通信原理 

6. 数据的跨网络传播

7. 认识 IP 地址

① IP 是什么

② IP 与 MAC 的关系

③ 为什么需要 IP


在谈及网络之前,我们要先对学的知识有一个了解

网络的本质就是获取数据,而系统的本质就是加工数据

1. 认识协议

而我们要从网络上获取数据,这之中一定会出现很多的问题,比如

  • 如何处理发送过来的数据? -> 应用层 (http, https, ftp, smtp)
  • 长距离传输导致数据丢失了怎么办? -> tcp 协议
  • 如何定位主机呢? -> ip 协议
  • 如何保证数据能够传输到下一个设备呢? -> 数据链路层

那么为什么会出现这些问题呢?——其实是两个设备之间传输数据的距离变长了而已。对于 A 与 B 两个设备来说,整个通信的过程其实就是一个封装与识别的过程!

既然如此,只要我们通信两台设备并约定好协议就可以了吗?——当然不行,计算机的型号有很多,OS 也有很多,硬件一定更多。因此我们只能约定一个共同的标准——即网络协议。

2. 协议的分层

网络协议在实际意义上被分成了层级,在 C++ 中实际是通过继承来实现的,即使用虚拟文件指针在硬件和软件间分层。那么好端端的为什么要分层呢?——满足高内聚,低耦合,举个例子

对于通信设备层来说,我们可以将电话替换成无线电,这对上层的人是没有影响的,也就是解耦了!这会给我们带来一个好处——更加方便维护。在事实上,我们认为人和电话在沟通;在逻辑上,我们认为人和人,电话与电话在沟通。那为什么协议也要分层呢?——协议本身就是层状的。

3. OSI 七层模型 && TCP/IP 五层(四层)模型

OSI (Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。它把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器,交换机。
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。它最大的优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。

图示如下 


但是,它既复杂又不实用。所以我们按照 TCP/IP 五层(四层)模型来讲解,即

应用层:如何处理数据?

传输层(TCP):数据出问题怎么办?

网络层(IP):如何选择路径?

数据链路层:保证任意两台主机能通信

物理层:保证信号的发送效率

这之中网络层与传输层最为重要因为它们与 OS 联系最为紧密,我们来看看 OS 与网络协议栈的关系,如图

我们的用户想做出动作本质就是访问硬件,但是我们又无法直接访问,因此这个过程一定会贯穿 OS ,其中传输层与网络层就是 Linux 内核中的一个模块。所以我们可以知道,整个网络通信的本质实际上就是一个贯穿协议栈的过程,即

4. 网络传输的基本流程

实际上,网络协议栈的层状结构中,每一层都有协议,举个例子

应用层:Telnet, FTP, HTTP, SMTP

传输层:TCP, UDP

网络层:IP, ICMP, IGMP

数据链路层:MAC

 我们现在来简单模拟一下网络传输的基本流程,如图

可以看到,从上往下是一个封装的过程,而从下向上则是一个解包分用的过程。那为什么一定是网卡拿到数据并向上传递呢?——冯诺依曼体系是这样规定的!所以,通信的过程本质就是在不断地进行封装与解包的过程。

只有理解了下面这两点,面对封装与解包我们才不会困惑,即

1. 几乎任何层的协议,都要提供一种能力——将有效载荷与报头分离的能力

2. 几乎任何层的协议,都要在报头中提供 将自己的有效载荷交付给上层的哪一个协议的能力

这是大部分协议的共性,我们以后学习各种各样的协议时都会提出对应的问题。

5. 以太网的通信原理 

接下来我们来看看以太网是如何互相通信的,我们先讲一个例子来引入

当我们坐在教室里上课时,老师在讲台上点名,此时老师点了“张三”,坐在教室里的所有同学在实际意义上都收到了这个信息,然后每个同学将“张三”这个信息和自己的名字作对比,如果相同那就是点到了自己,否则不理会即可

同样的,每台主机在局域网上都要有自己的唯一编号,如图

此时H1想与H7互相通信,H1 就向局域网中发送一个报文,这个报文会被每个主机看到,每个主机拿到这个报文后,会将其中的 dst 与自己作比较,如果不同就舍弃,如果相同就将报头与有效载荷分离以得到数据。

那我们如何看待局域网这个东西呢?——局域网是多台主机所共享的临界资源。那假如在同一时刻多台主机向局域网中发送大量报文,那么就会出现一定程度上的报文丢失,我们将这个问题称为以太网发送数据碰撞问题!所以,我们要使用让发送主机尽量避免碰撞的算法。

为了解决这个麻烦,就出现了交换机这个东西,比如在 H3 与 H8 之间存在一个交换机, H1 与 H7 都在交换机的左边,就会让报文不传递到交换机右边,以此来降低碰撞概率,这实际上是一种基于划分碰撞域的东西。

6. 数据的跨网络传播

如图

可以看到,在整个过程中 IP 协议屏蔽了底层网络的差异化(红线以下部分),靠的就是工作在 IP 层的路由器。也就是说, IP 实现了全球主机的虚拟层,即一切都是 IP 报文!

注:令牌与锁类似,只有持有特殊标识符的主机才能发送消息。

7. 认识 IP 地址

上面说到了 IP,我们就来认识认识 IP

① IP 是什么

IP 一般指 IPv4,它有4个字节,32个比特位,其风格类似于 10.65.181.55

② IP 与 MAC 的关系

在这里我们举个例子,如果我们想从北京到上海,肯定在一路上要路过相当多的省份,而在这之中

从哪里来(srcip),到哪里去(dstip)始终是不变的!其类似于 IP 地址;

而上一站从哪里来(srcmac),下一站到哪里去(dstmac)始终是变化的,其变化依据是我最终去哪里!其类似于 MAC 地址。

根据之前的学习,以太网中的主机设备凭什么将数据交给路由器呢?——根据 IP 判断是否在同一网段。 

③ 为什么需要 IP

对于 IP 地址来说,尤其是目的 IP ,一般都是不会改变的,且可以协助我们进行路径选择;对于 mac 地址来说,在出了局域网后,其源 mac 地址与目的 mac 地址都要丢弃,再经由路由器重新封装。

相关文章:

Linux网络——网络初识

目录 1. 认识协议 2. 协议的分层 3. OSI 七层模型 && TCP/IP 五层(四层)模型 4. 网络传输的基本流程 5. 以太网的通信原理 6. 数据的跨网络传播 7. 认识 IP 地址 ① IP 是什么 ② IP 与 MAC 的关系 ③ 为什么需要 IP 在谈及网络之前,我们要先对学…...

从华为到创业公司

我有一个朋友,在华为工作了很长一段时间,一年多前,他从华为出来到了一家创业公司。 周末趁着有时间,我跟他聊了下关于从华为到创业公司的一些问题,总结给大伙看看。 ▎1 在华为工作和在创业公司工作最大的差别是什么呢…...

Vue 组件通信及进阶语法

文章目录 一、scoped 样式冲突二、data 是一个函数三、组件通信1. 父子通信1.1 props 校验1.2 props 比较 data 2. 非父子通信2.1 event bus2.2 provide-inject 四、进阶语法1. v-model 详解2. sync 修饰符3. ref 和 $refs4. $nextTick 一、scoped 样式冲突 注意点:…...

vue文本高亮处理

在vue的v-for循环中处理搜索关键字高亮问题&#xff0c;通过截取文字判断&#xff0c;分成三段拼接起来 <div class"check-list" v-if"shopList.length >0"><a-checkbox change"onChangeShop($event,item)" :checked"checkedL…...

androidstudio入门到放弃配置

b站视频讲解传送门 android_studio安装包&#xff1a;https://developer.android.google.cn/studio?hlzh-cn 下载安装 开始创建hello-world 1.删除缓存 文件 下载gradle文件压缩&#xff1a;gradle-8.9用自己创建项目时自动生成的版本即可&#xff0c;不用和我一样 https://…...

NLP论文速读(谷歌出品)|缩放LLM推理的自动化过程验证器

论文速读|Rewarding Progress: Scaling Automated Process Verifiers for LLM Reasoning 论文信息&#xff1a; 简介&#xff1a; 这篇论文探讨了如何提升大型语言模型&#xff08;LLM&#xff09;在多步推理任务中的性能。具体来说&#xff0c;它试图解决的问题是现有的基于结…...

【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令1

1.使用快捷键CtrlAltT打开命令终端&#xff0c;或者单击右键点击… 2.常用shell命令 目录信息查看命令&#xff1a;ls ls -a&#xff1a;显示目录所有文件及文件夹&#xff0c;包括隐藏文件&#xff0c;比如以.开头的 ls -l&#xff1a;显示文件的详细信息 ls -al&#xff1…...

【Qt】Qt在窗口中加载Web界面的方法汇总

1、Qt WebEngine 1)Qt版本:Qt5.4以上; 2)平台要求(https://doc.qt.io/archives/qt-5.9/qtwebengine-platform-notes.html): 例如:Windows下只能使用 MSVC 编译器,不支持MinGW编译器,会报错(: error: Unknown module(s) in QT: webenginewidgets) 并且不能用在Qt编…...

Java集合框架之Collection集合遍历

引言 在Java编程中&#xff0c;集合&#xff08;Collection&#xff09;框架是处理对象集合的核心工具。它提供了一套统一的接口和类来存储和操作对象集合。遍历集合是日常开发中的一项基本任务&#xff0c;本文将深入探讨Java Collection集合的遍历方法&#xff0c;并提供实际…...

基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路

一、项目概述 随着电动车的普及&#xff0c;充电桩作为关键基础设施&#xff0c;其智能化、网络化管理显得尤为重要。本项目旨在基于STM32微控制器开发一款智能充电桩&#xff0c;能够实现高效的充电监控与管理。项目通过物联网技术&#xff0c;提供实时数据监测、远程管理、用…...

windows 查看yolo11 是否安装了cuda

一、通过python查看 import torch print(torch.cuda.is_available()) 二、通过 pip list 查看 在conda环境 可以看出torch 后面是2.1.4 cu124 说明GPU环境安装成功。 如果是cpu环境&#xff0c;则是&#xff1a;...

机器学习【激活函数】

笔记内容侵权联系删 激活函数的概念神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值&#xff0c;并将输入值传递给下一层&#xff0c;输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中&#xff0c;上层节点的输入在加…...

【OpenEuler】配置虚拟ip

OpenEuler系统手动配置虚ip 介绍操作方法临时生效永久生效 验证 介绍 我们知道通过keepalived服务可以为linux服务器设置虚拟ip&#xff0c;但是有些特殊场景下若无法安装部署keepalived服务&#xff0c;则需要通过手动设置的方式&#xff0c;配置服务器的虚拟ip。 本方案提供…...

数据分析师证书怎么考

在信息技术飞速发展的今天&#xff0c;数据分析已成为推动各行业进步的核心引擎。CDA&#xff08;Certified Data Analyst&#xff09;数据分析师证书以其权威性和实用性&#xff0c;成为许多数据分析从业者的职业加速器。本文将深入探讨如何考取CDA数据分析师证书&#xff0c;…...

【人工智能】text2vec-large-chinese模型搭建本地知识库

本demo使用 text2vec-large-chinese 模型进行文本处理&#xff0c;然后再过 bge-reranker-v2-m3进行增强 1. 对文本进行向量处理&#xff0c;并保存只至本地 from sentence_transformers import SentenceTransformer import torch import numpy as np import faiss import os …...

前端入门一之ES6--递归、浅拷贝与深拷贝、正则表达式、es6、解构赋值、箭头函数、剩余参数、String、Set

前言 JS是前端三件套之一&#xff0c;也是核心&#xff0c;本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点&#xff0c;这篇是ES6;这篇文章是本人大一学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。 文章目录 10、递归10.1、阶层案例10.…...

DevOps工程技术价值流:加速业务价值流的落地实践与深度赋能

DevOps的兴起&#xff0c;得益于敏捷软件开发的普及与IT基础设施代码化管理的革新。敏捷宣言虽已解决了研发流程中的诸多挑战&#xff0c;但代码开发仅是漫长价值链的一环&#xff0c;开发前后的诸多问题仍亟待解决。与此同时&#xff0c;虚拟化和云计算技术的飞跃&#xff0c;…...

IP数据云 识别和分析tor、proxy等各类型代理

在网络上使用代理&#xff08;tor、proxy、relay等&#xff09;进行访问的目的是为了规避网络的限制、隐藏真实身份或进行其他的不正当行为。 对代理进行识别和分析可以防止恶意攻击、监控和防御僵尸网络和提高防火墙效率等&#xff0c;同时也可以对用户行为进行分析&#xff…...

vue2 自动化部署 shell 脚本

需求场景&#xff1a;在云平台中进行开发时&#xff0c;由于无法连接外网&#xff0c;在部署前端项目时&#xff0c;是通过本地打包再上传到服务器的方式进行部署的。基于这种部署场景&#xff0c;通过 shell 脚本进行部署流程优化&#xff0c;具体如下&#xff1a; 1、服务器…...

服务器数据恢复——Ext4文件系统使用fsck后mount不上的数据恢复案例

关于Ext4文件系统的几个概念&#xff1a; 块组&#xff1a;Ext4文件系统的全部空间被划分为若干个块组&#xff0c;每个块组结构基本上相同。 块组描述符表&#xff1a;每个块组都对应一个块组描述符&#xff0c;这些块组描述符统一放在文件系统的前部&#xff0c;称为块组描述…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...