文章目录
- 前言
- 一、MAC地址
- 二、以太网协议
-
- 1. 以太网数据格式
- 2. MAC地址表
前言
假设有这样一张网络拓扑图:
在拓扑图中有A、B、C三台计算机,并且它们三个是通过中间的路由器连接的。这时候计算机A要向计算机C发送一条数据,那么数据是怎么样到达计算机C呢?也就是说路由器是怎么知道A要发送数据给谁呢?
这就是接下来要讲的以太网协议,分为两部分:第一个是MAC地址,第二个是以太网协议。
一、MAC地址
MAC地址又称物理地址、硬件地址,全世界所有的计算机都拥有唯一的MAC地址。我们可以理解为MAC地址就是计算机设备的身份证号码,通过它就能精确找到每台计算机。
MAC地址共48位bit,由于48个0、1这样的二进制数不便于记忆和使用,故转化为12个十六进制数来表示(一位十六进制数等于四位二进制)。
那么如何查看计算机的MAC地址呢?步骤如下。
第一步:同时按下键盘win+R键,打开运行框。
第二步:在里面输入命令cmd,点击确定。
第三步:进入黑色控制台,在里面输入命令ipconfig/all,然后按下回车键,就可以查看本机所有的物理设备的MAC地址。
上图中箭头指向的12位十六进制数,两两一对且用横杠连接的,就是MAC地址(也叫物理地址)。之所以上面会有两个MAC地址,是因为博主电脑上安装了虚拟机,如果有多个虚拟机,则就有多个MAC地址。如果是笔记本电脑的话,上面还会有无线网卡的MAC地址。
二、以太网协议
- 以太网(Ethernet)是一种广泛使用的局域网技术;
- 以太网协议是位于数据链路层的协议;
- 使用以太网可以完成相邻设备的数据帧传输;
1. 以太网数据格式
以太网数据格式如下:
前面的两个部分:目的地址、源地址,就是我们刚才说的MAC地址。目的地址是要发送到的主机MAC地址,源地址是发出数据的主机MAC地址。那么两个地址下面的数字6是什么意思呢?上面提到MAC地址总共有48个bit位,一个字节等于8个bit位,48/8=6,这里面的6其实表示的就是6个字节。不管是目的MAC地址,还是源MAC地址都是占用6个字节。类型占用2个字节,最后的CRC(循环冗余校验码)占用4个字节。里面的帧数据占用46到1500个字节。
以上就是以太网的数据格式,关于类型给大家也做一个拓展,这里的类型表示的是要传输的帧数据到底是采用什么协议类型的数据。
比如说如果是网络层的IP数据,类型就是0800,这里的每个数字都是十六进制数。
如果说帧数据是ARP协议的请求或者应答,那么它的类型就是0806。
如果帧数据是RARP协议的请求或者应答,那么它的类型就是8035。
2. MAC地址表
接下来看看以太网的MAC地址表,地址表的作用是把每个电脑的MAC地址映射到具体的硬件接口,如下图所示。
从上图可以看出每个MAC地址都有对应的接口,比如31-B4-9E-ED-85-CA映射的是接口1。
那么MAC地址表是存放在哪里呢?该怎么用呢?答案很简单,回到我们刚开始提到网络拓扑图。
以及刚开始提出的那个问题:网络中数据从计算机A通过路由器E到达计算机C,路由器是怎样知道A的数据是发给C的呢?假设路由器E中存放了MAC地址表,如下图所示。
计算机A的MAC地址连接的是E1硬件接口,计算机B连接的是E2接口,C连接的是E3接口。如果说A需要发送数据给C的话,我们来看整个过程。
- A通过网卡发出数据帧。
- 数据帧到达路由器,路由器取出前6字节(刚才我们提到了,前面的6个字节就是目的机器的MAC地址)。
- 路由器匹配MAC地址表,找到对应的网络接口。(我们知道A需要传输给C,那么在以太网数据里面前6个字节就是C的MAC地址,路由器E就会匹配MAC地址表,发现C的硬件接口是E3)。
- 最后路由器通过该网络接口发送数据帧。
这样就完成了数据从A发送到C以及接收的整个过程,这里面发挥重要作用的是MAC地址表。这个MAC地址表实际就是路由器所拥有的,讲到这里,有的小伙伴可能会有疑问了:如果这个MAC地址表中并不知道C的硬件接口具体是哪个,如下图所示。
这时候该怎么办呢?我们来看一下这种情况下,路由器是怎么进行处理的。那么同样的,A发送数据给C。
- 路由器E检查MAC地址表,发现没有C的信息。
- 路由器E将广播A的数据包到除A以外的端口(也就是E将会把A的数据发送给B和C)。
- 然后E将会收到来自B、C的回应,并将它们的MAC地址和接口记录下来。记录下来之后,E就会知道C对应的接口是什么了,那么E就可以准确把数据发送到C。
这就是当路由器不知道MAC地址映射的时候,它是怎么样进行数据包处理的全部过程。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
源创会,线下重启!2023年7月1日深圳站—基础软件技术面面谈!免费票限时抢购! 多按键输入驱动 荔枝派的全志V3s开发板上面,有4个按键本身不是通过gpio连接到soc上面的。它是通过ad的方法,连接到主芯片的。这个时候,不同的按键被按下的时候,就会生成不同…