根据TCP/IP协议,网络分4层,如图所示
可见在TCP/IP中,链路层的目的无非有3个:
(1)为IP模块发送和接收IP数据报
(2)为ARP模块发送ARP请求和接收ARP应答
(3)为RARP发送RARP请求和接收RARP应答
TCP/IP有多种链路层协议,如以太网链路层协议,SLIP和PPP,在这里我们主要用以太网链路协议说明链路层如何实现以上所说的三个目的
首先,以太网链路层接收来自IP层的IP数据报,并将IP数据报封装成以太网数据帧,以太网数据帧格式如图所示
上图是以太网协议封装的数据帧,其中数据代表IP数据报,目的地址代表下一站主机或路由器的MAC地址,此时目的地址字段为空(有关下一站,那是网络层IP选路决定的,参考我的另一篇文章点击打开链接),源地址代表本机的MAC地址,这2个地址都是48bit的硬件地址,类型代表IP数据报的类型,而CRC字段代表检验和,用于检验数据是否出错(但是链路层不负责纠错,那是传输层的工作)。这就是链路层的目的一:为IP模块发送和接收IP数据报
当链路层收到来自网络层的IP数据报并封装成帧,然后接下来自然就要将帧发送到下一站。那么问题来了,虽然根据IP选路机制得知下一站的IP地址,但是链路层的寻址机制是以48bit的MAC地址为标准的,想发送数据到指定IP地址的设备,必须得指定其MAC地址。假如下一站IP地址为140.252.1.1,但是数据帧不知道此IP地址对应接口的MAC地址,所以上图数据帧中目的地址字段此时为空。要如何获取此它的物理地址呢?那就需要用到ARP——>地址解析协议
链路层需要得知此IP对应的mac地址,有以下步骤
上图是以太网ARP请求或应答数据帧的格式
(1)链路层发送一份称作ARP请求的以太网数据帧给以太网上的每个主机(这个过程叫广播),ARP请求数据帧包含IP地址140.252.1.1,意思是“如果你是这个IP地址的拥有者,请回答你的MAC地址”
(2)当以太网中某主机链路层接收到这份广播的ARP请求数据帧,该主机提取数据帧中这个IP地址跟自己的IP地址比较,如果不同,那就将此数据帧舍弃,否则,该主机发送一个ARP应答数据帧(非广播),该数据帧包括该主机对应接口的MAC地址。
(3)当我们的机器收到ARP应答数据帧后,我们将ARP应答数据帧中的目的MAC地址提取出来填充加到上面说的链路层以太网数据帧中的目的地址中(之前目的地址为空),哈哈,那么就万事具备啦!
以上3个步骤就是链路层的目的二:为ARP模块发送ARP请求和接收ARP应答
接着得到IP地址为140.252.1.1MAC地址的以太网数据帧就就可以发送到下一站啦,哈哈!
诶,慢着,还没完呢,虽然数据时发送出去了,但是,链路层的目的不是有三个吗?而上面只是说了2个,是的,链路层还有一个目的:为RARP发送RARP请求和接收RARP应答
在这里说一下,具有本地磁盘的系统引导式,一般是从磁盘上的配置文件中读取自己的IP地址。但是,对应到就有无盘机,就需要用到RARP逆地址解析协议来获取自己的IP地址啦。和ARP协议相反,RARP协议知道本机器的MAC地址,通过发送RARP请求数据帧(广播),如果某个主机知道此MAC地址的IP地址,其链路层就会在接收到RARP请求数据帧后发送一个RARP应答数据帧,此数据帧包括无盘机的IP地址。这就是链路层的第三个目的:为RARP发送RARP请求和接收RARP应答
哈哈,就是这样,链路层就实现了它三个目的的使命!!