数据链路层

一、定义

链路层是什么?

就是我们平时接触的网卡和网卡的驱动程序。网卡是数据的入口和出口,数据传递的本质就是从一个网卡传递到另一个网卡。每个网卡上都有一个特定的地址,即硬件地址,也叫MAC地址。

链路层主要有三个目的:

1. 发送和接收IP数据包;
2. 为ARP协议发送ARP请求和接收ARP应答;
3. 为RARP发送RARP请求和RARP应答;


设计数据链路层的原因:
1、在原始的物理线路上传输数据信号是有差错的。
2、设计数据链路层的主要目的就是在原始的、有差错的物理传输线路的基础上,采取差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,向网络层提供高质量的服务。
3、使得数据是透明传输的,物理层无需负责差错控制等等,只负责传输,IP层只需要把数据下发即可。

二、MAC地址

为了使传输中发生差错后只将有错的有限数据进行重发,数据链路层将比特流组合成以帧为单位传送。每个帧除了要传送的数据外,还包括校验码,以使接收方能发现传输中的差错。帧格式一般是采用48bit的目的地址和原地址,就是所谓的MAC地址,它格式类似这样0f:00:11:0d:01:12。
MAC地址被分配给所有进行网络传送的设备上,计算机,路由器,交换机等等,他是全球唯一的,地址是由供应商代码和序列号组成。其中前24位二进制代表,该供应商代码,剩下的24位由厂商自己分配。例如华为设备的MAC的前24位就是00.e0.fc

如果48为全是1,就代表是广播地址;
如果第8位是1,则代表是组播地址:

三、以太网帧

链路层数据的传输格式是以太网帧,帧格式包括目的地址,原地址,帧长度,数据段以及CRC字段。

在以太网通信中,真正进行数据通信的是数据链路层的以太网帧的转发,IP地址只是一个虚拟的地址,是为了扩大二层网络规模而定义的,网络层是将不同的二层网络(也可以说是局域网)链接起来。
以太网帧的传送会根据MAC地址进行转发,而在链路层,以太网交换机就负责对报文的转发,即根据报文的目的MAC地址将报文输出到相应的端口。
MAC地址的转发MAC地址转发还分为同一网段转发和不同网段转发。现在分别说一下。

1、同一网段转发

我用eNSP做的仿真:

从PC1(10.13.0.3) ping PC2(10.13.0.8)。

对于PC2的IP,首先要进行一个逻辑与运算,得到该地址是同一网段的地址。这里要清楚一点,PC1在发送数据包之前必须要得到目的MAC,那怎么获得呢? 看看抓包结果:

首先PC1先发送一个ARP广播请求(Who has 10.13.0.8 Tell 10.13.0.3) ,其目的IP地址是PC2的,目的MAC是广播MAC地址,当交换机收到这个ARP请求时,会查看MAC地址表是否存在目的IP的MAC地址,如果没有,该请求会发送给所有端口下的主机。此外交换机也会在MAC地址表中更新该端口的PC1的MAC地址。

当主机发现目的IP不是自己,就丢弃该帧。PC2收到后会构造一个ARP回应包,回过去,交换机又更新了MAC地址表,这就是交换机的MAC地址自学习功能。
这个过程之后,PC1拿到了目的MAC地址,然后构造成完整的以太网帧发送出去。

以后就可以基于这个MAC地址表从单一端口转发了。

上面说的MAC地址表包括:

1、目的MAC地址
2、端口所属的VLAN ID
3、转发端口号。

2、不同网段转发

当要转发到不同网段的主机时,就要经过路由器了。其实和同一网段的原理是差不多的。

从PC1 ping PC4

主机PC1在准备发向主机PC4的数据中,封装好自己的IP地址和MAC地址,同时也封装好目标主机PC4的IP地址,数据包封装到这里,主机A就利用上面得到同网段目标主机的方法去请求得到网关的MAC地址,同样也是用ARP去广播,网关收到这个ARP请求并能正确回应给主机PC1,这时主机PC1在数据包中封装好自己的IP地址和MAC地址,同时也封装好目标主机PC4的IP地址和网关的MAC地址,把数据包从网卡发出去,因为目标MAC是网关的,所以网关收到这个数据包后,发现目标MAC是自己,而目标IP却是别人,所以它不可以再往上打开这个数据包,它要做的工作就是把这些数据包发给下一跳路由器,让路由器把这些数据包正确传输到远程目标网络,到达远程网络后,它们的网关再将数据包发给数据包中的目标IP,从而真正结束不同网络之间的通信,回应的数据包也是用同样的方法到达目的地,在这里,还需要注意的是,当网关把数据包发给下一跳路由器时,这个数据包必须由网关把目标MAC改成下一跳路由器的MAC地址(通过ARP得到),否则下一跳路由器收到目标MAC不是自己的数据包,会丢弃不予理睬,下一跳路由器再发给下一跳路由器同样要把目标MAC地址改为下一跳路由器的MAC地址再发出去!

在整个过程中,源IP和目的IP都是一直不变的,而源和目的MAC地址都是不断在变化的。

在链路层有一个比较重要的术语就是MTU。
MTU规定了最大的传输单元,以太网和802.3的最大值分别为1500,1492.如果IP层要传的数据长度大于MTU,那么IP层负责对数据进行分片。

如果从一个主机到另一个主机通过不同的网络,那么经历所有MTU中的最小值就叫路径MTU。


帧的传输遵循载波监听多点接入/碰撞检测CSMA/CD机制,它是一种防数据冲突的机制。

当传送帧时会经历如下过程:

第一步,先听后发(每个站在发送数据前先要检测一下总线上是否有其他计算机在发送数据);
第二步,边听边发(每个站在发送数据时要检查是否发送碰撞)
第三步,冲突停止(当发生碰撞时候双方要立马停止发送数据,并发送人为干扰信号)
第四步,随机重发(然后依据退避算法重新发送数据)

VLAN的学习

定义:

VLAN(Virtual Local Area Network)即虚拟局域网,是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的技术。

作用:

划分Vlan的主要作用是隔离广播域。
因为主机可能会频繁地接收来自同一个局域网内的主机,这样本身对主机来讲就是一种负担。经常会发广播消息的包括ARP请求,RIP协议,DHCP等等。如果整个网络只有一个广播域,那么广播消息就会发送所有的主机。而这也就是VLAN的作用,VLAN会划分出多个广播域,不同VLAN的广播消息相互不干扰。如我们在MAC地址看到的仿真图,如果不配置VLAN,交换机收到请求后会转发给所有端口,而设置VLAN后只会发给特定的端口。

VLAN的划分:

  1. 根据端口划分: 基于端口的VLAN
  2. 根据MAC划分: 基于MAC的VLAN
  3. 根据IP进行划分: 基于IP子网的VLAN
  4. 根据协议划分: 基于协议的VLAN
  5. 根据几种划分依据组合进行划分: 基于策略的VLAN

我们这里就说下基于端口的VLAN。基于端口的VLAN很好理解,就是将不同的VLAN分配给不同的端口。用仿真器做一遍:

在未划分VLAN前,三台主机相互ping都可以ping通。
现在将PC1,PC2划分到VLAN1(默认的),CLIENT6划分到VLAN3.在划分VLAN后,PC1想ping CLIENT6是ping不通的,提示目的不可达。即使他们位于同一网段,但已经做了隔离。

一般情况下,vlan3下的一般都是公司的服务器或者比较重要的计算机。

那么不通VLAN该如何通信呢,这就需要路由器,后续会继续深入学习网络层的。

--------EOF---------
微信分享/微信扫码阅读