谁都能看懂的网络模型知识

640?wx_fmt=jpeg

1.

网络是我们做嵌入式 避无可避的知识点,但是网络的层次很多,很多时候我们根本理解不了其中的层次和作用,今天跟我们公司的 X 总聊到这个,给我普及了一些知识,我觉得非常有用,分享给大家。


最近事情比较忙,更新文章速度没那么快,大家有问题还是到知识星球里面去找我,不是微信不对接,是消息太多,自己的事情也多,忙不过来,望见谅,觉得文章不错的,帮忙推荐下,转发下,感谢。


文章感谢下几个读者,我在最近的项目中遇到几个问题,本来想付费咨询,发了几个红包都没有被收下,现在更加明白了做公众号对自己的帮忙真的非常大,能认识更多靠谱的朋友,不管是技术上的,还是生活上的,创业的,希望大家有问题都可以多跟我讨论,共创美好明天,哈哈

2.

网络模型经典图片

640?wx_fmt=png


好了,针对上面的模型,我们来举个例子说明一下

640?wx_fmt=png


下面这个图片

640?wx_fmt=png

两台 pc 通过交换机连上一个云服务器,我们假设都是通过网线来连接的。


1、物理层

物理层可以理解为硬件层,这个层的东西就是一个硬件的网口,phy 就是这个东西,这里的网络 pc 和交换机通过 phy连接,交换机也是通过 phy 和云连接。网络数据也是通过 phy 发送出去的。


我们所说的物理就是比较硬的东西,硬的东西那肯定是实际的硬件东西了,那物理层肯定就是硬件的鬼东西了。


2、数据链路层

这一层就涉及了一些软件的东西了,加入了全球唯一的 MAC 地址,这一层确定了 每个网络设备的 MAC 地址,正常我们 PC 发送数据的时候,可以通过 MAC 地址让对方知道自己是哪个设备,告诉别人我是谁。


物理层完成了数据的传输,还需要对0和1的定义进行规定(类似低电平为0,高电平为1),同时在传输0,1之后还需要对01进行分组如8bit为一个字节多少字节为一个包之类。这就是链接层的功能。

Ethenet 和 Wifi 基本就是属于这个层次。所以 wifi 协议其实就是解决的一个链路和物理层的问题,在更往上的网络层和传输层一般就是 TCP/IP 协议。

3、网络层

链路层说明把路打通了,可以在上面开车了,那不能随便开车啊,开车没有交通规则那就是要命的,所以就出现了网络层,出现了一些规范性的东西来规范在这条路上的车神们。



这个层次就引入了 ip 这个鬼东西了,我们设备的 MAC 地址唯一的,但是 IP 地址并不保证需要唯一,一台设备可能有几个 IP 地址。这个东西都是在这个层次决定的。


3.1 IP协议


定义网址的协议,叫做IP协议。所定义的地址也称为IP地址。


目前广泛采用的是IPv4协议,这个协议规定,网址由32个bit组成


习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255


互联网上的每个设备,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表设备。比如,IP地址172.16.254.1,这是一个32位的地址,假定它的网络部分是前24位(172.16.254),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网络。

640?wx_fmt=png

但是,问题在于单单从IP地址,我们无法判断网络部分。还是以172.16.254.1为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,从IP地址上是看不出来的。


那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?

这就要用到另一个参数"子网掩码"(subnet mask)


"子网掩码",就是表示子网络特征的一个参数。它在形式上类似IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。


有了"子网掩码"这个东西,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行 AND 运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。


比如,已知IP地址192.168.1.1和192.168.1.5的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是192.168.1.0,因此它们在同一个子网络。


现在总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。


4、传输层

我们用网络的东西 ,都会记得有一个 socket ,这个层次就完成了,socket 的东西。到这个层次,就可以通过 socket 来发送数据了。还包装了一些简单的协议,比如 TCP,UDP。


socket 就相当于发动机,有了发动机,就可以创造出不同的车子,汽车,卡车,电动车,当然还会有玛莎拉蒂和布拉迪威龙。


有了MAC地址和IP地址,我们已经可以在互联网上任意两个设备上建立通信了。接下来的问题是,如果一个设备有多个任务需要进行网络通信的时候,我们如何分配这些数据,让多个任务能够只使用自己对应的数据呢?


