趣谈网络原理 从物理层到MAC层(自我提升第十五天)

昨天写完博客,看了一下自己同学的博客,突然发现自己是真的菜鸟,完全比不上他们两个人,无论是访问量还是排名都不如他们,所以菜鸟也下定决心,要更加努力的写好博客,更加深刻、更加清晰。

三人行,必有我师焉。每一个比自己优秀的人,我们不应该去埋怨自己努力了,为什么比不上?也不应该去诋毁,说什么不可能,他们不可能比我好!我们应该以他们为榜样,努力的学习他们,看见他们背后的付出,并让自己比他们付出得更多,我想这就是人生的意义吧!希望各位想奋斗的读者,千万不要因为别人的只言片语,想拉你下水,你就真的放弃了自己!

话不多说,进入今天的课程

趣谈网络原理

第二模块一知识点:

第一层(物理层)

(菜鸟现在没有几台电脑,也没有网线,无法进行课程里面的实验,不过突然及起来好像有个好东西——eNSP,突然感觉上次不应该用服务器做的,应该用eNSP做,失算(lll一ω一),话不多说,先做实验为敬,(^ 皿 ^) )

两种网线

如果是实体实验,这里强调一点:

电脑连网线 和 电脑连电脑 用的是两种不同的线,电脑连接电脑普通的线不行,所以水晶头要做交叉线,用的就是所谓的1-3、2-6 交叉接法

为什么要用交叉接法?

水晶头的第 1、2 和第 3、6 脚,它们分别起着收、发信号的作用。将一端的 1 号和 3 号线、2 号和 6 号线互换一下位置,就能够在物理层实现一端发送的信号,另一端能收到。

(不过现在的一般网线也能实现电脑连电脑了,不过当不行的时候可以考虑一下是不是线的问题)

有人会问,为什么不用路由器?
这里极客时间没讲,只是说当时那个年代路由器很贵,而且有路由器,那这就不是物理层能搞定的了。

电脑如何配置

当然电脑连电脑,除了网线要交叉,还需要配置这两台电脑的 IP 地址、子网掩码和默认网关。要想两台电脑能够通信,这三项必须配置成为一个网络,否则是不通的。eg:一个是 192.168.0.1/24,另一个是 192.168.0.2/24。
(菜鸟感觉如果只是单纯的玩电脑,不上网,那么这个默认网关可以不用配置,毕竟不用接收也不用发送包出去,只是两台电脑的通信,如果读者感觉菜鸟说得有问题,欢迎留言!!!)

到此为止,两台电脑已经构成了一个最小的局域网,也即LAN。可以玩联机局域网游戏啦!

引入集线器

那如果有三台或者多一点的电脑,我们该怎么办?

这里先不说,交换机,毕竟那个东西有点贵(现在好像也不是很贵,但极客时间老师的那个年代很贵)。而且这里是讲物理层,所以要引入别的:

有一个叫作Hub的东西,也就是集线器。这种设备有多个口,可以将宿舍里的多台电脑连接起来。但是,和交换机不同,集线器没有大脑,它完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。这是第一层物理层联通的方案。

第二层(数据链路层)

你可能已经发现问题了。Hub 采取的是广播的模式,如果每一台电脑发出的包,宿舍的每个电脑都能收到,那就麻烦了。这就需要解决几个问题:

  1. 这个包是发给谁的?谁应该接收?
  2. 大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?
  3. 如果发送的时候出现了错误,怎么办?

这几个问题,都是第二层,数据链路层,也即 MAC 层要解决的问题。

大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?

MAC的全称是Medium Access Control,即媒体访问控制。控制什么呢?其实就是控制在往媒体上发数据的时候,谁先发、谁后发,防止发生混乱,这解决的是第二个问题,这个问题中的规则,学名叫多路访问

这里类比一下,就像车管所,管理马路上跑的车:

  1. 分多个车道。每个车一个车道,你走你的,我走我的。这在计算机网络里叫作信道划分
  2. 今天单号出行,明天双号出行,轮着来。这在计算机网络里叫作轮流协议
  3. 不管三七二十一,有事儿先出门,发现特堵,就回去。错过高峰再出。我们叫作随机接入协议。著名的以太网,用的就是这个方式

(这里三个名词都是极为重要的,应该极客后期会逐个讲,如果没讲,那菜鸟就来讲,反正不会让读者学得一知半解)

包是发给谁的?谁应该接收?

接下来要解决第一个问题:发给谁,谁接收?这里用到一个物理地址,叫作链路层地址。但是因为第二层主要解决媒体接入控制的问题,所以它常被称为MAC 地址

解决第一个问题就牵扯到第二层的网络包格式。对于以太网,第二层的最开始,就是目标的MAC 地址和源的 MAC 地址。接下来是类型,大部分的类型是 IP 数据包,然后 IP 里面包含 TCP、UDP,以及 HTTP等,这都是里层封装的事情。
趣谈网络原理 从物理层到MAC层(自我提升第十五天)
有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP包,发现端口是哪个。

