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

『 Linux 』网络基础

文章目录

    • 协议分层
    • OSI 七层模型
    • TCP/IP 四层(五层)模型
    • 网络协议栈与操作系统的联系
    • 报文
    • TCP/IP 通讯过程
    • 以太网通信的过程
      • 以太网的数据碰撞


协议分层

请添加图片描述

协议分层是计算机网络中奖网络协议进行组织和管理的方法;

通过将网络通信过程分成多个层次,每个层次负责特定的功能从而简化网络设计和实现;

常见的协议分层模型包括OSI模型和TCP/IP模型;

协议分层使得同层之间可以直接交换信息,而不需要上层或下层进行中介从而提高效率;

其优点为如下:

  • 简化设计

    将复杂的网络通信过程分解为多个简单的层次,每个层只需关注特定的功能从而降低了系统的复杂性;

  • 模块化

    每一层可以独立开发和维护,便于更新换代某一层的协议而不影响其它层;

  • 标准化

    通过定义每一层的功能和接口从而促进不同设备和技术之间的互操作性;

  • 故障隔离

    当出现问题时可以更容易定位到具体的层从而提高故障排查和修复的效率;

  • 灵活性

    不同的网络技术可以在同一层上工作使得新技术可以被集成到现有网络中二不需要全面重构;

  • 可拓展性

    协议分层允许在未来进行扩展或引入新的协议以适应技术的发展变化;

在这个例子中AB使用同一种语言进行沟通,在宏观上AB直接进行沟通,但实际上为A将语言以特定的形式发给座机,座机与座机之间进行通信,而后座机将信息处理完毕后重新使B接收从而达到一个通过不同层协议的封装与解包后宏观上AB直接通信的效果;

由于协议进行分层,AB都无需关心座机协议如何处理;

当某层协议进行更换时其他层也无需了解,从而降低了维护成本;


OSI 七层模型

请添加图片描述

OSI模型将网络通信过程分为七个层次为一个协议栈,每一层都有其特定的功能和协议;

  • 应用层

    为用户提供网络服务,支持各种应用程序的运行;

    通常的协议有HTTP(超文本传输协议),FTP(文件传输协议),SMTP(简单邮件传输协议),DNS(域名系统)等;

  • 表示层

    负责数据的格式转换,加密解密,以及数据压缩和解压缩以确保不同系统间的数据能够被理解;

    通常协议有JPEG,MPEG,ASCII,TLS(传输层安全)等;

  • 会话层

    用于管理用户会话,控制会话的建立,维护和终止,同时还负责会话的恢复和同步;

    通常协议有RPC(远程过程调用),NetBIOS等;

  • 传输层

    用于提供端到端的数据传输服务,确保数据完整性和可靠性,包括流量控制和错误检查;

    通常协议有TCP(传输控制协议),UDP(用户数据报协议)等;

  • 网络层

    负责数据包在不同网络间的传输,处理路由器选择和逻辑地址(如IP地址)的分配;

    通常协议有IP(互联网协议),ICMP(互联网控制消息协议),IGMP(互联网组管协议互联网组管协议)等;

  • 数据链路层

    负责物理地址(如MAC地址)的处理,确保在同一网络内数的数据帧传输,提供错误检测和纠正功能;

    通常协议有Ethernet(以太网),PPP点对点协议,HDLC(高级数据链路控制)等;

  • 物理层

    用于负责实际的物理连接和信号传输,包括电缆,接头,信号电压和数据传输速率等;

    通常的协议有USB,RS-232,IEEE 802.3(以太网标准)等;

而实际上在一般实际的网络实现中传输层,网络层,和数据链路层被视为同一层;

主要原因为:

  • 相互依赖

    这三层在功能上存在很大的依赖关系,网络层负责选择数据包的路由,而传输层则确保这些数据包的可靠传输,数据链路层则处理物理地址和局部网络的传输;

  • 协议栈的简化

    在许多现代网络协议栈(TCP/IP模型)中,网络层和传输层的功能往往会在同一设备或软件中实现;

    如路由器和交换机通常同时处理IP数据包和TCP/UDP数据段;

    结合使得设备的设计和维护变得更加简单和高效;

通常情况下OSI模型为一个标准或者参考框架,而类似于TCP/IP模型则是这一标准在实际应用中的具体实现;


TCP/IP 四层(五层)模型

请添加图片描述

