Linux网络:网络基础

Linux网络:网络基础

  • 一、网络诞生背景及产生的诸多问题
    • 1. 1 网络诞生背景
    • 1.2 网络诞生面临的困境
  • 二、网络协议栈(OSI七层模型、CP/IP五层模型)
    • 2.1 TCP/IP五层(或四层)模型
  • 三、网络和系统关系
  • 四、网络传输流程
    • 4.1 同一个局域网中的两台主机进行文件传输
      • 1)两台主机通信原理
      • 2)两台主机通信过程
    • 4.2 跨网段的主机的文件传输
  • 五、数据包封装和分用
    • 1) 数据封装的过程
    • 2) 数据分用的过程
  • 六 网络地址:ip VS MAC
    • 6.1 MAC地址

一、网络诞生背景及产生的诸多问题

1. 1 网络诞生背景

 计算机最初一定是相互独立的。但我们由很多工作需要相关协作完成,当时的解决办法是用某些硬件将数据进行拷贝交给其他人。但该过程中设计到人力,一旦设计到人力必然导致效率下降。这也为网络的诞生埋下伏笔!
在这里插入图片描述

 后来网络的诞生,让多台计算机连接在一起,数据共享,实现网络互联。随着计算机的数量越来越多,我们通过交换机和路由器将众多的计算机全部链接起来,构成了局域网LAN。但随着局域网的产生,我们来需要将相隔千里的计算机链接起来,比如将中国和美国的一些计算机连接起来,由此广域网的概念诞生!

1.2 网络诞生面临的困境

 网络的诞生本质上还是用于不同的主机间的相互通信。而在每台计算机内部,硬件之间的数据拷贝交换本身就是一种通信行为,而每台计算机中硬件的个数是有限的,并且由OS管控!而不同机器间通信,就是不同机器上的网卡间的相关通信。两者也是硬件间的通信,根本在于后者通信的距离变长,并且中间会经过其他众多设备!

在这里插入图片描述
 距离变长,经过众多设备比如会导致如下问题:

  1. 如何保证数据准确的由一跳交给下一跳?
  2. 在转发过程中,如何查找路径,定位目标主机?
  3. 如果转发过程中发生数据丢包,如何解决?
  4. 向目标设备发送数据成功后,目标设备如何使用接收到的数据?即如何处理接收到的数据?(即接收到的信息很杂,如何分辨处理这些信息)

二、网络协议栈(OSI七层模型、CP/IP五层模型)

 为了解决上述问题,OSI(Open System Interconnection,开放系统互连)定义出了相关协议 —— 网络协议栈!而协议本质上就是一种约定,每一种约定对于上述一种问题的解决办法!软件上,绝大部分优秀的软件都是分成的,这不仅可以完成不同软件间的解耦合,未来也非常方便对软件进行维护、更新、替换和优化等!每一层协议解决不同问题,从而将网络进行分层。网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备!

 OSI定义成了七层,但实践一般分为5层!
在这里插入图片描述

  1. OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输,它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整!
  2. 但实际过程中,应用层、表示层、会话层三层很难单独分开,因此将这三层统称为应用层。即右边CP/IP五层模型!!

 每一层协议解决的问题如下:

在这里插入图片描述

2.1 TCP/IP五层(或四层)模型

 由于TCP/IP在OS中,处于核心地位,因此我们将TCP/IP作为一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP中,各层功能如下:

  1. 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
  2. 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
  3. 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
  4. 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
  5. 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层

三、网络和系统关系

 对于一台主机,网络部分核心物理设备为网卡,数据链路层工作在网卡的驱动程序中。在往上,网络层和传输层则是工作在操作系统中!再网上就到了用户层!

 所以对于一个合格的OS,不仅要实现内存管理、进程管理、文件管理以及驱动管理等工作,还需实现网络协议栈中的两层:网络层和传输层!当用户需要进行网络通信时,不能直接访问网卡设备,而需要贯穿操作系统;而贯穿操作系统本质就是在贯穿网络协议栈。而网络最核心的网络层和应用层是在OS中实现的,所以用户需要使用协议栈,本质就是在使用操作系统!所以OS要基于tcp/ip为我们提供网络对应的系统调用接口!

 不同的操作系统的内核实现可能差别很大,但对于网络协议的实现是基本一样的,尤其是传输层和网络层!相当于每台计算机都遵循相同的协议,相关的约定,从而保证所有计算机之间都能顺利通信,使得不同操作系统的主机能够进行可靠的通信!

在这里插入图片描述

四、网络传输流程

 在实际生活中,我们收到的快递除了物品本身外,还包含快递单。快递单中回填从相关信息:有谁发的,从哪里发给哪里…这些数据收和发两者都知道认识,更多的是给物流体系知道,指导快递的发送!所以长距离运输,快递 = 内容 + 快递单。而快递单本身就是一种约定,为接收双发知道,是一种协议,我们将之称为报头!

 收快递的过程中,实际收到的要比期望收到的东西要多,多出来的部分称为报文。而在计算机通常是由一个结构化字段表征,这个结构化字段定义的对象称为协议报头!
