计算机网络通信基础概念

目录

1、网络通信的本质

2、网络的发展 

3、网络协议(TCP\IP协议) 

3.1 协议实现通信的原理

3.2 协议的具体概念

3.3 协议的模型 

4、数据链路层

5、网络协议栈和操作系统的关系

6、网络协议通信过程

6.1 通信过程的封装与解包

7、以太网通信

7.1 数据碰撞 

结语


前言:

        计算机网络通信是当代最重要的技术之一,它使得纵使相隔千里的两台计算机也能进行彼此通信,通信的本质是数据传递,网络通信即数据以网络为媒介传递给各个计算机。网络通信可以让全球计算机进行交流,全球计算机的硬件种类之多且操作系统各有所类,能够让这些彼此之间存在差异的计算机相互通信,最根本的原因就是让他们都遵守一个规则-网络协议

1、网络通信的本质

        网络通信虽说是计算机与计算机之间的“交流”,但是计算机要想理解通信的内容,就必须通过程序来实现,因为只有程序才可以对传递的数据做进一步分析(因为通信的数据实际上就是一堆二进制),简单来说,即发送方和接收方都要对通信数据(二进制)做同样的规划,即发送方和接收方都要用程序实现对通信数据的把控,因此在源头上可以将网络通信理解为进程间通信,只不过双方进程不在同一个机器上,而在不同的主机上

2、网络的发展 

        ①最初的计算机与计算机之间是相互独立的,就好比原始社会中各个大陆是不知道彼此的存在的,示意图如下:


        ②当出现网络后,原本独立的计算机就可以通过网络实现相互通信,就好比在原始社会中人们发明了船只等交通工具,让相邻的岛屿知道了彼此的存在,但是所能通信的范围很小,示意图如下:


         ③对上述通信条件进行范围扩大,即局域网(LAN)通信,局域网使得内部计算机可以相互通信,并且可以通过路由器与外部的计算机进行通信,就好比在一群岛屿中设置了一个飞机场,让相邻岛屿的人可以通过飞机去到外面的世界,示意图如下:

        交换机是一种设备,他的作用是让局域网内部通信效率更高。


        ④在上述局域网通信的基础上,再次将范围扩大至广域网通信(WAN),他可以将远隔千里的计算机都连在一起进行相互通信,就好比世界各地都有飞机场,可以通过飞机飞往世界各地,示意图如下:

3、网络协议(TCP\IP协议) 

        计算机网络通信的传输媒介是依靠光信号,电信号,电磁波信号。 通过 "频率" "强弱" 来表示表示二进制的0或1。上文提到,计算机与计算机之间是存在差异的,要让个体上存在差异的计算机进行彼此通信,则需要让他们共同遵循同一个协议,该协议就是网络通信协议,又称网络协议,从抽象层面上来看,协议就是一种规定好的数据格式。

3.1 协议实现通信的原理

        1、网络通信是可以被该局域网中所有计算机看到的,比如主机A给主机B通过网络发送消息,那么其他主机也可以看到这个消息,这样一来彼此之间就不存在安全性和隐私性了,而协议可以保证只让接收方看到该消息,保证了安全性和隐私性。并且协议还提供加密。

        2、协议可以保证发送方发送的数据可以被接收方精准的拿到。

        3、当传输的数据在途中发生丢失或传输失败时,协议可以对此次数据进行重发,确保数据的完整性。

        4、协议规定了数据在通信过程中如何被解释,比如数据在传递时如何进行编码、格式化,发送方该采用什么规则发送数据,接收方该采用什么规则接收数据,保证了数据的有效性。

3.2 协议的具体概念

        协议是数据传输的额外附带品,比如发送和接收快递的时候,快递单子就是发送方和接收方共同遵守的协议,快递员依据快递单上的信息,就可以得知该物品的下一站是何处,当接收方拿到快递时,也会核实快递单上的信息,确认是否是自己的快递,待信息都核实完毕且正确后,才会拆开快递拿到里面的物品件(对应网络协议的数据内容),因此协议的目的只是为了让双方更好的拿到这个数据。