TCP/IP四层模型是互联网协议套件的基础,通常被描述为四层模型,每一层都有其特定的功能和协议;

  • 应用层

    用于负责为用户提供网络服务,支持各种应用程序的运行,处理用户界面和应用程序之间的交互;

    通常协议有HTTP(超文本传输协议),FTP(文件传输协议),SMTP(简单邮件传输协议),DNS(域名系统)等;

  • 传输层

    负责在网络中提供端到端的通信,确保数据的完整和可靠性,处理数据的分段,传输和重组;

    通常协议有TCP(传输控制协议),UDP(用户数据报协议)等;

  • 网络层

    负责数据包的路由选择和传输,处理逻辑地址(如IP地址)的分配,确保数据包能够在不同网络之间传输;

    通常协议有:

    • IP(互联网协议)

      负责数据包的寻址和路由;

    • ICMP(互联网控制消息协议)

      用于发送错误消息和操作信息;

    • ARP(地址解析协议)

      用于将IP地址映射到物理地址(MAC地址);

  • 链路层

    链路层负责在同一网络内的数据帧传输,处理物理地址(MAC地址)和数据的封装与解封装,以确保数据在物理媒介上的传输;

    协议通常有:

    • Ethernet(以太网)

      最常用的局域网技术;

    • Wi-Fi

      无限局域网技术;

    • PPP(点对点协议)

      用于点对点连接;

  • 物理层


网络协议栈与操作系统的联系

请添加图片描述

网络协议栈和操作系统之间的联系在于操作系统负责实现和管理网络协议栈的各个层次以便支持网络通信;

以Linux为例;

操作系统是计算机系统的核心,负责管理硬件和软件资源,包括网络通信;

Linux操作系统通过内核实现网络协议栈从而提供网络功能的基础;

Linux的网络协议栈通常遵循TCP/IP模型;

该图为网络协议栈与操作系统的相关联系;

其中数据链路层与物理层对应操作系统的设备和驱动部分;

传输层与网络层对应操作系统中的系统层,这意味着通常传输层与网络层将由操作系统实现,其中将为上层提供对应的系统调用接口;

应用层对应操作系统的系统层;

当存在两台主机,即主机A与主机B,主机A向主机B通过网络发送数据时将层层封装,数据到达主机B时将被层层解包最后再交由用户;


报文

请添加图片描述

报文是网络通信过程中,由发送方生成并发送给接收方的一组数据;

报文通常包含了控制信息和用户数据两部分,用于实现不同的通信功能;

报文一般由头部,有效载荷,尾部(可选)组成;

  • 头部

    头部一般包含控制信息,用于知道网络设备如何处理报文;

    头部通常包括发送的原地址,目的地址,序列号,协议类型,校验和等信息;

    不同的协议有不同的头部格式,如IP报文头部和TCP报文头的格式是不同的;

  • 有效载荷

    有效载荷为实际传输的数据内容,即下一层关心的信息;

    有效载荷的大小可根据协议和应用的需求而变化;

  • 尾部(可选)

    在某些协议中,报文的尾部可能包含一些额外的信息,如错误检测码或结束标识;

在网络协议栈中,报文的概念可以在不同层次上体现:

  • 应用层报文

    在应用层,报文通常指应用程序之间交换的信息,如HTTP请求和响应;

  • 传输层报文

    在传输层中报文可以指TCP段或UDP数据包;

  • 网络层报文

    在网络层中报文通常被称为IP数据包,其包含IP地址,目的IP地址以及其他路由信息;

  • 链路层报文

    在链路层中,报文被称为帧,一个帧中包含MAC地址等硬件相关信息;


TCP/IP 通讯过程

请添加图片描述

当一个主机接收到一个报文时将会只处理属于该层协议的报头,而剩下部分则会被当做有效载荷并传给下一层;

这表示对于每一层协议而言其报头与有效载荷都是不同的;

通常报文在网络传输的过程中一般为:

  • 发送方应用程序生成报文并将其传递给操作系统的网络栈;
  • 操作系统在传输层,网络层和链路层对报文进行封装,为其添加响应头部信息;
  • 经过各层封装后的报文通过网络接口发送到目标设备;
  • 接收方的网络栈收到报文后逐层解包,即处理属于该层的报头并将有效载荷传递给上一层;
  • 最终接收方的应用程序处理有效载荷中的数据;

其中一个数据从用户经网络栈为其添加报头的过程被称为封装;

对应的一个数据被网络栈进行接收逐层处理最终交给用户的过程被称为解包;

本质上通信的过程就是对报文不断的封装和解包的过程;

  • 几乎任何协议都必须提供一种将报头和有效载荷分离的能力
  • 几乎任何协议都必须提供一种将有效载荷正确交付给对应上一层的能力

以太网通信的过程

请添加图片描述

以太网是一种广泛使用的局域网(LAN)技术,主要用于计算机和网络设备之间的传输数据;

