很多人认为,链路层解决局域网的通信问题,由于不同的局域网使用不同的技术,导致局域网之间不能互联。于是需要网络层建立一层统一的抽象层,抹去底层差异。
假设用一台路由器连接两个局域网,它们的链路层协议不同。那么路由器需要同时支持这两种链路层协议才可以。
问题来了:
1.以上理解有没有错误?
2.如果没错,链路层的技术是否具有多样性?很多的话路由器是否要实现一堆?
3.路由器怎么知道接入的局域网用的是什么技术?
针对以上问题,我们先来分析下物理层、数据链路层和网络层:
物理层—发送电信号或者光信号,数据链路层—帧封装,网络层—包封装。
1.在数据链路层,协商不同的协议,需要不同的方式。
因为这些帧头都会有个协商沟通过程,告知对端我们是什么样的数据封装方式调制解调。如双方需要一致的速率,双工模式,才能准确同步,之后才能成功交互信息。
帧中继的帧:
PPP帧:
在互联网起初,就是一种协议一种设备。占用量很大,后面大家为了节能减排,统一江湖,就将这些协议整合起来了。如三旺的接口设备,可以支持PPP,帧中继,X.25等链路协议。全网通用,只要打个命令可以告知路由器用什么链路协议发送了。
当然,数据链路层和网络层,最初并不是为了抹去差异而存在的。
需知,最早的网络,局限于大学实验室,它就是很小的,这个时候就已经有了诸多的数据链路层协议,它存在的意义是控制物理链路上的数据传输。因为物理链路上传输的是电信号光信号,一旦链路质量不稳定,就会影响上层的数据传输。
以你熟悉的路由器为例,路由器上的以太网接口的状态有两个——物理层状态和链路层状态,只有链路层协议通知路由器,"这条链路我试过了,可以用。"路由器才会激活这个接口,数据才能转发。可以说,设计数据链路层,本质上是因为物理链路上的电信号,光信号不可控,因而需要一种方式确保数据在物理链路上正确传输,始终是工作在一条链路的两端。
至于会有这么多不同的数据链路层标准和协议,是因为在很长漫长的发展过程中,有很多人和很多公司曾经参与其中,网络层并不是为了屏蔽差异而出现的,这只是一个无奈的结果而已。数据链路层工作在一条链路两端,交换机设备扩展了数据链路层的工作范围,但仍然有力所不能及的地方,数据链路层的诸多协议、标准,还是太底层了,碰到范围比较大的网络,或者多个网络互连,就不行了,比如,你根本不能想象两台主机直接通过无限扩展的数据链路层网络,跨越国家,大洋去通信,数据链路层只能照顾到物理链路两端,更远距离更大范围的网络,它无能为力。
网络层是为了更远距离的传输而出现的,先行者们最终把网络层设计为一个无状态的网络,在这之上叠加TCP/UDP来实现远距离,大范围的主机/应用之间的可靠或者快速通信抹去底层差异,只是个结果,而不是出发点。
2.如果现实中链路层的技术多样性,会导致路由器要实现一堆吗?
实际上,路由器本身就支持非常多的链路层协议,但随着时间的推移,市场的力量会淘汰掉大部分技术,只留下几个主流技术,比如以太网。尽管链路层多样性趋势化,但常见的路由器只管确保IP网络层的统一,下面的链路层协议,你想用哪个就哪个。因为OSI模型里面,数据不仅可以由下到上,也可以由上到下。如不用IP方式也可以实现,只要大家遵守相应的规则协议,一样可以向上向下传输数据,只是相当于再做一种新的OSI方案。
3.那路由器知道接入的是什么技术吗?
任何链路在激活之前,链路层协议都会有控制信令交互,符合协议规定的交互过程结束之后,路由器自然就知道数据链路层是什么。像一些指定数据链路层工作的路由器,是有相应的配置命令。毕竟这种东西不像MAC一样可以自动协商。实在不行,可以查询它的接口设备是什么类型的就可知道。
题外话:现在的网络技术基本都是管控MAC二层和IP层,但是在工业的网络上,如can总线,通过IP去控制,就需要相应的协议转换。这样的协议就是IP包进来,然后将IP包payload取出来,然后将payload换成CAN数据帧,再通过物理层发送出去,这样就完成单向的协议转换。反之也是可以的。