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

文章目录

    • 问题
    • 认识“协议”
      • 计算机通信问题
        • 技术问题
        • 应用问题
    • 协议分层
    • 那么网络分层应该怎么分层呢?

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

问题

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

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

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

认识“协议”

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

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

计算机通信问题

技术问题

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

应用问题

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

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

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

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

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

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

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

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

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

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

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

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

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

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

协议分层

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

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


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

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

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

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

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

那么网络分层应该怎么分层呢?

OSI 开放系统互连组织 定制了网络标准 分了七层
在这里插入图片描述

虽然他定制的标准很好,但是工程实践时发现有些东西做不进操作系统内核中,
所以实际被划分成五层协议,叫做物理层,数据链路层,网络层,传输层,应用层。

物理层我们学软件就不关心,不考虑。
所以只剩四层。

标准还能改?人家定了七层
实践时其实整个协议栈中 会话层 和 表示层 肯定是有的,如果没有就很容易出问题的。

链路层, 网络层,传输层 直接就可以在OS内核实现。因为会话 表示 在OS实现不合适,而是把上三层压缩层一层了叫做应用层,刚好就是五层,并不是它偷工减料。

站在纯操作系统层面,最重要的两层协议就是 网络层(最具有代表性的协议叫IP) 和 传输层(最具有代表性的协议叫TCP),又因为这两层最重要我们又把这样的网络协议栈命名为TCP/IP协议栈。

我们自底向上聊一聊每层都干嘛

物理层
负责光电信号的传递,我们经常看到的网线也叫双绞线。
光纤
集线器,光电信号在发热后传送效率就降低了,信号强度降低了,集线器在物理层做信号放大,他不就可以传送距离更远了。

数据链路层
网络通信前提是首先把数据交给下一个设备,比如你连着家里的无线路由器,你要访问抖音前提是把访问请求交给路由器,让后家里路由器把数据传递出去。
所以数据链路层它主要解决同一个局域网中两台设备数据帧的传递和识别。
例如 网卡设备的驱动,交换机。

如果现在直接两个相连的设备可以互相跳转了,所以世界上就会有两个毫不相干的入网设备就有了可能会互相连通的前提。
在这里插入图片描述

下一个问题就是我们要对每一台机器要有身份识别或者唯一性的标识,支持我们未来在网络中进行路径选择,找到目标主机。
关键问题是你为什么选择红色路径而不是其他路径
在这里插入图片描述
网络层
主机定位的问题,数据包路由的问题
重要设备:路由器

我们已经解决数据从A能送到B了,但你怎么保证数据传输不会出问题呢?
传输层
解决数据通信的可靠性问题

应用层
数据传过去到目标主机不是目的,而是数据怎么应用。

随着网络拓扑结构的复杂,伴生处理复杂问题的中间设备:交换机,路由器,集线器。
他们工作在那一层不代表他只有这一层的功能。
比如路由器工作在网络层不代表他只有网络层的功能,他把网络层及其之下的所有层的功能他都有,比如他也有交换机和集线器的功能。

从此往后我们只谈四层。


OS,网络协议栈

网络协议栈和我们之前学习的OS有什么关系?
在这里插入图片描述
所以网络协议呢 他和OS之间的对应关系是这样的。

物理层很好理解就是网卡,本质上就是硬件
数据链路层是软件,他在各种软件驱动内部实现的,它就属于网卡驱动的一部分
在这里插入图片描述
传输层和网络层是真正在Linux内核中实现的,他是内核中的模块!
所以网络层和传输层就是操作系统一部分。

用户要访问抖音,用户就要访问网卡那就是访问硬件,必须得贯穿OS,而OS又必须保证自身安全,所以网络协议层就必须要提供系统调用给上层访问。

目前大部分就是传输层提供的系统调用。
有了系统调用把数据贯穿OS交给网卡,再把数据发送出去。
此时开发者基于系统调用就可以写出很多应用层协议,比如http、smtp、DNS等。

另一些用户就可以直接用这些协议就可以了。
在这里插入图片描述

网络通信的本质: 就是贯穿协议栈的过程,无非就是从上往下,还是从下往上贯穿。
在这里插入图片描述
不同平台OS部分不一样都没关系,因为网络都一样,脑子里不要只放一台主机,而是多台主机。

