一、数据链路层主要功能

 

1、提供了通讯过程中必须要使用的物理MAC地址 

 我们知道交换机工作在数据链路层,当两台PC同时连在一个交换机上时,这两个PC是可以互相通信的。PC1和PC2并没有直连,他们两个能够通信依靠的是交换机。交换机是如何进行转发的呢?交换机里有一张MAC地址表,可以在交换机中使用 display mac-address查看这个表。如下图所示。所以交换机就是完全根据这个表进行的数据帧的转发。

java怎么写交换机拓补图网页_java怎么写交换机拓补图网页

java怎么写交换机拓补图网页_数据_02

 

 

 2、负责数据链路的建立、维护与拆除

3、帧包装、帧传输、帧同步

4、利用FCS(frame check sum)帧校验序列和对数据帧进行差错检测恢复

5、流量控制,配合二层交换机运行的QoS来实现流量的控制。

 

二、什么是以太网

 

以太网其实就是局域网LAN,local area network,我们的以太网中其实有很多种网络拓扑连接类型,常见的有总线型、令牌环形、星型,如下图所示:

 

java怎么写交换机拓补图网页_数据链路层_03

 

 1、总线型 

总线型是在没有交换机之前所使用的的一种连接类型。中间这条总线是共享的,而且同一时间只能有一个人使用这条总线,如果此时123456都要发送数据,那么在1号机给5号发送数据时,3是不能够给4发送数据的。必须等1发送完,3号才能发送。所以必须是当中间这条链路没人使用时,别人才能使用。

java怎么写交换机拓补图网页_java怎么写交换机拓补图网页_04

  2、令牌环形

令牌环形的结构是大家连成一个圈,在这个环路当中有一个所谓的令牌,这个令牌不停的在这个环路中跑着,如果1号机想给5号机发送数据,那么1号机就得到这个令牌,得到之后1号机就有了发送数据的资格。令牌在这个环路上只有一张,也就意味着同一时刻依然只能有一台机器使用网络。但是令牌环形的优点是当发送数据时,我有12345、18765两条数据链路可以走,当一条链路损坏时,我还可以走另一条,相当于有一个备份的功能。缺点是不管是走哪条路,这个数据都能被别人看到,因为它需要别人帮它转发数据,要么被234看到,要么被876看到,从而数据就没有了私密性。

java怎么写交换机拓补图网页_单播_05

 

 3、星型

现在我们的网络当中,基本上所有的企业内网用的都是星型网络拓扑结构。星型结构中,中间是一个交换机,周围的8个主机都插在这一个交换机上,所以1给5传数据的话直接通过交换机就可以透传了,而且在1和5传的时候,是完全不影响3给7传数据的,也不影响4和8,因为走的是不同的线路,相当于每两个之间的数据传递是独立的,互不影响。所以星型结构中,机器可以同时使用网络,且不存在数据私密性问题,是当前企业、园区、家庭使用的网络结构。

java怎么写交换机拓补图网页_数据链路层_06

 

 

三、数据链路层作用

 

数据链路层会解决三个重要问题,我们以总线结构为例。

 

1、规避数据冲突

如果1想给4传数据,2想给3传,那么中间的共享链路给谁使用呢?怎么保证不产生冲突呢?

java怎么写交换机拓补图网页_单播_07

 

 

 

解决方案: 以太网中采用CSMA/CD算法来解决上述问题,避免信号冲突。

CSMA/CD :带冲突检测的载波监听多路访问。它的工作原理是发送数据前先监听信道是否空闲,若空闲则立即发送数据,边发送边继续监听,若监听到冲突,则立即停止发送,等待一段随机时间(称之为退避)以后,在重新尝试。有冲突时,退避是双方都进行退避,比如1等待的随机时间是10s,2等待的随机时间是15s,则这个时间结束之后1先发送数据。 在我们的以太网中,就是通过CSMA/CD这种算法来避免总线型结构发送冲突。但是我们可以发现这种算法虽然可以解决冲突,但是效率很低。

总结:在共享式的网络中,若多台主机同时想要发送数据,这条共享式的链路应该由谁使用?解决方案就是 CSMA/CD算法。

 

 

2、识别主机地址

如果主机1给4发送数据,那么对于主机4来讲,我怎么知道是谁发给我的呢? 所以问题就是在网络中如何区分网络设备呢?

java怎么写交换机拓补图网页_java怎么写交换机拓补图网页_08

 

 

在网络中每个主机应该给自己起个名,且这个名字不能冲突,才能够识别出各个机器。即在我们的网络当中每个计算机必须有一个自己的独立且唯一的标识,这个名字或者标识就是MAC地址。MAC地址具有全球唯一性,MAC地址一共有48bit,6个字节,前24bit是厂商标识,后24bit表示的就是自身MAC地址的唯一标识。

 

MAC地址的第八位要么是0,要么是1,若为0的话,表示这是一块单播地址网卡,若为1的话,表示这是一块组播地址网卡,那么什么是单播、组播呢?

在我们网络通信的过程中,一共有三种传递数据的方式:

单播:一对一通信。例如我一个人讲课,小A同学一个人听

广播:一对所有通信。一个人讲课,所有人听

组播:一对多通信。介乎于单播和广播之间。一个人讲课,一部分人听。

所以如果是单播地址网卡,只能单播传输;如果是组播网卡,它可以同时向多个地址发消息。

 

总结:在网络中如何区分网络设备呢?解决方案:每台设备都拥有一个独立且全球唯一的MAC地址,每一块网卡(物理网卡、虚拟网卡)都拥有一个独立的MAC地址。

 

 

 3、规范数据格式

如果主机1给4发信息,4想知道1的数据代表什么意思, 那么是不是需要有一个统一的数据格式和规范?这个格式是什么呢?

 

java怎么写交换机拓补图网页_java怎么写交换机拓补图网页_09

 

 

我们知道,在数据链路层对原始数据封装的时候,封装的是MAC头部,如果要我懂你的消息,你懂我的消息,那么在MAC头部中应该是一模一样的东西,MAC头部中都有哪些东西呢?

如下图所示,我们可以看到MAC头部中一共有三部分,分别是6字节的目的地址、6字节的源地址、2字节的类型/长度,目的地址就是我要到哪里去,源地址就是本机地址,类型/长度就是数据链路层和网络层之间的服务接入点。前边还有一个7字节的前导码和1字节的帧起始定界符,他们是什么呢?他们就是数据链路层和物理层的服务接入点。

 

 

java怎么写交换机拓补图网页_单播_10

 

 四、数据链路层分层

数据链路层又分为两个子层,分别是介质访问控制子层和逻辑链路控制子层:

 

 

java怎么写交换机拓补图网页_数据_11

java怎么写交换机拓补图网页_数据_12