网络原理-初识(2)

协议分层

对于网络协议来说,往往分成几个层次进行定义.

网络通信的过程中,需要涉及到的细节,其实非常多.如果要有一个协议来完成网络通信,就需要约定好方方面面的内容,导致非常复杂. 而如果拆分的话,就十分复杂,庞大,因此需要分层.

什么是协议分层

即只有相邻的层次可以沟通,不能跨层次调用.

协议分层类似于打电话时,定义不同层次的协议:

某一层的协议替换之后,对于其它层没有影响

在这个例子中,我们的协议只有两层;但实际的网络通信会更加复杂,需要分更多的层次.

分层的作用

为什么需要网络协议的分层?

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接

在代码中,类似定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务):

对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可.

对于提供方来说,利用封装的特性,隐藏实现的细节,只需要开放接口即可.

上层协议直接使用下层协议即可,不需要了解下层协议的细节.(相当于下层协议把细节封装好了). 

这样就能很好的扩展和维护,如下图:

 

OSI七层模型

OSI:即Open System Interconnection,开放系统互连.

OSI七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了七层.

OSI七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输; 

OSI:七层模型划分为以下七层:

 

 

OSI七层模型既复杂又不实用:所以OSI七层模型没有落地,实现.

实际组件网络时,只是以OSI七层模型设计中的部分分层,也即是以下TCP/IP五层(或四层)模型来实现.

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

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.

TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.

应用层:负责应用程序间的沟通,如简单电子邮件传输,文件传输协议,网络远程访问协议等.我们的网络编程主要就是针对应用层.(程序拿到数据之后,要用来干啥,解决什么问题)

传输层:负责两台主机之间的数据传输.如传输控制协议,能够确保数据可靠的从源主机发送到目的主机.(负责关注网络数据的起点和终点(从哪里来到哪里去),端与端的运输).

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

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

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

说是五层,实际上下面都是在操作系统内核,硬件,驱动程序中已经实现了的(计算机内置的).作为程序员,在网络编程中影响到的只有应用层.

 网络设备所在分层

对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型中的下四层.

对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;

对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP模型的下两层;

对于集线器,它只实现了物理层.

注意这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层),三层路由器(工作在TCP/IP五层模型的下三层).

随着现在网络技术的不断发展,也出现了很多3层或者4层交换机,4层路由器.

网络分层对应

网络数据传输时,经过不同的网络结点(主机,路由器)时,网络分层需要对应.

以下为同一个网段中两台主机进行文件传输:

 

以下为跨网段的主机文件传输:数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器.

 

封装和分用

网络传输数据的过程中,最核心的流程

1.不同协议层对数据包有不同的称谓:包(packet)->IP数据包, 段(segment)->TCP数据段,

报(datagram)->UDP数据报,帧(frame)->以太网数据帧.

2.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装

3.首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息.

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

下面以A给B通过QQ发送一条"hello"信息来讲解以下具体过程.

封装

1.应用层(应用程序)QQ

QQ从消息输入框中获取到用户输入的hello.就要把这个字符串构造成一个应用层的数据包.QQ这样的程序内部就设置了一个应用层协议,应用层数据包就是按照这个应用层协议约定的格式(字符串拼接)来构造的.

eg:约定格式如下:

应用程序就会调用操作系统的api,把这个数据包交给传输层.

2.传输层

传输层就会把上述数据作为一个整体,再构成一个传输层的数据包.传输层涉及到的协议,最主要的就是TCP/UDP.此时假定使用UDP来通信,就会构成一个UDP的数据包

形如上述,添加报头的过程,就叫做封装,其实就是字符串拼接,不过拼的报头,具有一定结构

拼好传输层数据包之后,就要把这个数据包进一步交给下层,网络层就继续封装了.

交给下层:指的是下层协议提供一组api(函数),上层调用这个api,并且把刚才构造好的数据通过参数传递下去,下层协议就可以处理这个数据了.

UDP报头,虽然不能保护数据,但可以起到贴标签的类似效果.就能承载一些的关键的用来发数据信息.

对于UDP系统,承载的最重要的信息就是源端口和目的端口.

3.网络层(这里涉及到最核心的IP协议)

网络层IP协议就是把刚才的传输层UDP数据包作为一个整体,再拼上IP协议的报头,构成一个IP数据包.

IP协议,相当于整个UDP数据包视为一个整体了.

