目录
? ? ? ? 本文主要讲解数据链路层相关协议,以及数据链路层所承担的主要任务;
? ? ? ? 数据链路层中最常见的协议就是以太网,除此以外还有令牌环网、无线LAN等;我们前面讲过,网络层与传输层处于我们操作系统中,而数据链路层处于计算机体系结构中的驱动层;我们不管是Linux、Window或是MacOs中的网络层与传输层都是大同小异的,而我们数据链路层却又很大的区别;本文主要讲解以太网这种协议及格式;
? ? ? ? 以太网帧格式设计的十分简单,如下图所示;
目的地址:目的主机的Mac地址
源地址:本主机的Mac地址
类型:若数据为IP报文,则该字段填入0x0800 即可
CRC:CRC为检验校验码,检测数据是否有异常
? ? ? ? 假设现需将主机A某个数据送到主机B,数据帧中地址变化如下图所示;
????????不难看出,在每次转发过程中,IP地址没有发生任何改变,而我们的Mac地址一直都在改变,IP地址始终为通信起点与终点两台主机上的IP地址;而Mac地址为每次转发中,发送方与接收方的Mac地址;
????????以太网通信的原理是在同一个局域网中进行广播;如下所示,有四台主机分别为A、B、C、D与一台路由器R;
????????假设主机A想给给C发送一条信息,那么整个流程到数据链路层应该是如何进行的呢?
首先主机A将要发送的数据进行封装,封装成Mac帧,如下所示;
? ? ? ? 我们将上述数据帧发送到局域网中,此时我们的BCDR都收到了来自A的数据帧,可是它们拿到数据帧后,发现目的地址上的地址并不是自己,因此它们将这个数据帧丢弃掉了;而当我们的C主机收到了数据帧后,发现目的地址正是自己的Mac地址,因此将数据帧进行解包,交付给上层的IP协议;
????????在数据链路中,除了上述的以太网帧协议以外,还以一个ARP协议,也称 地址解析协议(Address Resolution Protocol),该协议主要将IP地址转换成对应的Mac地址;
? ? ? ? 在上述我们讲述以太网原理时,实际上有一个Bug,我们一开始封装Mac帧,想要发送给对方时,是如何得知对端Mac地址的呢?这个工作就由我们的ARP协议来完成;
? ? ? ? ARP协议格式如下图所示;
????????前三个字段与以太网格式前三个字段一摸一样,值得注意的是第三个字段若填0x0800则表示使用以太网协议,数据字段为IP数据报,而若该字段填0x0806则表示使用的是ARP协议;
硬件类型:指链路层网络类型,1表示以太网;
协议类型:指要转化的IP地址类型,0x0800为IP地址;
硬件地址长度:对于以太网地址大小为6字节;
协议地址长度:对于IP地址大小为4字节;
op:1表示ARP请求,2表示ARP应答;
????????后面四个字段如字段名所示;其中需要注意的是有两个以太网目的地址,我们可将其理解成如下所示;
????????前三个字段为以太网协议字段,因此第一个以太网目的地址为以太网协议中的,而第二个以太网目的协议属于ARP协议的;
? ? ? ? 如下所示,有四台主机分别为A、B、C、D与一台路由器R;
????????假设我们A主机只知道C主机的IP地址,想要通过ARP协议知道主机C的Mac地址,首先A主机填写ARP协议报头字段,如下所示;
????????我们将以太网目的地址都填为全F,表示广播,当该数据帧发送出去后,BCDR都收到了该数据帧,并发现第一个字段中的以太网目的地址为全F,代表广播,于是都接收了该数据帧,接着去掉以太网协议报头,依旧是前三个字段,并根据帧类型字段将剩下的交给ARP协议,然后我们首先看选项为1,表示该数据帧为ARP请求,接着我们在看目的IP地址,BDR发现并不是自己,因此会将这个数据帧抛弃,主机C发现这个目的IP地址正是自己的IP地址,因此记录下对端的IP与对端Mac地址,准备发送一个ARP应答;填充字段后格式如下;
? ? ? ? 当主机C将该数据帧发到局域网中,ABDR都收到了该数据帧,不过在发现以太网目的地址并不是自己后将该数据帧丢弃,只有主机A收到该数据帧后将数据帧保留下来,交付给上层的ARP协议,ARP协议首先看OP字段,发现是一个应答数据帧,因此直接将对端的IP与Mac地址的映射记录下来;此时ARP协议完成,得到了对端的Mac地址;
在上述两次丢弃数据帧,两次丢弃一样吗?
? ? ? ? 不一样,第一次接收方丢弃是在ARP协议层丢弃,这时因为IP地址并不是自己的IP地址,第二次丢弃是在以太网协议层丢弃,是因为数据帧接收的地址并不是自己;
一个局域网中的主机数变多了以后为什么网络会卡顿?
? ? ? ? 实际上,一个局域网上有多台主机时,每台主机都可能想要发送数据,当数据在局域网上传播也就是通过光电信号传播,若同一个时刻有多台主机发送数据,这些数据会发生碰撞,使数据发生错误,这时会引起网络卡顿;