数据链路层协议 —— 以太网协议
目录
1.数据链路层解决的问题
2.局域网通信方式
以太网
令牌环网
无线局域网
3.以太网协议
以太网帧格式
对比理解Mac地址和IP地址
认识MTU
MTU对IP协议的影响
MTU对UDP的影响
MTU对TCP的影响
基于以太网协议的报文转发流程
交换机的工作原理
4.ARP协议
ARP协议的作用
ARP协议的格式
ARP协议的工作流程
ARP缓存表
1.数据链路层解决的问题
当网络层IP协议被发明并投入使用的时候,我们发送的报文便有能力在整个网络世界中规划出到达目标主机的路径。当传输层TCP协议、UDP协议被发明并投入使用的时候,我们便能自主选择发送的报文是否需要可靠传输至目标主机。网络层IP协议和传输层TCP协议的配合,就能保证发送的报文准确且可靠地发送至目标主机。
但我们需要明确的是,整个大的网络世界是由无数个小的子网构成的,报文发送的过程是基于一个个子网进行跳转的,子网之间通过路由器进行连接。所以,相隔多个子网的主机之间想要实现准确且可靠地通信,首先要解决的问题就是相互连接的两台设备之间的通信 —— 这就是数据链路层要解决的问题。
相互连接的两台设备肯定是属于同一网段的,同一网段下两台主机之间的通信的问题其实就是局域网通信的问题,所以数据链路层要解决的问题其实就是局域网中相互连接的节点之间通信的问题。
对比理解网络层和数据链路层:
网络层只是提供了路径选择的能力,也就是说报文下一跳跳至哪个结点是由网络层决定的,但是网络层并不关心具体的过程,具体的过程是由数据链路层来完成的。
2.局域网通信方式
局域网通信有以下几种常见的通信方式:
以太网
以太网是目前最广泛使用的局域网技术之一。它基于IEEE 802.3标准,采用载波侦听多路访问/冲突检测(CSMA/CD)机制来管理网络上的数据传输。以太网使用双绞线、同轴电缆或光纤等物理介质来连接设备,并通过交换机或集线器(尽管现在交换机更为常见)来扩展网络。以太网支持多种速度,包括10Mbps、100Mbps、1Gbps、10Gbps甚至更高。
令牌环网
虽然令牌环网在过去曾经是一种流行的局域网技术,但现在已经逐渐被以太网所取代。令牌环网基于IEEE 802.5标准,它使用一种称为“令牌”的特殊帧来控制网络上的访问权。在令牌环网中,每个设备都连接成一个闭环,并且只有持有令牌的设备才能发送数据。这种方式可以确保网络上的数据传输不会发生冲突,但相比以太网,令牌环网在灵活性和成本方面存在劣势。
无线局域网
无线局域网(通常称为Wi-Fi)使用无线电波来传输数据,使设备能够在不使用物理线缆的情况下连接到网络。Wi-Fi基于IEEE 802.11标准,并支持多种速度和频率(如2.4GHz、5GHz)。无线局域网在家庭、办公室和公共场所等环境中非常流行,因为它提供了更大的灵活性和便利性。
其中最常用、最广泛的局域网通信方式是以太网通信。
3.以太网协议
以太网协议是属于数据链路层的协议,用于以太网内主机之间的通信。
以太网帧格式
各字段说明:
源地址和目的地址:表示网卡的硬件地址(也叫 MAC 地址),长度是 48 位,是在网卡出厂时固化的。占用6个字节的空间。
- 表明数据从那张网卡来,要到那张网卡去。
帧协议类型:该字段有三种值,分别对应 IP、ARP、RARP。占用2个字节的空间。
- 当类型字段的值为0800时,表明该报文需要交付给上层的IP协议。
- 当类型字段的值为0806时,表明该报文需要交付给ARP协议。
- 当类型字段的值为8035时,表明该报文需要交付给RARP协议。
CRC校验码:帧末尾是 CRC 校验码,用于检测帧在传输过程中是否发生错误。占用4字节的空间。
以太网帧格式中数据部分占用46 ~ 1500个字节的空间。
区分局域网通信、以太网通信、以太网帧格式:
以太网通信是一种具体的局域网通信的方式;
以太网帧格式是以太网通信方式中数据传输的基本单位和组织形式,而以太网通信方式则是利用以太网帧格式进行数据交换和传输的一种具体实现方式。
对比理解Mac地址和IP地址
在报文转发的过程中,报文会携带两套地址,一套是源IP地址和目的IP地址,一套是源Mac地址和目的Mac地址。Mac地址是集成在网卡内部的,用于表示网卡的唯一性;IP地址是用来标识节点的。
为什么有了IP地址还要有Mac地址?
我们可以这样理解。当报文进行转发的时候,IP地址能够表明报文需要转发给哪个节点,但是真正实现报文从一个结点转发到另一个结点需要通过底层的物理设备 —— 网卡 来实现。通过网卡进行报文转发的时候,网卡并不具备IP地址,网卡只具备Mac地址。况且,一般的通信节点只有一张网卡,但像路由器这样的节点需要横跨两个网络,需要配备两张网卡。所以报文转发的时候,需要知道报文转发给哪个节点的哪张网卡。也就是会所,报文转发的时候,需要IP地址标识报文转发给哪个结点,还需要Mac地址标识报文转发给哪张网卡。
- IP 地址描述的是路途总体的 起点 和 终点。
- MAC 地址描述的是路途上的每一个区间的起点和终点。
认识MTU
我们从以太网帧格式中可以看到,数据的大小是46 ~ 1500字节。这是因为以太网帧中的数据长度规定最小为 46 字节,最大为 1500 字节,最大值1500字节被称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU。
如果上层网络层交给数据链路层的数据大小超过1500字节,数据链路层就会倒逼网络层进行数据的分片,如果网络层交给数据链路层的数据大小不足46字节,网络层就要在数据后面补填充位。
我们可以使用ifconfig命令查看MTU:
MTU对IP协议的影响
MTU是数据链路层所能发送的最大数据单元,数据链路层的数据是由网络层交给他的,如果网络层交给数据链路层的数据超过1500字节,数据链路层就会倒逼网络层进行分片,同样,接收方的网络层对于分片的数据就要进行组装。
具体过程为:
- 将较大的 IP 包分成多个小包,并给每个小包打上标签。
- 每个小包 IP 协议头的 16 位标识(id) 都是相同的。
- 每个小包的 IP 协议头的 3 位标志字段中,第一位暂时不使用,第 2 位置为 0,表示允许分片,第 3 位来表示结束标记(当前是否是最后一个小包,是的话置为 0,否则置为 1)。
- 到达对端时再将这些小包按顺序重组,拼装好之后一起返回给传输层。
- 一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是 IP 层不会负责重新传输数据。
MTU对UDP的影响
一旦 UDP 携带的数据超过 1472(1500 - 20(IP 首部) - 8(UDP 首部)),那么就会在网络层分成多个 IP 数据报,这多个 IP 数据报有任意一个丢失,都会引起接收端网络层重组失败,UDP不保证可靠性,数据丢失不会进行重发,那么这就意味着,如果 UDP 数据报在网络层被分片,整个数据被丢失的概率就大大增加了。
MTU对TCP的影响
TCP 的一个数据报也不能无限大,同样受制于 MTU,TCP 的单个数据报的最大消息长度称为 MSS(Max Segment Size)。TCP 在建立连接的过程中,通信双方会进行 MSS 协商,最理想的情况下,MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU)。
- 双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值。
- 然后双方得知对方的 MSS 值之后,选择较小的作为最终 MSS。
- MSS 的值是通过 TCP 首部的 40 字节变长选项中 kind = 2 表明的。
MSS和MTU的关系:
基于以太网协议的报文转发流程
比如主机A要和主机E通信,主机A会向整个局域网中广播数据,大家都看得见,但是只有主机E会做出处理,因为主机A广播数据的时候,会带上自己的源mac地址,和目的mac地址(mac地址是网络通信中,物理层的网络设备之间的寻址),网络中的其他主机一看,这是主机A发送给主机E的数据,与我无关,忽略。主机E一看,这是主机A发送给我的数据,于是接收数据,主机A上的数据就发送给了主机E。
但是在一个局域网中,不仅仅只有主机A给主机E发送消息,可能有多台主机都要发送消息,但是网络只有一个,并且还是公共的;多台主机都向局域网中发送数据,这个时候就会造成数据的碰撞,数据一旦产生碰撞,数据的可靠性就难以保证,于是,便产生了一种机制,数据碰撞的检测和避免;也就是说,局域网中的主机向局域网中发送数据的时候,会先检测是否有主机在通信,有的话,就等一等,没有主机发送数据我再发,这样就能避免数据碰撞了;这个时候,大家都选择退一步,海阔天空。
以上就是基于以太网协议的报文转发流程。
交换机的工作原理
如果一个局域网中通信设备太多的话,产生数据碰撞和避免的概率就会大大增加,必然导致通信的效率降低。这个时候,人们发明交换机缓解局域网中设备太多导致的通信效率下降问题。
在局域网中引入交换机之后,刚开始的时候,交换机中并没有记录任何主机的Mac地址,当有主机向局域网中发送报文的时候,比如主机A给主机E发送报文。此时,交换机会将该报文转发至交换机右侧的局域网中,同时,交换机也知道了主机A在自己的左侧,并在自己的左侧记录主机A的Mac地址。当主机E收到该报文之后,向主机A响应消息的时候,交换机也会将主机E发送的报文转发至交换机的左侧,同时,在自己的右侧记录主机E的Mac地址。
当交换机把主机左侧的Mac地址和主机右侧的Mac地址都记录之后,交换机就可以通过报文中的目的Mac地址判断该报文是要发给左侧的主机还是右侧的主机,如果发送方和接收方在同一侧,就不会将报文转发至另一侧。这样,也就减少了数据碰撞的概率。
交换机通过划分碰撞域和记录两侧主机的Mac地址的方式减少数据碰撞的概率,缓解局域网中主机数量太多导致的通信效率下降问题。
4.ARP协议
ARP协议的作用
在网络通讯时,数据包首先是被网卡接收到再被上层协议处理的,但是,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址,此时也就无法进行通信。因此,在通讯前必须获得目的主机的硬件地址。而ARP协议就是用来获取目标主机的硬件地址的。
更具体的说,ARP协议的作用是根据目的IP地址获取目的Mac地址。
ARP协议的格式
- 硬件类型指链路层网络类型,1 为以太网。
- 协议类型指要转换的地址类型,0x0800 为 IP 地址。
- 硬件地址长度对于Mac地址为 6 字节。
- 协议地址长度对于IP 地址为 4 字节。
- op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。
- 其余四个字段分别是 源IP地址、目的IP地址、源Mac地址、目的Mac地址。目的Mac地址在未知的情况下填 FF:FF:FF:FF:FF:FF 表示广播。
需要注意的是:ARP协议不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。所以,ARP协议要发送至以太网中,还需要封装以太网的协议报头。
源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
分装以太网报头之后的报文格式:
ARP协议的工作流程
以主机A向主机B发送消息为例:
首先,主机A向局域网中发送ARP请求报文,此时,主机A还不知道目的Mac地址,目的Mac地址填充为FF:FF:FF:FF:FF:FF 表示广播地址,局域网中的所有主机都会处理带有广播地址的报文。当所有主机收到ARP请求的时候,会将ARP请求中的IP地址和自己的IP地址作比较,如果不同,则直接丢弃该报文;如果相同,接收方就知道有机器要和我通信,就会根据对方发送过来的ARP请求构建ARP响应报文。在该过程中,只有主机B会构建ARP响应报文。
主机B构建的ARP响应报文中会表明自己的Mac地址并发送到局域网中,此时,只有主机A能获取到ARP响应报文,主机A通过读取响应报文中的src_mac就知道了主机B的Mac地址。
以上就是ARP协议的工作流程。
ARP缓存表
每台主机都维护一个 ARP 缓存表,缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP 请求来获得目的主机的硬件地址 。ARP缓存表的引入使得获取目的IP主机的Mac地址的时间成本减少,提高了获取目的Mac地址的效率。
ARP 缓存表可以用 arp -a 命令查看:
为什么ARP缓存表要有过期时间呢?
这是因为,ARP缓存表中记录的是IP地址和Mac地址的映射关系。由于动态IP地址分配的原因,我们不能保证IP地址是不变的,IP地址会变,所以ARP缓存表也需要定期刷新。同理,Mac地址是网卡的标识,网卡是硬件,我们不能保证主机的硬件永远不更换,所以,Mac地址也是会变的,这也要求ARP缓存表中的信息不能保存太久。