构造成完整的IP数据包之后,IP协议继续调用链路层的api,把数据再交给链路层这里的协议进行处理.

4.数据链路层(这里涉及到的核心协议-以太网(以太指的是网络传输的介质))

以太网就是目前最常见到的"有线网络",以太网数据帧:也是以一个数据包作为整体,在此基础上加上帧头,帧尾.

5.物理层(硬件设备)

把上述这样的以太网数据帧,二进制结构(一串010101这样的数据),转换成电信号(网线)/光信号(光纤)/电磁波(无线wifi)进行发送.

分用

暂时不考虑中间过程,假定数据包已经到达B的网卡了,B如何处理,B的处理过程,就称为分网

1.B的物理层收到了光信号/电信号/电磁波,就会把这些物理信号转换为数字信号(二进制0101)

得到一个以太网数据帧,进一步将数据帧交给数字链路层处理.

2.数据链路层,以太网(发送方和接收方一样的协议才行).按照以太网数据帧的格式来解析,取出其中的载荷,再交给上层协议.

3.网络层IP协议:按照IP协议的格式进行解析,取出其中的载荷,再交给上层协议.

4.传输层UDP协议:按照UDP协议的格式进行解析,取出其中的载荷,再交给上层协议.

5.应用层QQ程序:按照QQ应用程序的应用层协议格式解析数据.

分用过程,就是逆向的封装过程.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

并查集与图

并查集与图 一、并查集概念实现原理代码实现查找根节点合并两颗树判断是否是同一棵树树的数量 二、图的基本概念定义分类完全图顶点的度连通图 三、图的存储结构分类邻接表邻接表的结构代码实现 邻接矩阵代码实现 四、图的遍历方式广度优先深度优先 五、最小生成树概念Kruskal算…

图中点的层次——树与图的广度优先遍历

问题描述 代码实现 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 1e5 10;int n, m; int h[N], ne[N * 2], e[N * 2], idx; int d[N]; // 从节点1到当前节点的距离 int q[N * 2]; // 数组模拟队列void ad…

BabylonJS 6.0文档 Deep Dive 摄像机(五):多视角(二)

1. 摄像机激活 一般来说&#xff0c;一个场景&#xff08;Scece&#xff09;只有一个激活相机&#xff0c;可以使用的activeCamera属性来指定它。但您也可以使用以下代码定义多个active相机来达成多视角的效果&#xff1a; scene.activeCameras.push(camera); scene.activeCa…

TensorRT英伟达官方示例解析(三)

系列文章目录 TensorRT英伟达官方示例解析&#xff08;一&#xff09; TensorRT英伟达官方示例解析&#xff08;二&#xff09; TensorRT英伟达官方示例解析&#xff08;三&#xff09; 文章目录 系列文章目录前言一、04-BuildEngineByONNXParser----pyTorch-ONNX-TensorRT生成…

探索设计模式的魅力:深入理解面向对象设计的深层原则与思维

如何同时提高一个软件系统的可维护性 和 可复用性是面向对象对象要解决的核心问题。 通过学习和应用设计模式&#xff0c;可以更加深入地理解面向对象的设计理念&#xff0c;从而帮助设计师改善自己的系统设计。但是&#xff0c;设计模式并不能够提供具有普遍性的设计指导原则。…

SAP ERP 物料主数据同步外围系统

物料主数据集成在很多项目是比较常见的需求&#xff0c;在做系统实现之前我们需要明确涉及的业务流程和需求范围&#xff0c;并且对每个系统的业务边界进行明确&#xff1a; 如果是从SAP ERP 向其他系统推送数据&#xff0c;并且实时性要求高的情况下&#xff0c;我一般倾向于在…

开关电源空载电流测试方法大全

空载电流测试原理 开关电源空载电流是指电源在没有负载的情况下所消耗的电流。空载电流的大小会影响到电源的工作效率和稳定性&#xff0c;因此测量开关电源的空载电流是非常必要的。 开关电源空载电流测试是在不接任何负载的条件下&#xff0c;用万用表、电流表或者其它专用测…

[MRCTF2020]Ez_bypass1

代码审计&#xff0c;要求gg和id的MD5值相等而gg和id的值不等或类型不等 相同MD5值的不同字符串_md5相同的不同字符串-CSDN博客 不过这道题好像只能用数组 下一步是passwd不能是纯数字&#xff0c;但是下一个判断又要passwd等于1234567 这里通过passwd1234567a实现绕过 原…

