初识网络原理

1.网络互联

网络互联就是将多台计算机连接在一起,完成数据共享。

数据共享本质就是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。

根据网络互联的规模不同,可以划分为局域网和广域网。

1.1 局域网 

局域网,即Local Area Network,简称LAN。

Local即标识了局域网是本地的,局部组建了一种私有网络。

局域网内的主机能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,位于不同局域网内的主机是不能够通信的。

局域网的组建方式有很多种

(1) 基于网线直连

(2)基于集线器直连

(3)基于交换机直连

(4)基于交换机和路由器直连

1.2 广域网 

广域网,即Wide Area Network,简称WAN。

通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就行成了广域网。广域网内部的局域网都属于其子网。 

2.网络通信基础

网络互联的目的是进行网络通信,也叫网络数据传输,更具体一点,就是主机中的不同进程之间,基于网络传输数据。 

那么,在组建的网络中,如何判断数据是从哪一台主机将数据传送给哪一台主机呢?这时候就需要使用IP地址来标识。

2.1 IP地址 

IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址,简单来说,IP地址就是用来标识主机网络地址。 

IP地址是一个32位的二进制数,通常被分割位4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。

通常用”点分十进制“的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~255之间的十进制数字),如上面的IP地址的”点分十进制“:100.4.5.6

一个特殊的IP地址:127.0.0.1

127.0.0.1被称为本地回环地址,主要用于标识本地主机(即本地计算机本身)和网络测试和开发用途。

2.2 端口号 

在网络通信中,端口号可以标识主机中发送数据和接收数据的进程(应用程序),简单来说,端口号用来标识主机中的进程(应用程序)

端口号是一个0~65535范围内的数字,在网络通信中,进程(应用程序)可以通过绑定一个端口号,来发送和接收网络数据。

问题:

有了IP地址和端口号,我们就可以定位到网络中唯一的一个进程,但是,网络通信是基于二进制0/1数据来传输的, 也就是对端接收到的数据是一串二进制数据,那对端是如何正确解析二进制数据,正确得获得对方发送过来得内容呢?

网络通信的数据类型有很多种,如图片,视频,文本等。同一个类型的数据,格式也可能会不同,例如纯文本和富文本都是文本数据,但是纯文本格式只是简单的字符序列,而富文本格式则可以包含字体样式、颜色、超链接等多种格式信息。

如我们发送一个文本字符串”你好“,是如何标识发送的数据是文本数据类型,及文本的编码格式呢?

所以基于网络数据传输,需要使用协议来规定双反方的数据格式。

 3.认识协议

在网络领域中,协议是网络协议的简称。网络协议是所有网络通信(即网络数据传输)的网络设备必须共同遵守的一组约定、规则。例如,网络设备间如何建立连接、怎样互相识别等。只有遵守这个协议,计算机之间才能相互通信交流。

简单来说,网络协议是通信双方对于发送和接收数据格式的约定,我的数据怎么发出去的,你收到就得怎么解析。

在网络通信中,协议非常重要,只有互相通信之间的多个主机能认同并遵守同一套协议,此时的通信才是有意义的。

协议最终体现为在网络上传输的数据包的格式

4.五元组 

一次网络通信的进行会涉及到5个关键信息,分别为源IP,源端口号,目的IP,目的端口号和协议类型,这5个信息被称为五元组。

在TCP/IP协议中,用五元组来标识一个网络通信。

源IP标识源主机

源端口号标识源主机中该次网络通信中发送数据的进程(应用程序)

目的IP标识目的主机 

目的端口号标识目的主机中该次网络通信中接收数据的进程(应用程序) 

协议类型标识发送数据的进程和接收数据的进程双方约定的数据格式

如下图: 

5.协议分层

由于网络通信非常复杂,如果在一个网络协议中完成网络通信涉及到的方方面面的问题,那么必定会使这个协议非常复杂。

所以,一般会让协议分层,不同的层次分别根据各自层次的协议,各自完成在一次网络通信中,该层需要执行的任务。

什么是协议分层

协议分层是计算机网络中一种重要的组织和设计方法,用于将发杂的网络通信功能划分为多个层次,每个层次负责特定的任务,并通过明确规定的接口于相邻层进行交互。

注意事项

