计算机网络 --- 初识协议

序言

 上一篇文章中 (👉点击查看),我们简单的了解了怎么寻找目标计算机,需要通过交换机,路由器等设备跨越多个网络来不断的转发我们需要传输的数据,直至到达目标计算机。
 那我们设备之间数据是如何传输的呢?让我们一起来了解一下吧。


1. 初识协议

1.1 协议的意义

 在我们的生活中,我们两个人达成了一个协议,换句话说也就是我们两个人制定了一个相应的约定,并且我们两个人都必须要遵守。
 计算机生产厂商是很多的,假如 A 厂制定我们在通信时的 0 代表低电平,1 代表高电平,而 B 厂制定 1 代表低电平,0 代表高电平。这就会造成不是一个厂生产的计算机不能正常通信地情况!这显然不是我们所需要达到的效果,我们想要的是不同型号的计算机之间,甚至于不同的操作系统之间的计算机都能够进行通信!
 为了达成这一目的,所以大家就要 约定一个共同的标准, 大家都来遵守, 这就是网络协议。

1.2 协议分层

 想要进行网络通信是一件非常复杂庞大的事情,需要软硬件的紧密结合。对于一个复杂庞大的任务我们常用的方式就是将该任务进行分解和模块化。
 这么说大家可能没有立刻理解到,但是想想我们初学 C语言 的时候,不管是什么我们都是一股脑地塞到 main 函数 里,这样写出来的代码很挫,也不好维护(很多时候都是牵一发而动全身😭)。但是随着我们学习的深入,我们懂得了将一个任务分成多个模块,实现多个函数,然后在我们的 main 函数 去调用该函数。当我们需要修改时只需要修改特定的部分接口不变,这样我们就实现了很好的 模块化,解耦合

1.3 七层网络模型

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放
式系统互联参考模型:
在这里插入图片描述在这里插入图片描述

OSI七层模型 为网络通信提供了一个清晰、分层的结构框架,每一层都承担不同的功能和任务。这种分层结构使得网络通信变得更加有序和高效,同时也方便了网络设备的开发和维护。
 他考虑了太全面了,全面得无法落地。肯定有人会想,计划细致不是一件好事吗?怎么不执行呢。就像你制定了一个明天的计划,细致到了每一分钟都要干什么,你觉得严格执行简单吗?肯定是不简单的,所以我们一般使用更加实用的 五层模型

1.4 五层模型

 我们看看两者的区别:
在这里插入图片描述
将复杂的 应用层,表示层,会话层 统一交给 应用层 进行管理。各个层次的功能如下:

  • 物理层: 负责光/电信号的传递方式。(这个我们不关心,我们主要关心软件层面上的内容)
  • 数据链路层: 负责设备之间的 数据帧的传送和识别. 例如网卡设备的驱动、帧同
    步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线 LAN 等标准. 交换机工作在数据链路层.
  • 网络层: 负责 地址管理和路由选择. 例如在 IP 协议中, 通过 IP 地址来标识一台
    主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器
    工作在网路层.
  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据
    可靠的从源主机发送到目标主机.
  • 应用层: 负责应用程序间沟通,如简单电子邮件传输)、文件传输协议、网络远程访问协议等. 我们的网络编程主要就是针对应用层.

我们将在实际传输例子上介绍是如何使用协议的。


2. 数据包封装和分用

 大家都寄过快递吗?寄快递时,首先我们需要填写相应的表格寄快递的地址,联系人,联系电话等等信息。快递站将你的快递寄出,也不是直接让快递小哥将快递直线送到目的地址,也需要经过一个或多个快递中转站才能到达目的地。经过了如此多的转发,能保证快递顺利寄到的关键就是快递单!
 当我们需要网络通信时也是如此,我们的数据 每经过一个协议就会封包一次,封装的信息称为 报头:
在这里插入图片描述
每一层封包都有自己的目的:

  • 应用层封包的主要目的是确保数据能够按照应用层协议的规定进行 正确的解析和处理
  • 传输层封包的主要目的是在源主机和目的主机之间提供 端到端的数据传输服务,确保数据能够可靠、有序地到达接收方。
  • 网络层封包的主要目的是在多个网络之间传输数据,确保数据包能够 按照正确的路径从源主机到达目的主机
  • 数据链路层封包的主要目的是在相邻的网络节点之间提供可靠的数据传输服务,确保帧能够准确无误地到达下一个节点

