在网络中,主机与主机之间总是通过一个网线把各自的网卡对接起来,数据链路层的功能就是把一帧数据从当前主机(的某个网卡)传递到相连的下一个主机上(的某个网卡);

数据链路层为适应物理层采用的不同硬件,它支持多种协议,例如以太网、令牌环网、FDDI等,在我们日常使用过程中,以太网是最常见,也是TCP/IP采用的主要局域网技术,它采用CSMA/CD(带冲突检测的载波侦听多路介入)的媒体接入方法,速率为10Mb/s地址为48位(6字节)。

数据链路层的以太网(Ethernet)帧格式,如下图所示:

数据链路层的一些总结-编程知识网

以太网帧格式

上图以太网的帧格式中:

(1)            最前面6个字节为目的mac地址(即我们通常说的网卡地址),即这个报文即将发往的下个主机的网卡地址;

(2)            紧接着的6个字节为源mac地址,即本机的网卡(在一个主机有多个网卡时应该怎么办?);

(3)            再紧挨着是2字节的类型字段,以太网需要承载三种类型的报文:IP数据报(类型为:0X0800)、ARP请求/应答报文(类型为:0X0806)、RARP请求/应答报文(类型为:0X8035);

(4)            以太网帧中数据部分的大小为46~1500字节,即数据部分的最小长度也要为46字节,不足时要补充(补零)填够46位。

承载IP报文的帧分析

如下图为一个IP数据包的抓包,可以看到,其开始的6个字节b0 83 fe 9b d0 4d为目的mac地址,紧接着是6个字节b0 83fe 9b d9 06的源mac地址,再接下来的两个字节0800表示该帧中的数据为IP报文,再看起数据部分:从第0000行的45 00 开始到第0030行的f7fc 8e cd 00 00,总共40字节,小于以太网帧对数据段的最小值要求(46),因此还需要在最后补充6字节的0来凑够46个字节。

数据链路层的一些总结-编程知识网

承载ARP报文的帧分析

ARP协议主要完成IP地址到mac地址的解析,在每个主机中都有一个ARP缓存,下图为201服务器的arp缓存,其内容为:

发往***IP的帧在网卡***上,其mac地址为***

数据链路层的一些总结-编程知识网

ARP缓存的内容可以手动添加,也可以自动产生,其产生过程为:当主机有数据要发送时,首先查询本地缓存中是否有对应的ARP缓存项,如果没有,则发送一个ARP广播,该主机所在的局域网都会收到此广播,IP与本机匹配的主机会反馈消息“***IP在我这里”,在反馈数据帧中就包含应答主机的mac地址,本主机收到ARP的应答之后就把该IP和MAC地址添加到本地的ARP告诉缓存中。

如下图可以看到,ARP的请求报文中,目的mac地址为全1的广播地址;

数据链路层的一些总结-编程知识网

在获取到应答之后,ARP会将该IP和mac的对应关系存储到本地的ARP缓存中。

数据链路层的一些总结-编程知识网阅读世界,共赴山海423全民读书节,邀你共读