数据链路层和网络层的区别到底是什么?

如果ARP广播消息、Ping消息听说过,那么咱们就以它们为例来说明数据链路层与网络层的区别。

老王有两台电脑,A的电脑IP=10.1.1.2/24,B的电脑IP=10.1.1.3/24,两台电脑用网线直连。老王在电脑A上Ping 电脑B的IP,命令是:

Ping10.1.1.3

这条命令触发电脑A发出哪些报文呢?

ARP报文
首先,A光知道电脑B的IP地址(网络层地址)不能完成通信,还需要知道B的硬件MAC地址(数据链路层地址)才可以通信。

那A怎么才能获得B的MAC地址呢?
ARP广播啊。

于是A发出了ARP广播请求B的MAC地址,ARP广播报文直接封装在数据链路层里面,就上路了。

如果不解释什么是封装,估计这篇文章又要看不懂了。各位寄过包裹没有?封装(Encapsulation)的意思就是将需要快递的物品(ARP报文),装在一个包裹里。这个包裹有一个奇怪的名字,叫数据链路层。在以太网的环境下,这个数据链路层还有另外一个名字,叫以太网。因为以太网就是数据链路层的一个杰出代表。

这个ARP广播的快递包裹收件人填谁的呢?能填电脑B的MAC地址吧?
肯定不能啊,因为还不知道呢!如果知道了,又何必发这个ARP快递包裹?

没有关系,只要填收件人MAC地址 = FF.FF.FF.FF.FF就可以了,因为这个地址是一个广播地址,是专用的。发件人MAC地址 = A的MAC地址。

填完以上信息就完了?
还没有呢!

电脑B收到包裹如何知道里面是什么物品?
B将包裹拆开不就知道了?请记住收件方不是人,而是一台机器,而要让收件的机器知道里面的物品是啥,最最方便的方法就是在包裹的包装上写上物品的名称代码,比如0x0806,这个代码就代表ARP。

此外,为了防止快递物品在传输的过程中发生差错,还需要对发送的快递物品计算CRC校验码。收件的机器收到之后可以完成校验,只有校验合格的包裹才接收,否则拒收。

为何一定要在外包装上标注快递物品的名称?
网卡就相当于小区传达室的老王,整个小区的快递都送到他这里。如果快递外包装上不标注是几零几房间的,难道让老王去玩猜谜游戏?

快递的包装上明确写上了0x0806, 老王就知道这是806住户的物品。
如果老王检查外包装破损,也会直接拒收,这就是数据链路层的校验。

突然发现要这么写,写到明天太阳升起来也写不完,那么接下来就大体写写。

电脑A获得了B的MAC地址,接下来就可以发Ping包给B了。

这个Ping包被封装了两次,第一次封装:网络层封装,写上收件人IP地址(10.1.1.3),发件人IP地址(10.1.1.2)。

然后在网络层封装的外面,再添加一层数据链路层封装,封装的格式见上文。

然后快递包裹就离开了A,顺着网线到达B。电脑B的网卡将数据链路层封装撕掉,通知IP层来取走快递,这个快递现在只有网络层的封装了。

IP层收到之后,将网络层的外包装撕掉,将里面的Ping包提取出来进一步处理。处理完了就将自己的Ping包的回复,也是完成两次封装,然后离开B的网卡上路了。

问题来了,既然B有MAC地址(链路层地址),A也可以根据B的MAC地址找到B,为何还需要B的IP地址,才能发送Ping报文?
在这个实验里,A和B是网线直连,当然不需要IP(网络)地址,只需要链路层地址A和B就可以通信。

如果A和B不是网线直连,而是它们之间有路由器的存在,而路由器天然屏蔽ARP广播,A与B无法发现对方的MAC地址,它们如何通信呢?

退一步说,即使A、B知道对方的MAC地址,AB也无法只凭借MAC地址来通信。因为MAC地址通信需要一个前提,即通信双方在一个相同的物理链路上。A与B有路由器的天然隔离,不在一个链路上,所以无法只凭借MAC地址来通信。

AB怎么才能跨越不同的物理链路通信呢?
使用网路层(IP)地址就可以啊。这也是为何要发明IP地址的主要原因。

总结
数据链路层解决的是如何在一条链路上的通信问题(局部)
网络层解决的是如何跨越多条链路的通信问题(全局)

一件从上海发往北京的快递,先被转运到无锡、南京、徐州、济南、天津,最后到达北京。

网络层解决是最终要到达北京,至于细节不care。而链路层所要解决的是传输细节,只要把包裹发给下一个中转站就ok了。

来源:车小胖谈网络,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/125881

发表评论

登录后才能评论
侵权联系
返回顶部