在以太网的通信中一般数据通常由应用程序生成,经过操作系统的网络协议栈进行处理;

  • 应用层

    创建要发送的数据(文件,消息等);

  • 传输层

    数据被封装成传输层报文(如TCP段或UDP数据包),包含源端口和目的端口等信息;

  • 网络层

    传输层报文被进一步封装为IP数据包,并添加源IP与目标IP的地址;

  • 链路层

    IP数据包将被封装为以太网帧,添加源MAC地址和目的MAC地址等信息;

以太网主要支持两种传输方式,分为单播和广播:

  • 单播

    当一个设备发送数据包给特定目标时,这种通信成为单播;

    在单播中,所有连接到同一局域网(LAN)的设备都能够接收到发送的数据包,这是因为该以太网在物理介质中传播,所有连接到同一交换机或共享网络的设备都会接收到这个帧;

    每个接收设备的网卡将会检查收到的以太网帧的目标MAC地址;

    • 如果相同

      该设备将接收并处理这个数据包,解析有效载荷并将其传递给上层协议栈;

    • 如果不同

      该设备将丢弃这个帧,通常不会进行任何处理也不会向上层传递任何信息;

  • 广播

    当一个设备向该网络中的所有设备发送数据时这种通信成为广播;

    在这种情况下发送方的以太网帧中目标MAC地址将被设置为广播地址(FF:FF:FF:FF:FF:FF);

    所有连接在同一局域网的设备都会接收到这个广播帧并对其进行处理;


以太网的数据碰撞

请添加图片描述

在以太网中数据碰撞是指两个或以上的设备在同一时间尝试通过共享传输介质发送数据从而导致这些数据相互干扰;

本质原因是以太网是通过光电信号进行传输的,当多个设备同时进行传输时可能会导致数据碰撞从而发生数据碰撞的问题;

以太网属于是多个设备的共享资源,当一个设备准备发送数据时它首先会监听信道以确保没有其他设备在发送数据,如果信道空闲设备会开始发送数据;

在发送过程中,设备会继续监听信道,如果检测到信号强度的变化(由其他设备也在发送数据)则会发生碰撞;

当数据发生碰撞后可能会导致以下问题:

  • 数据损坏

    发生碰撞后,两个设备发送的数据包将会相互干扰导致数据内容被破坏;

  • 重发

    由于数据未能成功传输,发送设备需要根据碰撞检测机制重新发送数据,从而增加了网络的延迟和负载;

在以太网中,可能发生碰撞的集合被称为碰撞域;

在传统的共享以太网中,整个网络都是一个碰撞域;

为了减少碰撞几率的发生可在以太网中使用交换机来减少(划分)碰撞域;

当一个设备需要发送信息给另一个设备时将会先发送给交换机,交换机将判断目标MAC地址的方向;

假设发出设备与接收设备都在交换机的同侧时,该数据将不会发送给交换机的另一侧从而减少数据碰撞的发生;

相关文章:

『 Linux 』网络基础

文章目录 协议分层OSI 七层模型TCP/IP 四层(五层)模型网络协议栈与操作系统的联系报文TCP/IP 通讯过程以太网通信的过程以太网的数据碰撞 协议分层 协议分层是计算机网络中奖网络协议进行组织和管理的方法; 通过将网络通信过程分成多个层次,每个层次负责特定的功能从而简化网络…...

Python酷库之旅-第三方库Pandas(070)

目录 一、用法精讲 281、pandas.Series.dt.daysinmonth属性 281-1、语法 281-2、参数 281-3、功能 281-4、返回值 281-5、说明 281-6、用法 281-6-1、数据准备 281-6-2、代码示例 281-6-3、结果输出 282、pandas.Series.dt.tz属性 282-1、语法 282-2、参数 282-…...

第一篇Linux介绍

目录 1、操作系统 2、Windows和Linux操作系统的区别 3、 Linux 的发行版本 4、 linux 分支 5、 Linux 的含义 6、Linux 特点 1、操作系统 常见操作系统有:Windows、MacOS、Unix/Linux。 类 UNIX Windows:其是微软公司研发的收费操作系统&#xff…...

在Windows编程中,MFC\C++中OnCopyData如何传递基础类型数据?

在C中,OnCopyData 并不是一个标准的C库或框架中的成员函数,它更常见于Windows编程中,特别是使用Win32 API或MFC(Microsoft Foundation Classes)时。OnCopyData 是一个在MFC应用程序中常用于处理来自其他应用程序的WM_C…...

10款超好用的图纸加密软件推荐,2024企业常用图纸加密软件分享

在现代企业中,设计图纸和敏感数据的安全性至关重要。一旦图纸泄露,可能会对企业造成不可估量的损失。因此,选择一款高效、可靠的图纸加密软件显得尤为重要。 1. 安秉图纸加密软件 安秉图纸加密软件是一款专为保护工程图纸和设计文件安全的软…...