协议之间的交互,不能跨层进行。 只有相邻两层协议才能进行交互,上层协议可以调用下层协议,下层协议可以给上层提供服务。

分层的作用 

分层的最大的好处类似于面对接口编程, 定义好两层之间的接口规范,让双方遵循这个规范来进行交互。

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

对于使用方来说,并不关心接口的具体实现细节,只需使用接口即可。

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

如下图

这样的规定也能达到解耦合的效果。 

如下图

两个互相进行通信的人, 只要这两个人能够说同一种语言,无论设备层的设备如何改变,也就是不论我们使用任何设备,对这两个人的交流的影响不是很大,后续改变通讯设备,对于两个人之间的交流也不会影响很大,这就达到了很好的解耦合的效果。

5.1 OSI七层模型

 OSI七层模型是一种逻辑上的定义和规范:把网络从逻辑上分为了7层。但是由于这一套分层体系太复杂了,实际真实的网络分层方式更简化。

5.2 TCP/IP五层模型 (经典面试题)

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

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

1. 应用层:负责应用层序之间的沟通,也负责对网络传输的数据进行何种处理

2. 传输层:负责任意两台网络设备之间的通信,该层只考虑数据的发起点和数据的接点, 不关心数据传输的中间过程。例如在该层的TCP协议中,能够保证数据可靠的从源主机发送到目标主机。

3. 网络层:负责地址管理和路由选择。网络层也是负责任意两台网络设备之间的通信,但是  网络层会考虑网络数据传输的中间过程。例如在该层的IP协议中,通过IP地址来标识一台主机,并通过路由表(路由表的主要内容包含 目的网络地址,下一跳地址,出接口)的方式出两台主机之间数据传输的路线。

4. 数据链路层:负责相邻设备之间的数据帧的传送和识别。

5. 物理层:负责光/电信号的传递方式,规定了网络通信中一些硬件设施符合的要求。

有些资料将数据链路层和物理层结合在一起,所以也叫TCP/IP四层协议。 

5.3 网络设备

主机:主机的操作系统实现了从传输层到物理层的内容(即TCP/IP五层模型的下四层),通过应用程序满足通信的需求。

路由器:路由器实现了网络层到物理层的内容,即是TCP/IP五层模型的下三层

交换机:交换机实现了从数据链路层到物理层的内容,即TCP/IP五层协议的下两层。

集线器:集线器实现了物理层的内容。

注意:现在的路由器和交换机很多都有对方的功能了。

6. 网络通信的基本流程

6.1 封装与分用 

1. 不同的协议层对数据包有不同的称谓,在传输层叫,在网络层叫数据报,在数据链路层叫帧。

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

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

4. 数据封装成帧后发到传输介质上,,到达目的主机后,每层协议再剥掉相应的首部,根据首部中“上层协议字段”将数据交给对应的上层协议处理,这就是分用

1.封装的过程 

1. 应用层序获取到用户输入,构造一个“应用层数据包”,这个应用层数据包就会遵守应用层协议。

 2. 应用程序调用传输层提供的接口(API),把数据交给传输层,传输层的拿到数据之后,构造出“传输层数据段” 。 

这个传输层数据段主要遵守传输层协议,主要是TCP协议和UDP协议。

以TCP协议来说,TCP数据段就是由TCP段头+TCP载荷组成。TCP载荷就是应用层数据包。

 

3.  传输层构造好数据之后,继续调用网络层的api,把传输层的数据段交给网络层,网络层拿到数据后,构造出网络数据报。

 网络数据报主要遵守网络层的IP协议,则网络数据报就是IP报头+IP载荷。

4. 网络层数据构造好之后,IP协议继续调用数据链路层的api,把IP数据包交给数据链路层,构造出一个“以太网数据帧” 。

再数据链路层中,核心协议为“以太网协议”,根据以太网这个协议,就会再网络层数据报的基础上进一步加工,打包成一个以太网数据帧。以太网数据帧=帧头+载荷+帧尾。

 

5. 数据链路层构造好“以太网数据帧” 之后,数据链路层继续调用物理层的api,把以太网数据帧交给物理层,也就是硬件设备(网卡),网卡会把上述二进制数据(网络上传输的数据本质上都是二进制),最终以光信号/电信号/电磁波信号传播出去了。

 2.分用的过程

