【计算机网络】第 3 课 - 计算机网络体系结构
欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。

目录
1、常见的计算机网络体系结构
2、计算机网络体系结构分层的必要性
2.1、物理层
2.2、数据链路层
2.3、网路层
2.4、运输层
2.5、应用层
3、计算机网络体系结构中的专业术语
4、总结
1、常见的计算机网络体系结构
为了使不同体系结构的计算机网络都能互连,国际标准化组织于 1977 年成立了专门机构研究该问题。不久,他们就提出了一个试图使各种计算机在世界范围内互连成网的标准框架,也就是著名的 “开放系统互连参考模型”,简称为 OSI(Open Systems Interconnection)。

到了 20 世纪 90 年代初期,虽然整套的 OSI 国际标准都已经制订出来了,但这时因特网已抢先在全世界覆盖了相当大的范围。因特网从 1983 年开始使用 TCP/IP 协议族,并逐步演变成 TCP/IP 参考模型。

在过去制订标准的组织中往往以专家、学者为主。但现在,许多公司都纷纷挤进各种各样的标准化组织,使得技术标准有着浓厚的商业气息。一个新标准的出现,有时不一定反映出其技术水平是最先进的,而是往往有着一定的市场背景。从这种意义上说,能够占领市场的就是标准。
OSI 标准失败的原因可归纳为:
① OSI 的专家们缺乏实际经验,它们在完成 OSI 标准时没有商业驱动力
② OSI 的协议实现起来过分复杂,而且运行效率很低
③ OSI 标准的制订周期太长,因而使得按 OSI 标准生产的设备无法及时进入市场
④ OSI 的层次划分也不太合理,有些功能在多个层次中重复出现

TCP/IP 体系结构的网络接口层并没有规定什么具体的内容,这样做的目的是 可以互连全世界各种不同的网络接口,例如有线的以太网接口,无线局域网的 WIFI 接口,而不限定使用一种或几种网络接口。因此,本质上 TCP/IP 体系结构只有上面的三层。
IP 协议是 TCP/IP 体系结构网际层的核心协议。TCP 和 UDP 是 TCP/IP 体系结构运输层的两个重要协议。 TCP/IP 体系结构的应用层包含了大量的应用层协议,例如 HTTP,SMTP,DNS,RTP 等。
IP 协议可以将不同的网络接口进行互连,并向其上的 TCP 协议和 UDP 协议提供网络互连服务。而 TCP 协议在享受 IP 协议提供的网络互连服务的基础上,可向应用层的相应协议提供 可靠传输的服务。UDP 协议在享受 IP 协议提供的网络互连服务的基础上,可向应用层的相应协议提供 不可靠传输的服务。
由于 TCP/IP 体系结构为了将不同的网络接口进行互连,因此它的网络接口层并没有规定什么具体的内容。然而,这对于我们学习计算机网络的完整体系而言,就会缺少一部分内容,即缺少的是物理层内容。因此,在学习计算机网络原理时往往采取折中的办法,也就是综合 OSI 和 TCP/IP 的优点,采用一种 五层协议的原理体系结构。

可以看出,五层协议的原理体系结构,将 TCP/IP 体系结构的网络接口层又重新划分为了物理层和数据链路层。这样,更有利于我们对计算机网络原理的学习。
2、计算机网络体系结构分层的必要性
“分层” 可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。
下面,我们按照由简单到复杂的顺序,来看看实现计算机网络要面临哪些主要的问题,以及如何将这些问题划分到相应的层次,层层处理。
2.1、物理层
物理层(Physical Layer):这是最底层的层次,负责定义传输介质和数据传输的物理规范,例如电缆、光纤、无线信号等。
首先,来看最简单的情况,两台计算机通过一条网线连接起来。

对于这种最简单的情况,我们需要考虑以下问题:
① 采用怎样的传输媒体(介质)

例如,这是我们常见的双绞线网线。
② 采用怎样的物理接口
例如,这是 RJ45 以太网接口。
③ 使用怎样的信号表示比特 0 和 1

例如,使用这样的方波信号,低电平表示 0,高电平表示 1。(这里,我们需要说明两点,① 严格来说,传输媒体并不属于物理层,它并不包含在体系结构之中。② 计算机网络中传输的信号,并不是我们举例的方波信号,我们之所以举例成方波信号,是为了让初学者容易理解。)
解决了这些问题,两台计算机就可以通过信号来传输比特 0 或 1 了。我们可以将这些问题划规到 物理层。
2.2、数据链路层
数据链路层(Data Link Layer):在物理层之上,负责数据的分帧、差错检测和纠正,以确保数据在物理层的可靠传输。
实用的计算机网络,一般都由多台主机构成。