BUUCTF [安洵杯 2019]easy_serialize_php 1

打开题目,看到一串php代码,试着代码审计一下,看一下有用信息 可以看出是通过$_SESSION[img]来读取文件 extract可以将数组中的变量导入当前变量表 也就是说我们可以伪造$_SESSION 数组中的所有数据 这里传递一个参数fphpinfo 先用hackbar进…...

前端面试宝典【CSS篇】【5】

在前端开发的世界里,每一次面试都是一次机遇,也是一次挑战。 你是否曾因技术深度不够而错失良机? 或是面对最新的技术趋势感到迷茫? 我们的【前端面试宝典】正是为此而来。 由拥有多年一线实战经验的资深工程师亲自授课,结合最新的行业动态与实战案例,旨在全面提升你的技…...

stem32江科大自学笔记

江科大B站教程连接:【STM32入门教程-2023版 细致讲解 中文字幕】 系列文章目录 提示:收集stem32江科大自学笔记,方便自己和他人查看 视频对应目录STM32入门教程P1-3 [1-2]&[2-1]1.STM32简介、系统介绍、软件安装P4 [2-2]2.基于标准库(库…...

C++-类与对象基础

一,类的定义 1.1类定义格式 class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为mian类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者…...

嵌入式day20

feof: 检测文件是否到达结尾 ferroe: 检测文件是否发生错误 标准IO之文件定位 fseek() SEEK_END 指向最后一个字节的后一个,继续加,写文件,会将文件扩大 ftell() 获取…...

UE4 SLUA IOS打包报错解决办法

IOS打包报错:Fatal error "lua.h" file not found : SLua Unreal 在IOS远程打包编译的时候 Exteral没有copy过去,导致lua.h文件报错找不到,看了网上也没有写解决办法 错误信息截图: github上也有很多遇到改…...

SpringDI(依赖注入) 以及SpringIOC容器对Bean管理

一、SpringDI(依赖注入) 1.DI依赖注入 1.1 Spring DI的理解 关键字:名词解释 DI( Dependecy Inject,中文释义:依赖注入)是对Ioc概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IoC 容器…...

伯克利Linux系统管理: 脚本编写学习 课堂与实验(系统简洁保姆级学习)

Linux系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 第二章(上) Vim课堂与实验 文章目录 Linux系列文章目录一、前言二、学习内容:2.1 上课内容2.1.1 为什么要学习脚本编写?2.1.2 Bash编程语言2.1.3 SheBang2.…...

探索腾讯云AI代码助手的效能与实用性

前言开发环境配置项目实例应用一:功能介绍二:项目测试FFmpeg二次开发SDL应用加密播放器 帮助提升建议结语 ​ 前言 腾讯云的AI代码助手是一款强大的编码辅助工具,利用混元代码大模型技术,提供技术对话、代码补全、代码诊断和优化…...

清华大学终于把Python整理成了《漫画书》

前言 随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?小编这里整理了一套python编程零基础自学教程,清华大佬196小时讲完的,全程干货无废…...

有关Linux操作系统中僵尸进程与孤儿进程的理解

目录 一、僵尸进程(僵死状态)1.概念2.进程PID与退出码3.僵尸进程举例4.僵尸进程的危害5.僵尸进程的解决方案 二、孤儿进程1.概念2.特点3.孤儿进程解决僵尸进程 一、僵尸进程(僵死状态) 1.概念 僵死状态形象点说有点像是没死透的…...

Go语言实现依赖注入

文章目录 前言依赖注入是什么依赖注入的好处是什么结构图应用程序上下文接口上下文管理器暴露的功能使用示例最后 前言 你好,我是醉墨居士,欢迎来到我的博客,今天带领大伙使用Go语言实现依赖自动注入,我们不会使用其它的第三方库…...

不仅能防沉迷游戏的防沉迷软件(Python)

介绍 一个有那么一点功能但是又不太保险的防沉迷工具 我脑子进水了才会写这玩意儿 为了变强,我不择手段(笑出zhu jiao 代码 好像没什么用的设定界面 # -*- coding: utf-8 -*- # Environment PyCharm # File_name login |User Pfolg # 2024/…...

数学建模--智能算法之鱼群算法

目录 核心原理 应用与实现 实现步骤 性能分析与改进 鱼群算法在解决哪些具体优化问题方面表现最佳? 如何根据不同的应用场景调整鱼群算法的参数设置以提高其性能? 鱼群算法与其他群体智能优化算法(如遗传算法、粒子群优化)…...

html+css+js前端作业qq音乐官网5个页面 带js

htmlcssjs前端作业qq音乐官网5个页面 带js 有轮播图,tab切换等多种效果 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...