网络-数据链路层小结


数据链路的作用

1、封装成帧:在每个网络层数据报经链路传送之前,几乎所有的链路协议都要将其用链路层帧封装起来;
2、链路接入:媒体访问控制协议(MAC)协议规定了帧在链路上传输的规则;
3、可靠交付:链路层保证无差错的经链路层移动每个网路层数据帧;
4、差错检验和纠正
5、流程可画为如下:

这里写图片描述


MAC地址

1、MAC地址用于识别数据链路中互连的节点;数据一般都是先到目标所在的局域网,再通过查询mac地址来匹配到对应主机;
2、MAC地址全球唯一,任何一个网络的MAC地址都不会重复;
3、一个MAC地址长48比特,也就是6字节。

以太网帧格式

以太网帧本地的前端是以太网的首部,总共14个字节。分别是6字节的目标MAC地址,6字节的源MAC地址以及2个字节的上层协议类型,该字段以便把收到的MAC帧的数据上交给上一层的这个协议(包含IP,ARP,PARP);在帧头后紧跟着的是数据,数据字段所容纳的最大数据范围为46~1500字节,加上首尾,有效长度为64~1518字节(首部6+6+2,尾部4字节)。帧尾部是一个帧校验序列,长4个字节。

这里写图片描述

关于数据的大小,规定最小为46字节,最大为1500字节,ARP和RARP的数据包不够46字节,需要在后面补填充位;而1500又称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,若一个数据包从以太网发送到拨号链路上,数据包大小超过MTU,则需要对数据进行分片处理。
关于帧尾部的校验,可以检查帧是否有损坏。比如在传输过程中出现干扰,就可能影响发送数据导致乱码位的出现,此时就可通过FCS的值将受到噪声干扰的错误帧丢弃。

关于MAC帧中上层协议字段的作用,可参考下图:

这里写图片描述

以太网驱动程序首先根据MAC帧中的“上层协议”字段确定上层使用的到底是什么协议,然后再交给相应的协议处理。

地址解析协议ARP

作用:
在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧之前将目标主机的IP地址转换成目标主机的MAC地址的过程。ARP协议的基本功能就是通过目标主机的IP地址,查询目标主机的MAC地址,以保证通信的顺利进行。协议又称做服务,ARP协议也即ARP服务,提供把IP地址转换成MAC地址的服务!
每个主机都设有一个ARP告诉缓存,里面有所在的局域网中的各主机和路由器的IP地址到硬件地址的映射表;通过arp -a可查看,需要注意的是缓存表中的过期时间一般为20分钟,若20分钟内没有使用该表项, 则该表项失效。
发送数据流程:

场景一:源A和目的B节点均位于相同的网络中

为了发送数据报,该源必须向它的适配器不仅提供IP数据报,而且还有B的MAC地址;由于在ARP之前,只能在IP数据报中获得B的IP地址,通过ARP协议查看缓存表中是否有匹配到的B的MAC地址,如果有的话,发送适配器将构造一个包含目的地的MAC地址的链路层帧,并把该帧发送进局域网;
但是若A的ARP缓存表中没有匹配到B的MAC地址,则此时A端构造一个包含发送和接收IP地址及MAC地址的ARP查询分组,并且在链路层中封装该分组,用广播地址作为帧的目的地址,并将该帧传输进子网中。此时当前子网中的所有其他适配器收到,并判断自己所对应的IP地址是否与ARP分组中的目的IP地址匹配,与之匹配的节点发送回一个带有所希望映射的响应ARP分组。然后A更新自己的ARP表,并发送IP数据报。
需要注意的是:查询ARP报文是在广播帧中发送的,而响应ARP报文是在一个标准帧中发送!整个过程图示如下:

这里写图片描述


场景二:源和目的不在同一个子网

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