当前位置: 首页 > 后端技术 > PHP

网络协议3——从物理层到MAC层

时间:2023-03-30 01:08:25 PHP

在上一篇博文中,我们见证了IP地址的诞生。一旦一台机器有了IP,它就可以与网络环境中的其他机器进行通信。今天,让我们了解一下物理层和MAC层。在日常生活中,作为90后,如果不是通信专业的我们,应该从来没有接触过物理层和MAC层设备。我们接触最多的路由器可能就是路由器了。路由器其实就是第三层——网络层的设备。那么我们如何理解物理层呢?那些深奥的理论不说了,先从在宿舍里在线玩魔兽世界开始吧。如果想把宿舍里的几台电脑连成一个局域网,第一反应就是买个路由器,大家连上就OK了。但是在15年前,路由器还没有普及的时候,你问过一个校园通信专业的学生,??你知道怎么搭建宿舍局域网吗?他应该回答你,一共有三种方式:网线连接集线器到交换机的物理层在以上三种方式中,网线连接和集线器完全工作在物理层,我们先来看看这两种方式。网线连接?是的,你没看错,就是用一根网线连接两台电脑。网线水晶头的1、2、3、6脚分别起到发送和接收信号的作用。如果要将两台电脑通过网线连接到一个局域网,额外的操作是将网线连接到交换机的一端和二、六线的位置,这样一端发送的信号就可以了。一端可以在物理层被另一端成功接收。当然,除了通过网线连接外,我们还需要配置两台电脑的IP地址、子网掩码、默认网关,将这三项配置成一个网络,否则是不行的。这样一个宿舍的两台电脑就可以在线玩魔兽世界了。问题来了,如果另一个室友买了一台电脑,三台电脑怎么连在一起呢?别说高端交换机了,对于15年前的大学生来说,交换机太贵了买不起。幸运的是,除了交换机之外,还有一种叫做Hub的东西,也就是集线器。Hub这个设备有多个端口,可以连接宿舍里的多台电脑。与交换机不同,集线器是“愚蠢的”。它没有大脑,完全在物理层工作,将接收到的每个字节复制到其他端口。就像,小明想跟小红表白,但是不知道小红在哪个小区,就找了其他小伙伴,让每个小伙伴负责一个小区,到每家每户问问是不是小红的回家,找到小红的家。洪的朋友把供述告诉了小红。大家可能已经发现,集线器是通过上面的数据链路层来实现局域网的,集线器采用的是广播方式。如果每台电脑发送的数据包都能被局域网内的其他电脑接收到,那就麻烦了。这需要解决几个问题:这个包裹寄给谁?谁收到它?大家都是爆料,会不会有混乱?有优先规则吗?万一出事了怎么办?这些问题都是数据链路层,即MAC层要解决的问题。MAC的全称是MediumAccessControl,即Media媒体访问控制。这里的控制其实就是在向媒体发送数据的时候控制谁先发谁后发的问题,也就是防止混淆。这解决了第二个问题。这个问题中的规则称为多路访问。像我们的交通管制,常见的方法有以下三种:方法一:分车道。每辆车都有一条车道,你走你的,我走我的,互不干扰。这在计算机网络中称为信道划分;方法二:今天出现奇数,明天出现偶数,依次出现。这称为轮换协议;方法三:不管发生什么情况,如果提前出门,发现车流量很大,就回去等,直到错过了高峰期。这称为随机访问协议。著名的以太网就是采用这种方法。分析需要解决第一个问题:发给谁?谁收到它?这里使用了一个物理地址,称为链路层地址。但由于第二层主要解决媒体访问控制的问题,所以常被称为MAC地址。解决第一个问题涉及到第二层的网络包格式。对于以太网,第二层最开始是目的MAC地址和源MAC地址。接下来是类型。类型最多的是IP包,IP包括TCP、UDP、HTTP等,这些都是封装在内层的东西。有了这个目标MAC地址,数据包就在链路上广播,MAC网卡就可以发现这个包是发给自己的。MAC的网卡收到包,然后打开IP包,发现IP地址也是自己的,再打开TCP包,发现端口是80,nginx正在监听80端口。然后向nginx提交请求,nginx返回一个网页,经过层层封装后最终返回MAC层。因为来的时候有源MAC地址,回来的时候源MAC地址就变成了目标MAC地址,然后再返回给请求的机器。对于以太网来说,第二层的最后一层是CRC,也就是循环冗余校验。异或算法用于计算整个包在发送过程中是否有错误,主要解决第三个问题。这里还有一个未解决的问题。当源机器知道目标机器时,就可以将模板地址放入包中。如果你不知道怎么办?有N个地址连接到广播网络,我怎么知道每个MAC地址是谁?这就是ARP协议,也就是知道IP地址后查找MAC地址的协议在局域网中,知道IP地址却不知道MAC地址怎么办?这个在网络协议-概述中有提到,本地通信要靠“侯”。发送一个广播包来做广告,谁说这个IP谁就回答。具体查询和应答信息如下:为了避免每次都使用ARP协议,本机会在本地进行ARP缓存。当然,缓存的MAC地址是有过期时间的。以上解决了局域网内所有机器都能收到广播发送的包的问题。那么Hub采用什么样的方式呢?事实上,不管Hub是否需要某个接口,所有的数据都会被发送出去,然后Host会判断是否需要相关数据。这种方法有两个问题:当机器数量大幅增加时,发生冲突的概率会增加。这个很好理解,所以很多小伙伴去找小红,出车祸的概率比直接去她家交代出车祸的概率要高;发送大量不必要的包是一种资源浪费。显然,要解决以上两个问题,我们只需要知道哪个接口对应哪个MAC地址即可。如果目标MAC地址不属于本机,则不需要转发该端口。那么,谁又能知道目标MAC地址是不是某个端口所连接的计算机的MAC地址呢?这就需要一个能够去除MAC头,检查目标MAC地址,然后根据策略进行转发的设备,也就是我们之前提到的二层设备-交换机。交换机怎么知道每个端口对应的电脑的MAC地址呢?这需要交换机能够学习。这也是交换机和集线器最明显的区别。一台MAC1计算机向另一台MAC2计算机发送数据包。当数据包到达交换机的时候,交换机一开始并不知道MAC2电脑是哪个端口,所以没办法,只能把数据包转发给不是来的那一台。其他都是嘴。不过这时候交换机会做一件很聪明的事情,就是交换机会记住MAC1来自特定的端口,以后如果有目的地址是MAC1的数据包,就会发送出去直接到相应的端口。当交换机作为检查点时,经过一段时间后,就会有整个网络的结构。这时候基本不用广播了,都可以精准转发。而交换机学习的结果,我们就变成了转发表。当然每台机器的IP地址都会变,所在的端口也会变,所以转发表也有过期时间。总结上面说了一大堆,其实就那么几个字:MAC层用来解决多路访问的堵车问题。ARP就是通过“咆哮”找到目标MAC地址。时间,这个叫做ARP缓存的交换机是Hub的升级版,它有学习MAC地址的能力,学习后可以记住每个MAC地址对应哪个端口,学习的结果叫做转发表参考:刘超-互联网协议系列课;

猜你喜欢