3.3 协议的模型 

        网络协议模型分为两种模型:1、OSI七层模型,2、TCP/IP五层模型。


        OSI模型示意图如下:

        OSI模型把网络通信在逻辑上分为了7层.,每一层都有对应的功能。不管是何种设备或者计算机,在进行网络通信时必须要经过上面7层逻辑才能保证正常通信。该模型的优点是将各个功能明确地区分开来,概念清楚,当某一层出问题时,我们只需要对该层进行排查即可,无需涉及其他层,方便维护。

        但是此模型过于复杂,而TCP/IP五层模型较简易且更加贴近通信逻辑,因此网络通信协议中常常用TCP/IP五层模型来举例子。


        TCP/IP五层模型示意图如下:

        TCP/IP将网络通信分成了五层结构,每层结构的功能如下:

        1、物理层: 用于以太网通信的网线、光纤等物理设备的工作在该层。

        2、数据链路层: 负责物理层设备之间的通信,比如WiFi,交换机的工作就在该层。
        3、网络层: 通过ip地址定位源主机和目标主机,完成主机之间的通信(数据报传递),路由器工作在网路层。
        4、传输层: 分为TCP协议和UDP协议,负责将网络层的协议进行进一步分解,然后将分解出来的数据传递给下一层,能够精准的发送给具体进程。
        5、应用层: 通过代码的实现对将要通信的数据做处理,程序员的工作就是在应用层编写代码实现网络通信。

        站在操作系统层面(除了应用层其他层面都是站在操作系统上的),整个网络协议栈最重要的是网络层和传输层,所以把整个网络协议叫做TCP\IP协议。 

4、数据链路层

        数据链路层只能让相邻的两个设备进行直接通信,而面对不相邻的设备,数据链路层采用“跳一跳”的方式进行通信,方法就是将路由器当作“跳板”,不断的跳转最后找到目标主机,示意图如下:

        具体“跳跃”细节:在局域网内,每一台设备都有自己的唯一的标识符,该标识符就是mac地址,因为局域网通信就是根据mac地址的唯一性来定位主机的。主机A给主机B发消息,由于主机B不在主机A的局域网中,所以主机A会拿到路由器A的mac地址,然后跳到路由器A,如此逻辑,直至拿到主机B的mac地址,最后跳到主机B完成通信。

5、网络协议栈和操作系统的关系

         网络协议栈实际上是操作系统里的一部分,他属于操作系统。示意图如下:

        传输层和网络层实际上是操作系统内核的模块,他们属于操作系统的一部分。网络协议结构和操作系统的种类没有直接关系,即操作系统可以各不相同,但是网络协议栈必须全部人都要按照这个结构来遵守,这也是为什么不同的操作系统之间可以进行网络通信。 

6、网络协议通信过程

        从网络协议栈观看通信过程,示意图如下:

         当主机A和主机B进行网络通信时,数据从主机A的应用层开始往下走,然后通过以太网协议(该协议用于实现链路层的数据传输)找到主机B,并从主机B的链路层一步一步往上走,最终达到主机B的应用层完成一次通信。

6.1 通信过程的封装与解包

         从上图中可以得知数据的传输路径是从上到下,然后再从下到上,实际上数据传输到每一层时,该层都会对数据做相关处理,具体示意图如下:

        一般把传输层的报文叫做数据段,网络层的报文叫做数据报,链路层的报文叫做数据帧。每一层会给上层传递下来的报文添加报头,报文=报头+有效载荷,把这种操作叫做封装。添加报头的目的是为了接收方拿到整个报文时,也可以从下往上的分析报头然后拿到有效载荷继续向上传递,最终接收方拿到信息-“你好”。


        紧接着报文通过以太网协议传输给接收方,接收方对报文的解包过程如下:

         接收方接收到报文后会依次向上交付,最后把信息内容呈现给用户,将封装与解包放在一起来看,发现是一个对称的过程,因此从逻辑上来观察,同层的协议在与对方的同层协议进行直接通信。最后总结得出:网络通信的过程就是不断的封装与解包

7、以太网通信

        在局域网中,每台主机都有自己唯一的标识符:mac地址,接收方之所以可以拿到发送方的数据,就是因为发送方知道接收方的mac地址,但是数据之所以可以精准发送至目标主机,不是根据目标主机的mac地址从而制定一条唯一的“路径”发送给目标主机,而是将数据发送给当前局域网内的每一个主机,只是其他主机会对比mac地址看看是不是发送给自己的,如果不是则会在链路层就丢弃这些数据,不会让数据继续向上传递。

        以太网通信原理就好比上课点名:

        以太网通信实际上是可以被所有人看到的,因此数据其实不是很安全,所以才有网络安全性质的工作。 