假设,我们已经解决了物理层的问题,也就是说,主机间可以发送信号来传输比特 0 或 1 了。我们来看看,在这样一个 总线型的网络 上,还面临什么需要解决的问题呢?
如图所示,主机 A 要给主机 C 发送数据,但是,表示数据的信号会通过总线传播到总线上的每一个主机。那么问题来了,主机 C 如何知道该数据是发送给自己的,自己要接受?而主机 B,D,E 又如何知道该数据并不是发送给自己的,自己应该拒绝呢?这就很自然地引出了 如何标识网络中各主机的问题(主机编址问题,例如 MAC 地址)。
主机在发送数据时,应该给数据附加上目的地址,当其他主机收到之后,根据目的地址和自身地址,来决定是否接受数据。这就又引出了一个问题:目的主机从信号所表示的一连串比特流中区分出地址和数据,也就是需要解决分组的封装格式问题。
另外,对于总线型网络,还会出现下面这种典型的问题。例如,在某个时刻总线是空闲的,也就是没有主机使用总线来发送数据。片刻之后,主机 B 和 D 同时向总线发送数据,这必然会造成信号碰撞。因此,如何协调各主机争用总线,也是必须要解决的问题。

需要说明的是,这种总线型的网络早已淘汰,现在常用的是使用 以太网交换机 将多台主机互相形成的 交换式以太网。

那么,以太网交换机是如何实现的呢?我们将这些问题,全部划归到 数据链路层。到这里,大家可能会发现,只要解决了物理层和数据链路层各自所面临的问题,我们就可以实现分组在一个网络上传输了。
2.3、网路层
网络层(Network Layer):这一层负责网络中不同设备之间的寻址和路由,以确定数据在网络中的最佳路径。
我们每天都会使用的因特网,是由非常多的网络和路由器互连起来的,仅解决物理层和数据链路层还是不能正常工作。我们来看下面这个例子,这是由 3 个路由器,4 个网络互连起来的小型互连网,我们可以把它看作是因特网中很小的一部分。
在之前的例子中,只有一个网络,我们不需要对网络进行标识。而在本例中,有多个网络,很显然,我们面临着 如何标识 “各网络” 以及 “网络中各主机” 的问题(网络和主机共同编址问题,例如 IP 地址)。

例如,这是网络 N1 中各设备的 IP 地址。该类 IP 地址的前三个十进制数用来标识网络,第四个十进制数用来标识主机。
我们在来看另外一个问题,源主机与目的主机之间的传输路径往往不止一条,分组从源主机到目的主机可走不同的路径。这样就引出了路由器如何转发分组的问题 ,以及如何进行路由选择的问题 。我们将这些问题全部划分到 网络层。
2.4、运输层
传输层(Transport Layer):传输层提供端到端的通信,负责将数据分割为较小的数据段,并提供流量控制和可靠性保证,例如通过TCP(传输控制协议)实现的可靠数据传输。
如果我们解决了物理层、数据链路层以及网络层各自的问题,则可以实现分组在网络间传输的问题。但是,对于计算机网络应用而言,这仍然不够。例如,假设这台主机中运行着两个与网络通信相关的应用进程,一个是浏览器进程,另一个是 QQ 进程。这台服务器中运行着与网络通信相关的服务器进程。

某个时刻,主机收到了来自服务器的分组,那么,这些分组应该交给浏览器进程处理呢,还是应该交给 QQ 进程处理呢?这就引出了我们如何标识与网络通信相关的应用进程,进而解决进程之间基于网络的通信问题。
另外,如果某个分组在传输过程中出现了误码,或者由于路由器繁忙,导致路由器丢弃分组,这应该如何处理呢?我们将这些问题都全部划归到 运输层。
2.5、应用层
我们已经解决了物理层,数据链路层,网络层和传输层各自的问题,则可以实现进程之间基于网络的通信。在此基础上,只需制定各种应用层协议,并按协议标准编写相应的应用程序,通过应用进程间的交互来完成特定的网络应用。例如,支持万维网应用的 HTTP 协议,支持电子邮件的 SMTP 协议,支持文件传送的 FTP 协议,我们将这些问题全部划分到应用层。
至此,我们将实现计算机网络所需要解决的各种主要问题,分别划归到了 物理层、数据链路层、网络层、运输层 和 应用层,进而构成了五层协议体系的原理体系结构。

