作者:一天,本文首发于公众号:网络之路博客
前言
前面讲解了一个网址访问中的通信过程,接下来几篇来把这个过程里面一些细节的地方讲解下,这些完毕后就开始正式进入路由交换的内容了。相信大家都玩过单机游戏,记得博主最早开始喜欢玩像CS、半条命、帝国时代、魔兽争霸3、英雄无敌这些单机游戏,后来选了计算机专业后,为了更好的学习在第二学期购买了台笔记本,中午跟晚上就喜欢跟宿舍的人一起玩这种联机游戏,下面就从这样的故事来进入今天的主题内容。
我们能接触到的物理层
两台电脑进行联机,那势必需要用网线把两个电脑的网卡连接起来,大家都知道,直接电脑店买一根多少米的,接在一起就完事了,但是在早期其实不是这样的,你去电脑店购买的时候,老板通常会问一句,你这个网线是用于电脑之间连接,还是电脑接其他设备,这是因为网线有两种线序标准,一种是568A,一种是568B,如果你是电脑之间连接,老板会给你做成交叉线(一头568A一头是568B),如果你是与交换机、路由器连接,老板会给你做成直通线(两头线序一样),这就是物理层带来的规范标准,采用什么物理介质,以及怎样的线路去连接,这样在使用的过程中就不会出错了。
但是现在你去购买网线的时候,老板直接问你要几米,不会在去问你是用来接什么设备的了,这是因为在现在的网络设备跟电脑网卡里面自带了一种功能,叫做自动翻转(线序自适应),设备之间能够自动的适应,不管是使用交叉还是直通线来让电脑接电脑,还是电脑接交换机、路由器都能够进行通信,这种功能可以看成是技术的进步,给施工人员减轻了很大的工作量。
这个小插曲了解后,终于把两台电脑进行连接,网卡设置对应IP、掩码、网关等参数后(对应的这些参数,在下一篇会讲解)就可以开始联机一起玩了,这种连接的形式,就是常听到的局域网(LAN),并且可以发现很多游戏上面写着局域网联机。
慢慢的随着宿舍的电脑增加,一个电脑只有一个网卡,就没办法进行两台以上的组网了,不同时间段接触网络的朋友,可能解决的办法不一样,在早期的时候,其实是并没有交换机的设备的,而是一种叫做HUB的物理层设备(集线器),它有多个接口,可以提供给不同设备进行连接,这样解决了多台电脑之间局域网连接的问题,但是集线器有几个很大缺点。
缺点一:广播模式(广播域)
除了打游戏以外,大家平时也会共享一些学习、娱乐的资料,按正常逻辑来说,A发一个文件给D,B跟C是不会收到的,但是在集线器里面B跟C也会收到,当A把数据发送出去后,集线器是一个物理层设备,它不会对以链路层做任何的解封装操作,只会将接收到的物理信号进行放大,把A这个口收到的数据从其他口广播出去,这个就叫做广播域。(相当于村里或者学校的广播站,大家都能听到,在一个广播的范围内。)
最终的结果就是A本来想给D单独发的,结果B跟C也收到了,虽然B跟C不会看里面实际的内容(因为从解封装的过程发现MAC地址并不是找的自己,就会丢弃),但是在安全性上面存在很大的隐患,以及会浪费不必要的链路资源。
缺点二:冲突域
同样的集线器(HUB)只是一个信号放大器以及半双工的工作方式,收到一个数据后是直接发送,不做缓存(它也没有这个机制),这就会出现一个问题,在同一时间只能有一台电脑发送数据给HUB处理,比如上图,A与D同时想发送文件给C,HUB收到后就会产生冲突,这个就叫做冲突域。(冲突域这个问题了解就行,在现在的设备里面已经解决了这个问题。)
缺点三:共享带宽
集线器(HUB)内部结构是通过一根总线连接起来的,所有的接口都是共享这总线的带宽,如果总线是10M,那么这个集线器的总速率就是10M,那这个时候如果接了4台终端,那么每台终端平均分配的带宽则是10/4=2.5M,终端越多速率就越低。
至此呢,宿舍一群人总算可以愉快的一起玩游戏,但是传输文件资料的时候,通常就把集线器的带宽给占满了,其余电脑没办法使用,为此呢很苦恼。(这里介绍这里多集线器的事情,只是想大家了解下网络设备的发展史,以及引入出后面我们要学习的设备,这样大家印象会深刻些,集线器是在如今看是已经是一个历史的产物了。)
不知道大家有没有仔细观察过,不管是个人PC的网卡、光猫、路由器、服务器都有一个MAC地址,这是网卡厂家出厂的时候就已经烧录在里面了,也被称为硬件地址。MAC地址在数据链路上作为设备的地址标识符,需要确保在网络中的MAC地址是唯一的,这样才能够正确的识别到数据链路上的设备。
规则一:谁先发,谁后发
上面提到过,在Hub的环境下,只要有两台设备同时发送数据,就会产生冲突,在二层以太网中引入了一个机制,CSMA/CD(载波侦听多路访问/冲突检测),这个机制规定了,接在Hub下的终端不停的检测共享线路的状态,如果目前空闲,则发送数据,如果检测有人在发送,则等待一段时间后继续检查,整体的原理就是,先听后发,边发边听,冲突停发,随机延时后重发。(可以看成我们的红绿灯,同样有多个方向的路径,如果没有规则,那出现事故的几率是不是就大很多了)
规则二:这个数据是谁发送出来的,谁来接收
规则三:如果这个数据帧在发送过程中,出现了错误,收到后怎么办?(二跟三都在下面统一回答)
不知道大家有没有仔细观察过,不管是个人PC的网卡、光猫、路由器、服务器都有一个MAC地址,这是网卡厂家出厂的时候就已经烧录在里面了,也被称为硬件地址。MAC地址在数据链路上作为设备的地址标识符,需要确保在网络中的MAC地址是唯一的,这样才能够正确的识别到数据链路上的设备。
MAC地址由6个字节组成,前面三个字节表示厂商唯一标识符(比如图上面的44-8A-5B),不同网卡厂商都有特定的组合,后三个字节由厂家自己进行分配,这样能够保证厂家生产出来的网卡MAC地址不会相同。
由于MAC地址太长了,有6个字节(Byte),而一个字节=8个比特(bit),由0跟1组成,比如上面的物理地址是44-8A-5B-D9-91-D9,如果说换算成二进制则为01000100-10001010-01011011-11011001-10010001-11011001,不要说非业内人士,就是业内人士看到这一串二进制比特也得看迷糊了,所以为了方便查看,各个厂家的MAC地址都统一用十六进制来表示,并且不同的操作系统表示的方式不太一样,这个在后续会慢慢的遇到。
MAC地址在以太网中有什么用呢?
在如今的我们局域网中,使用的协议是以太网Ⅱ协议,属于数据链路层中的其中一种协议,在早期的时候有线局域网有多个协议同时存在竞争的,像ATM、令牌环、FDDI,这些协议带来的产品要么价格贵、要么速率低,随着以太网推出100M标准后,进入快速以太网时代,这个时候以太网得到了突飞猛进的市场支持跟占有率,慢慢的称为主流,紧接着推出来了千兆以太网、以及万兆,至今在局域网中能看到的主流协议就是以太网了,目前使用的是第二代,也称为以太网Ⅱ。以太网是一个典型的多路访问的网络,跟上面宿舍一样,A、B 、C、D都接在Hub上面,都能够互相进行访问,而不是说只能访问某一个,那就带来了一个问题,那么A、B、C、D它怎么识别这个数据帧是给自己的呢?又是谁发送的呢?,这个就是以太网中MAC地址的作用,能够根据这个地址定位到某个具体的终端设备,因为MAC地址具有唯一性,下面来看下以太网Ⅱ的数据帧格式。
以太网Ⅱ的数据帧格式
- 前导码( Preamble )
前导码由 7 个字节组成,每个字节固定为 10101010 。之后的 1 个字节称为帧起始定界符,这个字节固定为 10101011 。这 8个字节表示以太网帧的开始,也是对端网卡能够确保与其同步的标志。帧起始定界符的最后两位比特被定义为 11 ,作用是告诉接收方进行同步并做好接收数据帧的准备,这里说下,这个是网卡会完成这部分的操作,知道有这个存在就行。(后很多教材里面不会把前导码这个字段标识出来)
- 目的MAC地址(Destination address)
由六个字节组成,明确说明这个数据帧是交给谁的(要访问的目的终端设备)
- 源MAC地址 (Source address)
由六个字节组成,标明这个数据帧是谁发的(发起这个数据的源设备)
- 类型(Type)
由2个字节组成,表明了上一层的协议类型,可以让接收方知道上一层使用的什么,用对应的协议进行读取。(这里是不是解答了第二篇里面最后问道的其中一个问题了,在数据帧里面会标明上层的协议,而不用等解封装后到了上一层才知道)
- 数据(Data)
实际的数据内容,数据帧能够容纳的最大数据范围是46~1500个字节,如果说数据部分不足46个字节,会进行填充,满足最小的长度要求。
- FCS ( Frame Check Sequence ) CRC
用于校验除前导码以太的所有帧信息,保证传输的帧的完整性和正确率,如果发现数据帧不完整或者错误,就直接丢弃,不交给上层处理,减少没必要的消耗。(这个就是规则三里面的,由FCS来解决出现了错误后怎么办的问题)
交换机的出现
Hub的问题上面都知道了,Hub本身的工作模式还是最大的问题,一旦局域网的终端机器增多,那么冲突的几率就越大,即使有了这些机制的出现,可以避免冲突,但是增加了等待延时,糟糕的情况就是主机有个很大的文件在传输,那么其他的终端设备就得一直等待传输完毕,使用效率非常低下,这样的设备满足不了市场的需求,这个时候交换机(switch)就出现了,交换机跟HUB有本质上面的区别。
(1)能够读取数据帧
Hub工作在物理层的设备,而交换机是工作在数据链路层以及以上的设备,它是具有读取数据帧的功能的,并且能够使用以太网协议,这样就算数据帧有错误的地方,可以通过FCS来进行校验,有问题的直接丢弃,而Hub则不行,直接就广播出去了。
(2)工作在全双工以及独立的接口硬件,速率得到了提升
Hub上面介绍过是工作在半双工,它只有物理电信号放大的作用,所以导致了冲突域的出现,而交换机不一样,从内部结构就改变了这个问题,它把每个接口独立出来,有单独的芯片处理,把每个口之间给独立出来了,好处是(1)1口给2口发送数据的时候,不会影响到其他接口,隔离了冲突域,并且,其他口也可以同时发送数据。(2)每个口可以工作在全双工模式,可以同时接收与发送数据 (3)带宽不在是跟Hub一样,共享的形式了,比如交换机是百兆交换机,那么每个接口都可以独享100M,如果交换机是千兆,每个接口则可以独享1000M。这样就解决了局域网规模增大,由于冲突带来的问题,并且带宽也得到了提升。
(3)具有学习地址的功能
Hub它收到一个数据的时候是直接广播到其他接口,这种模式显然影响整个网络,安全隐患大,交换机改变了这种模式,由于它工作在链路层,也使用了以太网协议,它能够去学习MAC地址,并且通过学习把它记录在自己的数据表中,这样交换机就知道,哪个口是对应哪个MAC了,当A去访问D的时候,交换机收到这样一个数据帧后,读取到里面的目的MAC是发给D的,D在4号接口,直接交给D的接口即可,而不用把数据从其他接口广播的形式发送了。
至此呢,交换机从取代集线器开始到如今一直在企业网中使用,并且在如今的网络设备中,交换机不在是单纯的归纳到数据链路层了,因为在企业网中还有高级点的三层交换机,能处理IP数据包,以及能读取四层的端口号信息,但是核心的理念还是不变的,这些我们在正式进入交换机篇的时候会详细讲解。
知识点扩充
(1)半双工跟全双工
这个作为了解即可,现在的网络环境正常情况下都是工作在全双工,半双工是指数据在传输过程中同时只能像一个方向传输,要么上传要么下载(Hub设备),就好比一个单车道的路,同时只能一辆车过去,或者是过来,如果两边同时通过,那么就在某个点就出现了冲突了。全双工指交换机可以发送数据的同时也能接收数据,这样可以得到更高的传输效率,没有冲突、速度快、延迟小,就好比双车道上,来来往往的车辆互不影响。
(2)总结下Hub与交换机的特点
Hub与交换机的工作原理跟特点其实上面都已经介绍过了,这里就在举一个有点接近的比喻,Hub有点类似于一个大的办公区域,这个时候经理有事情跟老板沟通,势必会让其他员工分心,想听听有什么内容,这样就影响了员工的办公效率,同时也没有私密性,员工也不能在老板谈话的时候去打扰它,这样会造成冲突。
慢慢的公司发展起来了,这里交换机还是作为一个大的办公区域,高层人员都有了独立的办公室,想要找到某个人沟通,只需要去往对应的门牌号(MAC地址)就能找到对应的人进入房间沟通,不会影响到其他人,办公室之间也不会相互冲突。
(3)关于速率问题(Bye/bit)
这个属于一个物理层介质的单位问题,不知道大家有没有发现过,比如我们电脑里面的文件大小单位都是MB、GB,这个属于存储以字节作为单位,但是在我们学习的网络中,是以最小的比特做单位的,1字节=8比特,所以你可能会困惑,明明我拉了条100M的带宽,但是实际在下载的时候怎么只能达到10~12MB左右,这就是因为带宽的单位用的是比特,而不是字节,而下载数据用的单位是字节,中间相差8倍,这里作为一个补充了解下,后续在换算或者做某些带宽限制的时候用的上。
(4)关于每一层数据的称呼
数据的发送与接收都是一个封装与解封装的过程,每一层数据都有不同的称呼,在物理层叫做比特,在数据链路层叫做帧。(其他层面的介绍到了会进行说明,这个了解即可)
遗留下来的细节问题(思考下)
- 在上文提到的网卡设置IP地址、掩码、网关的参数,有什么作用呢?已经有了MAC地址为什么还要IP地址呢?(下一篇关键内容)
- A发送文件给D,在初始化的情况下,A怎么就能够知道D的MAC就是这个呢?(下几篇关键内容)
交换机它是如何学习到A、B、C、D的MAC地址的呢?(交换机篇会详细讲解)
- 交换机的一个接口能否学习到多个MAC呢,那假设移动位置后,交换机会怎么处理?(交换机篇会详细讲解)
- 个接口能否学习到多个MAC呢,那假设移动位置后,交换机会怎么处理?(交换机篇会详细讲解)
作者:一天,本文首发于公众号:网络之路博客