7.1 数据碰撞 

        当以太网内多个主机相互发送数据,就会导致数据碰撞,因为路线只有一条,比如一个班里如果老师说话的同时学生也在说话,就导致每个人都听不清对方在讲什么,解决碰撞的方法是错峰运行。当然一个发送者的数据如果被碰撞了,发送者自己是知道的,所以这时候发送者就会运用碰撞避免的算法实现错峰运行。 


        使用交换机减少碰撞的概率:

结语

         以上就是关于计算机网络通信基础概念的讲解,了解网络通信的基础框架是学习网络编程的基础,后续使用网络套接字实现网络通信时离不开网络通信的原理。

        最后如果本文有遗漏或者有误的地方欢迎大家在评论区补充,谢谢大家!!

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

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

相关文章

Ai绘画变现的14种途径 学习Stablediffusion midjourney用途

AIGC,一个在当代社会中不可忽视的词汇,指的是利用人工智能技术生成创作内容。近年来,全球范围内涌现出50个热门的AI工具,其中,以140亿次访问量雄踞榜首的“GBT”,无疑是AI领域的领头羊。在这些工具中&#…

DETR目标检测模型训练自己的数据集

前言 基础环境:ubuntu20.04、python3.8、pytorch:1.10.0、CUDA:11.3 代码地址:https://github.com/facebookresearch/detr 目录 一、训练准备1、预训练模型下载2、txt文件转为coco模式 二、修改训练模型参数三、开始训练四、实现DETR的推理 一、训练准备…

【RT摩拳擦掌】RT600 4路音频同步输入1路TDM输出方案

【RT摩拳擦掌】RT600 4路音频同步输入1路TDM输出方案 一, 文章简介二,硬件平台构建2.1 音频源板2.2 音频收发板2.3 双板硬件连接 三,软件方案与软件实现3.1 方案实现3.2 软件代码实现3.2.1 4路I2S接收3.2.2 I2S DMA pingpong配置3.2.3 音频数…

Python自动化批量下载ECWMF和GFS最新预报数据脚本

一、白嫖EC和GFS预报数据 EC的openData部分公开了一部分预报数据,作为普通用户只能访问这些免费预报数据,具体位置在这 可以发现,由于是Open Data,我们只能获得临近四天的预报结果,虽然时间较短,但是我们…

vue3前端开发-小兔鲜项目-二级页面面包屑导航和跳转

vue3前端开发-小兔鲜项目-二级页面面包屑导航和跳转!这一次,做两件事。第一件事是把二级分类页面的跳转(也就是路由)设计一下。第二件事是把二级页面的面包屑导航设计一下。 第一件事,二级页面的跳转路由设计一下。 如…

Python爬虫(4) --爬取网页图片

文章目录 爬虫爬取图片指定url发送请求获取想要的数据数据解析定位想要内容的位置存放图片 完整代码实现总结 爬虫 Python 爬虫是一种自动化工具,用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持(如 requests、Beaut…

科普文:后端性能优化的实战小结

一、背景与效果 ICBU的核心沟通场景有了10年的“积累”,核心场景的界面响应耗时被拉的越来越长,也让性能优化工作提上了日程,先说结论,经过这一波前后端齐心协力的优化努力,两个核心界面90分位的数据,FCP平…

Day05-readinessProbe探针,startupProbe探针,Pod生命周期,静态Pod,初始化容器,rc控制器的升级和回滚,rs控制器精讲

Day05-readinessProbe探针,startupProbe探针,Pod生命周期,静态Pod,初始化容器,rc控制器的升级和回滚,rs控制器精讲 0、昨日内容回顾1、readinessProbe可用性检查探针之exec案例2、可用性检查之httpGet案例3…

[数据集][目标检测]躺坐站识别检测数据集VOC+YOLO格式9488张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):9488 标注数量(xml文件个数):9488 标注数量(txt文件个数):9488 标注…

C语言 | Leetcode C语言题解之第242题有效的字母异位词

题目&#xff1a; 题解&#xff1a; bool isAnagram(char* s, char* t) {int len_s strlen(s), len_t strlen(t);if (len_s ! len_t) {return false;}int table[26];memset(table, 0, sizeof(table));for (int i 0; i < len_s; i) {table[s[i] - a];}for (int i 0; i &…