3、计算机网络体系结构中的专业术语
(1)实体:任何可发送或接收信息的硬件或软件进程
(2)对等实体:收发双方相同层次中的实体

(3)协议的三要素
① 语法:定义所交换信息的格式

② 语义:定义收发双方所要完成的操作
例如,主机要访问远程 Web 服务器,他会构建一个 HTTP 的 GET 请求报文,然后将其发送给 Web 服务器。

Web 服务器收到该报文并进行解析,知道这是一个 HTTP 的 GET 请求报文,于是就在自身内部查找所请求的内容,并将所找到的内容封装在一个 HTTP 响应报文中发回给主机。

主机收到 HTTP 响应报文后,对其进行解析,取出所请求的内容,并由浏览器解析显示。这个例子就可以体现出通信双方收到分组后完成怎么样的操作。这是 HTTP 协议的语义所定义的。
③ 同步:定义收发双方的时序关系
请注意,这里的同步并不是指时钟频率同步。例如,这是 TCP 采用 “三报文握手” 建立连接的过程。要想进行运输层 TCP 实体间的逻辑通信,首先,必须建立连接。从连接建立的过程就可以看出 TCP 客户端和 TCP 服务器之间的时序关系,以及各自的状态转换。只有双方建立连接后,才能进行 TCP 数据传输。这个例子可以充分体现计算机网络协议三要素中的同步。
(4)服务
在协议的控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下面一层所提供的服务。协议是 “水平的”,服务是 “垂直的” 。

实体看得见相邻下层所提供的服务,但并不知道实现该服务的具体协议。也就是说,下面的协议对上面的实体是 “透明” 的。
(5)服务访问点
在同一系统中 相邻两层的实体交换信息的逻辑接口,用于区分不同的服务类型。
① 数据链路层的服务访问点为帧的 “类型” 字段
② 网络层的服务访问点为 IP 数据报首部中的 “协议字段” 。
③ 运输层的服务访问点为 “端口号” 。

