【网络基础一】几乎不讲任何网络协议细节,搭建网络基本结构

news2024/12/23 14:53:15

文章目录

    • 问题
    • 认识“协议”
      • 计算机通信问题
        • 技术问题
        • 应用问题
    • 协议分层

统编程帮助我们处理数据,网络编程帮助我们获取数据,网络配上我们写的线程池模块很快就搭建起来了。

问题

网卡是文件吗?
是的,所以未来网络通信的本质反馈到编程上他就是文件操作,所以未来网络各种协议都不要管,
就记住文件里写,就是往网卡里写,往网卡里写就是往网络里写。

局域网和广域网只是相对的概念
我们认为在你家里就是一个局域网,如果你访问自己的服务器,那么就是访问广域网。

网络发展是历史的必然,如果没有网络那么每个人关注数据处理数据的点不一样,那你用U盘传效率太低,所以就会有网线把所有计算机连起来,每个人想要数据从服务器上去拿。
随着发展可能一个局域网要和另一个局域网共同处理一个项目,所以把两个不同的子网链接起来也是发展的必然。

认识“协议”

计算机里因为数据经过长距离传输,所以沟通的成本就高了,距离变成,信息传输衰减是问题,传递过来的信息我得知道这信息是什么意思,所以长距离传输是需要定一些协议的。

例子:你去上大学,老爹在老家有一部座机,你给家里打电话 响铃一声,2声,三声,你和老爹约定好了这三种情况都是啥意思,这个东西就叫做协议。
从故事里得到一个结论,一个问题。
结论:我们可以通过协议降低沟通信息的成本。所以协议本质是一种约定,通过双方规定的方式,减少沟通成本。
问题:我们在计算机领域的协议该如何理解他呢?
不管如何,我们定协议是为了解决计算机通信问题,把问题罗列出来协议能解决什么问题也就清楚了,协议就是解决通信问题的。

计算机通信问题

技术问题

长距离传输的数据丢失的问题 1.你怎么知道丢了 2.丢了之后怎么办 》tcp协议
如何定位主机的问题-》ip协议
你怎么保证你的数据能准确到达下一个设备 -》数据链路层
这几个问题假设都解决了,我能精准定义某一个主机把数据传给另一个主机了,这个传数据给远端主机是目的吗?

应用问题

把数据传送给远端不是目的,我们要的是如何处理发来的数据? 》https http ftp协议…
他是让我干什么呢?是让我上传还是下载?

主机是对称的,发送方和接收方都有相同的这样的问题,所以我们就要在双方机器上每一层对应的问题都要解决。
那我们怎么做的,所以每一层都要有自己的协议。

在这里插入图片描述
为什么网络会有这些问题呢?
如果今天两台机器就在一块会有这样的问题吗?
根本原因就是单纯的传输距离变长了!

我们实际生活中收快递,假如你买了一个洗面奶,可是你会收到多出来的快递盒子,盒子上的各种信息字段,这个多出来的信息字段就叫做协议的报头。

如果用C语言想把快递单描述起来该如何描述?
用C语言该如何描述这个报头呢?答案就是你会用结构体。
你要发“在吗“”这个字符串,只要把在吗拷贝到结构体后面你就构建了一个报文。

协议的最终结论
协议是双方的约定,最终他的表现形式就是结构体对象

所以左侧机器定义结构体A,右侧机器也认识结构体A,对端也能立马认识这个 结构体,因为我们类型是一样的,所以就可以跨主机基于结构体快速形成约定。

思考:
只要通信的两台主机,约定好协议就可以了吗?
在这里插入图片描述

标准定出来之后,从硬件到软件,协议是标准的子集

问题
能不能告诉我一些软件分层的场景?什么叫做软件分层啊?
我们学习过的linux操作系统就是分层的
具体如何分层的例子有:继承和多态带来的软件的意义不就是在做软件分层吗?
基类就是上层,子类的各种多态化实现就是下一层,所以你改下一层并不影响上一层,这就是典型的软件分层。

我们学习虚拟文件系统时,不同的硬件对应struct file中对应不同的指针指向读写方法,就是在用户和硬件驱动之间加一层软件层。

软件分层不一定非得是上下的关系,也可以是左右的关系,比如虚拟地址空间的分层将进程管理和文件管理很明显就区分开了。

