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

【Linux跬步积累】—— 网络基础

🌏博客主页:PH_modest的博客主页
🚩当前专栏:Linux跬步积累
💌其他专栏:
🔴 每日一题
🟡 C++跬步积累
🟢 C语言跬步积累
🌈座右铭:广积粮,缓称王!

文章目录

  • 一、认识“协议”
    • 什么是“协议”
  • 二、网络协议初识
    • 网络的分层结构——网络 vs OS之间的关系
      • 为什么要进行网络分层?
      • 为什么要存在网络?主要解决什么问题?
    • OSI七层模型
    • 网络和操作系统之间的关系
    • 站在语言角度理解,什么是协议?
  • 三、网络传输基本流程
    • 局域网通信
    • 如何查看Mac地址
    • 通信过程
      • 什么是封装?
      • **什么是报文?**
      • **什么是协议报头?**
    • 跨路由器传输
      • 传输过程
      • **Mac地址和IP地址的区别?**
      • **屏蔽底层差异**
  • 四、网络中的地址管理
    • 认识IP地址
    • 认识MAC地址


一、认识“协议”

什么是“协议”

“协议”是一种约定,这个约定的作用就是用来减少通信成本和沟通成本

计算机协议就是计算机之间的约定;

例如:

计算机生产厂商有很多,计算机操作系统也有很多,计算机网络硬件设备还是有很多。那么如何让这些不同厂商之间生产的计算机能够相互顺畅的通信呢?就需要有人站出来,约定一个共同的标准,大家都在遵守,这就是网络协议

二、网络协议初识

网络的分层结构——网络 vs OS之间的关系

为什么要进行网络分层?

答:层和层之间是松耦合的,可以随时替换或者方便维护。

为什么要存在网络?主要解决什么问题?

首先我们需要知道一个客观事实,就是主机通信距离变远,一旦通信距离变远,必定会引发新的问题:

  1. 如何使用数据的问题
  2. 可靠性问题
  3. 主机定位的问题
  4. 数据包局域网转发的问题

有了以上的问题之后我们就需要解决这些问题,那么我们如何解决呢?

使用网络协议(tcp/ip协议),这些协议是为了解决在网络通信当中,因为通信距离变远而引发的一系列问题。网络协议其实就是一种解决方案,既然是一个解决方案,就可以有好的解决方案和坏的解决方案。


衡量解决方案的标注是什么呢?

可扩展,方便维护。


所以为了满足可扩展和可维护,大佬们就将网络协议设计成了层状结构。

那么为什么要将网络协议设计成层状结构呢?

原因是层状结构可以减少层与层之间的耦合度,松耦合度就可以实现随时替换、随时扩展、方便维护,一层不影响另一层,所以最终网络协议就表现成一种层状结构了

OSI七层模型

OSI七层模型是一种框架性的设计方法,其中最主要的功能就是帮助不同的主机之间实现数据传输,但是它既复杂又不实用,所以我们按照TCP/IP四层模型来讲解。

  • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.

  • 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.

  • 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.

  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.

  • 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.

在这里插入图片描述

物理层我们考虑的比较少,因此很多时候也可以称为TCP/IP四层模型。

一般而言:

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容;
  • 对于一台路由器,它实现了从网络层到物理层;
  • 对于一台交换机,它实现了从数据链路层到物理层;
  • 对于集线器,它只实现了物理层;
  • 应用层对应shell、应用程序

  • 传输层和网络层对应着操作系统

  • 数据链路层对应着驱动板块

  • 物理层对应着硬件

网络和操作系统之间的关系

在这里插入图片描述

Windows和Linux系统之间,操作系统的设计是不一样的,因为如果一样的话,系统调用也肯定都是一样的,那么就不需要搞什么语言级别的跨平台性了。所以操作系统本身是不一样的,但是无论你是Windows还是Linux,他们的网络协议都是一样的,因为需要遵守OSI定出来的标准。

这就是为什么Windows和Linux操作系统不一样,但是可以直接进行通信的原因。

