目录
1、网络背景
2、网络协议
(1)认识协议
(2)协议分层
(3)OSI七层协议
(4)TCP\IP 五层(或四层)协议
3、网络中的地址
(1)初谈 IP 和 MAC
(2)细谈 IP
(3)细谈 MAC
(4)再谈 IP 和 MAC
1、网络背景
在早期没有网络这个概念的时候,每一个计算机都是一个独立的个体,人们使用计算机办公都是各干各的,这导致工作效率极低,因为分工合作很麻烦,将一个大工程分为一个一个小部件进行完成,最后再进行统筹时,没有一个良好的中间缓冲区对资源进行交换,这也就是早期计算机的独立模式,这也导致了如下的这种情况,由于机器之间不互通,从而导致了数据之间无法互通,最终导致了不同的业务需要不同的终端,增大了开销成本。
这里举一个例子:假如这里有3个人,分别称为小松,小竹,小梅,假如整个业务流程是由业务 1-> 业务 2 -> 业务 3的话,假设这三人的排队顺序是小松、小竹、小梅:那么在小松完成整套业务流程之前,小竹是一直处于等待状态的;那么在小松和小竹完成对应的整套业务流程之前,小梅也是一直处于等待状态的。那么这里的整个工作流程就是需要三台机器,并且每台机器都需要拥有所有客户的数据。
之后,网络出现了,它的到来解决了这些问题。它能够将每一台机器连接起来,从而可以使机器之间开始互通数据,在一方面这提高了人们的工作效率,另一方面也减少了开销成本。
通过上面的这张图,我们便可以很好的理解网络带来的效应了:
首先,业务 1-3 都可以放到同一台主机上了,这样的话,最直观的是对于服务器的数量要求降低了,而且这里只需要一台主机上有数据就可以完成工作了,显而易见地降低了开销成本。
其次,用户也不再需要去线下完成这套业务了,因为通过线上的方式就可以轻易的完成这套业务了。
最后,凭借网络,同事之间也可以互相发送数据,这大大地提高了工作效率,也减少了网友寻找资源的难度。
谈及了网络,那么,就需要在这里顺口提一嘴广域网和局域网了。
局域网:英文全称:Local Area Network,简写就是 LAN,通过交换机连接设备,再由交换机和路由器连接的方式将小范围地区的网络资源整合在一起,跨度很小,像在自己家里的时候,家里的路由器所管理的网络就是一个局域网。其出现的一大好处就是让科学实验变得更加便捷,假如此时清华大学和北京大学之间需要一起合作做一项实验,他们能够通过搭建一个内部的局域网,用于将对应的数据进行互通。并且局域网本身具有一个很强的延展性,可以通过交换机将多个设备连到一个局域网内,也可以通过路由器和路由器之间进行连接,从而继续对局域网进行延展。
广域网:英文全称:Wide Area Network,简写就是 WAN,将大范围的网络资源整合在一起,跨度范围很大,可能是一个省,可能是一个国家,而这里整合的方法依旧是通过路由器来进行数据交换。像下图,广域网中实际上包含了各种的局域网,从日本的各种地区,再到美国的洛杉矶,这里横跨了国家,并且是通过路由器来达到这一目的的。
广域网管理着各种局域网,当局域网中的设备需要向广域网中申请数据时,这时就需要路由器向广域网中获取数据了。从这里,我们其实可以发现端倪,局域网和广域网其实只是相对而言的一种概念,局域网可以被理解成一个小型的广域网,而广域网又可以被理解为一个大型的局域网,而且广域网和局域网之间没有明确的差异,在之后的学习中,局域网和广域网的界限也只会越来越模糊。
2、网络协议
(1)认识协议
EXTRA:理解网络和计算机的关系
我们知道计算机内部的每一个硬件之间都是用线进行连接在一起的,假如,我们此时,将其中的硬盘,CPU,放到 1 千米,甚至更远的地方,然后再用一根非常长的线将这些硬件连接在一起,当我们需要对一份数据进行计算的时候,这时再调用这远处的 CPU,当我们需要对数据进行存储的时候,这时在调用远处的硬盘将数据存储起来,这里,我们就能够看到网络的雏形了,而网络中也是具有类似这样的集群,就以服务器为例子,服务器就是由这种集群搭建而成的,但是其本质上还是一个大型的计算机,因为其也有对应的存储的集群,也有用于计算的这类集群等等,这也是为什么很多关于服务器的图片也就是一台正常的计算机。
所以,这里我们就可以得到一个结论:计算机体系结构中有网络,网络中有计算机体系结构。
在介绍网络协议之前,我先给大家讲一下为什么要有协议?
在现实生活中,当我们跟另一个人聊天的时候,假如我们跟这个人是面对面的情况下,我们说:“吃了吗?”,对方是可以很轻易的听到我们所说的话,并且对我们说的话进行回复:”吃了“,或者是点了个头,但是,当这个人离我们有 500 米,甚至 1 千米的时候,我们再说:”吃了吗?“,对方可能压根听不到我们所说的话,即使最后听到了,也对我们的问题进行了回复,但是,我们也很难收到对方的回复,假如此时我们要让对方听到我们所要传达的意思,那么我们可能就需要拿喇叭大喊。
这里,我们可以得出一个结论:网络中的所有问题本质上都是距离变长。
由于协议的存在就是 为了减少通信的成本,所以,在这种情况下,就需要通过定制协议来解决这种网络通信问题。
那么,接下来,我们再来一起来认识一下什么是协议?
先来看一个例子,假如我是一个活在过去00年代的住校的大学生,我去学校之前就跟我爸”约法三章“:假如之后我给你打电话,假如电话响一声,说明我生活费快没了;假如电话响了两声,说明我话费快没了;假如电话响了三声及三声以上,说明我有事情要跟你讲。之后,到校的20天,我给我爸打电话,电话刚响一声,我就挂了,此时我爸就在心里默念道:”这小子生活费没了“,然后就去银行里面给我的银行卡里面转了500块钱;然后又过一段时间后,我又给我爸打电话,电话刚响两声,我就又把电话挂断了,我爸这时就知道我电话费快没了,然后就跑到我家附近的电话亭给我充了点电话费给我;之后过了好长一段时间,我给我爸打电话,这时,电话响了三声后,我没有挂断电话,这时我爸就知道我有事情要找他,所以我爸就接了我的电话。
在这里的这个例子中,我跟我爸做好了一个约定——假如电话响一声,说明生活费快没了;假如电话响了两声,说明话费快没了;假如电话响了三声及三声以上,说明有事情要讲。而有了这种约定,我跟我爸之间就有了一个共识,这提高了我们之间打电话的效率。而这里的这种约定就是我们所定制的协议。
所以,结论就是:协议就是一种约定。
我们知道,计算机传输的媒介是光电信号,通过这种信号的 “强弱” 和 “频率” 来表示二进制中的 0 和 1,这时,主机之间就需要约定好一种协议来对信号进行解析。除此之外,我们知道计算机的厂商有很多,计算机的各种硬件设备有很多,那么,这种时候为了使各种计算机之间都能够通信就需要约定好一种协议,这种协议就是网络协议,并且这类协议就是一种软件。
拿我们现实中对话举例子,我们平常在外头跟国人讲话的时候,正常都是说的普通话,此时,我们两边都能够轻易的理解对方想表述的内容,这可以被理解为汉语协议,这也是协议在现实中的一种表现,但假如在没有提前沟通的前提下,A 讲的是普通话,B 讲的是一种外语,假如双方都不会对方的语言,那么此时我们就可以理解双方之间没有协议。
再以打电话为例子,A 在电话一头说普通话的时候,首先,这段普通话先会被转化成特殊频率的无线电,然后借助基站这类设备传递到 B 的电话一头,最后通过特定的协议再将这段无线电转化为对应的普通话。这里展示了两层的协议,一层是汉语协议,一层是无线电协议。当然,在网络中,协议分层是比这更复杂的。
(2)协议分层
首先,我们先来理解一下,为什么需要协议需要分层?
我们在学习编码的过程中,总听说过一句话:高内聚,低耦合。而协议分层的一大原因就是这个,这样就可以将层与层之间进行分离,实现一种低耦合的状态,这样的工作方式带来的好处是假如对 a 层进行修改,不会影响到 b 层,c 层的工作;然后,协议分层也可以将一些耦合程度高的功能聚集在一起,也就实现了高内聚,这样的实现可以使每一层都能专门地处理某一项工作。
那么,下面就会出现几个问题?
1、我们该如何将数据转发到下一个主机呢?
2、我们该如何保证数据能转发到正确的主机上呢?
3、我们该如何保证数据在转发过程中出错后能进行补错呢?
4、当数据转发到了目标主机上后,我们该如何保证数据能被正确地进行处理呢?
所以,协议当中的每一层都需要有对应的协议,用于处理相对应的问题。
(3)OSI 七层协议
下面,我们就先来见识一种协议:OSI(Open System Interconnection,开放系统互连)七层协议。
首先,先自上到下地介绍一下 OSI 七层协议具体有哪些层:
1、应用层:对被交付上来的数据进行对应的业务处理。
2、表示层:设备固有数据格式和网络标准数据格式进行转换。
3、会话层:对设备通信进行管理。
4、传输层:用于管理主机之间的数据传输。
5、网络层:进行路径选择和地址管理。
6、数据链路层:对直接相连的设备进行传输并识别数据帧。
7、物理层
注:但是,实际上,上三层在进行设计的时候大多时候会被统一到应用层这一层当中,因为有时候这三层协议中的某些协议是不需要的,所以导致了协议之间存在空隙,因而我们通常用的更多是 TCP\IP 协议(权威!!!),即将上三层统一到应用层中。
(4)TCP\IP 五层(或四层)协议
解释一下:为什么这个协议是五层或四层的?
这个协议可以说是五层的协议,也可以说是四层的协议,这取决于是否包括物理层,因为物理层这一块完全是由那些硬件厂商进行定制的,所以跟我们的关联度不大,所以通常是将这一层忽略不计的。
对TCP\IP 五层(或四层)协议的补充
这里的每一层跟 OSI 七层协议相近,所以,这里就基本不再进行解释了。
但是需要对上面的内容进行补充:
1、在 TCP\IP 五层(或四层)协议中,对于应用层作用,我这有一个例子可以很好地去解释:用一个简单的例子来理解就是我们到达一块地方后,肯定是要进行玩的,而到达这块地方只是为了达成玩这个目的的手段。
2、在计算机体系结构中,物理层属于硬件这一层,数据链路层属于驱动这一层,网络层和传输层属于 OS ( Windows, Linux, Mac 等所有操作系统) 这一层,应用层属于应用这一层。这样也就能够将这些东西跟之前的计算机体系结构的知识相串联起来了!!!(其实看到下图中的 OS 和应用程序之间,我们就知道了中间肯定还有一层系统调用,因为 OS 不相信任何用户,所以,这就需要系统调用这个媒介对 OS 中的数据进行操作)
通过上面的这些内容,其实,我们也已经知道为什么这个协议名称会被称作:TCP\IP 五层(或四层)协议。因为 TCP 和 IP 这两个协议分别是在传输层和网络层中,而这俩层都是由 OS 进行管控的,所以,OS 给了这俩层协议如此高的地位,而 TCP 和 IP 这俩协议又是这些协议中的重中之重,所以也就用这个名字来给这个协议进行取名了。
补充内容:
物理层中信号分为了两种:数字信号,模拟信号
但是这里,我们可以解释一下物理层当中集线器的作用。
我们知道信号在网络中传输的时候是会逐渐减弱的,而集线器的作用就是就是将这个信号放大,降低由于距离变长而导致的问题出现的概率。显而易见的是这个集线器就相当我们游戏当中的奶妈,当输出位快掉的时候,奶妈可以给这个输出位奶上一口,然后输出位又可以接着再战,或者可以更好地跑路。
这里,需要补充一点:在每一层协议当中,里面可能包含了不止有一种协议,像传输层中,除了 TCP之外,还有一种常见的就是 UDP。
那么这里就会出现一些问题:我们既然知道了每一层协议中可能不止有一种协议,那么,我们该如何保证每一层得到的数据该如何正确的向上交付到协议当中呢?
所以,这里就会引出一个新的概念:报文,其实,在整个传输过程中,被传输的数据有一个更加规范的名称就是报文。而报文是由报头和有效载荷两大部分组成的,而报头中就存在对应的目标主机。这用现实中的快递更好理解,我们在现实中进行网购的时候,商家对我们的订单的处理方式肯定不是自己骑着自己的车走了十万八千里后送到我们买家手上的,而是选择最便捷的快递行业,像顺丰,圆通等,这样就可以节约自己的时间,然后可以把更多的时间放入到处理订单上,而此时快递小哥就需要根据快递上的快递单号确定目标地址,最终再进行一站一站地将快递进行转发后来到对应的快递驿站,我们的快递也就成功到了,当然,再补充一点就是我们网购的东西里肯定是需要包含对应的说明书的,不然,我们也无法对我们网购的东西进行使用,而这份 “说明书” 就包含在了应用层中。
对协议报头相关知识进行补充:
1、协议每一层都有,每一个协议的最终表现就是协议都要有报头,而且在通信过程中,每一层只会有一个协议。
2、每一个数据包在被发送时或在不同的协议层中时,都要有一个相对应的报头。
介绍封装和解包分用
补充小知识tips:
不同协议层对于数据包(报文)都有不同的称呼,在传输层中被称为段,在网络层中被称为数据报,在链路层中被称为帧。
1、封装:
言简意赅地讲就是最上层的用户进行自上到下地交付数据,并在交付过程中对数据进行添加报头的操作,这就是封装。
2、解包分用:
解包分用其实应该是两个词的,一个是解包,一个是分用:解包的过程就是将报头和有效载荷进行分离,并将有效载荷向上层协议进行交付;分用就是将这个有效载荷正确地向上传递到恰当的协议当中。
这里就会有人会问:喂喂喂,主包主包,你这不对吧?你怎么将这个有效载荷准确地拆分出来呢?你又怎么能将接报后的有效载荷交付到恰当的协议中呢?你这是在乱讲吧!
嘿嘿,这个问题,其实很简单,因为答案都藏在了报头中了,报头中存在固定的字段用来保存报头的大小,这样方便将报头和有效载荷进行分离,而要被这个有效载荷正确地交付的协议其实也蕴藏在了这个报头中,这么看来这个报头中一定蕴藏了许多奥秘!但是这份奥秘就放到之后再向大家展示吧!
我们对于这张图其实也可以有两种理解方式:
1、同层之间是直接进行通信的。我们看到同层之间的数据是相同的,所以,最直白的理解方式其实就是同层之间是直接进行通信的。这就像我们使用 QQ,微信这类产品进行通信的时候,我们只需要直接发送消息,然后对方就会直接看到我们所发的消息了。
2、首先数据是要进行封装的,封装后通过以太网的方式,传到目标主机后,再进行解包分用后,最终交付给目标用户。这也是这张图中所表达的内容。(具体细节之后有机会再来重谈)
3、网络中的地址
补充:
局域网中通信的三种方式:
- 以太网
- 令牌环网
- 无线LAN
在整个网络中,地址分为了两类,一种是 IP 地址,一种是 MAC 地址,大部分人初见这两类地址的时候,通常会把这两种地址搞混在一起,认为这两种没有什么区别,但是在这里我可以很负责任地说:这两种地址区别大了!!!为什么呢?那请听我下面娓娓道来!!!
(1)初谈 IP 和 MAC
首先我来解释一下 IP 地址和 MAC 地址究竟是什么东东。
IP 地址可以直接简单地理解为我们目标的主机,也就是最终目标;而MAC 地址可以直接理解为我们在到最终目的这个过程中的中转站。
这里就拿四大名著中的《西游记》来解释一下这个东西(这里为了知识讲解需要,所以对故事进行休闲化)。
假如此时唐僧到了西梁女儿国,此时,他就向女儿国国王进行询问:“本僧从东土大唐来,想前往西天取经,下一步应往哪走?”,此时,女儿国国王听后,便向唐僧询问:“你刚从哪来的?”,唐僧如实回答:“刚从通天河到的女儿国。“然后,女儿国国王便向唐僧一行人指明了方向,说:“那你们下一站就是毒敌山。”然后唐僧又踏上了取经之路。到了下一站后,上一站的内容和下一站的目的地又要发生改变,但是最终目的和起始地址从未发生改变。
这个故事中的上一站和下一站就是这里提到的 MAC 地址,而起始地址和目的地就是 IP 地址。
(2)细谈 IP
补充:
我们知道路由器是可以与该局域网外的网络相连的,那么其连接的方式是很简单粗暴的,就是让路由器有两份 MAC 地址,这样路由器就可以横跨两个网络了。
那么现在,我们就可以来看一下 IP 是如何运行的。
在这里,我们就可以看到两个主机通过路由器以 IP 的方式进行通信!
路由器是工作在网络层的,在这里,我们可以轻易地看到路由器是横跨两个网络,而且,我们也可以看到两侧的数据链路层的协议发生了改变,这就说明了协议路由器的一大作用就是屏蔽底层协议的差别(注:这里讲的协议通常是该协议包括其对应的下层协议)。
(3)细谈 MAC
我们知道电脑要想连上网就必须要有网卡,而网卡上有对应的 MAC 地址,这个 MAC 地址可以用于标识自己主机在局域网中的唯一性。
以上图为例,在局域网中,当 MAC1 向 MAC5 发送消息,其实该局域网的所有的主机都会收到该报文,但是,由于存在数据链路层的 MAC 协议,这些协议都会对 MAC 帧进行检测,假如检测成功,那么该主机就会将该 MAC 帧向上进行解包分用,失败的话,则会直接将该 MAC 帧丢弃。
(4)再谈 IP 和 MAC
那么,根据上面的内容,我们就可以轻松地得到这俩者的区别了:IP 就是指的主机在整个网络中的地址,MAC 指的是主机在局域网中的地址,一个是用于整个通信过程的初终,一个是用于通信中的节点跳跃。
我们可以去查自己电脑的 IP 和 MAC:
对于 Windows 系统,我们在 cmd 面板中,我们可以输入
ipconfig /all
里面的 IPv4 地址就是我们常说的 IP 地址,这是一个 4 字节,32 位的数,当然,旁边的 IPv6 是另一种版本的 IP 地址,这种地址也是用于解决 IP 地址不足问题的最简单粗暴的方法,这也是我们国家在大力推崇的 IP 地址。
补充:
因为 IPv4 这个地址只有 32 位,最多也只能存 40+ 亿的地址,随着网络的不断发展,正常每家每户都有对应的入网设备,多的可能有好几个,所以这些 IP 地址早就不够了,当然,有人提出了 NAT (多路转接) 的方法去延缓这个问题,NAT 之后再来细谈。
然后里面有一个物理地址一栏就是我们的 MAC 地址,这是一个 6 字节,48 位的数。
对于 Linux 系统,我们在终端面板中,我们可以输入
ifconfig
里面显示的 inet 就是 IPv4 地址,inet6 就是 IPv6 地址, ether 就是 MAC 地址!!!