EMQX 跨域集群:增强可扩展性,打破地域限制

跨域集群的概念 提到 EMQX&#xff0c;人们通常首先会想到它的可扩展性。尽管 EMQX 能随着硬件数量的增加几乎实现线性扩展&#xff0c;但在单个计算实例上的扩展能力终究有限&#xff1a;资源总会耗尽&#xff0c;升级成本也会急剧上升。这时&#xff0c;分布式部署就显得尤为…

JavaScript(11)——对象

对象 声明&#xff1a; let 对象名 { 属性名&#xff1a;属性值, 方法名&#xff1a;函数 } let 对象名 new Object() 对象的操作 先创建一个对象 let op {name:jvav,id:4,num:1001} 查 对象名.属性 console.log(op.name) 对象名[属性名] 改 对象名.属性 新值 op.name …

Pytorch学习笔记day4——训练mnist数据集和初步研读

该来的还是来了hhhhhhhhhh&#xff0c;基本上机器学习的初学者都躲不开这个例子。开源&#xff0c;数据质量高&#xff0c;数据尺寸整齐&#xff0c;问题简单&#xff0c;实在太适合初学者食用了。 今天把代码跑通&#xff0c;趁着周末好好的琢磨一下里面的各种细节。 代码实…

Spring MVC的高级功能——拦截器(三)拦截器的执行流程

一、单个拦截器的执行流程 如果在项目中只定义了一个拦截器&#xff0c;单个拦截器的执行流程如图所示。 二、单个拦截器的执行流程分析 从单个拦截器的执行流程图中可以看出&#xff0c;程序收到请求后&#xff0c;首先会执行拦截器中的preHandle()方法&#xff0c;如果preHa…

bug诞生记——动态库加载错乱导致程序执行异常

大纲 背景问题发生问题猜测和分析过程是不是编译了本工程中的其他代码是不是有缓存是不是编译了非本工程的文件是不是调用了其他可执行文件查看CMakefiles分析源码检查正在运行程序的动态库 解决方案 这个案例发生在我研究ROS 2的测试Demo时发生的。 整体现象是&#xff1a;修改…

聊一聊前端动画的种类,以及动画的触发方式有哪些?

引言 动画在前端开发中扮演着重要的角色。它不仅可以提升用户体验&#xff0c;还可以使界面更加生动和有趣。在这篇文章中&#xff0c;我们将深入探讨前端动画的各种实现方式&#xff0c;包括 CSS 动画、JavaScript 动画、SVG 动画等。我们还将讨论一些触发动画的方式和动画在…

【MQTT(2)】开发一个客户端,ubuntu版本

基本流程如下&#xff0c;先生成Mosquitto的库&#xff0c;然后qt调用库进行开发界面。 文章目录 0 生成库1 有界面的QT版本2 无界面版本 0 生成库 下载源码&#xff1a;https://github.com/eclipse/mosquitto.git 编译ubuntu 版本很简单&#xff0c;安装官方说明直接make&am…

rk3568 OpenHarmony4.1 Launcher定制开发—桌面壁纸替换

Launcher 作为系统人机交互的首要入口&#xff0c;提供应用图标的显示、点击启动、卸载应用&#xff0c;并提供桌面布局设置以及最近任务管理等功能。本文将介绍如何使用Deveco Studio进行单独launcher定制开发、然后编译并下载到开发板&#xff0c;以通过Launcher修改桌面背景…

记录|如何打包C#项目

参考文章&#xff1a; c#窗体应用程序怎么打包 经过检验确实有效 Step1. 生成发布文件 在Visual Studio的菜单中&#xff0c;找到“生成”->“发布” 第一次会有个向导&#xff0c;基本上一路next下来既可以 最后&#xff0c;点击完成即可以 Step2. 获得publish文件 自…

【JavaEE】AQS原理

本文将介绍AQS的简单原理。 首先有个整体认识&#xff0c;全称是 AbstractQueuedSynchronizer&#xff0c;是阻塞式锁和相关的同步器工具的框架。常用的ReentrantLock、Semaphore、CountDownLatch等都有实现它。 本文参考&#xff1a; 深入理解AbstractQueuedSynchronizer只需…