封包理解了分用就更简单了。每一个网络层都有一个或多个协议,比如在传输层就包含 TCP, UDP等协议,可以取决于使用场景。所以,我们可以根据报头中的信息来判断上一层使用的是什么协议,交给正确的协议进行处理:
在这里插入图片描述


3. 局域网传输

 在上一篇文章中我们得知,在同一个局域网下传输数据只需要经过交换机即可. 现在有了协议和数据包的概念我们再来理解一下过程:
在这里插入图片描述
假设现在已经知道了需要发送对象的 MAC 地址。

  1. 将进行封装后的数据包通过物理层发送到交换机上
  2. 交换机接收到数据包后,拆包查看发送的目的 MAC地址
  3. 交换机锁定和 MAC地址 绑定的端口,并将数据重新封包
  4. 数据顺利转发到目的主机上,目的主机通过分用获取数据

我们的网络协议还有一个名称是 网络协议栈,现在大家知道为什么叫做 了吧 — 封装数据包的过程就是压栈,获取数据的过程就是出栈。


4. 跨网络传输

 跨网络传输就需要路由器了,并且交换机只是工作于数据链路层,而路由器工作于网络层:
在这里为了简便,省去了交换机,并且只知道目的地址的 IP 地址,不知道 MAC 地址
在这里插入图片描述

  1. 现在使用 ARP协议 没有查询到目的主机的 MAC地址
  2. 于是将自己的数据包通过交换机转发到网关处(路由器)
  3. 路由器通过数据包进行解析后获取了目的主机的 IP地址,通过使用 ARP协议 成功获取目的主机的 MAC地址
  4. 通过对数据包进行封包后发送,成功转发到目的主机上
  5. 目的主机通过分用获取数据

跨网络传输也是不断拆包,封包,发送的过程:
在这里插入图片描述

并且大家想一下,不同的局域网有可能使用的网络协议也是不一样的,但是通过拆包(去除原来网络协议的封装层),封包(基于现在的网络协议封包)的过程,是不是也是达到了 入乡随俗 的效果呀!


5. 总结

 在这一篇文章中我们认识了协议,并且再次学习了数据在局域网下或者是跨局域网下的传播,希望大家有所收获!

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

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

相关文章

重回极简:华为如何走向全面智能化?

“人类发现地球只是宇宙一员的时候,也是我们距离群星最遥远的时候。” 这个来自天文领域的喟叹,今天同样出现在行业与企业的智能化之路上。在这个时代坐标上,AI大模型技术极速成熟,AIGC和AI Agent等应用受到了各个行业的巨大期待。…

昇腾大模型推理解决方案MindIE部署

MindIE大模型推理套件 MindIE(Mind Inference Engine,昇腾推理引擎)是华为公司针对AI全场景推出的整体解决方案,包含丰富的推理加速套件。通过开放各层次AI能力,支撑客户多样化的AI业务需求,使能百模千态&a…

存储 NFS

目录 1.存储的应用场景 2.存储分类 3.NFS服务组成 4.环境说明 ​编辑 5.服务端部署 6.NFS服务端的配置 7.NFS服务端本地进行测试 1.存储的应用场景 存储一般用于上传网站数据(内容),一般用于在网站集群中。使用存储的话用户上传的…

成型的程序

加一个提示信息 加上python 常用的包 整个程序打包完 250M 安装 960MB matplot numpy pandas scapy pysearial 常用的包 (pyvisa)… … 啥都有 Python 解释器组件构建 要比 lua 容易的多 (C/Rust 的组件库)

JavaSE--集合总览02:单列集合Collection的体系之一:List

Collection体系的特点 分为 list 和set集合,这篇文章主要讲述List,下篇讲述Set。 简单认识单列集合collection集合的特点 : list集合的特点: 有序 可重复 有索引 set集合的特点:无序 不重复 无索引 其中LinkedHashSet有序 TreeS…

微服务架构陷阱与挑战

微服务架构6大陷阱 现在微服务的基础设施还是越来越完善了,现在基础设施缺乏的问题逐渐被解决了。 拆分粒度太细,服务关系复杂 拆分降低了服务的内部复杂度,但是提升了系统的外部复杂度,服务越多,服务和服务之间的连接…

from tqdm.auto import tqdm用法详细介绍

tqdm 是一个 Python 库,用于在长时间运行的任务中显示进度条。tqdm.auto 是 tqdm 的一个版本,能够自动适配输出环境(如 Jupyter Notebook、命令行等),以确保进度条在各种环境下显示正确。下面是 tqdm.auto 的详细用法介…