软件分层上的结论
它最典型的表现是在结构体或类的设计上,在数据层面上作分离。
第二种,回调函数,通过回调的方式在软件逻辑上分层,大部分的分层既是在数据结构上分层,又是在软件逻辑上分层,这样代码耦合度就低了也就好维护了。

为什么我要分层呢?
一旦分层最大的好处就是层和层之间,它代码耦合度降低了,大项目被肢解为多个子项目,这样后期维护成本非常低。
遵守的维护原则让层和层之间他的耦合度降低,层和层不要有太多的交互,要交互接口一定设计的非常轻量化。
凡事划分同一层内部,大家的代码和数据和逻辑都必须是强相关的,这叫高内聚。

协议分层

为什么网络协议是层状的呢?
原因:
技术上的原因
1.网络通信时规模太大了
实际情况的原因
2.协议本身是解决问题的,刚好你的问题是层状的,所以协议定义出来也是层状的。
比如你得先解决主机到下一跳主机的问题,解下的问题是如何定位目标主机的路由问题,解决之后A到B主机的问题后,但我并不能保证可靠性,所以继续衍生到可靠性问题。下一组问题是你打算把数据怎么处理?
所以软件协议就进行软件分层方面 的设计了。

自此把软件协议从是什么,为什么,后面大部分都在说一个问题,如何进行分层?每一层究竟有什么,协议是怎么解决这些问题的。


在这里插入图片描述
张三和李四 打电话实际上认为人和电话在沟通

但是重要的是 逻辑上我们认为 人和人,在同一层进行直接交互,电话和电话在沟通。

语言层,我们有协议,比如你不是上来就说话,而是简单握手比如 喂,电话层的协议就更不用说了。
打电话场景中,同层协议能做到高内聚,层和层之间就叫做低耦合,电话的协议用户不关心,用电话的人说中文还是英文,电话一点不关心。
层和层交互时我们只用一个话筒就可以交互了。

所以层状结构的好处就是好维护,一层出问题只会影响某一层本身,不会影响上一层,甚至我把电话层全换掉,也不影响上一层,上一层也可以换。

所以分层最大的好处在于通过高内聚低耦合可以大大降低软件维护的成本。

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

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

相关文章

Obsidian插件安装与开发

大概背景 事情的起因还是因为做笔记,我喜欢利用插件Obsidian Git自动同步笔记到Gitee,写md文档有个问题就是关于图片如何存储。 我个人习惯是将所有图片都保存到指定的文件夹下,如图👇 由于Obsidian对粘贴图片默认格式为这样的&…

ESXI加入VMware现有集群提示常规性错误

集群内有vSphere6.5和6.7的版本,都开启了EVC 这台老服务器是DELL R710添加时报错,网上查了些资料说要重装ESXI或者关闭EVC等等 最终解决方法是,给这台ESXI配置一个NTP服务器,同步系统时间,之后即可正常加入集群 往期文…

【安卓】文件存储

文章目录 将数据存储到文件中从文件中读取数据 文件存储是Android中最基本的数据存储方式,它不对存储的内容进行任何格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合存储一些简单的文本数据或二进制数据。如果你想使用文件…

家庭教育—情绪教育:塑造孩子情绪智力的金钥匙

文章目录 1. 背景介绍2. “1310镇静”方法的介绍3. 方法的科学依据4. 实施步骤5. 总结 1. 背景介绍 在快节奏的现代生活中,儿童面临着越来越多的情绪挑战。情绪教育作为素质教育的重要组成部分,越来越受到家长和教育者的重视。情绪教育不仅关乎儿童的心…

第100+20步 ChatGPT学习:R实现Lasso回归

基于R 4.2.2版本演示 一、写在前面 花了好几期分享了使用R语言实现机器学习分类,基本把常见模型都讲完了。 最后就以Lasso回归收尾得了。 Lasso回归应该很出名了,做特征变量筛选的,因此,不过多介绍。 二、R代码实现Lasso回归 …

OceanBase V4.2特性解析:MySQL模式下GIS空间表达式的场景及能力解析

1. 背景 1.1. OceanBase Mysql gis空间表达式的应用场景及能力 在OceanBase 4.1版本中,mysql模式下支持了gis数据类型以及部分空间对象相关的表达式,随着客户使用空间数据的需求日益增长,需要快速地补齐空间数据存储和计算分析的能力&#…

简单分享下Python进程