1. 数据到达接收方主机的网卡,接收方主机网卡会将光电信号还原成二进制,并把二进制数据交给上层数据链路层。

2. 数据达到数据链路层后,从帧头和帧尾发现此时的协议为“以太网协议”,则数据链路层按照以太网协议进行解析,把帧头和帧尾取出来,剩下的载荷,继续往上传给网络层。

3. 数据到达网络层后,从IP报头中得知此时的协议为网络层协议,则按网络层协议对数据进行解析,把IP报头取出来,剩下的载荷再继续传给传输层。 

4. 数据达到传输层后,从TCP段头中得知此时的协议为传输层协议,则此时按照传输层协议对数据进行解析,把TCP段头取出来,剩下的载荷继续往上传给应用层。cong

 

5. 数据到达应用层后,会按照应用层协议(不同应用的应用层协议是不同的)解析,拿到关键信息,展示到界面上,并给出提示。

数据从源主机传送到目的主机的中间的过程中,也有可能涉及到封装的分用的。

数据传输过程中遇到交换机:

主机的数据 => 交换机,交换机收到数据后,物理层解析,数据链路层解析(没有网络层),重新构造出以太网数据帧,发给下一个设备。

数据链路层中,得到以太网数据帧的帧头后,信息就足以支持交换机进行下一步工作。

交换机是工作在数据链路层,也就是二层转发

数据传输过程中遇到路由器(面试常考)

主机的数据 =>路由器。路由器收到数据之后,物理层解析,数据链路层解析,网络层解析(没有传输层解析),构造出以太网数据帧,构造出二进制数据,进行转发。

路由器是工作在网络层,也就是三层转发。 

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

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

相关文章

文章管理系统微信小程序ssm+论文源码调试讲解

第2章 关键技术简介 2.1 微信小程序 微信小程序,简称小程序,英文名Mini Program,是一种全新的连接用户与服务的方式,可以快速访问、快速传播,并具有良好的使用体验[12]。 小程序的主要开发语言是JavaScript&#xff…

Python OpenCV孤立点检测

孤立点检测 在Python中使用OpenCV进行孤立点(异常点)检测,可以通过应用统计分析或者使用OpenCV的findContours和convexHull函数来识别。以下是一个简单的例子,使用OpenCV的findContours和convexHull来识别并绘制孤立点。 孤立点…

leetcode-15-三数之和

题解: 代码: 参考:leetcode-16-最接近的三数之和

PHP中小学优校管理系统小程序源码

🏫 中小学优校管理系统:打造教育新生态,赋能智慧校园 🏫 🏷️ 开篇:为什么我们需要中小学优校管理系统? 在教育日新月异的今天,传统的管理模式已难以满足现代学校的需求。面对庞大…

Java poi 模板导出Word 带图片

Java poi 模板导出Word 带图片 重点&#xff01;&#xff01;&#xff01; 官方文档&#xff1a;https://deepoove.com/poi-tl/#_maven 最终效果 模板 其实内容都在官方文档里写的非常明白了 我这里只是抛砖引玉。 Maven依赖 <poi.version>4.1.2</poi.version>…

【JAVA毕业设计】基于Vue和SpringBoot的微服务在线教育系统

博主说明&#xff1a;本文项目编号 T 060 &#xff0c;文末自助获取源码 \color{red}{T060&#xff0c;文末自助获取源码} T060&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

泷羽sec学习打卡-Linux基础

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于Linux的那些事儿-Base 一、Linux-Base什么时openssl&#xff1f;有哪些加密参数&#xff1f;常用lin…

【6.2】位运算-解重复的DNA序列

一、题目 所有 DNA 都 由 一 系 列 缩 写 为 A &#xff0c; C &#xff0c; G 和 T 的 核 苷 酸 组 成 &#xff0c; 例如&#xff1a;"ACGAAT TCCG"。在研究DNA时&#xff0c;识别DNA中的重复序列有时会对研究非常有 帮助。 编写一个函数来找出所有目标子串&#…

Net.Core Mvc 添加 log 日志

1: 首先在 Nuget 安装插件 2&#xff1a;添加 log 配置 在项目中新创件一个文件夹 ConfigFile 在文件家里面添加 log4net.config log4net.config 里面写入 <?xml version"1.0" encoding"utf-8"?> <configuration><log4net><!--跟…