传输层的作用就是建立一条规范,使得两台设备上多个任务之间的相互通信能够正常进行,而不需要区分数据到底是来自于哪个程序而能直接接收。这个实现方式就是,我们添加了一个参数,这个参数被称为“端口”(port)。每个任务拥有自己 port,只接受对应 port 的数据,以此来区分数据。

4.1 UDP协议

包含端口号最简单的实现就是UDP协议,他的格式几乎就只是在数据前加上发送端口和接收端口而已。

4.2 TCP协议

UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。

为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。

因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

TCP数据包和UDP数据包一样,都是内嵌在IP数据包的"数据"部分。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。


5、应用层

有了汽车,就出现了各种运输公司,什么中通,顺丰就应运而生了。所以这就是应用层了。


应用层的东西就是根据之前的层次来封装一些场景应用,比如我们正常的网址,就是 http协议。

640?wx_fmt=png

其他还有 ftp 等等之类的,具体还是看上面那个图,看起来还是非常不错的。


举例来说,TCP 协议可以为各种各样的程序传递数据,比如 Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。

为什么说一个WIFI要说以上这么多。好吧,其实大部分没什么用,最重要的要理解一点,WIFI其实只是把赋予设备MAC地址,连接上网络,并分配好IP,或者是作为AP给别的设备分配IP等等,而要真正的传输数据,使用的仍然是TCP 或者 UDP协议。

3.

经过上面的层次封装之后,如果我们要发送数据就变成了这样。

640?wx_fmt=jpeg

然后接收端和发送端的对应解析大概是这样的,发送的时候每一层就封装上自己的东西,接收的时候,每一层就剥离掉其他层次,拿到自己那一层的数据。

640?wx_fmt=other


AP :类似 wifi 也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个 AP。

STA:类似手机  每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。


完,各位共勉~

640?wx_fmt=gif  


640?wx_fmt=jpeg



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

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

相关文章

常用排序算法以及算法性能测试(完整C/C++代码实现)

排序算法性能的比较 注: 由于只是测试算法性能, 所以不会对排序算法做深入讲解, 在随后的时间将会推出排序的详细讲解 问题需求分析 排序算法经过了很长时间的演变,产生了很多种不同的方法。每种算法主要针对不同的数列进行排序,这些排序算法具有各自…

我就随便BB一下

1.如果我开始写文章的时候,停顿了几分钟,那结果应该很明显,这一定是一篇比较垃圾的文章,没什么东西值得看,所以我把之前的删除了,重新开头来写,我认为,一个好的开头一定是…

和我一起探索嵌入式

1.本文为微信群管理员小磊投稿作品,作者计划编写一系列文章,该篇为第一篇,如果有做STM32的同学这将是一个非常好的系列教程,欢迎关注。我15年刚建立了一个BLE的QQ群,很有幸认识了小磊同学,一个非…

Java NIO_I/O基本概念_Java中的缓冲区(Buffer)_通道(Channel)_网络I/O

I/O基本概念 缓冲区基础 缓冲区是I/O的基础, 进程使用read(), write()将数据读出/写入从缓冲区中; 当缓冲区写满, 内核向磁盘发出指令, 将缓冲区中数据写入磁盘中(这一步不需要CPU), 当磁盘控制器将缓冲区装满, 内核将缓冲区数据拷贝到进程中指定的缓冲区; 操作如下图: 当中…

跟一个大佬前辈交流了一下

1.最近,跟我们公司的测试总监聊天,我随便问了下他几个问题,他也给出了答案,在这里随便聊下,希望给大家的职业生涯中有一些借鉴的作用。也能给新入职场的同学一些方向和指引。2.先介绍下这个技术总监&#x…

LINQ简记(1):基本语法

关于LINQ(语言集成查询)是.NET 3.5和Visual Studio 2008以上版本中引入的一种有趣的全新概念,语言版本有VB和C#,由于C#与.NET平台结合最为紧密,也是MS当初首推的语言,因此,本系列文章的示例代码…

我认识的一位前辈~

1.我最近认识了一个老前辈,关注了我的公众号加了我的好友认识的,我想介绍一下这位前辈,不是因为他有多成功,也不是因为他给了我很多钱,我觉得他是一个在平常不过的人了,因为太过于平凡的思考方式…

机器学习_决策树_ID3算法_C4.5算法_CART算法及各个算法Python实现