(6)服务原语
上层使用下层所提供的服务必须通过与下层 交换一些命令,这些命令称为服务原语。
(7)数据单元
① 协议数据单元 PDU
在计算机网络体系结构中,对通信双方所交互的数据包有专门的术语。我们把 对等层次之间传送的数据包 称为该层的协议数据单元。
② 服务数据单元 SDU
同一系统内,层与层之间交换的数据包 称为服务数据单元。
③ 多个 SDU 可以合成为一个 PDU;一个 SDU 也可划分为几个 PDU
4、总结
本期的分享总结就到这里了,如果有疑问的小伙伴儿,我们在评论区交流嗷~~~,笔者必回,我们下期再见啦 !!!
博客中难免存在疏漏和错误之处,皆归因于作者水平有限,诚请各位读者不吝指正 !
<计算机网络> 专栏系列持续更新,欢迎订阅关注 !
相关文章:
【计算机网络】第 3 课 - 计算机网络体系结构
欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、常见的计算机网络体系结构 2、计算机网络体系结构分层的必要性 2.1、物理层 2.2、数据链路层 2.3、网路层 2.4、运输层 2…...
精细呵护:如何维护自己的电脑,提升性能和寿命
导语: 在当今数字化时代,电脑已经成为我们日常生活和工作的必需品。然而,就像任何其他设备一样,电脑需要得到适当的维护和保养,以保持良好的性能和延长使用寿命。在本文中,我们将分享一些简单而有效的方法&…...
DevOps-Jenkins
Jenkins Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 官网 应用场景 场景一 研发人员上传开发好的代码到github代码仓库需要将代码下载nginx服务器部署手动下载再…...
Jasper裁员,成也GPT,败也GPT
大家好! 我是老洪。 今天来聊一聊人工智能(artificial intelligence),简称AI。 当前的AI可谓是热火朝天, 自从ChatGPT发布以来,引起了广泛的关注和热情, 许多公司和研究者都试图将其应用于自己的产品或研究中。 按理说…...
安卓开发后台应用周期循环获取位置信息上报服务器
问题背景 最近有需求,在APP启动后,退到后台,还要能实现周期获取位置信息上报服务器,研究了一下实现方案。 问题分析 一、APP退到后台后网络请求实现 APP退到后台后,实现周期循环发送网络请求。目前尝试了两种方案是…...
为什么你的独立站有流量没转化?如何做诊断检查?
新店的创业初期,即使网站有流量,但是销售额为零的情况也常有发生。如果你确定流量是高质量的,寻找阻止潜在客户购买的具体因素可能会感到困难重重。 从“立即购买”按钮的色彩选择这样的细节,到构建品牌故事这样的大计划…...
【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程
【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程 文章目录 【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程前言确定版本对应关系源码编译安装Pytorch3d总结 前言 本人windows10下使用【Code for Neural Reflectance Surfaces (NeRS)】算法时需要搭…...
【算法和数据结构】257、LeetCode二叉树的所有路径
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:首先看这道题的输出结果,是前序遍历。然后需要找到从根节点到叶子节点的所有路径ÿ…...
yolov5的后处理解析
由于最近实习项目使用到了yolov5, 发现对yolov5的后处理部分不太熟悉,为防止忘记,这里简单做个记录。 在yolov5里,利用FPN特征金字塔,可以得到三个加强特征层,每一个特征层上每一个特征点存在3个先验框&am…...
Java中注解应用场景
1.Parameter注解 Parameter(names "-browser", description "browser name, supported scope [chrome]", required true) Param注解的用法解析_parameter_fFee-ops的博客-CSDN博客 Public User selectUser(param(“userName”) String name, param(“…...
verilog
数据类型 reg reg [3:0] counter; counter是一个寄存器,这个寄存器有4bit大小; reg [3:0] byte1 [7:0]; 有8个寄存器,每个4bit大小; wire 有符号整数 interge 无符号 reg clk_temp (小数)verilog中称实数…...
基于springboot+mybatis+vue进销存管理信息系统
基于springbootmybatisvue进销存管理信息系统 一、系统介绍二、功能展示1.个人中心2.企业信息管理3.商品信息管理4.客户信息管理5.入库记录管理6.出库记录管理7.出库记录管理8.操作日志管理9.库存盘点管理 四、获取源码 一、系统介绍 系统主要功能: 普通用户&#…...
Keepalived 在CentOS安装
下载 有两种下载方式,一种为yum源下载,另一种通过源代码下载,本文章使用源代码编译下载。 官网下载地址:https://www.keepalived.org/download.html wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz --no-…...
Lua语法学习
Lua 文章目录 Lua变量数据类型nilbooleanstringtable 循环if函数运算符Table -- Events local StateEvents ReplicatedStorage:WaitForChild("StateEvents"); local AddMoneyEvent StateEvents:WaitForChild("AddMoneyEvent");AddMoneyEvent:FireServer(…...
【Ajax】笔记-jsonp实现原理
JSONP JSONP是什么 JSONP(JSON With Padding),是一个非官方的跨域解决方案,纯粹凭借程序员的聪明才智开发出来的,只支持get请求。JSONP 怎么工作的? 在网页有一些标签天生具有跨域能力,比如:img link iframe script. …...
LLM - Chinese-Llama-2-7b 初体验
目录 一.引言 二.模型下载 三.快速测试 四.训练数据 五.总结 一.引言 自打 LLama-2 发布后就一直在等大佬们发布 LLama-2 的适配中文版,也是这几天蹲到了一版由 LinkSoul 发布的 Chinese-Llama-2-7b,其共发布了一个常规版本和一个 4-bit 的量化版本…...
transformer代码注解
其中代码均来自李沐老师的动手学pytorch中。 class PositionWiseFFN(nn.Module):ffn_num_inputs 4ffn_num_hiddens 4ffn_num_outputs 8def __init__(self,ffn_num_inputs,ffn_num_hiddens,ffn_num_outputs):super(PositionWiseFFN,self).__init__()self.dense1 nn.Linear(ffn…...
【产品经理】高阶产品如何处理需求?(3方法论+2案例+1清单)
不管你是萌新小白,还是工作了几年的“老油条”,需求一直是产品经理工作的重点。只不过,不同年限的产品经理需要面对的需求大有不同,对能力的要求更高。 不知你是否遇过以下问题? 你接手一个项目后,不知从何…...
Neo4j数据库中导入CSV示例数据
本文简要介绍Neo4j数据库以及如何从CSV文件中导入示例数据,方便我们快速学习测试图数据库。首先介绍简单数据模型以及基本图查询概念,然后通过LOAD CSV命令导入数据,生成节点和关系。 环境准备 读者可以快速安装Neo4j Desktop,启…...
第四章 No.1树状数组的原理与使用
文章目录 应用问题原理树状数组练习题241. 楼兰图腾242. 一个简单的整数问题243. 一个简单的整数问题2244. 谜一样的牛 线段树的反面:树状数组原理复杂,实现简单 应用问题 支持两个操作:快速求前缀和任意地修改某个数,时间复杂度…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