在这里插入图片描述

4.1 同一个局域网中的两台主机进行文件传输

1)两台主机通信原理

在同一个作用域中,两台主机是可以直接发消息的!每台主机都存在一个网卡设备,在全球中每台计算机的网卡Mac地址都是唯一的。主机A向主机B发送消息"你好"时,除了内容本身,还包含相关协议。而协议中包含接收主机的Mac地址和发送主机的Mac地址。

 当主机A将数据发到局域网中时,当前局域网中的所有主机网卡设备都会收到该消息。但其他网卡收到消息后,发现接收方的Mac地址不是自己后会直接丢弃!但某一时刻,可能多台主机同时向局域网中发送消息,此时数据会发送碰撞,导致数据失效,而此时的局域网也被称为碰撞域。此时发送方会执行碰撞监测算法(在随机时间后重新发送)。即要正确的发送数据,任何时刻局域网中只允许一台主机在局域网中发送消息!

在这里插入图片描述

  • 这种基于碰撞域、碰撞监测、碰撞避免的通信方式,并且碰撞是概率的。我们将这种局域网称为以太网!
  • 碰撞域本身就是一个临界资源,而碰撞监测、避免和重发完成的就是互斥访问临界资源!

2)两台主机通信过程

 两台主机通信发送消息“你好”时,是通过网卡设备通过以太网推送给另一台主机的网卡设备的。所以需要贯穿网络协议栈,然后从上往下依次添加对应层的协议报头。当目标主机网卡接收到消息后,会从下往上依次解析,将报头和有效载荷进行分离,将有效载荷逐次传给上一层进行分用。
在这里插入图片描述

  1. 报文 = 报头 + 有效载荷。应用层报文称为request&response;传输层报文称为数据段;网络层报文称为数据报;数据链路层报文称为数据帧

4.2 跨网段的主机的文件传输

在这里插入图片描述

五、数据包封装和分用

 不同的协议层对数据包有不同的称谓,在应用层报文称为request&response;在传输层报文称为数据段;在网络层报文称为数据报;在数据链路层报文称为数据帧

 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装!疯转一定要考虑后续解包过程:①如何将报文中有效载荷和报头分开②如何将自己的有效载荷交给上一层那个协议。所以首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息。

 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理!

1) 数据封装的过程

在这里插入图片描述

2) 数据分用的过程

在这里插入图片描述

六 网络地址:ip VS MAC

6.1 MAC地址

 Mac地址一般是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址),用来识别数据链路层中相连的节点,知道数据局域网中如何从一跳到下一跳!

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

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

相关文章

折腾 Quickwit,Rust 编写的分布式搜索引擎-官方教程

快速上手 在本快速入门指南中,我们将安装 Quickwit,创建一个索引,添加文档,最后执行搜索查询。本指南中使用的所有 Quickwit 命令都在 CLI 参考文档 中进行了记录。 https://quickwit.io/docs/main-branch/reference/cli 使用 Qui…

如何在Ubuntu 16.04上更新Firefox版本

如何在Ubuntu 16.04上更新Firefox版本 在Ubuntu 16.04上更新Firefox版本有多种方法,每种方法都有其优点。下面我们将介绍几种常见的方法,帮助您确保浏览器保持最新状态。 1. 使用官方PPA(个人包档案) 官方PPA提供了最新版本的F…

ubuntu22.04安装redis

更新包管理器的索引: sudo apt update安装Redis: sudo apt install redis-server确认Redis已经安装并且正在运行: sudo systemctl status redis-server

flutter 中 ssl 双向证书校验

SSL 证书: 在处理 https 请求的时候,通常可以使用 中间人攻击的方式 获取 https 请求以及响应参数。应为通常我们是 SSL 单向认证,服务器并没有验证我们的客户端的证书。为了防止这种中间人攻击的情况。我么可以通过 ssl 双向认证的方式。即…

用Python实现时间序列模型实战——Day1:时间序列的基本概念

一、学习内容 1. 时间序列数据的定义与特点 定义: 时间序列数据是一组按时间顺序排列的观测值。时间序列的每个观测值都与特定时间点相关联。例如,气温每天的记录、股票每日的收盘价等。 特点: 时间依赖性:时间序列数据的一个…

Eureka的生命周期管理:服务注册、续约与下线的完整流程解析

Eureka的生命周期管理:服务注册、续约与下线的完整流程解析 引言 在分布式系统中,服务发现是微服务架构的核心问题之一。Eureka是Netflix开源的一个服务发现框架,它能够有效地管理微服务的生命周期,包括服务注册、续约和下线。这…

