最后更新:2022-02-17 09:06

上一节,我们见证了 IP 地址的诞生,或者说是整个操作系统的诞生。一旦机器有了 IP,就可以在网络的环境里和其他的机器展开沟通了。
故事就从我的大学宿舍开始讲起吧。作为一个八零后,我要暴露年龄了。
我们宿舍四个人,大一的时候学校不让上网,不给开通网络。但是,宿舍有一个人比较有钱,率先买了一台电脑。那买了电脑干什么呢?
首先,有单机游戏可以打,比如说《拳皇》。两个人用一个键盘,照样打得火热。后来有第二个人买了电脑,那两台电脑能不能连接起来呢?你会说,当然能啊,买个路由器不就行了。
现在一台家用路由器非常便宜,一百多块的事情。那时候路由器绝对是奢侈品。一直到大四,我们宿舍都没有买路由器。可能是因为那时候技术没有现在这么发达,导致我对网络技术的认知是逐渐深入的,而且每一层都是实实在在接触到的。
使用路由器,是在第三层上。我们先从第一层物理层开始说。
物理层能折腾啥?现在的同学可能想不到,我们当时去学校配电脑的地方买网线,卖网线的师傅都会问,你的网线是要电脑连电脑啊,还是电脑连网口啊?
我们要的是电脑连电脑。这种方式就是一根网线, 有两个头。一头插在一台电脑的网卡上,另一头插在另一台电脑的网卡上。 但是在当时,普通的网线这样是通不了的,所以水晶头要做交叉线,用的就是所谓的 1-3、2-6 交叉接法。
水晶头的第 1、2 和第 3、6 脚,它们分别起着收、发信号的作用。将一端的 1 号和 3 号线、2 号和 6 号线互换一下位置,就能够在物理层实现一端发送的信号,另一端能收到。
当然电脑连电脑, 除了网线要交叉,还需要配置这两台电脑的 IP 地址、子网掩码和默认网关 。这三个概念上一节详细描述过了。 要想两台电脑能够通信,这三项必须配置成为一个网络 ,可以一个是 192.168.0.1/24,另一个是 192.168.0.2/24,否则是不通的。
这里我想问你一个问题,两台电脑之间的网络包,包含 MAC 层吗?当然包含,要完整。IP 层要封装了 MAC 层才能将包放入物理层。
到此为止,两台电脑已经构成了一个最小的局域网,也即 LAN。可以玩联机局域网游戏啦!
等到第三个哥们也买了一台电脑,怎么把三台电脑连在一起呢?
先别说交换机,当时交换机也贵。有一个叫做 Hub 的东西, 也就是集线器。这种设备有多个口,可以将宿舍里的多台电脑连接起来。 但是, 和交换机不同,集线器没有大脑,它完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。 这是第一层物理层联通的方案。
你可能已经发现问题了。Hub 采取的是广播的模式,如果每一台电脑发出的包,宿舍的每个电脑都能收到,那就麻烦了。这就需要解决几个问题:
这几个问题,都是第二层,数据链路层,也即 MAC 层要解决的问题。MAC 的全称是 Medium Access Control,即媒体访问控制。控制什么呢?其实就是控制在往媒体上发数据的时候,谁先发、谁后发的问题。防止发生混乱。这解决的是第二个问题。这个问题中的规则,学名叫多路访问。有很多算法可以解决这个问题。就像车管所管束马路上跑的车,能想的办法都想过了。
比如接下来这三种方式:
解决了第二个问题,就是解决了媒体接入控制的问题,MAC 的问题也就解决好了。这和 MAC 地址没什么关系。
接下来要解决第一个问题: 发给谁,谁接收?这里用到一个物理地址 ,叫作链路层地址。但是因为第二层主要解决媒体接入控制的问题,所以它常被称为MAC 地址。
解决第一个问题就牵扯到第二层的网络包格式。对于以太网, 第二层的最开始,就是目标的 MAC 地址和源的 MAC 地址。

接下来是类型, 大部分的类型是 IP 数据包,然后 IP 里面包含 TCP、UDP,以及 HTTP 等 ,这都是里层封装的事情。
有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。 MAC 的网卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP 包,发现端口是自己,也就是 80,而 nginx 就是监听 80。
于是将请求提交给 nginx,nginx 返回一个网页。 然后将网页需要发回请求的机器。然后层层封装,最后到 MAC 层。因为来的时候有源 MAC 地址,返回的时候,源 MAC 就变成了目标 MAC,再返给请求的机器。
这里还有一个没有解决的问题,当源机器知道目标机器的时候,可以将目标地址放入包里面,如果不知道呢?一个广播的网络里面接入了 N 台机器,我怎么知道每个 MAC 地址是谁呢?这就是 ARP 协议,也就是已知 IP 地址,求 MAC 地址的协议。

在一个局域网里面,当知道了 IP 地址,不知道 MAC 怎么办呢?靠“吼”。

广而告之,发送一个广播包,谁是这个 IP 谁来回答。具体询问和回答的报文就像下面这样:

本文由 在线网速测试 整理编辑,转载请注明出处。