你真的懂网络分层模型吗?

写在前边

整个暑假去面试,面试了不少家公司(不管是小厂仍是大厂)问到的深度不一样,网络原理是面试最容易问到的问题,虽然咱们在项目中不多去实践它,可是了解其原理,会让咱们背后网络通讯是若是工做的,既能在面试官面前体现出你的基础是否扎实,也能对之后深刻网络这部分学习有更多的了解。git

不少同窗面试在准备这部分的时候,都会去背,这部分确实很难掌握,我我的总结的最好的学习网络原理的方法就是不用刻意的去记忆而是彻底的结合实际去讲整个原理融会贯通。虽然一开始学习起来很吃力,可是稍微用点心,多看几遍,多问本身为何,把本身当作是开发网络原理的开发者,面试前的准备只要理清逻辑就足够了,而不是去背这部份内容。github

并且这部分相同的知识点面试官有多种提问方式,可是其中不少都是换汤不换药。我记得最多的问的是输入URL,到页面呈现出来,其中经历了什么?这道面试题的背后,涉及到了不少网络原理的知识,咱们这篇文章不会所有分享到,而是先把由来和网络层次划分弄清楚,就完成了这篇文章的目的。面试

1、为何要进行网络层次划分?

说到网络层次划分并不陌生,我刚刚接触到网络层次的时候一脸懵逼,这么多层,一层不就好了嘛?层与层之间好多协议,还有各类数据包,第一次我放弃了。算法

当我重新拾起网络层次的时候,我下定决心从根上理解它。首先弄明白它的原理,那一定要知道它的由来,也就是为何要进行网络层次划分?这个问题问的好。网络

假如“小鹿”是网络的开发人员,起初认为计算机与计算机之间的通讯只须要一根线就能够完成通讯,对没错,可是世界那么大,那么多计算机,距离又远,不但浪费线,还没出现各类线被你偷偷剪断的状况,毋庸置疑,那计算机之间通讯就不行了。(后边出来了无线网,虽然其中网关、路由之间也须要连线,但不是让每台计算机两两链接,而是一个区域为单位计算机相互链接通讯)数据结构

不行,老板说,“小鹿”你给我想法子改,改不出来今晚不能睡觉,“小鹿”仔细想了想,这仍是个技术活,须要进行全面的改进,也发现所谓的计算机之间的连线只能传送0、1信号,另外一台计算并不知道那么多0、1表明什么,并且“小鹿”又发现不一样厂商的生产的计算机既然有连线实现通讯也是很麻烦的,干脆定义一套规则吧,不管“某硕”计算机仍是“某想”计算机,都必须遵照这套规则,其实所说的这套规则就是咱们常常说的“网络协议”。学习

不是说网络层次的由来吗,怎么讲到网络协议了。我们继续,经过上面的问题,那个计算机之间经过连线传送0、1信号的问题虽然规定了通讯规则,可是除了像0、1这种无心义的信号以外,网络中还存在着其余各类各样的问题,两个计算机之间怎么进行识别?以及怎么才能知道对方的地址?以及不一样计算机应用程序怎么知道是给本身传递的数据,还有不一样的通讯数据格式怎么来规定等等一系列的问题都出来了。测试

“小鹿”发现,若是各类问题都写成一套协议来规定双方通讯的规则,可是呢?万一其中哪些规则通讯中出现问题,影响到了其余规则,最多见的就是数据包,一个数据包中若是包含各类各样的协议,不就乱套了。优化

“小鹿”为了可以把它设计的更好,决定采用分层划分的结构,既能规定不一样层的完成的功能,又能实现层与层之间的改动而不相互影响,这就是咱们常常听到网络划分层次的好处。设计

2、 网络分层是如何进行分层的?

既然咱们决定要分层,那么分为几层才好呢?

起初网络分层是标准的七层,也就是咱们所说的 OSI 七层模型。

参考模型是国际标准化组织(ISO)制定的一个用于计算机或通讯系统间互联的标准体系,通常称为OSI参考模型或七层模型。

咱们所知道的还有 TCP/IP 四层模型和 TCP/IP 五层模型。这又是怎么出来的,其实所谓的 TCP/IP 四层模型和 TCP/IP 五层模型是以 OSI 七层优化而来,把某些层进行合并了,其实本质上仍是相同的,可是我我的最喜欢用五层来解释。

3、每一层的做用是什么?

这一部分涉及到每一层的不少协议和知识点,可是咱们这一节不具体分享,为何?咱们具体深刻以前必须大脑里有个具体的网络分层结构图,先要知道每层是作什么的,层与层之间的关系,而后下一节再深刻每层中的每一个协议怎么通讯的,这样的好处学起来条理清晰,而不至于当时我学习的时候表面还不懂,就深刻最后懵逼状态。

3.1 物理层

物理层,顾名思义,用物理手段将电脑链接起来,就像咱们上边讲到的计算机之间的物理连线。主要用来传输0、1信号,上边也分析过了,0、1信号毕竟没有任何的现实意义,全部咱们用另外一层用来规定不一样0、1组合的意义是什么。

3.2 数据链路层

下层的物理层既然不能规定不一样0、1组合的信号表明什么意义,那么咱们在数据链路层规定一套协议,专门的给0、1信号进行分组,以及规定不一样的组表明什么意思,从而双方计算机都可以进行识别,这个协议就是“以太网协议”(具体的以太网协议内容下节内容详细讲解)。

可是问题又来了,咱们要发送给对方计算机,怎么标识对方以及怎么知道对方的地址呢?

3.2.1 MAC 地址

咱们所说的MAC地址到底的做用是啥?说白了它就是做为网络中计算机设备的惟一标识,从计算机在厂商生产出来就被十六进制的数标识为MAC地址。