站在语言角度理解,什么是协议?

在这里插入图片描述

协议就是

双方都能认识的结构体数据类型!!!

三、网络传输基本流程

局域网通信

在这里插入图片描述

在这里插入图片描述

在同一个局域网中的主机,能不能直接通信呢?原理(以太网的通信原理)是什么?

答:能。如果A传输数据给C,每一个主机都能接收到数据,但是不会处理,会丢弃。但是只有C接收到之后,才会保留处理。

那么如何才能保证只有C接收到之后才会保留处理呢?

我们给每一个局域网的主机设置一个唯一标识符:Mac地址,这样我们就能知道是哪个主机发送给哪个主机了。

那么如果A给C传输数据的时候,主机X在不断的给我们对应的局域网里发送垃圾数据呢?那么有可能两条数据会混在一起,此时这个数据就识别不出来了。所以在这种以太网通信的时候,存在一个问题,叫做数据碰撞

发生数据后,主机A会进行碰撞的检测和避免,如果发生碰撞,主机A会进行等待发送。

所以我们会把一个局域网称之为碰撞域

所以在任何时刻,只允许一台主机在局域网中发送消息,这种网络就叫做以太网。因此在局域网中,主机越少越好。

网络与OS一统:

我们将A主机和C主机看成两个进程,所谓的A给C发数据,第一件事情就是A把数据交到局域网上,而这个局域网很明显就是被ABCDX所共享的一个网络,所以这个网络我们可以称之为它就是多个不同主机之间的公共资源。

所以局域网本质就是一个临界资源!

那么我们如果想要黑掉一个局域网,我该怎么做呢?

一直发送垃圾数据,产生碰撞。

如何查看Mac地址

我们可以使用ifconfig进行查看

其中ether的意思就是以太

在这里插入图片描述

通信过程

在这里插入图片描述

什么是封装?

我们所谓的添加报头,就是给一串二进制数据前面再拷贝一个结构体对象,这个过程我们叫做封装。

报文在不同层有着不同的名称:

  • 应用层:request/response
  • 传输层:数据段
  • 网络层:数据报
  • 链路层:数据帧

什么是报文?

“报文” = 协议报头 + 有效载荷

什么是协议报头?

上层数据向下传送时,会在有效载荷前面加上一个协议报头,目的就是为了在对方主机的同一层可以正确的解析和处理数据。每一层都会有不同的协议,所以在报头中需要包含上层的协议是谁。

可以理解成快递单子和鞋子,你买了一个鞋子,商家发货时是不是会粘贴一个快递单,上面有发货地址和收货地址,快递就通过这个信息送到你手上。快递单就可以理解成协议报头,而鞋子就是有效载荷。

对方主机收到后就需要自底向上开始解包和分用,先将报头和有效载荷分离开,因为是同层协议,所以两个报头的源代码都是一样的,就可以正常解析,然后将有效载荷发送给上一层的协议。

协议的共性:

  1. 将报头和有效载荷进行分离; ——> 解包
  2. 将自己的有效载荷交付给上一层的哪个协议;——> 分用

以上的过程是在物理层面的过程。

但是在逻辑上:同层协议,都可以认为自己在和对方直接通信。

那么如何理解呢?

逻辑层面就可以看成你在给室友打电话,那么你是不是认为你在跟室友直接沟通。但实际上,你是在跟你手机说的,你把声音录给了手机,手机通过基站将声音打包转到你室友的手机上,你室友的手机再进行解压,然后把声音播放。

跨路由器传输

在这里插入图片描述

传输过程

当数据要从局域网1发送数据到局域网2时,自定向下封装时,在网络层的报头中会添加两个信息:源IP地址(IPA)和目的IP地址(IPB),在数据链路层的报头中会有源Mac地址(MacA)和目的Mac地址(Mac_left)

路由器接收到局域网1的数据后,会将以太网对应的报头进行解包,然后将剩下的数据向上交付给网络层网络层此时对报头进行分析,因为报头中包含源IP地址和目的IP地址,所以网络层分析之后就知道将有效载荷发给哪台计算机了,因为每个计算机都有自己唯一的IP地址。

