前言
前面已经写了好几篇的技术文章了,天天肝到凌晨两三点,在室友看来我就成了神仙,睡的晚,还起得贼早。言归正传,不知不觉就来到了网络层,这在计算机网络模型中算是底层的了,学好这部分的知识对我们后面的学习有着举足轻重的作用。
先把这篇文章的结构图奉上:
以太网帧
数据链路层接收来自网络层的IP数据报,通过一定的封装,让IP数据报能在数据链路层上传输。像这样,装好了的IP数据报,我们称之为以太网帧,也叫MAC帧。MAC帧由以下几个重要的部分组成:
-
目的MAC地址:MAC帧的目的地址占据6个字节,它标志了目标主机的地址。
-
源MAC地址:和目的地址一样,源地址也占据6个字节,它标志的源主机的地址。
-
类型:类型占据2个字节,它记录上层使用的协议0X0800表示IP协议。
-
数据部分:数据部分自然是来自上层的IP数据报。
-
FCS:FCS占据4个字节,它是用来进行差错检测的,如果一个MAC帧发生了错误,则不能发送到目的主机上。
差错检测
为什么要进行差错检测?
现实的通信链路都不会是理想的。这就是说,比特在传输的过程中可能会产生差错:1可能会变成0,0可能会变成1,这就叫做比特差错。在一段是时间内,传输错误的比特占所传输比特总数的比率成为误码率BER(Bit Error Rate)。误码率与信噪比有很大的关系,在实际通信中不可能使误码率下降到零。 因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
MAC帧在传播的过程中会产生差错,差错的产生是不可避免的。前面在以太网帧部分我们提到过差错检测序列FCS,根据FCS我们就可以知道这个MAC帧在传输的过程中是否出现了错误或者丢失。
后面讲到传输层的时候我们也会提到差错检测,那么这两者到底有啥区别了?总结起来,可以用一句话概括:
- 数据链路层的差错检测的目的是做到"无比特差错"。
- 传输层的差错检测的目的是做到"无传输差错"。即弥补帧丢失、帧重复、帧失序。
差错检测的方法主要有两种:奇偶校验法(PCC)和循环冗余校验CRC,PCC非常简单,不是这篇文章的重点,下面主要讲一下CRC循环冗余校验。
循环冗余校验是一种根据传输或保存的数据而产生固定位数校验码的方法,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收端进行检验确定数据是否发生变化。
通过CRC,我们可以计算出FCS冗余校验码,FCS位于MAC帧的尾部。通过FCS,我们就可以知道这个MAC帧是否发送了错误。
适配器
说到适配器,其实完全可联想一下生活中的适配器。比如我们给手机充电的时候需要有电源适配器,电源适配器无非就是转换的作用,或者作为一个载体,实现能量的转移。实际上,电脑里的适配器也是一样。结合下面这张图来理解:
我们都知道,数据在外部媒介中的传输方式是串行传输,然而计算机处理内部指令的时候,用的是并行的方式。怎样把串行传输的数据转换成并行传输呢?这就需要适配器了。适配器就像是起到了桥梁的作用,通过它,就可以轻松实现数据传输方式的转换。
CAM表
我们都知道交换机,交换机是一种多端口的网桥,在数据链路层使用MAC地址转发数据。在交换机类不实际存储以一张表,叫做CAM表。这张表记录了主机的MAC地址以及对应的接口,看看下面的这张图:
有三台主机A,B,C和交换机连接在一起,最开始,CAM里没有存储任何信息。
突然有一天,主机A(源MAC)想要给主机B(目的MAC)发送消息。这个时候,交换机就会检查自己的CAM表里是否存储了主机A的信息,交换机一看没有A的信息,就把A的信息写进自己的CAM表里。现在,交换机的CAM表变成了这样:
这个时候,交换机的CAM表里已经存储了主机A的信息,但是主机A却想要给主机B发送信息。这可怎么办呢?首先,交换机会检查自己的CAM表里是否存在B的信息,如果存在,就直接把信息转发给B。如果不存在,那又怎么办呢?犹豫了一下,交换机又有了一个想法,它把主机A发给主机B的消息以广播的形式发给了所有连在它身上的主机。主机C也收到了这条消息,但是主机C检查了一下目的地址,不是发给自己的,就果断丢弃了这条消息。主机B收到了这条消息后,同样也检查了收件人(目的地址),发现是给自己的消息,于是就收下了这条消息。之后,交换机就更新了自己的CAM表,上面增加了一条信息:
就这样,CAM表里存储了主机A,和主机B的信息。下一次,主机A想要给主机B发送信息的时候,交换机就不需要广播了。
CSMA/CD协议
前一篇文章讲到过计算机网络结构,这里讲CSMA/CD协议需要知道计算机网络的总线结构,不清楚的朋友可以先去看看:走进计算机网络:物理层
到目前为止CSMA/CD的使用已经相当少了,它的使用有两个前提:
- 使用的是有线网络
- 应用在10M/100M的半双工有线网络中
使用CSMA/CD协议的的网络有以下三个特点:
- 该网络是总线结构,所有的计算机接在同一总线上,同一时间内,只允许一台计算机发送(或接收)消息,也就是采用半双工通信。
- 载波监听:在发送前、发送中都要不停地对信道进行监听,只有在信道是空闲的时候才能发送消息。
- 碰撞检测:主机会在发送消息前,发信息的过程中不断对进行信道检测,如果有两台主机同时发送消息,则消息传输立即停止。随机等待一段时间再进行发送消息,这就是退避算法。
补充一下退避算法的特点:
- 非坚持的CSMA:线路忙,则等待一段时间,再监听;不忙时,立即发送;减少冲突,信道利用率降低
- 1坚持的CSMA:线路忙,继续侦听;不忙时,立即发送;信道利用率提高,冲突增大。
- P坚持的CSMA:线路忙,继续侦听;不忙时,根据p概率进行发送,另外的1-p概率为继续侦听(p是一个指定概率值)。