数据链路层解决的是,在一个局域网内(或者说,大家用的同一种协议相互连通),两台计算机之间的数据能够无比特差错的传输
同样,考虑这样一个问题,为什么要有网络层,网络层也是使两台计算机之间的数据能够传输,这个事情。网络层干的事情是 连接异构网络,屏蔽底层细节 ,让上层看起来不同异构网络是一样的,在这个基础上,使不同网络上的设备间的数据传递是正确的。而数据链路层只能处理本地局域网上的数据传送,保证局域网的数据传递是正确的。虽然逻辑上能够将全世界互联网改造成同一个局域网,但是这是不经济且低效的做法(如果中间设备不知道硬件地址在各接口,中间设备就会进行广播,降低信道利用率),因此解耦,划分为网络的网络,就很有必要。因此需要网络层
这个问题就像分班一样。A,B班,共有一个老师C,现在A班的学习委员A_0拿到一堆作业本,在A班里面发下去,最开始的时候,互相不认识,就在讲台上喊,这是同学A_1的作业本,这时候全班人都可以听见,但是只有A_1本人才会对这个消息进行处理,上台领取作业本,而其他人则是滤过。到了下一次发作业,学习委员这时候认识A_1了,这时候也不喊了,就之间把本子交给A_1,这儿就类似于数据链路层的通信。
再一次发作业,这时候夹了一本B班同学B_1的作业。如果说,本子上没有班级这个信息,A_0在发作业的时候发现不认识这个人,于是在A班里面喊,这是同学B_1的作业。结果就是A班里面的同学无人会接受这个信息。但是好在作业本上写了班级,B班这时候,A知道这不是我们班的,就把本子交给老师C,老师C一看,这是B班的就跑到B班去,把作业给了B_1。在这里,班级信息起的就类似于IP的作用,而姓名则是MAC地址。老师就像是在网络层起作用的路由器,而A_0则是数据的发送者,作业则是要发的数据。
虽然A,B两个班,学的都是同样的内容,相互之间数据传递也可以做到,但是把A,B班的那面墙给敲掉,二班合一班这显然是不理智的,不方便管理,信息的传递也低效(A_0要是记不得两个班的同学,那他再发信息,这时候就会广播)。因此解耦两个班,这才是合理的。