
目录
以太网
以太网不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,又包含了一些物理层的内容,以太网的帧格式如下:

数据一般而言为网络层交给应用层的IP报文。
同样的,对于接收方来说,也会存在如何分离报头和有效载荷以及如何分用的问题,对于第一个问题,以太网的MAC帧采用固定长度,目的地址、源地址、类型和CRC都是固定长度大小,因此,根据这几个固定长度大小即可实现报头和有效载荷的分离问题,对于第二个分用的问题,MAC帧中的存在2字节的类型字段,根据数据从哪来的填写类型,同时根据类型决定交付的地方。
以太网帧中的数据长度规定最小46字节,最大1500字节,最大值1500被称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU。除此之外,还有一个最小长度限制46,如果不够46,会通过PAD字段进行填充,填充方式一般为写0或者写1,这也是IP报头里为啥会有4位首部长度的同时,还存在16位总长度的原因。
Linux可用ifconfig指令查看对应的以太网的MAC地址,如下所示:

局域网通信
之前在介绍局域网通信时,有如下一张图:

在主机A发送报文的过程中,局域网的所有主机都能收到,只不过其它主机判断不是发给自己的将该报文丢弃了而已。
如果多个主机向同一台主机发消息,不同数据的信号之间会互相干扰,以太网中多主机在局域网中发生的数据干扰问题为数据碰撞,以太网中也称为碰撞域,这时涉及主机就要进行碰撞检测与避免,碰撞避免本质是在数据链路层做延时重发。
交换机
为了缓解主机数增多导致网络降速的问题,局域网中可以采用交换机这种设备,交换机的作用为划分碰撞域。如下图所示:

一开始交换机中的条目为空,后面会进行自学习,当主机A要给主机E发消息时,交换机发现自己收到的数据帧是从左边进来的,因此,左侧记录下MacA,同时会将MacE传到右侧,主机E收到数据后,若进行回应,目的地址为MacA,源地址为MacE,此时交换机确定MacE在交换机的右侧,经过几轮这样的学习,交换机就会将多个主机的Mac地址分别存在左右两侧的条目,若当有新的数据帧到来时,发现目的地址在同侧,则不转发;否则进行转发。
ARP协议
原理
在数据传输的过程中,不仅要知道目的主机的IP地址,还必须要知道目的主机的Mac地址,只有这样,才能将数据顺利送达。因此,在同一个网段中,必须要有一种技术,能够把下一条IP转化成为下一条主机的Mac地址,这种局域网技术称为ARP,地址解析协议。这种协议在Mac帧上层,但依旧属于数据链路层的协议,同时该协议不会向上交付。
当主机A想知道主机D的Mac地址时,首先会先在以太网中进行广播,在源地址中带上自己的Mac地址,同时也会带上ARP协议的类型编号,数据部分会带上要寻找的Mac地址对应的IP地址,每个主机对应的ARP就会识别对应的内容,除了D主机之外,其它主机的ARP协议会将该报文丢弃,D主机进行应答,目的地址为MacA,源地址为MacD,类型为ARP协议的类型编号,并在数据部分带上自己的Mac地址,继续放到以太网中进行传播,如下图所示:

ARP的过程,就是一个先广播,然后再1:1发送MAC地址的过程。
协议格式
ARP协议的格式如下:

其中28字ARP请求/应答为ARP协议的部分,以太网数据帧大小最小为46,如果不够通过PAD填充即可。
硬件类型在以太网中固定为1,在不同网络中会有不同的设定。
协议类型为要转换的地址类型,如果为0800,则为IP地址。
硬件地址长度一般为6,代表硬件类型的长度;协议地址长度一般为4。
目的端以太网地址如果不知道就为全F。
op字段为1表示ARP请求,op字段为2表示ARP应答。任何主机,可能被别人发起ARP请求,该主机可能会收到ARP请求;任何主机,也可能曾将向别人发起过ARP,那么未来对应的主机也会得到应答,该主机有可能会收到ARP应答。为了区分请求还是应答,所以有了op字段。
解析过程
当某主机收到一个请求时,该主机会首先解析op字段,若op为1,会将目的IP地址和自己的IP地址进行比较,若发现和自己一致,会构建ARP应答,op字段为2,带上自己的Mac地址并向下封装Mac地址,随后将该应答放到局域网中进行转发。
若请求和应答过程中,某主机发现对应的数据不是传给自己的,就会丢弃。只不过请求的丢弃是在ARP层中,应答的丢弃是在Mac帧层。
每一次得到新的主机的Mac地址时,ARP协议都会将IP地址与Mac地址的映射关系缓存起来。
ARP缓存是有时间的,这主要是因为IP和Mac地址的映射可能会有变化。