然后该端口的进程还得回复一下。然后层层封装,最后到 MAC 层。因为来的时候有源 MAC 地址,返回的时候,源 MAC 就变成了目标 MAC,再返给请求的机器。(这两个过程不了解的,可以看看我先前的趣谈网络原理的博客)

如果发送的时候出现了错误,怎么办?

对于以太网,第二层的最后面是CRC,也就是循环冗余检测。通过 XOR 异或的算法,来计算整个包是否在发送的过程中出现了错误,主要解决第三个问题。

(这里极客也没有讲CRC是怎么工作的,可能后面会讲,如果不讲,那菜鸟就来讲,反正不会让读者学得一知半解)

还有一个没有解决的问题(ARP协议解决)

当源机器知道目标机器的时候,可以将目标地址放入包里面,如果不知道呢?一个广播的网络里面接入了 N 台机器,我怎么知道每个 MAC 地址是谁呢?这就是ARP 协议,也就是已知 IP 地址,求 MAC 地址的协议。
趣谈网络原理 从物理层到MAC层(自我提升第十五天)
在一个局域网里面,当知道了 IP 地址,不知道 MAC 怎么办呢?靠“吼”。
趣谈网络原理 从物理层到MAC层(自我提升第十五天)
ARP广而告之,发送一个广播包,谁是这个 IP 谁来回答。具体询问和回答的报文就像下面这样:
趣谈网络原理 从物理层到MAC层(自我提升第十五天)
为了避免每次都用 ARP 请求,机器本地也会进行 ARP 缓存。当然机器会不断地上线下线,IP 也可能会变,所以 ARP 的 MAC 地址缓存过一段时间就会过期

交换机

上面的集线器承受力也有限,如果电脑继续增多,问题就出现了。因为Hub 是广播的,不管某个接口是否需要,所有的 Bit 都会被发送出去,然后让主机来判断是不是需要。这种方式路上的车少就没问题,车一多,产生冲突的概率就提高了。而且把不需要的包转发过去,纯属浪费。看来 Hub 这种不管三七二十一都转发的设备是不行了,需要点儿智能的。因为每个口都只连接一台电脑,这台电脑又不怎么换 IP 和 MAC 地址,只要记住这台电脑的 MAC 地址,如果目标 MAC 地址不是这台电脑的,这个口就不用转发了。

谁能知道目标 MAC 地址是否就是连接某个口的电脑的 MAC 地址呢?这就需要一个能把MAC 头拿下来,检查一下目标 MAC 地址,然后根据策略转发的设备,这个设备显然是个二层设备,我们称为交换机

交换机怎么知道每个口的电脑的 MAC 地址呢?这需要交换机会学习

一台 MAC1 电脑将一个包发送给另一台 MAC2 电脑,当这个包到达交换机的时候,一开始交换机也不知道 MAC2 的电脑在哪个口,所以没办法,它只能将包转发给除了来的那个口之外的其他所有的口。但是,这个时候,交换机会干一件非常聪明的事情,就是交换机会记住,MAC1 是来自一个明确的口。以后有包的目的地址是 MAC1 的,直接发送到这个口就可以了。

当交换机作为一个关卡一样,过了一段时间之后,就有了整个网络的一个结构了,这个时候,基本上不用广播了,全部可以准确转发。当然,每个机器的 IP 地址会变,所在的口也会变,因而交换机上的学习的结果,我们称为转发表,是有一个过期时间的。

ARP和交换机

这里的过期时间和ARP差不多。ARP是直接查询本机缓存,交换机是查询的转发表,那这里读者会问,那这个时候ARP还有用吗?

答案是肯定的,这是两个不同的概念。arp是一个协议,交换机在局域网中要实现端口的转发必须要通过arp协议,才能找到具体的机器在哪一个端口,有转发表只是省略了arp协议这一部分,从而更快。ARP协议范围小,只能在同一局域网内使用(吼),ARP用于查询本机缓存中的的IP和MAC对应关系、添加或删除静态对应关系,即查询缓存就可以知道目的的MAC地址 (同一网段,不同网段不会执行ARP协议,而是发送给网关 )。ARP是一个协议而不是缓存!!!

最后给大家一道题目,望大家积极留言!!!

如果一个局域网里面有多个交换机,ARP 广播的模式会出现什么问题呢?

参考答案:
ARP广播时,交换机会将一个端口收到的包转发到其他的端口上,比如数据包经过交换机A到达交换机B,交换机B又将包复制多份广播出去,如果整个局域网存在一个环路,使得数据包又回到最初的交换机A,这个包又会被A再次复制多份广播出去,如此循环,数据包会不停转发,而且越来越多,最终占满带宽,或者使解析协议的硬件过载,形成广播风暴