标准的制定让大家的每一层都相同,具有相同的协议,逻辑上我们又认为同层协议在逻辑上直接在和对方在沟通。

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

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

相关文章

24暑假算法刷题 | Day30 | 贪心算法 IV | 452. 用最少数量的箭引爆气球,435. 无重叠区间,763. 划分字母区间

目录 452. 用最少数量的箭引爆气球题目描述题解 435. 无重叠区间题目描述题解 763. 划分字母区间题目描述题解 452. 用最少数量的箭引爆气球 点此跳转题目链接 题目描述 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中…

《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-04-数据访问层设计

文章目录 1. 五种数据访问模式1.1 在线访问1.2 DAO1.3 DTO1.4 离线数据模式1.5 对象/关系映射 (O/R Mapping) 2. 工厂方法模式在数据访问层应用3 ORM、Hibernate与CMP2.0设计思想3.1 ORM3.2 Hibernate1)概述2) Hibernate的架构(2023年的考题&…

【Web开发手礼】探索Web开发的秘密(十八)-Vue2(4)部门管理页面、路由、打包部署

主要介绍了部门管理页面、路由、打包部署&#xff01;&#xff01;&#xff01; 文章目录 前言 部门管理页面 Vue路由 打包部署 打包 部署 总结 前言 主要介绍了部门管理页面、路由、打包部署&#xff01;&#xff01;&#xff01; 部门管理页面 <template><div>&…

云手机在海外社交媒体运营中的作用

随着社交媒体的全球普及&#xff0c;海外社交媒体运营成为众多企业与个人提升品牌影响力和扩大市场份额的重要策略。在这一进程中&#xff0c;海外云手机以其独特的功能&#xff0c;为海外社交媒体运营提供了强大的支持。 那么&#xff0c;海外云手机在海外社交媒体运营中究竟扮…

展馆室内导航系统:增强现实技术与数据可视化分析在展馆中的应用

随着科技的飞速发展&#xff0c;展览行业正经历着前所未有的变革。作为信息交流与文化传播的重要场所&#xff0c;展馆在吸引访客、展示展品方面扮演着至关重要的角色。然而&#xff0c;在信息爆炸、时间宝贵以及访客需求日益多样化的今天&#xff0c;传统展馆在导览、管理和服…

【学习方法】高效学习因素 ① ( 开始学习 | 高效学习因素五大因素 | 高效学习公式 - 学习效果 = 时间 x 注意力 x 精力 x 目标 x 策略 )

文章目录 一、高效学习因素1、开始学习2、高效学习因素五大因素3、高效学习公式 - 学习效果 时间 x 注意力 x 精力 x 目标 x 策略 一、高效学习因素 1、开始学习 对于 学习差 , 调皮捣蛋 的学生 , 不要把 学习成绩差 的 原因 归因为 不爱学习 / 没有学习方法 , 可能是 还没有 …

从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃

从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃 1.背景 营销 Agent 指的是在营销过程中洞察客户并作出决策以及行动的 AI 智能体,包括感知、理解、决策、交互、反馈多个模块。对话 SOP 是交互模块中非常重要的部分,如何在缺少数据的情况下快速实现千人…

Java数组的类名是什么以及数组相关操作的指令有什么?

写在前面 不知道你想过没有&#xff0c;我们常说数组也是对象&#xff0c;既然是对象&#xff0c;肯定要有一个类名称了&#xff0c;那么&#xff0c;数组的类名称是什么呢&#xff1f;数组相关的操作对应的指令又是什么呢&#xff1f;本文就一起来看下。 1&#xff1a;叨叨叨…

大数据面试SQL(六):共同使用ip用户检测问题

文章目录 共同使用ip用户检测问题 一、题目 二、分析 三、SQL实战 四、样例数据参考 共同使用ip用户检测问题 一、题目 现有用户登录日志表&#xff0c;记录了每个用户登录的IP地址&#xff0c;请查询共同使用过3个及以上IP的用户对。 样例数据&#xff1a; 结果数据&…

软件功能测试步骤介绍,软件测试服务公司推荐

在当今软件开发日益复杂的环境中&#xff0c;软件功能测试显得尤为重要。功能测试是确保软件产品满足用户需求和规范要求的关键环节。它通过验证软件功能是否按预期运行&#xff0c;帮助发现潜在的问题&#xff0c;防止软件在上线后导致用户的不满及业务损失。随着市场竞争的加…

yaml语法+yaml配置文件

yaml语法 k:(空格)v > 表示一对键值对空格必须有 yaml拥有严格的空格缩进格式控制&#xff0c;以空格的缩进来控制层级关系&#xff1b;只要是左对齐的一列数据&#xff0c;都是同一个层级的 spring:thymeleaf:cache: true# 检查模板是否存在&#xff0c;然后再呈现check…

【初阶数据结构题目】18.设计循环队列

设计循环队列 点击链接答题 思路&#xff1a; 循环队列&#xff0c;空间固定。 这里我们可以用数组来实现循环队列。 如何判断队列是否为满&#xff1f; 多申请一块空间 (rear1)%(k1) front 如何判断队列是否为空&#xff1f; rear front 代码&#xff1a; //定义循环队列的…

【开端】通过Java 过滤器灵活配置URL访问权限,并返回403

一、绪论 在JAVA项目系统中&#xff0c;后端给前端提供接口。但是在某些场景我们需要临时控制接口是否能被访问。或关闭某一接口的访问权限。 比如某一接口被攻击了或者某一接口存在漏洞&#xff0c;在系统不关闭的情况下&#xff0c;如何控制系统的访问权限。 二、控制接口访…

俄组织Fighting Ursa利用虚假汽车销售广告传播HeadLace后门

最近&#xff0c;Palo Alto Networks的科研人员揭露了有一个与俄罗斯有关联的威胁行动者——Fighting Ursa&#xff08;亦称APT28、Fancy Bear或Sofacy&#xff09;。该组织通过散布虚假的汽车销售广告&#xff0c;特别是针对外交官群体&#xff0c;散播名为HeadLace的后门恶意…

概率论原理精解【9】

文章目录 集类拓扑空间基 参考文献 集类 C是一个集类&#xff08;以G的某些子集为元素的集合称为G的集类&#xff09;。 A i ∈ C , ∩ i 1 n A i ∈ C , 此为有限交封闭 C 所得集类 C ∩ f A_i \in C,\cap_{i1}^nA_i \in C,此为有限交封闭C所得集类C_{\cap f} Ai​∈C,∩i1n…

windows和office微软官方免费激活教程

微软提供了windows系统和office的官方免费激活&#xff0c;其实不用去买什么激活码&#xff0c;官方提供了激活方式&#xff0c;完全免费。目前测试没发现什么问题&#xff0c;windows还支持永久激活&#xff0c;比一些乱七八糟的kms激活工具还省心。 github地址&#xff1a;Gi…

Xshell8最新版体验(业界最强大的SSH连接工具)

Xshell 是一款强大的 SSH 客户端&#xff0c;广泛用于远程管理和连接服务器。 一、主要特性 多标签界面&#xff1a; 支持在一个窗口中打开多个会话&#xff0c;每个会话以标签形式显示&#xff0c;方便用户在不同会话之间快速切换。 会话管理&#xff1a; 提供强大的会话管理…

Ubuntu安装MySQL5.7 + Apache + PHP + 禅道 保姆及教程

目录 开始安装MySQL 5.7 1、获取安装包 2、解压到指定位置 安装MySQL 启动MySQL 进入到MySQL进行测试 设置允许所有IP可以连接 配置允许远程连接 和 开启 gtid 和 binlog 日志&#xff08;这一步如果不需要可以不操作 如果只需要配置允许远程连接只添加bind-address 0…

Google Mock 和 Google Test编写单元测试入门(环境配置、简单执行)

文章目录 环境的配置方法1&#xff1a;从源代码构建第一步&#xff1a;克隆库的源代码第二步&#xff1a;构建库 方法 2&#xff1a;使用 CMake 的 FetchContent示例 CMakeLists.txt 项目的创建项目结构CMakeLists.txt (根目录)main.cpp (示例程序)tests/CMakeLists.txt (测试部…

Spring-Kafka确认机制报错:No Acknowledgment available as an argument

问题出现 在spring boot集成kafka时报错&#xff0c;报错信息&#xff1a; No Acknowledgment available as an argument, the listener container must have a MANUAL AckMode to populate the Acknowledgment.翻译&#xff1a; Acknowledgment 参数不可用&#xff0c;监听…