Skip to content

Latest commit

 

History

History
34 lines (24 loc) · 5.88 KB

Chapter-5.md

File metadata and controls

34 lines (24 loc) · 5.88 KB

物理层到MAC层

    例子:如何在宿舍里自己组网玩联机游戏。上一章我们说到,一旦机器有了IP,就可以在网络环境中和其他机器沟通了。还记得我是12年上的大学, 当时学校不给拉网线,天天只能练China Unicom,网速懒得不能接受,那电脑能干什么呢?打单机游戏,几台电脑如和互联一起玩单机游戏呢?也许,你觉得很简单,买个路由 器不就ok了么。那要是不用路由器呢?傻眼了吧,那就让我们来剖析一下本质,层层深入的去认识一下网络。

    第一层是物理层。以前买网线的时候,师傅会问你,网线是用于电脑连电脑,还是电脑连网口的。我们需要的是电脑连电脑的,一根线,两个口, 分别连到两台电脑的网卡上,这个网线的水晶头是做的交叉线,也就是所谓的1-3,2-6交叉线法。水晶头的1,2和3,6脚,分别对应着信号的收发。所以交叉线法可以实现物理 层一端发信息,一端收信息。当然,除了网线要交叉,电脑的IP,子网掩码,默认网关也要配置在一个网络,这样才能互联。那这两台电脑包含MAC层么?当然,前面说过,网 络的包一定是完整的。IP层封装了MAC层才能将包放入到物理层。到此为止,一个最小的局域网,也就是LAN已经完成,两台电脑就可以玩联机游戏了。

    上面解决了两台的互联,那3台呢,4台呢?也许会想到交换机,其实以前还有一个叫Hub的东西,集线器,这个设备有多个口,可以叫多台电脑 链接起来,但是和交换机不一样,集线器没有大脑,完全工作在物理层,只是将收到的每一个字节都完整的发送到对应的地方,这就是物理层实现连通的方案。

    第二层是数据链路层。也许你已经发现了,Hub采用的是广播的方式,一台电脑发出的消息,其它电脑都能收到,那这就麻烦了,所以:网络包是 发送给谁的?谁应该接受?大家都在发包,那有没有先后规则,会不会混乱?发送的时候出现错误怎么办?这些问题都是数据链路层,也就是MAC层要解决的问题,MAC:medium Access Control,即媒体访问控制,控制什么呢?其实就是控制在向媒体发送数据时的谁先谁后的问题,防止发生混乱,学名多路访问,也很多的算法去实现这段控制逻辑。 类似于车管锁管理马路上的车一样。

    有三种常见的方式:1. 信道划分:分多个车道,每个车走一条道,你走你的,我走我的,互不干扰。 2. 轮流协议:类似单双号出行,轮流发送 网络包。3. 随机接入协议:有事先出去,如果堵了,就回去,等一会儿再出去,我们的以太网就是使用的这种方式。

    解决了发包的先后问题。我们再来看看发给谁和谁接收的问题。这里会用到一个物理地址,也叫做链路层地址,也就是我们常说的MAC地址,因为在 MAC层。解决这个问题就牵扯到第二层网络包的格式。对于以太网,第二层的最开始就是目标的MAC地址,和源的MAC地址,接下来就是类型:大部分类型就是IP数据包,然后包 含TCP,UDP以及HTTP等,这都是层封装的事情。有了目标MAC地址,数据包在链路上广播,MAC的网卡才能发现这个包是给它的。然后打开IP,如果IP也是自己的,在打开TCP, 发现端口是自己,也就是80,也许nginx就是监听的80.于是将请求交给nginx,nginx返回一个网页,然后层层封装,最后到MAC层,因为来的时候有源MAC,所以回的时候,源 MAC就会成为目标MAC,然后将包发给请求的机器。

    还有一个问题就是,我们知道了目标的MAC地址,但是一个广播的网络中有多台机器,我要如何才能知道每个MAC地址是哪台机器呢?这就是ARP协议,就是已知IP地址,求取MAC地址的协议,在一个局域网内,知道IP地址后,不知道MAC怎么办呢?靠“吼”,即发送一个广播包,谁是这个IP地址谁来回答,一旦拿到IP对应的MAC地址,本地机器也会缓存起来,且设置一段过期时间,因为机器的IP地址是会变化的。

    这种使用Hub,集线器组,广播消息组局域网的方式,在一个寝室等小单位中是没有问题的。但是一旦机器增多,广播的方式就很浪费资源了,而且,每个接口只连了一台电脑,这台电脑的IP和MAC地址也不怎么换,那只需要记住目标MAC不是这台电脑,就可以不往这个口发送数据了,谁能知道目标MAC的地址是否就是连接某个口的电脑的MAC地址呢?这就需要一个能把MAC头拿下来,检查一下目标MAC地址,然后根据策略转发设备,按第二章说过的,这个设备显然是个二层设备,我们称为交换机。交换机如何知道每个口,电脑的MAC的,这需要交换机自己去学习。

    一台MAC1电脑将一个包发送给一台MAC2的电脑,当这个包到达交换机时,一开始交换机并不知道MAC2的电脑在哪个口,所以只能将包发送给除发送过来的那个口的所有口,但是,同时,交换机会记住MAC1来自于哪个口,以后有目标MAC是MAC1的,就直接发送到这个口,而不是广播。交换机作为一个关卡一样,过了一段时间,就有了整个网络的完整结构,这个时候,基本上就不用广播了,全部可以准确的转发,当然,每个机器的IP会变,所在的口也会变,因而交换机的学习结果也是有过期时间的,这个整个网络的结构成为转发表。所以交换机是集线器的升级版本,比集线器智能。