每天五分钟计算机视觉:将人脸识别问题转换为二分类问题

本文重点 在前面的课程中,我们学习了两种人脸识别的网络模型,这两种人脸识别网络不能算是基于距离或者Triplet loss等等完成的神经网络参数的学习。我们比较熟悉的是分类任务,那么人脸识别是否可以转变为分类任务呢? 本节课程我们将介绍一种全新的方法来学习神经网络的参…

用友U8二次开发工具KK-FULL-*****-EFWeb使用方法

1、安装: 下一步,下一步即可。弹出黑框不要关闭,让其自动执行并关闭。 2、服务配置: 输入服务器IP地址,选择U8数据源,输入U8用户名及账号,U8登录日期勾选系统日期。测试参数有效性,提示测试通过…

利用 FastAPI 和 Jinja2 模板引擎快速构建 Web 应用

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,它基于标准 Python 类型提示。FastAPI 支持异步编程,使得开发高性能的 Web 应用变得简单快捷。在本文中,我们将探讨如何使用 FastAPI 结合 Jinj…

VS code 查看 ${workspaceFolder} 目录指代路径

VS code 查看 ${workspaceFolder} 目录指代路径 引言正文 引言 在 VS code 创建与运行 task.json 文件 一文中我们已经介绍了如何创建属于自己的 .json 文件。在 VS code 中,有时候我们需要添加一些文件路径供我们导入自定义包使用,此时,我们…

OpenCV系列教程二:基本图像增强(数值运算)、滤波器(去噪、边缘检测)

文章目录 一、基本图像增强(数值运算)1.1 加法 (cv2.add)1.1.1 图像与标量相加(调节亮度)1.1.2 图像与图像相加(两个图像shape要相同)1.1.3 图像的加权加法(渐变切换&…

基于SpringBoot+Vue+MySQL的网上租赁系统

系统展示 用户前台界面 管理员后台界面 系统背景 在当前共享经济蓬勃发展的背景下,网上租赁系统作为连接租赁双方的重要平台,正逐步改变着人们的消费观念和生活方式。通过构建一个基于SpringBoot、Vue.js与MySQL的网上租赁系统,我们旨在为用户…

python线程(python threading模块、python多线程)(守护线程与非守护线程)

文章目录 Python多线程入门1. Python多线程概述2. threading模块基础- Thread 类: 这是一个代表线程的类。可以通过创建Thread类的实例来新建一个线程。- Lock 类: 在多线程环境中,为了防止数据错乱,通常需要用到锁机制。Lock类提供了基本的锁功能&#…

本地搭建我的世界服务器(JAVA)简单记录

网上参考教程挺多的,踩了不少坑,简单记录一下,我做的是一个私人服务器,就是和朋友3、4个人玩。 笨蛋 MC 开服教程 先放一个比较系统和完整的教程,萌新可用,这个教程很详细,我只是记录一下自己的…

【C++】list容器的基本使用

一、list是什么 list的底层结构是带头双向循环链表。 相较于 vector 的连续线性空间,list 就显得复杂很多,它是由一个个结点构成,每个结点申请的空间并不是连续的,它的好处是每次插入或删除一个数据,就配置或释放一个…

禁忌搜索算法(TS算法)求解实例---旅行商问题 (TSP)

目录 一、采用TS求解 TSP二、 旅行商问题2.1 实际例子:求解 6 个城市的 TSP2.2 **求解该问题的代码**2.3 代码运行过程截屏2.4 代码运行结果截屏(后续和其他算法进行对比) 三、 如何修改代码?3.1 减少城市坐标,如下&am…

游戏如何对抗定制挂

近年来,游戏安全对抗强度相比以往更加激烈,具体表现在“定制挂”趋势显著。在近期收集的近万款外挂样本中,定制挂约占比78%,常见的内存修改器、变速器等通用作弊手段占比正在下降。 所谓定制挂,是指针对某款游戏单独开…

初写MySQL四张表:(2/4)

今天,我们来写第二张表。因着这四张表以及后续有相应的拓展,这四张环环相扣,所以还未写出第一张表的同学,可以看完第一张表,再来此处: 初写MySQL四张表:(1/4)-CSDN博客 好,今日表格有三张&…

easy-es动态索引支持

背景 很多项目目前都引入了es,由于es弥补了mysql存储及搜索查询的局限性,随着技术的不断迭代,原生的es客户端使用比较繁琐不直观,上手代价有点大,所以easy-es框架就面世了,学习成本很低,有空大…