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 地址都要丢弃,再经由路由器重新封装。

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

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

相关文章

RedHat7—Linux中kickstart自动安装脚本制作

本实验使用虚拟机版本为rhel7,从rhel7后的版本kickstart工具进行收费使用。 1.在VMware关闭dhcp自动获取ip地址功能 2.安装并启动httpd [rootlocalhost ~]# yum install httpd [rootlocalhost ~]# systemctl start httpd [rootlocalhost ~]#systemctl stop firewal…

基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络

一、介绍 垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集(‘塑料’, ‘玻璃’, ‘纸张’, ‘纸板’, ‘金属’),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进…

OMV7 树莓派 tf卡安装

​ 升级7之后,问题多多,不是docker不行了,就是代理不好使 今天又重装了一遍,用官方的链接,重新再折腾一遍…… 使用raspberry pi imager安装最新版lite OS。 注意是无桌面 Lite版 配置好树莓派初始化设置&#xff0…

前端无感刷新token

摘要: Axios 无感知刷新令牌是一种在前端应用中实现自动刷新访问令牌(access token)的技术,确保用户在进行 API 请求时不会因为令牌过期而中断操作 目录概览 XMLHttpRequestAxiosFetch APIJQuni.request注意事项: 访问…

STM32 独立看门狗(IWDG)详解

目录 一、引言 二、独立看门狗的作用 三、独立看门狗的工作原理 1.时钟源 2.计数器 3.喂狗操作 4.超时时间计算 5.复位机制 四、独立看门狗相关寄存器 1.键寄存器(IWDG_KR) 2.预分频寄存器(IWDG_PR) 3.重载寄存器&…

RHCE的练习(12)

写一个脚本,完成以下要求: 给定一个用户: 如果其UID为0,就显示此为管理员;否则,就显示其为普通用户; #!/bin/bash ​ # 使用read命令获取用户名 read -p "请输入用户名: " username ​…

游戏引擎学习第15天

视频参考:https://www.bilibili.com/video/BV1mbUBY7E24 关于游戏中文件输入输出(IO)操作的讨论。主要分为两类: 只读资产的加载 这部分主要涉及游戏中用于展示和运行的只读资源,例如音乐、音效、美术资源(如 3D 模型和…

探索 HTML 和 CSS 实现的 3D旋转相册

效果演示 这段HTML与CSS代码创建了一个包含10张卡片的3D旋转效果&#xff0c;每张卡片都有自己的边框颜色和图片。通过CSS的3D变换和动画&#xff0c;实现了一个动态的旋转展示效果 HTML <div class"wrapper"><div class"inner" style"-…

什么是Hadoop

Hadoop 介绍 Hadoop 是由 Apache 开发的开源框架&#xff0c;用于处理分布式环境中的海量数据。Hadoop 使用 Java 编写&#xff0c;通过简单的编程模型允许在集群中进行大规模数据集的存储和计算。它具备高可靠性、容错性和扩展性。 分布式存储&#xff1a;Hadoop 支持跨集群…

逆向攻防世界CTF系列39-debug

逆向攻防世界CTF系列39-debug 查了资料说.NET要用其它调试器&#xff0c;下载了ILSPY和dnSPY ILSPY比较适合静态分析代码最好了&#xff0c;函数名虽然可能乱码不显示&#xff0c;但是单击函数名还是能跟踪的&#xff0c;而dnSPY在动态调试上效果好&#xff0c;它的函数名不仅…

华为开源自研AI框架昇思MindSpore应用案例:人体关键点检测模型Lite-HRNet

如果你对MindSpore感兴趣&#xff0c;可以关注昇思MindSpore社区 一、环境准备 1.进入ModelArts官网 云平台帮助用户快速创建和部署模型&#xff0c;管理全周期AI工作流&#xff0c;选择下面的云平台以开始使用昇思MindSpore&#xff0c;获取安装命令&#xff0c;安装MindSpo…

Cellebrite VS IOS18Rebooting

Cellebrite VS IOS18Rebooting我们想分享一些有关 iOS 18 重启“功能”的信息。在过去一周左右的时间里&#xff0c;人们对 iOS 18 中一项新的未记录功能产生了极大关注&#xff0c;该功能会导致设备在一段时间不活动后重新启动。 这意味着&#xff0c;如果设备在一定时间不活…

使用 Axios 拦截器优化 HTTP 请求与响应的实践

目录 前言1. Axios 简介与拦截器概念1.1 Axios 的特点1.2 什么是拦截器 2. 请求拦截器的应用与实践2.1 请求拦截器的作用2.2 请求拦截器实现 3. 响应拦截器的应用与实践3.1 响应拦截器的作用3.2 响应拦截器实现 4. 综合实例&#xff1a;一个完整的 Axios 配置5. 使用拦截器的好…

【最大子矩阵——双指针 / 二分】

题目 双指针&#xff1a; 代码 #include <bits/stdc.h> using namespace std; const int N 85, M 1e510; int g[N][M]; int n, m, lim; int ans 1; int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;for(int i 1; i < n; i)for(int …

内网渗透-隧道判断-SSH-DNS-icmp-smb-上线linux-mac

1.通道判断 #SMB 隧道&通讯&上线 判断&#xff1a;445 通讯 上线&#xff1a;借助通讯后绑定上线 通讯&#xff1a;直接 SMB 协议通讯即可 #ICMP 隧道&通讯&上线 判断&#xff1a;ping 命令 上线&#xff1a;见前面课程 通讯&#xff1a;其他项…

【优选算法篇】分治乾坤,万物归一:在重组中窥见无声的秩序

文章目录 分治专题&#xff08;二&#xff09;&#xff1a;归并排序的核心思想与进阶应用前言、第二章&#xff1a;归并排序的应用与延展2.1 归并排序&#xff08;medium&#xff09;解法&#xff08;归并排序&#xff09;C 代码实现易错点提示时间复杂度和空间复杂度 2.2 数组…

【微软:多模态基础模型】(3)视觉生成

欢迎关注【youcans的AGI学习笔记】原创作品 【微软&#xff1a;多模态基础模型】&#xff08;1&#xff09;从专家到通用助手 【微软&#xff1a;多模态基础模型】&#xff08;2&#xff09;视觉理解 【微软&#xff1a;多模态基础模型】&#xff08;3&#xff09;视觉生成 【微…

netcore Kafka

一、新建项目KafakDemo <ItemGroup><PackageReference Include"Confluent.Kafka" Version"2.6.0" /></ItemGroup> 二、Program.cs using Confluent.Kafka; using System; using System.Threading; using System.Threading.Tasks;names…

工业生产安全-安全帽第一篇-opencv及java开发环境搭建

一.背景 公司是非煤采矿业&#xff0c;核心业务是采选&#xff0c;大型设备多&#xff0c;安全风险因素多。当下政府重视安全&#xff0c;头部技术企业的安全解决方案先进但价格不低&#xff0c;作为民营企业对安全投入的成本很敏感。利用我本身所学&#xff0c;准备搭建公司的…

fastadmin多个表crud连表操作步骤

1、crud命令 php think crud -t xq_user_credential -u 1 -c credential -i voucher_type,nickname,user_id,voucher_url,status,time --forcetrue2、修改控制器controller文件 <?phpnamespace app\admin\controller;use app\common\controller\Backend;/*** 凭证信息…