5(计算机网络)从物理层到mac层

chenhanhao chenhanhao     2023-04-17     170

关键词:

故事就从我的大学宿舍开始讲起吧。作为一个八零后,我要暴露年龄了。

我们宿舍四个人,大一的时候学校不让上网,不给开通网络。但是,宿舍有一个人比较有钱,率先买了一台电脑。那买了电脑干什么呢?

首先,有单机游戏可以打,比如说《拳皇》。两个人用一个键盘,照样打得火热。后来有第二个人买了电脑,那两台电脑能不能连接起来呢?你会说,当然能啊,买个路由器不就行了。

现在一台家用路由器非常便宜,一百多块的事情。那时候路由器绝对是奢侈品。一直到大四,我们宿舍都没有买路由器。可能是因为那时候技术没有现在这么发达,导致我对网络技术的认知是逐渐深入的,而且每一层都是实实在在接触到的。

第一层(物理层)

使用路由器,是在第三层上。我们先从第一层物理层开始说。

物理层能折腾啥?现在的同学可能想不到,我们当时去学校配电脑的地方买网线,卖网线的师傅都会问,你的网线是要电脑连电脑啊,还是电脑连网口啊?

我们要的是电脑连电脑。这种方式就是一根网线,有两个头。一头插在一台电脑的网卡上,另一头插在另一台电脑的网卡上。但是在当时,普通的网线这样是通不了的,所以水晶头要做交叉线,用的就是所谓的1-32-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 采取的是广播的模式,如果每一台电脑发出的包,宿舍的每个电脑都能收到,那就麻烦了。这就需要解决几个问题:

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

这几个问题,都是第二层,数据链路层,也即 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,再返给请求的机器。

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

这里还有一个没有解决的问题,当源机器知道目标机器的时候,可以将目标地址放入包里面,如果不知道呢?一个广播的网络里面接入了 N 台机器,我怎么知道每个 MAC 地址是谁呢?这就是ARP 协议,也就是已知 IP 地址,求 MAC 地址的协议。

技术图片

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

技术图片

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

技术图片

局域网

好了,至此我们宿舍四个电脑就组成了一个局域网。用 Hub 连接起来,就可以玩局域网版的《魔兽争霸》了

打开游戏,进入“局域网选项”,选择一张地图,点击“创建游戏”,就可以进入这张地图的房间中。等同一个局域网里的其他小伙伴加入后,游戏就可以开始了。

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

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

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

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

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

有了交换机,一般来说,你接个几十台、上百台机器打游戏,应该没啥问题。你可以组个战队了。能上网了,就可以玩网游了。

小结

第一,MAC 层是用来解决多路访问的堵车问题的;

第二,ARP 是通过吼的方式来寻找目标 MAC 地址的,吼完之后记住一段时间,这个叫作缓存;

第三,交换机是有 MAC 地址学习能力的,学完了它就知道谁在哪儿了,不用广播了。

最后,留两个思考题吧。

  1. 在二层中我们讲了 ARP 协议,即已知 IP 地址求 MAC;还有一种 RARP 协议,即已知 MAC 求 IP 的,你知道它可以用来干什么吗?
  2. 如果一个局域网里面有多个交换机,ARP 广播的模式会出现什么问题呢?

网络协议-网络基础-从物理层到链路层(代码片段)

从物理层到链路层在计算机网络中,物理层负责将光电信号转化为0、1比特流用来表示信息,数据链路层把这些信息集合为一个叫做「帧」的块,再进行传输。TCP/IP未对数据链路层及以下部分(物理层)做定义,因为TCP/IP以这两... 查看详情

网络协议-网络基础-从物理层到链路层(代码片段)

从物理层到链路层在计算机网络中,物理层负责将光电信号转化为0、1比特流用来表示信息,数据链路层把这些信息集合为一个叫做「帧」的块,再进行传输。TCP/IP未对数据链路层及以下部分(物理层)做定义,因为TCP/IP以这两... 查看详情

从物理层到mac层:如何在宿舍里自己组网玩联机游戏?