1. 单进程与多进程 理论讲解: 进程是操作系统中资源分配的基本单位,每个进程都有独立的内存空间。 多进程允许同时运行多个进程,提高CPU利用率和程序响应速度。 示例代码: import os print("当前进程ID:", os.getp…

【适配器模式】设计模式: 穿越接口的时空隧道(架起接口间的桥梁)

文章目录 Java 设计模式之适配器模式:理论与实践1. 引言1.1 结构型模式介绍1.2 为什么需要适配器模式? 2. 适配器模式概述2.1 定义2.2 关键概念2.3 适配器模式的类型 3. 适配器模式的参与者4. 适配器模式的工作原理4.1 类适配器模式的工作流程4.2 对象适…

CSS基础 - CSS3

目录 A. 简介 B. 基础用法 C. 总结 A. 简介 CSS3 是 CSS(层叠样式表)技术的升级版本。 一、新特性概述 选择器增强 CSS3 引入了更多强大的选择器,使得开发者能够更精确地选择和样式化网页元素。例如,属性选择器可以根据元素…

Golang | Leetcode Golang题解之第329题矩阵中的最长递增路径

题目: 题解: var (dirs [][]int{[]int{-1, 0}, []int{1, 0}, []int{0, -1}, []int{0, 1}}rows, columns int )func longestIncreasingPath(matrix [][]int) int {if len(matrix) 0 || len(matrix[0]) 0 {return 0}rows, columns len(matrix), len(m…

仓颉编程入门 -- 循环语句详解

仓颉编程入门 – 循环语句 一 . while 表达式 while 表达式的基本形式为: while (条件) {循环体 }注意事项 : 其中“条件”是布尔类型表达式,“循环体”是一个代码块。while 表达式将按如下规则执行: 计算“条件”表达式,如果…

计算机毕业设计选题推荐-电缆行业生产管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

LabVIEW软件开发的未来是什么?

LabVIEW软件开发的未来展望可以从以下几个方面进行分析: 1. 与硬件集成的进一步增强 LabVIEW一贯以其与硬件的紧密集成而著称,未来这一优势将进一步得到强化。随着物联网(IoT)设备、工业4.0和智能制造的发展,LabVIEW将…

Mipi SoundWire Spec 详解4.2~4.3

目录 4.2 低层特性 4.2.1 物理接口 4.2.1.1 信号拓扑 4.2.1.2 多数据通道 4.2.1.3 高性能PHY 4.2.2 数据编码 4.2.3 物理信号值和逻辑信号值的术语 4.2.4 对开发和测试低级功能的支持 4.3 控制特性 4.3.1 比特流与帧结构 4.3.1.1 控制字与带宽权衡 4.3.2 同步 4.3.…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 8月8日,星期四

每天一分钟,知晓天下事! 2024年8月8日 星期四 农历七月初五 1、 财政部预拨4.65亿元资金支持辽宁、吉林等7省(市)开展应急抢险救灾工作。 2、 2024年“三区”人才支持计划发布:全国将选派15952名教师赴“三区”。 3…

什么是三维坐标系?

在研究向量和高级微积分主题时,了解 3D 坐标系非常重要。过去,我们一直在处理平面和矩形坐标。这一次,我们将研究三维坐标系的组成部分和约定。 3D 坐标系使我们能够表示包含三个相互垂直轴的空间中的一个量。通过 3D 坐标系统,我…

计算机网络——网络层(多协议标签交换MPLS、软件定义网络SDN)

多协议标签交换MPLS 多协议标签交换MPLS(multiProtocal Label Switching):“多协议”表示在MPLS的上层可以采用多种协议。 MPLS利用面向连接技术,使每个分组携带一个叫作标签的小整数(这叫作打上标签)。当分…

Linux下终极下载管理器:uGet and aria2

你是否曾在火狐浏览器中点击过下载链接,然后连接中断,不得不从头开始重新下载文件? 这就是 uGet 下载管理器的用武之地。 1)uGet 是一款开源的轻量级下载管理器,适用于 Linux、BSD、Android 和 Windows。有了 uGet&a…

Github 2024-08-08 开源项目日报Top10

根据Github Trendings的统计,今日(2024-08-08统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目5JavaScript项目3Python项目2C#项目1C++项目1Go项目1免费编程学习平台:freeCodeCamp.org 创建周期:3302 天开发语言:TypeScri…