既然咱们知道了用MAC地址做为标识,那么怎么才能知道咱们要进行通讯的计算机MAC地址呢?

3.2.2 广播

这里广播详细的在下一节讲,这一节你只须要知道广播能够帮助咱们可以知道对方的 MAC 地址。那么既然知道了MAC地址就能够通讯了?没有想得那么简单,广播中还存在两种状况,一种是,在同一子网络下(同一局域网下)的计算机是经过 ARP 协议获取到对方 MAC地址的。不一样自网络中(不一样局域网)中是交给两个局域网的网关(路由器)去处理的。这里边涉及到不少细节的知识,都会集中到下一节,可是这一节你了解怎么进行标识计算机和怎么获取到MAC地址就能够了。

3.3 网络层

物理层和数据链路层都有本身的事情要作,也就是咱们上边所讲到的这些(里边不少细节不在这节多说)。上边两层在我看来能够完成正常通讯了,那么网络层出来干啥子?

网络层的由来是由于在数据链路层中咱们说说两台计算机之间的通讯是分为同一子网络和不一样子网络之间,那么问题就来了,怎么判断两台计算机是否在同一子网络(局域网)中?这就是网络层要解决的问题。

3.3.1 IP 协议

咱们一般用到的 IP 地址,就是网络层中的东西,所规定的的协议就是 IP 协议。不少小伙伴问,IP 地址想必也是地址吧,上边都有惟一标识的 MAC 地址了,IP 地址出来是混饭吃的?为了可以让你们更方便的理解 IP 地址和 MAC 地址,咱们能够将 IP 地址抽象成一种逻辑上的地址,也就是说 MAC 地址是物理上的地址,就是定死了。IP 地址呢,是动态分配的,不是固定死的。

咱们就是经过 IP 地址来判断两个计算机设备是否在同一子网络中的,那么你会问它是怎么判断的,以及 IP 地址谁给他分配的?又是如何分配的等一些列问题,咱们不着急,这里只说一下大致的流程,详细会后续写一大篇。

既然咱们经过 IP 地址来判断两个计算机是否处于同一局域网中,那么首先要知道对方的 IP 地址吧?DNS 解析想必你们都知道,能够将域名解析为 IP 地址。好了,咱们知道两台计算机的 IP 地址了,怎么进行判断是否同一局域网中?

3.3.2 子网掩码

嘿嘿,又是一个只据说过,可是不知道这个什么做用的一个名词,没事,等我聊完,你就明白是作什么的了。

子网掩码就是用来标识同一局域网中的 IP 地址的信息的?什么信息?IP 地址是由 32 个二进制位组成的,也就是四个十进制(如:255.255.255.000)。

子网掩码也是由 32 个二进制位组成的,可是只能用 0 或 1 来表示,如11111111.11111111.11111111.00000000。

到底什么意思呢?有 1 的部分表示网络部分,有 0 表示主机部分,这和判断两台计算机是否在同一局域网中有什么关系?没错,是有关系的!两台计算机的 IP 地址分别和子网掩码进行一种运算(AND 运算),若是结果相同,两台计算机就在同一局域网中,不然就不在同一局域网中。

AND 是如何进行运算的,IP 的数据包的组成等问题,不在这里多陈述。

3.4 传输层

好了,若是你认为计算机能够进行通讯了,那么“小鹿”恭喜你,你已经基本知道了以上几层划分的做用,可是若是你正在一边打 LOL,一边和朋友在 QQ 聊天,忽然,游戏中队友聊天信息出如今了 QQ 窗口中,咦?出现了什么状况?

实际上是以上层级仍是不够,出现上边的缘由就是,两台计算机虽然能够通讯了,可是天天计算机运行着好多的程序,谁知道大家传输的信息是属于哪些程序的,怨不得 LOL 的聊天信息跑到了 QQ 窗口中。

想必你们猜到了传输层主要用来干啥滴,是的,传输层的主要功能就是为了可以实现“端口到端口”的通讯。计算机上运行的不一样程序都会分配不一样的端口,因此才能使得数据可以正确的传送给不一样的应用程序。

3.4.1 UDP 协议

加入端口号也须要一套规则,那就是 UDP 协议,可是 UDP协议有个缺点,一旦进行通讯,就不知道对方是否接收到数据了,咱们再定义一套规则,让其能够和对方进行确认,那么 TCP 出现了。

3.4.2 TCP 协议

咱们一般说 TCP 三次握手和四次挥手,没错,这就是传输层中完成的,TCP 三次握手涉及到的内容贼多,均可以单独写一篇长文,这里很少陈述,知道它是在传输层中完成的以及它的做用是什么,可以认识到它就行了。

3.5 应用层协议

“喂,你发给个人是什么破数据,乱七八糟的,我TM能解析吗?能不能按照个人规定给我传送?“

“好的,下次不敢了”

想必你们已经猜到了应用层的协议,应用层的功能就是规定了应用程序的数据格式。咱们常常用获得的电子邮件、HTTP协议、以及FTP数据的格式,就是在应用层定义的。



求赞:原创不易,求个赞呀!

那么从最下方的物理层到最上方的应用层,看了上边想必都有一个感性的认识了,不须要靠记忆去记了。

文章中可能存在讲的不对和不足的地方,还请各位给予改正。因为网络原理这部分涉及到的知识点庞大,今天这篇文章要入门了解网络分层的模型已经足够了。后续文章小鹿会持续更新,若是以为不错,求赞、求转发、求关注哦!

Github 持续更新

此文章与 Github 仓库同步更新,除了网络协议外,还有数据结构与算法的精心整理,作题思路、代码实现、测试用例、面试等,纯属我的经历和总结,共同维护好开源项目。

Github: 点击关注我 Github Blog 哦!

相关文章
相关标签/搜索