文章目录前言第一层(物理层)第二层(数据链路层)局域网小结前言上一节,我们见证了IP地址的诞生,或者说是整个操作系统的诞生。一旦机器有了IP,就可以在网络的环境里和其他的机器展开沟通了。故事就从我的大学宿... 查看详情

网络层--硬件地址

...地址的区别从层次的角度来看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址。在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一... 查看详情

http从入门到入土——五层网络模型

...协议。从上到下分别是:应用层传输层网络层数据链路层物理层物理层物理层主要作用是定义物理设备如何传输数据。数据链路层数据链路层在通信的实体间建立数据链路链接。 查看详情

18网络编程-tcp/ip各层介绍(5层模型讲解)

1、TCP/IP五层协议讲解物理层--数据链路层--网络层--传输层--应用层我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议就理解了整个互联网通信的原理。首先... 查看详情

第二章计算机网络数据链路层(代码片段)

第二章数据链路层本章的重点内容是:数据链路层的点对点信道和广播信道的特点,以及这两种信道使用的协议.(PPP)协议,以及CSMA/CD协议.数据链路层的三个基本问题:封装成帧,透明传输和差错检测数据发送模型从主机H1到主机H2通信,... 查看详情

计算机网络

目录一、计算机网络概述二、物理层三、数据链路层四、网络层五、传输层六、应用层七、网络安全一、计算机网络概述1.网络分层模型 2.网络连接错误举例物理层故障:网线断了、网线发包接口连通但收包接口断了数据链... 查看详情

计算机网络复习-研一上

网络知识点体系结构OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP分层(4层):网络接口层、网际层、运输层、应用层。五层协议(5层):物理层、数据链路层、网络层、运输层、应... 查看详情

linux网络之数据包的接受过程

...涉及到网卡控制器,CPU,DMA,驱动程序,在OSI模型中属于物理层和链路层,如下图所示。网卡工作在物理层和数据链路层,主要由PHY/MAC芯片、Tx/RxFIFO、DMA等组成,其中网线通过变压器接PHY芯片、PHY芯片通过MII接MAC芯片、MAC芯片... 查看详情

[linux]linux网络之数据链路层详解(代码片段)

1.数据链路层  处于TCP/IP中物理层,数据链路层的协议定义了通过通信媒介互连的设备之间的传输规范.在计算机中数据是由01表示的,实际通信时通信媒介处理的时电压的高低、光的闪灭及电波的强弱等信号。把这些信号与0... 查看详情

刷题面筋-网络-各层网络协议

各层网络协议OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP分层(4层):网络接口层、网际层、运输层、应用层。五层协议(5层):物理层、数据链路层、网络层、运输层、应用层。... 查看详情

网络硬件5.网络管理-交换机架构

...标准通过接口进行数据传输。概念图:PHY模块以太网物理层和数据链路层的MAC子层相关协议功能的实现一般会使用标准的芯片处理负责对以太网进行编码的物理层处理的模块就是PHY下面是PHY的逻辑图: 如图,PHY负责... 查看详情

网络编程(代码片段)

...数据 1、网络模型7层概述   <--返回目录物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,... 查看详情

计算机网络系列(代码片段)

计算机网络系列1.1基本常识1.2各种协议1.3TCP三次握手和四次挥手的全过程基本常识##Note:OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP分层(4层):网络接口层、网际层、运输层、应用... 查看详情

路由器和交换机的工作原理和基本配置是啥?

...行转发。5、更新。MAC地址表会每300s更新一次。参考技术A计算机网络往往由许多种不同类型的网络互连连接而成。如果几个计算机网络只是在物理上连接在一起,它们之间并不能进行通信,那么这种“互连”并没有 查看详情

计算机网络之面试常考

参考书籍:《计算机网络》第五版 谢希仁的那本,希望对大家有所帮助OSI,TCP/IP,五层协议的体系结构,以及各层协议OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP分层(4层):... 查看详情

tcp/ip协议分层

...并不是按七层模型,一般大家都只使用5层模型。如下:物理层:一般包括物理媒介,电信号,光信号等,主要对应于PHY芯片,PHY芯片将数据传送给物理媒介(RJ45座->双绞线),如图:数据链路层:一般简单称为MAC层,因为MAC... 查看详情