下面的有些叙述基于我个人理解, 可能与专业书籍描述不同, 但是最终都是表达同一个意思, 如果有不同意见的小伙伴, 请在评论区留言, 我不胜感激. 参考: 周志华-机器学习 https://blog.csdn.net/xiaohukun/article/details/78112917 https://blog.csdn.net/fuqiuai/article/d…

http数据绑定spring mvc详解

转载于:https://www.cnblogs.com/panxuejun/p/6834365.html

ESP32 入门教学,不入门,不教学

1.Internet of things (iot)这个概念非常火,物联网是什么?把所有物品通过射频识别等信息传感设备与互联网连接起来,实现智能化识别和管理。 物联网通过智能感知、识别技术与普适计算、泛在网络的融合应用&a…

一个从华为离职的朋友

1、我在之前的很多文章里面都谈到了我有一个过硬的华为朋友,我很少去炫耀自己有多厉害,认识了谁谁,但是我非常在意那些跟自己有过交情的朋友,这些朋友不是说你离开了就失去了,也不是你落魄了就不能吹水了,今…

机器学习_简单线性回归与多元回归方程原理推导_处理二值数据_最小二乘法解或梯度下降解多元回归方程(详细推导)以及Python代码实现_回归方程度量方式

下面的有些叙述基于我个人理解, 可能与专业书籍描述不同, 但是最终都是表达同一个意思, 如果有不同意见的小伙伴, 请在评论区留言, 我不胜感激. 参考: 周志华-机器学习 最小二乘法求解多元回归方程: https://blog.csdn.net/weixin_39445556/article/details/83543945 梯度下…

手写Java线程池_超详细解说_绝对能运行_代码超详细注释

线程池 问题背景 只是单纯使用 new Thread(runnable).start(); 的方式创建线程, 将会导致严重的程序性能问题: 1.线程创建, 销毁需要消耗很大的系统资源; 2.虚拟机创建线程的数量是有限的; 2.线程调度切换也将使程序性能下降; 针对这些问题, 对线程数量进行管理, 有效地重复利…

分享一个非常 nice 的工具

最近有个问题,我需要经常使用远程连接工具,原因很简单,我需要控制另外一台电脑,我刚开始使用的是 teamviewer 这个软件,刚开始用的时间是非常爽的,不过有一天他给我来了个提示,说我的软件被商用…

推荐周立功先生的一本书

1. 这篇文章主要是推荐周工的一本书,大家在学习嵌入式的时候,很多人不明白嵌入式系统和单片机的区别,又感觉自己对嵌入式有所了解,知道什么是嵌入式,文章里的很多见解我觉得对很多人都非常有帮助,今晚上周工…

图管够!灌篮高手、女儿国…阿里日_这帮程序员太会玩了!

5月10日是阿里一年一度的阿里日,这对阿里人来说,是个非常特别的日子。 那什么是阿里日呢?看看官方介绍: 它起源于2005年4月20日,是为了纪念2003年5月的“非典”时期阿里人的激情和信念。因此阿里巴巴决定,今…

复习Collection_迭代器使用细节_泛型_综合案例

Collection_迭代器使用细节_泛型_综合案例 主要内容 Collection集合迭代器增强for泛型 第一章 Collection集合 1.1 集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据。 集合和数组既然都是容器,他们之间的区别: 数组的…

Kubernetes dashboard集成heapster

图形化展示度量指标的实现需要集成k8s的另外一个Addons组件: Heapster 。 Heapster原生支持K8s(v1.0.6及以后版本)和 CoreOS ,并且支持多种存储后端,比如: InfluxDB 、 ElasticSearch 、 Kafka 。 下载源包和images文件 下载地址h…

ESP32 分区介绍

软件设计分区表 如上图是正常运行需要的分区,一个系统的正常运行是需要这么多分区的。 分区表,我们软件默认配置的分区表如下 # Espressif ESP32 Partition Table # Name, Type, SubType, Offset, Size, Flags nvs,data,nvs,0x9000,16K, otadata,data,…

python坦克大战_Life is short,you need Python——Python实现坦克大战(一)

先展示一下效果搓搓小手手,坦克大战即将开始……https://www.zhihu.com/video/1140743290784817152一、游戏引擎的安装安装方式有两种:1.pip安装 windows R --> cmd --> pip install pygame2.pycharm安装 File -->setting -->project -->…