A030-基于Spring boot的公司资产网站设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

AG32 MCU与CPLD通过AHB总线交互

MCU与CPLD可以通过AHB或APB总线进行数据交互。APB总线通常连接低速设备&#xff0c;如串口&#xff0c;而AHB总线则用于连接高速设备&#xff0c;如RAM等。由于我们需要高速采集大量数据&#xff0c;因此选择使用AHB总线与CPLD进行交互。 地址范围 在地址设计中&#xff0c;C…

【学习笔记】PT协程-未完待续

单线程编程-协程 单线程&#xff0c;所有协程都是共享栈–换句话说&#xff1a;裸机 代码结构 十分精简 lc 有两个版本 文件说明lc-addrlabels.h使用GCC扩展语法实现的协程基础lc-switch.h使用switch语句实现的协程基础lc.h用于选择GCC语法还是switch语句实现pt.h基于lc.h实…

【python系列】python内置函数print()和input()

1.前言 正式开始学习python编程基础知识&#xff0c;首先要建立正确的学习姿势&#xff0c;什么姿势呢&#xff0c;当然不是躺着。首先要学会看语法&#xff0c;学习每一个内置函数都要先把语法和语义理解&#xff0c;再结合勤于练习。有些同学可能英语不太好&#xff0c;这里…

并发基础:(淘宝笔试题)三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串

🚀 博主介绍:大家好,我是无休居士!一枚任职于一线Top3互联网大厂的Java开发工程师! 🚀 🌟 在这里,你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人,我不仅热衷于探索一些框架源码和算法技巧奥秘,还乐于分享这些宝贵的知识和经验。 💡 无论你是刚刚踏…

字节、快手、Vidu“打野”升级,AI视频小步快跑

文&#xff5c;白 鸽 编&#xff5c;王一粟 继9月份版本更新之后&#xff0c;光锥智能从生数科技联合创始人兼CEO唐家渝朋友圈获悉&#xff0c;Vidu大模型将于本周再次进行版本升级&#xff0c;Vidu-1.5版本即将上线。 此版本更新方向仍是重点延伸大模型的泛化能力和主体…

redis实现消息队列的几种方式

一、了解 众所周知&#xff0c;redis是我们日常开发过程中使用最多的非关系型数据库&#xff0c;也是消息中间件。实际上除了常用的rabbitmq、rocketmq、kafka消息队列&#xff08;大家自己下去研究吧~模式都是通用的&#xff09;&#xff0c;我们也能使用redis实现消息队列。…

JVM(一、基础知识)

JVM虚拟机的灵魂三问 JVM是什么&#xff1f; 广义上是一种规范&#xff0c;狭义上的是JDK中的JVM虚拟机&#xff0c;虚拟机模拟计算机的组成部分&#xff0c;可以运行我们写的应用程序&#xff0c;是对操作系统的一层抽象&#xff0c;把我们的应用程序和操作系统解耦&#xff0…

问题分析与解决:Android开机卡动画问题分析

1. 问题背景及描述 在一个android设备的开发的项目中遇到了一个比较典型的问题:在主板贴片完成后,首次刷入androdi固件验证时,遇到了按键出发开机后,系统启动到android动画界阶段时一直循环卡在此阶段,无法进入桌面。如下如所示: 此问题在许多android项目的首次点亮阶段均…

视频会议接入GB28181视频指挥调度,语音对讲方案

传统的视频会议指挥调度系统目前主流的互联网会议大部分都是私有协议&#xff0c;功能都很独立。目前主流的视频监控国标都最GB平台&#xff0c;新的需求要求融合平台要接入监控等设备&#xff0c;并能实现观看监控接入会议&#xff0c;实时语音设备指挥现场工作人员办公实施。…

跟着尚硅谷学vue2—进阶版1.0—组件化编程

2. Vue 组件化编程 1. 传统方式和使用组件方式编写的对比 1. 传统方式编写应用 2. 使用组件方式编写应用 2. 模块与组件、模块化与组件化 1. 模块 理解: 向外提供特定功能的 js 程序, 一般就是一个 js 文件为什么: js 文件很多很复杂作用: 复用 js, 简化 js 的编写, 提高 j…