然后再将数据交付给链路层,此时在链路层当中就会给数据添加上令牌环对应的报头信息:源Mac地址(Mac_right)和目的Mac地址(MacB),然后再将该数据发送到局域网2当中,此时该数据就能够在令牌环网当中传输了。

总结一下:路由器为什么能够知道数据应该转发给哪个局域网

路由器是通过IP地址来确定数据的转发方向的,因特网上的每台计算机都有一个唯一的IP地址,在数据向下封装时,在网络层封装的报头中会包含两个字段:源IP地址和目的IP地址。

当路由器需要将一个局域网中的数据转发到另外一个局域网时,在路由器的链路层会先将当前局域网对应的底层报头去掉,然后将剩下的数据上交给网络层,此时网络层就可以获取当前的报头信息了:源IP地址和目的IP地址,也就知道数据是哪台机器发送的,以及发送给谁。然后路由器就可以根据IP地址在路由表中查找,最终就能确定该数据应该发送到哪一个局域网中的哪台机器了。

具体过程如下图所示:

在这里插入图片描述

Mac地址和IP地址的区别?

  • Mac地址只能作用在局域网当中,每经过一个路由器,它都会被路由器解包,再重新封装
  • IP地址则是一直不变的

屏蔽底层差异

IP地址的存在除了帮助数据“路由”之外,还有一个很重要的作用,就是屏蔽了底层网络的差异。对与通信双方主机的IP地址以及往上的协议来说,他们不需要过多关心底层采用的是以太网还是令牌环网,因为有路由器帮我们适配两个局域网之间的不同,他们只需要知道源IP地址和目的IP地址就可以将数据正确的发送出去,因此现在主流的网络也叫做IP网络。

四、网络中的地址管理

认识IP地址

IP协议有两个版本,IPv4和IPv6,IPv4用32个比特位来标识IP地址,而IPv6用128个比特位来标识IP地址。

  • IP地址是在IP协议中,用来标识网络中不同主机的地址。
  • 对于IPv4来说,IP地址是一个4字节,32位的整数。
  • 我们通常也使用“点分十进制”的字符串标识IP地址,例如192.160.0.1,用点分割的每一个数字表示一个字节,范围是0-255。

认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点。
  • 长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)。
  • 在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突,也有些网卡支持用户配置MAC地址)。

http://www.kler.cn/a/582149.html

相关文章:

  • Windows系统编程项目(四)窗口管理器
  • 关于Go中使用goroutine协程实现的算法
  • java的字符串,数组,集合的长度/大小
  • 格雷希尔: G80P系列在制动卡钳行业自动化应用
  • 数据结构--【顺序表与链表】笔记
  • 第42天:WEB攻防-PHP应用MYSQL架构SQL注入跨库查询文件读写权限操作
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_02带边框和斑马纹的固定表头表格
  • 【从零开始学习计算机科学】操作系统(四)进程的死锁
  • DeepSeek R1在医学领域的应用与技术分析(Discuss V1版)
  • Html5学习教程,从入门到精通, HTML5 新的 Input 类型:语法知识点与案例代码(16)
  • Git创建仓库和基本命令
  • 图纸的安全怎么管理?
  • Android 粘包与丢包处理工具类:支持多种粘包策略的 Helper 实现
  • 沉浸式CSS学习路径
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-7.3.2使用GraphQL封装查询接口
  • C++数组,链表,二叉树的内存排列是什么样的,结构体占多大内存如何计算,类占多大内存如何计算,空类的空间是多少,为什么?
  • Kotlin学习笔记之类与对象
  • 云创智城 ×YunParking停车源码+YunCharge充电源码+DeepSeek:AI 驱动城市级停车平台升级,构建安全智慧出行新生态
  • 【赵渝强老师】管理MongoDB的运行
  • c语言程序设计---(动态内存分配)考研复试面试问答