概述
链路层概述
提出问题
- 分组是如何通过构成端到端通信路径的各段链路的。
- 为了在单端链路上传输,网络层的数据报是怎样被封装进链路层帧的呢?
- 沿此通信路径,不同的链路能够采用不同的链路层协议吗?
- 在广播链路中传输碰撞是如何解决的?
- 链路层存在编码吗?如果需要,链路层编址如何与网络层编址一起运行呢?
概述
是什么
理解链路层与网络层的关联:
考虑一个旅行社计划为旅客开辟从普林斯顿到瑞士洛桑的旅游路线。旅行社认为对游客最便利的方式:
- 普林斯顿 -> 轿车 -> JFK机场。
- JFK机场 -> 飞机 -> 日内瓦机场。
- 日内瓦机场 -> 火车 -> 洛桑火车站。
在整个过程中,每一段都是在相邻的两个地点间直达。而在每一段路途当中,可用使用完全不同的运输方式。尽管运输方式不同,但是都提供了从一个地点运输到相邻地点的基本服务。
- 链路层:游客 -> 数据报。运输区段 -> 一条链路。运输方式 -> 链路层协议。
- 路由器:旅行社 -> 路由选择协议。
分类
链路层当中存在两种截然不同的链路层信道:
- 广播信道。用于连接有线局域网、卫星王和混合光纤同轴电缆接入网中的多台主机。
- 因为许多主机与相同的广播信道连接,需要所谓的媒体访问协议来协调帧传输。
- 某些场合中可用中心控制器来协调传输。
- 点对点通信链路。在长距离链路中连接的两台路由器间,或用户办公室与他们所连接的临近以太网交换机等场合。
- PPP协议,适用从经电话线拨号服务到经光纤链路的高速点对点帧传输。
- HDLC协议。高级数据链路控制。
应用
适用性
应用场景
基础
- 节点:运行链路层协议的任何设备。包含主机、路由器、交换机、Wifi接入点。
- 链路:沿着通信路径相连接相邻节点的通信信道。
为了将一个数据包从源主机传输到目的主机,数据包必须通过沿端到端路径上的各段链路传输。
链路层提供的服务
尽管任一链路层的基本服务都是讲数据报从单一通信链路从一个节点移动到相邻结点,但是所提供的服务细节能够随着链路层协议的不同而变化。其提供的可能服务包括:
- 成帧:在每个网络层数据报经过链路传送前,几乎所有的链路层协议都要将其用链路层帧封装起来。
- 一个帧由一个数据字段和若干首部字段组成,其中网络层数据包就插在数据字段中。
- 帧的结构由链路层协议规定。
- 链路接入:MAC(媒体访问控制)协议规定了帧在链路上传输的规则。
- 对于点对点传输,MAC协议比较简单,即无论何时链路空闲,发送方都能发送帧。
- 当多个结点共享单个广播链路时,即多路访问问题。MAC协议用于协调多个结点和帧的传输。
- 可靠接入:当链路层协议提供可靠交付服务时,它保证无差错地经过链路层移动每个网络层数据包。
- 链路层的可靠交付服务通常时通过确认和重传取得的,通常用于易于产生高差错率的链路,例如无线连接。但对于其他情况是一种不必要的开销。
- 差错检测和纠正:当帧中的一个比特作为1传输时,接收方结点 中的链路层硬件可能不正确地将其判断为0。
- 其是由于信号衰减与电磁噪声造成的。
- 通过让发送结点在帧中包括差错检测比特,让接收结点进行差错检测来完成,基于硬件实现。
- 差错纠正不仅能够检测,而且能够准确地确定帧中的差错出现的位置,并进行纠正。
链路层在何处实现
链路层是实现在路由器的线卡考虑一个端系统:
- 主机的链路层是用硬件还是软件实现的?
- 是实现在一块单独的卡上还是一个芯片上?
- 怎样与主机的硬件和OS组件的其他部分接口的呢?
- 链路层的主体部分是在网络适配器中实现的,有时候也称为网络接口卡(NIC)。
- 位于网络适配器核心的是链路层控制器,该控制器通常是一个实现了许多链路层服务(成帧、链路接入、差错检测等)的专用芯片。因此链路层控制器的很多功能都是用硬件实现的。
处理流程:
- 在发送端,控制权取得了由协议栈较高层生成并存储在主机内存中的数据包,在链路层帧中封装该数据报,然后遵循链路接入协议讲该帧传进通信链路中。
- 在接收端,控制器抽出网络层数据报,如果链路层执行差错检测,则需要发送控制器在该帧的首部设置差错检测比特,由接收控制权执行差错检测。
链路层的组成:
- 尽管大部分的链路层运行于硬件,但是部分还是在主机CPU上的软件中实现的,链路层的软件组件实现了高层链路层功能。
- 例如组装链路层寻址信息和激活控制权硬件,相应控制权中断,处理差错条件和数据包上传给网络层。
差错检测和纠正技术
多路访问链路和协议
广播链路可用让多个发送和接收结点都连接到相同的、单一的、共享的广播信道。
广播是因为当任何一个结点传输一个帧时,信道广播该帧,每个其他结点都收到一个副本。以太网与无线局域网时广播链路层技术的例子。
多路访问问题:如何协调多个发送和接收结点对一个共享广播信道的访问。
对于广播信道的类比,以教室为例,老师与同学们共享相同的、单一的广播媒体,其中心问题是确定谁以及在什么时候获得说话的权力,即向信道传输:
- 给每个人一个讲话的机会。
- 该你讲话时,你才讲话。
- 不要一个人独占整个谈话。
- 如果有问题请举手。
- 当有人讲话时不要打断。
- 当其他人讲话时不要睡觉。
计算机的多路访问协议与其类似。
- 因为所有的结点都能传输帧,因此多个结点可能同时传输帧,此时所有结点同时接到多个帧,即传输的帧在所有的接收方处碰撞了。
- 通常在碰撞发生时,没有一个接收结点能够有效地获得任何传输的帧。在某种意义上,碰撞的信号纠缠在一起,因此涉及此次碰撞的所有帧都丢失了,并且浪费了大量的时间。
概述
是什么
多路访问协议应该具有以下所希望的特性:
- 当仅有一个结点有数据发送时,该结点具有R bps的吞吐量。
- 当有M个结点要发送数据时,每个结点平均吞吐量为R/M bps。
- 协议是分散的,就是说不会因某主节点故障而使整个系统崩溃。
- 协议是简单的,使实现不昂贵。
分类
多路访问协议可划分为3种类型:
- 信道划分协议。
- 随机接入协议。
- 轮流协议。
信道划分协议
TDM和FDM是两种能够用于在所有共享信道结点间划分广播信道宽带的技术。
TDM将时分划分为时间帧,并进一步划分每个时间帧为N个时隙,然后将每个时隙分配给N个结点中的一个。无论何时某个结点在有分组要发送的时候,它在循环的TDM帧中指派给它的实习内传输分组比特。
类比得:
- TDM允许每个人在固定的时间段发言。
- 然后再允许另一个人发言同样时长。以此类推,一旦每个人都有了说话机会,将不断重复这种模式。
TDM消除了碰撞而且非常公平,但是它限制了结点传输速率,并且它需要总是等待传输序列中的轮次。
FDM将R bps信道划分为不同的频段,每个频段(频道具有R/N带宽),并把每个频率分配给N个结点中的一个。
随机接入协议
轮流协议
交换局域网
在如下场景中:
交换机运行在链路层,它们交换链路层帧,因此无法识别网络层地址,不使用如RIP或OSPF等路由选择算法来确定通过第2层交换机无论的路径。
实际上它们使用链路层地址而不是IP地址来转发链路层帧通过交换机网络。
链路层寻址与ARP
主机与路由器具有相同的链路层地址。地址解析协议ARP提供了将IP地址转换为链路层地址的机制。
链路层地址可称为LAN地址、物理地址或MAC地址。
链路层寻址
MAC地址
事实上拥有链路层地址的是它们的适配器,即网络接口。而链路层交换机并不具有与它们的接口(这些接口时与主机和路由器相连的)相关联的链路层地址。
这是因为链路层交换机的任务时在主机与路由器间承载数据报,而交换机透明地执行该项任务,即主机或路由器不必明确地将帧寻址到其间的交换机。
对于大部分局域网,MAC地址为6字节,即2^48^个可能的MAC地址,且使用16进制,尽管MAC地址被设计为永久的,但用软件改变一块适配器的MAC地址其实是可能的。
没有两块适配器具有相同的MAC地址,IEEE在管理着MAC的地址,IEEE分配适配器的前24比特,公司分配后24比特。
MAC地址结构
MAC地址具有扁平结构,且不论适配器到哪里用都不会变化,带有以太网接口的便携机总是具有相同的MAC地址。
对应IP具有层次结构(一个主机部分与一个网络部分),即当主机移动,IP地址需要改变。
MAC寻址
当某适配器需要向某些目的适配器发送一个帧,发送适配器将目的适配器的MAC地址插入到该帧中,并将该帧发送到局域网上。一台交换机偶尔将一个入帧广播到它的所有接口,因此一块适配器可用接收一个并非向它寻址的帧。
这样当适配器接收到一个帧,若MAC地址匹配则提取出封装的数据向上传递。否则丢弃该帧。
有时某发送适配器的确需要让局域网上所有其他适配器来接收并处理它打算发送的帧,此时发送适配器在该帧的目的地址字段插入一个特殊的MAC广播地址。对于6字节局域网,广播地址是FF-FF-FF-FF-FF-FF。
地址解析协议ARP
因为存在IP地址与MAC地址,因此需要在它们间进行转换。
假设交换机广播所有帧,即无论何时交换机在一个接口接收一个帧,它将在其所有接口上转发该帧。
假设IP地址末尾为220的主机要向末尾为222的主机发送IP数据报。由于源与目的均位于相同的子网中,为了发送数据报,该源必须要向它的适配器不仅提供IP数据报还要提供MAC地址,然后发送适配器将构造一个包含目的地的MAC地址的链路层帧。
则问题为如何确定IP222主机的MAC地址。发送端主机的ARP模块将取在相同局域网上的任何IP地址作为输入,返回相应的MAC地址。
ARP负责在同一个子网上的主机和路由器接口解析IP地址。
ARP实现
每台主机或路由器在其内存中具有一个ARP表,这张表包含IP地址到MAC地址的映射关系。
ARP表包含一个寿命值TTL,指示了从表中删除每个映射的时间,表中不必为该子网中的每台主机和路由器都包含一个表项,某些可能从来没有进入过表,某些可能已经过期,过期一般20分钟。
则如果ARP表不存在目的IP的MAC地址:
- 发送方构造一个称为ARP分组的特殊分组,分组当中有发送和接收方的IP地址与MAC地址。ARP查询分组和响应分组都具有相同的格式。
- ARP查询分组的目的是询问子网上的所有其他主机和路由器,以确定对应于要解析的IP地址的那个MAC地址。
- 然后发送方更新自己的ARP表。
其存在两个事情:
- 查询ARP报文是在广播帧中发送的,响应ARP是在一个标准帧中。ARP是即插即用的,不需要系统管理员配置。
- ARP是跨越网络层于链路层的协议。它封装在链路层帧,但是也包含网络层协议。
发送数据到子网外
一个路由器对它的每个接口都有一个IP地址,对路由器的每个接口也有一个ARP模块和一个适配器。因此在上图的路由器存在两个IP地址、两个ARP、两个适配器(两个MAC地址)。
当111向222发送一个IP数据报,它需要向它的适配器传递数据报,并且需要为适配器指定一个适当的MAC地址。
- 但是由于在两个子网中,因此无法获得目标主机的MAC地址。
- 因此我们从图中可看到,最适合的地址是110的MAC地址。
- 发送端使用ARP,试图寻址到222,然后110看到自己的路由表当中,存在222,因此链路层帧是向它寻址的。
- 路由器负责查找转发表,来讲数据报转发到另一个子网当中。
以太网
链路层交换机
交换机的任务是接收入链路层帧并将它们转发到出链路,我们将看到交换机自身对于子网中的主机和路由器是透明的。
某主机向另一个主机寻址一个帧,顺利地将该帧发送进局域网,并不知道某交换机将会接收该帧并将它转发给另一个结点。
帧到达交换机的任意输出接口之一的速率可能会暂时超过该接口的链路容量,为了解决该问题,交换机输出接口之一的速率可能暂时会超过该接口的链路容量,因此交换机输出接口设有缓存,其类似于路由器接口为数据报设有缓存。
交换机转发和过滤
过滤是决定一个帧应该转发到某个接口还是应该将其丢弃的交换机功能。
转发是决定一个帧应该被导向哪个接口,并把该帧移动到那些接口的交换机功能。
自学习
链路层交换机的性质
交换机和路由器的比较
虚拟局域网
数据中心网络
主机就像是数据中心的工蜂:它们负责提供内容、存储邮件和文档,并共同执行大规模分布式计算。
数据中心中的主机称为刀片,一般是包括CPU、内存和磁盘存储的商用主机。
负载均衡
一个云数据中心能够支持很多应用,为了支持来自外部客户的请求,每一个应用都与一个公开可见的IP地址关联,外部用户向该地址发送请求并其请求从该地址接收响应。
数据中心内部,外部请求首先被定向到一个负载均衡器,器任务是向主机分发请求,以主机当前的负载作为函数来在主机间负载均衡。
负载均衡器基于分组的目的端口以及目的IP做决策,因此通常被称为第4层交换机。
负载均衡器不仅平衡主机间的工作负载,还提供类似NAT功能,将外部IP地址转换为内部适当主机的IP地址,然后将反方向流向客户的分组按照相反的转换做处理,防止客户直接接触主机。