网络数据链路层以太网协议
1. 以太网协议介绍
以太网是一个数据链路层协议,数据链路层的作用是用于两个设备(同一种数据链路节点)之间进行传递。
以太网不是一种具体的网络,而是一种网络技术标准,既包含了数据链路层的内容,也包含了一些网络层的内容。
例如规定了网络拓扑结构、访问控制方式、传输速率等。规定以太网中的网线必须使用双绞线,传输速率有 10M, 100M, 1000M 等。
以太网是当前应用最广泛的局域网技术,其具有简单、成本低、可扩展性强、与IP网能够很好地结合等特点。与其并列的还有令牌环网、无限LAN等技术。
2. 以太网帧格式
源地址和目的地址: 指的是网卡硬件地址(MAC 地址),长度是 48 位,是网卡出厂时固化的。
类型: 帧协议类型字段有三种值,分别对应 IP(0800)、ARP(0806)、RARP(8035)。
CRC: 帧末尾校验码
3. MAC地址
MAC地址是用来识别数据链路层中相连的节点的。MAC地址在网卡出厂时就确定了,不能修改。虚拟机中的 MAC 不是真实的MAC地址,也有的网卡支持用户配置 MAC 地址。
格式:
长度 48 位(6 字节),一般用16进制数字加上冒号的形式表示,如:
08:00:27:03:fb:19
与 IP 地址相比,IP 地址描述着数据的起点和终点,目的 IP 地址不会改变(源 IP 因为 NAT 技术需要转换)。而 MAC 地址描述的是,数据传输的路上每一个区域的起点和终点,是会不断变化的。
4. 最大传输单元MTU
4.1 MTU
MTU(Maximum Transmission Unit,最大传输单元),是数据链路层协议中都有的,规定数据链路层报文可发送的最大数据(不包括报头),在以太网帧中, MTU 是 1500 字节。
一个局域网就是一个碰撞域,互联网处理数据碰撞的方式,是默认数据不会碰撞,等数据发生碰撞了再做碰撞避免算法。
如果主机A和主机B发生数据碰撞了,双方就要进行数据碰撞避免算法。
数据链路层十分接近硬件,所以数据帧发送的速度很快,但在同一时间里,只能有一个数据帧在发送,数据帧越大,占用局域网的时间就越长,发送数据碰撞的概率也就越大,所以数据链路层会需要有一个 MTU 来控制数据碰撞。
以太网帧除了有 MTU 1500 字节之外,还有一个 46 字节的最小数据长度。如果网络层对数据包分片,导致传输下来的报文没有 46 字节等情况,以太网帧就会对不足 46 字节的部分进行垃圾信息填充(一般填充二进制0)。在报文向上交付时,由于 IP 协议头的16位总长度没有包括这些垃圾信息,这些垃圾信息会被丢弃。
4.1 MTU 对 IP 协议的影响
IP 协议要对传输层发送过来的、加上自己报头的数据中,超过 MTU 的数据包分片,详细看 IP 协议文档。
4.2 MTU 对 UDP 协议的影响
如果 UDP 的携带的数据,在向下交付的过程中,超过了 MTU ,网络层协议就要对其进行分片,如果分片丢了任何一个,接收端网络层重组失败,就会丢包。但由于 UDP 协议没有任何重传机制,也没有任何应答机制,丢包只能在应用层重传。
4.3 MTU 对 TCP 协议的影响
TCP的一个数据包,会考虑数据链路层的 MTU的影响,TCP 的单个数据报的最大消息长度,称为 MSS (Max Segment Size)。
TCP 在建立连接的过程中,通信双方会进行 MSS 协商。双方在发送 SYN 的时候,会在 TCP 头部写入自己能支持的 MSS 值,双方收到对方的 MSS 值后,会选择较小的值最为最终 MSS 值。最理想的情况是,MSS 的值正好等于 IP 协议不会对其进行分片处理的最大长度。
MSS 的值就是在 TCP 首部的 40 字节变长选项中(kind=2)。
5. 交换机
交换机是一个局域网设备,工作在数据链路层。
一个局域网就是一个碰撞域,但是交换机可以将局域网的大碰撞域分成两个小的碰撞域,同一碰撞域内的主机互相发送数据不经过交换机转发;不同碰撞域的主机互相发送数据,经过交换机识别后转发数据。这样,一个局域网使用多个交换机,就能将碰撞域的数量增多,范围减小,减少数据碰撞的可能性。
主机A给主机B发送数据,不经过交换机主机B能直接收到。同时交换机也收到了主机A发送的数据,但是发现该数据是由
i0
碰撞域发给i0
碰撞域的主机的,于是就不会转发给i1
碰撞域。主机A给主机C发送数据,交换机收到主机A的数据,发现是
i0
碰撞域发给i1
这一侧的碰撞域的主机的,于是向i1
碰撞域转发数据,之后主机C收到数据。注意:同一碰撞域内数据是广播的,大家都会收到,但不一定响应。