8.27-dockerfile的应用+私有仓库的创建

一、dockerfile应用 通过dockerfile创建⼀个在启动容器时,就可以启动httpd服务的镜像 1.步骤 : 1.创建⼀个⽬录,⽤于存储Docker file所使⽤的⽂件2.在此⽬录中创建Docker file⽂件,以及镜像制作所使⽤的⽂件3.使⽤docker build创建镜像4.使…

基于x86 平台opencv的图像采集和seetaface6的图像质量评估功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的图像质量评估功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的图像质量评估模块…

全新的大语言模型Grok-2,最新测评!!

埃隆马斯克再次引发轰动,他旗下的xAI公司推出了全新的大语言模型Grok-2! 最新的Grok-2测试版已经发布,用户可以在𝕏平台上体验小版本的Grok-2 mini。 马斯克还通过一种谜语般的方式揭开了困扰大模型社区一个多月的谜团&#xff1a…

Java笔试面试题AI答之面向对象(2)

文章目录 7. Java中的组合、聚合和关联有什么区别?1. 关联(Association)2. 聚合(Aggregation)3. 组合(Composition)总结 8. 请设计一个符合开闭原则的设计模式的例子?策略模式示例1.…

每日刷力扣SQL(九)

1484.按日期分组销售产品 转载 首先,根据题目的描述以及给出的示例。我们能得到结果集中各个字段的含义如下: ① sell_date:卖出产品的日期(应该不用解释了) ② num_sold:当前这个日期下&…

工业软件架构2:(QT和C++实现)

工业软件架构 - 事件驱动 - 2 1. 命令模式的使用命令模式(Command Pattern)命令模式的基本概念命令模式的运作机制1. 定义命令接口2. 实现具体命令3. 调用者类4.扩展命令模式的功能撤销命令:宏命令:总结2. MVVM 模式的使用View(界面)部分则通过绑定与 ViewModel 交互:3.…

FFmpeg的入门实践系列三(基础知识)

欢迎诸位来阅读在下的博文~ 在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力 文章目录 前期博客一、音视频常用术语二、FFmpeg库的结构介绍三、FFmpeg的常用函数初始化封装格式编解码器相关 四、FFmpeg常用的数…

FastCGI简述

FastCGI (FCGI) 是一种协议,用于改善 Web 服务器和应用程序之间的通信效率。它是在 CGI(Common Gateway Interface)的基础上发展起来的,旨在解决 CGI 在处理大量并发请求时存在的性能问题。 CGI的由来 最早的Web服务器只能简单地…

WHAT - Jamstack(JavaScript, APIs, and Markup 与 Serverless 无服务器架构)

目录 一、介绍1. JavaScript2. APIs3. Markup4. Jamstack 的优势5. Jamstack 架构的工作流程 二、常见的 Jamstack 技术栈三、无服务器架构(Serverless)无服务器架构的核心概念1. 函数即服务(FaaS)2. 后端即服务(BaaS&…

解决 JS WebSocket 心跳检测 重连

解决 JS WebSocket 心跳检测 重连 文章目录 解决 JS WebSocket 心跳检测 重连一、WebSocket 心跳检测的作用二、心跳检测的处理方案1. 创建 WebSocket 连接2. 心跳参数设置3. 心跳检测逻辑4. 心跳包响应处理5. 断线重连机制 三、总结 一、WebSocket 心跳检测的作用 WebSocket 是…

序列化组件对比

1、msgpack介绍 1.MsgPack产生的数据更小,从而在数据传输过程中网络压力更小 2.MsgPack兼容性差,必须按照顺序保存字段 3.MsgPack是二进制序列化格式,兼容跨语言 官网地址: https://msgpack.org/ 官方介绍:Its lik…

C++ 移动构造函数为什么设置noexcept?

答案显然是&#xff1a; 移动构造函数设置了noexcept后STL的容器可以显著提高性能。 For example: class MyClass { public:MyClass(int v) { val v; }MyClass(const MyClass& o) {val o.val;std::cout << "Copy constructor " << val << …

Go 语言协程管理精解

1.基础 协程切换需要操作寄存器&#xff0c;这些操作需要通过汇编辅助实现。另外&#xff0c;每一个协程都有一个协程栈&#xff0c;实际上协程栈也是有结构的。汇编程序和栈结构这些概念可能大部分开发者都不太了解&#xff0c;在介绍协程管理之间&#xff0c;先简要介绍。 1…

一、undo log、Buffer Pool、WAL、redo log

目录 1、undo log2、Buffer Pool3、WAL4、redo log5、总结6、问题 1、undo log undo log日志是一种用于撤销回退的逻辑日志&#xff0c;在事务未提交前会记录相反的操作到undo log&#xff0c;当事务回滚&#xff0c;使用undo log 进行回滚&#xff0c;保证了事务的原子性。MV…