第二章:OSI七层网络模型
1.物理层
(1)物理层是七层模型之中的最底层,它的作用是干啥的呢?简单来说,物理层为上层(也就是数据链路层)在数据传输时提供了一个可靠的物理设备(传输媒体。比如说我们常见的双绞线、同轴电缆、光纤等),确保原始的数据可以在各种物理设备(传输媒体)上传输。那么问题又来了,全世界生产光纤、双绞线的厂商那么多,为什么物理层能在“各种物理设备(传输媒体)”上实现传输的呢?这是因为物理层确定了这些物理设备(传输媒体)的一些接口的特性,比如说线的接口形状、大小、电压范围(-5V-5V)等等。全世界生产光纤的厂家都按照光纤的特性来统一生产光纤,生产双绞线的厂家再按照双绞线的规格来生产双绞线,这样就能实现厂家A和厂家B生产的光纤可以混着用,不用再担心两种光纤“不兼容”的问题。
(2)物理层有几个比较重要的设备要大家记住:
中继器(重发器):
首先给大家看一下它长啥样:
常见的中继器外观远距离的数据传输过程中,会出现信号的衰减,信号在传输过程中一旦出现了衰减,那么接收端接收到的信号就是不完整的,我们称之为“失真”,从而影响信息传输的质量,为了能够实现数据的远距离传输,需要使用中继器(重发器)在信号出现衰减的地方进行信号的放大。举个例子,远距离的数据传输就好比是数据信号在跑一场马拉松,跑着跑着信号会累的(何止是信号,你跑你也累啊),这时候就需要志愿者递上一瓶红牛,一罐下肚,满血复活,接着再冲下一程,而中继器(重发器)就好比是那罐救命的红牛,一发现信号有衰减的迹象,立马给你放大一波,然后信号就会满血复活,继续下一段的传输。正是靠着中继器(重发器)一次又一次的放大,才能保证信号在远距离传输这场马拉松的全程都保持出发时的状态。
集线器:
还是看一下长啥样:
常见的集线器外观集线器的实质是一个中继器,主要功能是对接收到的信号进行再生放大,以扩大网络的传输距离。需要注意的是,集线器仅仅只是一个信号放大和中转的设备,它就干这两件事,别的干不了。集线器一般用于网络布线,比如下面这种常见的星型拓扑结构。但是,集线器连接的计算机是共享同一物理带宽的,因此它不适用于构建计算机数量较多的大型网络,什么意思?举个例子,假如集线器的带宽100MB,连接了10台计算机,那么这10台计算机就会共享这100MB带宽,相当于说每一台计算机的带宽就是10MB,如果连接100台计算机的话,每一台计算机带宽就更小了。
星型拓扑结构那么集线器和中继器二者有什么相同点和不同点呢?
相同点:
二者都是对接收到的信号进行放大以防止信号在远距离的传输过程中出现失真,目的就是扩大网络的传输距离。
不同点:
* 从上面的两张图可以看出,集线器的端口都是“一排”,而中继器通常只有两个端口,这是因为中继器多用于将两个或者两个以上的网段连接起来,将两个端口传来的信号进行放大,然后发送出去,“中”字体现出中继器起到的是“中间”、“连接”、“过渡”的作用,而集线器的“集”体现的是“集中”、“集成”、“分发”,它是将多个端口传送过来的信号进行放大,然后再传送出去。
2.数据链路层
首先,数据链路层的传送单位是“数据帧”,简称“帧”,主要的协议是“以太网协议”。
其次,数据链路层是在物理层提供给它的服务的基础之上来向它的领导也就是网络层来进一步提供服务,那么它究竟干了什么活?一句话总结起来就是:将来自网络层的数据传输到相邻结点的对应的网络层。要知道数据传输的过程中物理层的传输媒体是相当的不可靠,会出现各种幺蛾子的事情,想要把数据完整无误的传输到目的地可不是一件容易事,数据链路层为了完成这项任务,练就了一身的本领,主要包括如下:
(1)封装成帧
(2)透明传输
(3 差错检测
下面我们一个个的来看一下,还是那句话,这一系列做的是总结,不深究,想要深入了解的同学们可以另行深入研究。
*(1)封装成帧
数据链路层接收到网络层的IP数据包后,在IP数据包的头尾分别加点东西就组装成了一个数据帧,帧的数据部分,也就是IP数据报的长度是有限制的,要比首部和尾部的长度,同时还不能大于最大传输单元MTU,为什么要封装成帧?主要原因有以下几个方面:
<1> 用于标示帧的界限。接收端在接收到一串比特流之后,就可以根据首部和尾部的标记知道这是一个数据帧,就采取一套专门针对数据帧的处理方法。
<2>当传说过程中出现差错了,这是首尾部分的定界符作用更加明显,接收端发现一个不完整的数据帧,比如说只有首部但是找不到尾部定界符,就知道这是一个损坏的数据帧,就会将其丢弃。
那么说了这么多,封装成帧到底是怎么个封装法?或者说首部和尾部到底都封装了些啥幺蛾子?请往下面看
<1>当传输的是可打印的ASCII码组成的文本文件时,定界符使用的是一种特殊的帧定界符。比如说我们从键盘上敲击出来的汉字、字母、标点符号等这些都是属于ASCII编码的可打印字符。
<2>另一种帧定界符就是通过控制字符SOH(start of header)和EOT(end of transmission)来分别表示帧的开始和结束。
*(2)透明传输
什么是透明传输?
如果数据帧的数据部分全都是ASCII编码(键盘输入的字符),数据链路层不会采用SOH和EOT定界符,这样的结果就是无论我们从键盘输入什么字符,都可以被封装进数据帧中传送,这就是透明传输,这里的“透明”表达的是“看不见”的意思,意思是人看不到传输通道是怎么传输的,此时的传输通道就类似于一个黑箱,我不知道内部到底是何种实现机制,但是我知道我把数据(前提是ASCII编码的数据)扔进去,它就能实现可靠传输。
但是并非所有的数据都是ASCII编码,也就是说并非所有的数据都是我们从键盘输入的,比如说一首歌、一张图片,那这时帧的首尾部就会采用SOH和EOT字符来进行定界,那么这时问题就来了,SOH和EOT的二进制分别是 00000001 和 00000100 ,如果传输的数据中正好出现了一段比特流正好就是 00000001 或者是 00000100,那这时接收端可能就会将数据部分的EOT当成帧的结束标志,而将后面的部分丢弃,这就造成了数据的不完整,这就是不透明传输,意思就是我传了一首完整的歌过去,结果到了接收端就剩半首歌了,你说气不气!
那么针对非ASCII码的数据如何避免上述图片中的情况出现呢?可以采用字节/字符填充法,具体就不再展开。
*(3)差错检测
数据在传输过程中会不可避免地出现错误,在物理层面的比特流来说,1可能会变成0,0也有可能变成1,这种错误叫 “比特差错”, 由此也引出另一个概念: 误码率, 比特差错的产生和信噪比有很大的关系。
除了上述的比特差错之外,还有一种差错是针对数据帧本身来说的,如果在传输过程中出现了数据帧的丢失、帧重复等,我们就说出现了数据帧出现了差错。
针对上述差错,有很多的差错检测方法,注意这里说得是“检测”,检测 和 控制 是两个不同的概念,下面简述几种:
(1)循环冗余检验差错技术,即CRC检错技术。它是在数据长度为k的后面的再额外添加用于差错检测使用的n位冗余码,最终构成n+k位数据发送出去。
(2)奇偶校验法,又称PCC校验法。在n位数据比特段结尾在加一个附加位,组成n+1位比特进行发送。
那么监测到差错之后,得想办法纠正错误,纠错有三种主流的方法:
(1)反馈检测法。就是在接收端接收完完整的一个数据帧后,再将该数据帧完整发回给发送方,发送端接收到返回的数据帧后,从缓存中取出该数据帧和接收到的数据帧比对,比对成功,说明数据帧准确完整传输,如果比对失败,说明发送出现差错,然后发送方向接收方发送一个DEL字符以及一些附加信息,接收端接收到该字符后就会将该数据帧删除,然后再次重发。注意这种方式有两种弊端,一就是如果数据帧发送过程中完全丢失,啥都不剩。这时这种方法就不奏效了,因为接收端啥都没接收到,根本没办法给发送端返回数据帧;二就是这种方式的纠错完整一趟下来,数据帧传输了两次,效率不高,所以一般不采取这种纠错方式。
(2)空闲重发请求方案。发送端在数据帧中附加一定的校验码(PCC或者CRC),接收端针对校验码进行校验,发现错误,向发送方发送请求重发的响应(就是一个信号,不用发送整个数据帧),发送端在接收到请求重发的信号之后,就会重新发送数据帧。
(3)连续重发请求。发送端持续不断地发送数据帧,不等接收端发送成功接收的信号,就是一直发,如果这一连串的数据帧有某一个出现了错误,那么接收方仍旧会发送一个响应信号(确认帧或者是否认帧),发送端接收到接收端发送的否认帧信号,就会对错误的数据帧进行重传。
数据链路层有两个比较重要的设备:网桥和交换机
(1)网桥:
还记得物理层的设备:集线器吗?其实人们更喜欢叫它Hub,集线器有一个特点,那就是一个口接收到的信号,原封不动的将其转发给连接在自身的所有设备,虽然这些设备只有一台才是信号真正的目标设备,这听上去有点广播的味道。为什么会这样?因为集线器很笨,它不知道自己拿到的信号该转发给谁,干脆索性转发给连接到自己的所有设备吧,反正这些设备之中有一个肯定是目标设备。
为了让集线器变聪明一点,能实现信号准确无误地发给目标设备,而不是“硬核全面广播”,于是就诞生了网桥,网桥工作在数据链路层,数据链路层的地址就是物理mac地址,和集线器相比,网桥聪明的地方就在于能够过滤mac地址,当它接收到一个数据帧时,它能够知道这个数据帧是要发给设备A的,这样就不会“全面撒网”式的广播数据帧。
除了上面的提到的基于Mac 地址转发数据帧之外,网桥的功能还是在于其“桥接”功能,起中继作用,将信号放大,延长信号传输的距离。
(2)交换机:
其实交换机一开始的时候功能和网桥是一样的,但是现在伴随着技术的进步,网桥的使用越来越少,而交换机则得到了大家更多的青睐,为什么?首先,网桥一般只有两个端口,而交换机有很多的接口;交换机信息传输的速度比网桥要高很多;最后,网桥在接收到完整的数据帧、完成数据帧的检测等工作才能够将数据帧转发出去,显而易见这样速度慢,而交换机有两种转发方式:存储转发和直接转发,尤其是直接转发,它不需要等到接收完整个数据帧并完成CRC检测之后才能转发数据帧,很明显,这样速度更高。