【操作系统】实验六 分析源代码

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

【grafana】使用教程

【grafana】使用教程 一、简介二、下载及安装及配置三、基本概念3.1 数据源&#xff08;Data Source&#xff09;3.2 仪表盘&#xff08;Dashboard&#xff09;3.3 Panel&#xff08;面板&#xff09;3.4 ROW&#xff08;行&#xff09;3.5 共享及自定义 四、常用可视化示例4.1…

【mongoDB】图形化界面工具(mongoDB Compass)

官网地址&#xff1a;https://www.mongodb.com/try/download/compass 下载完之后直接安装 桌面上会产生一个快捷方式 双击就会进入mongoDB图形化界面工具

IP组播地址

目录 1.硬件组播 2.因特网范围内的组播 IP组播地址让源设备能够将分组发送给一组设备。属于多播组的设备将被分配一个组播组IP地址 组播地址范围为224.0.0.0~239.255.255.255(D类地址)&#xff0c;一个D类地址表示一个组播组。只能用作分组的目标地址。源地址总是为单播地址…

Vue+OpenLayers7入门到实战:鹰眼控件简单介绍,并使用OpenLayers7在地图上添加鹰眼控件

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 本章介绍OpenLayers7添加鹰眼控件到地图上的功能。 在OpenLayers中,想要实现鹰眼控件,必须要新建一个数据源,且不能跟其他图层混用,相当于鹰眼是一个单独图层。 补充知识,鹰眼控件是什么? 鹰眼控件是一种在地…

AI教我学编程之SQL Server常见指令以及数据类型

前言 今天在工作的过程中&#xff0c;遇到了许多常见的属性&#xff0c;在此做下记录&#xff0c;方便以后查询 目录 SQL Server 常见指令 对话AI 光有概念怎么行 阶段总结 SQL Server关键字 边学边练 数据类型 看图说话 对话AI 数据类型我知道 括号里的神秘数字 疑问 边练…

彩色图像处理之彩色图像分割的python实现——数字图像处理

原理 彩色图像分割是图像处理领域的一个重要技术&#xff0c;它旨在将一幅彩色图像划分为多个区域或对象。其基本原理包括以下几个方面&#xff1a; 像素特征的提取&#xff1a;彩色图像分割首先涉及到像素级的特征提取。在彩色图像中&#xff0c;常用的特征包括颜色、纹理和…

用大模型训练实体机器人,谷歌推出机器人代理模型

谷歌DeepMind的研究人员推出了一款&#xff0c;通过视觉语言模型进行场景理解&#xff0c;并使用大语言模型来发出指令控制实体机器人的模型——AutoRT AutoRT可有效地推理自主权和安全性&#xff0c;并扩大实体机器人学习的数据收集规模。在实验中&#xff0c;AutoRT指导超过…

HTML-表格

表格 1.基本结构 一个完整的表格由&#xff1a;表格标题、表格头部、表格主体、表格脚注&#xff0c;四部分组成 表格涉及到的标签&#xff1a; table&#xff1a;表格 caption&#xff1a;标题 thead&#xff1a;表格头部 tbody&#xff1a;表格主体 tfoot&#xff1a;表格注…

redis持久化之RDBAOF压缩

前引 1、redis持久化的文件是什么 dump.rdb appendonly.aof 2、这两中文件有什么异同 save 秒 1 alaways everysec no 3、文件存放的位置 dir ./ 4、默认的存放位置:命令启动的地方 dir 自定义的路径 rdb 和aof 文件 存放在同一个路径下面 5、rdb文件默认备份的策略是什么&…

每日一题——LeetCode1331.数组序号转换

方法一 排序哈希Map 首先用一个数组保存排序完的原数组&#xff0c;然后用一个哈希表保存各元素的序号&#xff0c;最后将原属组的元素替换为序号后返回。 var arrayRankTransform function(arr) {let set new Set(arr)let sortArrArray.from(set).sort((a,b)>a-b)let ma…

自学C语言-6

第6章 选择结构程序设计 顺序结构程序设计最简单&#xff0c;但通常无法解决生活中的选择性问题。选择结构程序设计需要用到一些条件判断语句&#xff0c;可实现的程序功能更加复杂&#xff0c;程序的逻辑性与灵活性也更加强大。 本章致力于使读者掌握使用if语句进行条件判断的…
最新文章