链路层和局域网

链路层和局域网


链路层协议的任何设备均称为节点。节点包括主机,路由器,交换机和WiFiWiFi接入点。节点之间的通信信道称为链路。在通过链路时,传输节点将数据报封装到链路层帧中,并将该帧传送到链路中。

链路层协议可能提供的服务包括:

  • 成帧:将网络层的数据报放到帧里面,帧由一个数据字段和若干的首部字段组成。
  • 链路接入:**媒体访问控制(MAC)**协议规定了帧在链路上的传输规则。
  • 可靠交付:通常用于易于产生高差错率的链路,如无线链路。在差错率比较低的链路,链路层的可靠交付被认为是不必要的开销。所以在许多有线链路不提供可靠交付。
  • 差错检验和纠正

1. 差错检验和纠正

1.1 奇偶校验

奇偶校验就是在全部数据的后面在增加一位,作为检验位。如何是偶校验,那么所有位的1的个位为偶数,如何数据位1的个数为奇数,那么通过把最后数据位的数据设置0来使得所有位1的个数为偶数。奇校验类似。同时还有二维的奇偶校验,假设数据的大小为n*n,那么二维奇偶校验就是把数据写成一个n*n的矩阵,然后在矩阵外增一位作为检验位,使之变成(n+1)*(n+1)的矩阵。二维奇偶校验不仅可以检测到差错同时还可以纠正一位的差错。

1.2 检验和

n比特的数据分成k比特一组的序列,也就是n%k=0。一个简单的方法就是把这写k个比特加起来,用这个和作为差错检测比特。注意这样这能检测不能纠正。

1.3 循环冗余检测

循环冗余检测(CRC)编码也叫做多项式编码。现在假设发送方要发送d比特的数据。发送方和接收方要协商一个r+1的比特模式,称为生成多项式,记为G。规定G的最左边的一位必须为1。如下图所示:

对于大小为d比特的数据,通过计算我们要在后面加上r比特的数据,得到d+r比特的数据。

如何发送端计算这r比特?

答:利用公式R=(D2r) % GR = (D*2^r) \space \% \space G

在接受方如何检验?

答:如果用得到的d+r比特的数据除以G没有余数,则说明没有差错,否则就有。

2. 多路访问链路和协议

在链路层转发的过程中,有的是点对点的通信协议,如点对点协议(PPP)和高级链路控制协议(HDLC),第二中就是广播链路,在广播链路中存在多路访问问题,比如在一个会议中,在一个时刻,就只能有一个人说话,如果同时由多个人说话,就会导致我们听不清讲的是什么(假设),要解决这个问题就要有一个规定使得,在一个时间段这能有一个人说话。如果多个人说我,我们将这种情况称为碰撞。解决这个问题,有三种常见的方法:信道划分协议,随机接入协议和轮流协议

2.1 信道划分协议

其中典型的信道划分协议有时分多路复用(TDM)频分多路复用(FDM)。如下图

TDM通过将时间分段来实现多路复用,避免碰撞,FDM类此通过将频率分段实现多路复用。假设链路的速率为RbpsRbps,我们通过TDM和FDM将链路分成了NN段,那么对应于每一段的速率为R/NbpsR/Nbps。TDM和FDM的好处是保证了每个信道的速率相同都是R/NbpsR/Nbps,然而他的主要的缺点是,即使链路中只有一个节点是活跃的,他的速率也是R/NbpsR/Nbps,没法达到RR

第三种信道划分协议是码分多址(CDMA)。CDMA对每一个节点分配一种不同的编码,不同的结点能过同时传输,并且他们各自相应的接收方仍能正确接收发送方编码的数据比特,而不在乎其他节点的干扰。

2.2 随机接入协议

主要介绍两种协议ALOHA和具有碰撞检测的载波侦听多路访问(CSMA/CD)

2.2.1. ALOHA协议

假设在一个节点发送完报文之前,就能检测到来自其他节点的碰撞

pp是一个概率,ALOHA的工作流程如下:

  1. 当节点有要发送的节点时,立即将报文发送到链路中;
  2. 如何没有发生碰撞,那该节点成功的传输了该帧,等待下一个要传输的帧;
  3. 如果发生了碰撞,那么该节点在传输玩碰撞的帧之后,立即以pp的概率重新传输该帧。

根据计算可以得到ALOHA最大的效率是1/(2e)1/(2e)

2.2.2 具有碰撞检测的载波侦听多路访问(CSMA/CD)

介绍协议之前我们先来看看载波侦听和碰撞检测这两种技术。

  • 载波侦听:一个节点在发送帧前先侦听此信道。如果来自另一个节点的帧正在信道上发送,节点则等待直到检测到一小段时间信道上没有传输帧,然后在开始传输。
  • 碰撞检测:一个节点在传输帧是一直在侦听信道。如果他检测到有别的节点在传输,他立即停止传输,并且在重复“侦听–空闲是传输”前,等待一段随机时间。

CSMA/CD的运行过程如下:

  1. 适配器从网络层一条数据报,准备链路层帧,并将其放入帧适配器中。
  2. 如果适配器侦听到信道空闲,他开始传输帧。另一方面,如果适配器侦听到信道正在忙,他将等待,直到侦听到没有信号能量是才开始传输帧。
  3. 在传输过程中,适配器监视来自其他使用该广播信道的适配器的信号。
  4. 如果适配器传输整个帧而未检测到来自其他适配器的信号,该适配器完成传输该帧。另一方面,如果适配器在传输过程中检测到来自其他适配器的信号能量,他中止传输该帧(ALOHA不会中止)。
  5. 中止传输后,适配器等待一个随机时间量,然后返回步骤二。

这个随机时间量的选择,我们希望他能够有下面的特点,在碰撞节点比较少的时候,时间间隔比较短;碰撞节点比较多的时候,时间间隔比较长。

解决上面的这个问题我们用的是二进制指数后退算法。就是当一个帧发生nn次碰撞后,他从{0,1,,2n1}\{0,1,···,2^n-1\}里面选择一个KK值。当一个帧经历多次碰撞之后,KK选择的间隔的均值也会变大。对于以太网来说,一个节点等待的时间量是K512K·512比特时间(发送512512比特进入以太网所需时间量的KK倍),nn能够取的最大值在1010以内。

例子,一个帧经历了一次碰撞后,以相同的概率从{0,1}\{0,1\}中选择KK,发生两次碰撞时,以相同的概率从{0,1,2,3}\{0,1,2,3\}中选取KK,然后依次类推,第nn次的时候,就是{0,1,2,3,,2n1}\{0,1,2,3,···,2^n-1\}

3. MAC地址

主机和路由器也具有链路层地址,不过不是他们本身自带,而是他们的适配器(网络接口)具有链路层地址。需要注意的是链路层的交换机并没有网络接口,所以他们并没有链路层地址,这就是说,链路层交换机对主机和路由器来说是透明的,主机和路由器不必明确的将帧寻址到其间的交换机。

链路层地址有多种叫法:LAN地址,物理地址或MAC地址。MAC地址的长度为66字节,共有2482^{48}个可能的地址。MAC地址不想一般不会发生变化,即从出厂到报销MAC地址不变。MAC地址通常用xx-xx-xx-xx-xx-xx的形式来表示,例如24-ff-3a-ff-f3-3f。在MAC地址中,也存在广播地址ff-ff-ff-ff-ff-ff,当链路层交换机收到这个地址时,会将他转发到局域网中的所有主机或路由器中。

4. 地址解析协议(ARP)

既然存在网络层地址(IP)和链路层地址(MAC),所以需要在他们之间相互转换,就需要地址解析协议(ARP)。这是因为在链路层,帧是根据MAC地址来传输的,所以要将IPIP地址转化为MAC地址。

在每台主机和路由器中,都有一个ARP表,这张表包含IPIP地址到MAC地址的转换,还包括这个转换持续的时间。

4.1 在子网内发送数据报

将设现在A要向C发送一个报文,但是在A的ARP表中并没有C的表项,现在就需要ARP协议来转换地址。ARP查询报文和响应报文具有相同的格式,都包含发送和接受方的IPIP地址和MAC地址。ARP查询步骤如下:

  • 查询方,发送一个ARP查询报文,其中的目的MAC地址为广播地址ff-ff-ff-ff-ff-ff,当交换机收到该报文时,将该查询报文,转发到子网内的所有路由器和主机中。
  • 当报文到达主机或路由器时,主机或路由器查看报文的目的IPIP地址,如果目的IPIP地址和自己的IPIP地址相符,那么他将发送一个响应报文,响应报文的源MAC地址就是要查询的MAC地址,目的的IPIP和MAC地址是查询报文的源IPIP和MAC地址;如果不一致,则没有反应。

同时ARP协议是即插即用的,就是说一个ARP表是自动配置出来的。

4.2 发送数据报到子网外

如图,当我们想把数据报发送到子网之外时,我们应该怎么办呢?

因为ARP协议只在子网的内部生效,所以但我们去查询一个子网之外的IPIP地址是,我们不会得到任何的响应。

想一下,数据报要到达子网的外部,首先就要经过路由器,然后通过路由器到达目的地。于是我们可以分两步走:

  • 第一步:得到第一跳路由器的MAC地址,我们可以通过ARP查询报文得到第一跳路由器(网关路由器)的MAC地址,将报文转发的路由器。
  • 第二步:得到目的地址的MAC地址,现在报文已经在路由器里面了,我们现在有将报文转发到目的IPIP地址,这时又需要通过ARP查询报文得到目的IPIP的MAC地址,然后转发报文到目的MAC地址处。

5. 以太网帧格式

如图是以太网的帧格式:

  • 数据字段(46-1500字节):如果IPIP数据报大于1500字节,将会分片;如果IPIP数据报小于46字节,将会被填充到46字节。使用填充时,数据报包含数据报和填充字段,网络层接受到报文后,用IPIP首部字段中的长度字段来剔除填充字段。
  • 目的地址和源地址(共12字节):包含目的和源MAC地址。
  • 类型字段(2字节):用来标记数据字段报文传输给的上层协议。
  • CRC(4字节):循环冗余检测编码。
  • 前同步码(8字节):以太网的帧以8个字节的前同步码开始。前同步码的前七个字节都是10101010,第八个字节是10101011。前前同步码的前七个字节用于唤醒接受适配器,并且将他们的时钟和发送方的时钟同步(因为适配器不会以精确的速率传输帧,总是会有些漂移),一般来说速率有一下几种10Mbps,100Mbps和1Gbps,但是不会很精确,会有偏差。

6. 链路层交换机

交换机对于子网中的主机和路由器来说是透明的,这就是说,某主机或路由器向另一个主机或路由器寻址一个帧(而不是向交换机寻址该帧),顺利的将该帧发送进局域网,并不知道某交换机将会接受该帧并将它转发到另一个节点。下面主要看交换机的几个特点。

6.1 交换机的转发和过滤

转发是决定将报文导向那个接口;过滤是决定一个帧是该转发到一个接口还是丢弃。转发和过滤是通过交换机表实现的。一个交换机的表项包含:一个MAC地址,通向该MAC地址的交换机接口,表项放置在表中的时间。举个例子:现在假定目的MAC地址为fa-33-43-5f-2f-53的帧从交换机的xx接口到达,交换机表中的fa-33-43-5f-2f-53有一下几种可能:

  • 表中没有fa-33-43-5f-2f-53地址的表项。交换机广播该帧。
  • 表中的一个fa-33-43-5f-2f-53地址的表项与接口xx联系起来。过滤即可。
  • 表中的一个表项将fa-33-43-5f-2f-53地址与接口yxy \ne x联系起来。那么将该帧转发到yy接口即可。

6.2 交换机的自学习功能

交换机的表项是自动、动态和自治的建立的,即没有来自外部的干预,表项可以自己建立起来。所以交换机也是即插即用的。交换机的自学习通过一下的步骤实现:

  1. 交换机的初始为空。
  2. 对于在每个接口接受到的每个入帧,该交换机在其表中储存:①在该帧源地址字段中的MAC地址;②该帧到达的接口;③当前时间。通过这种方式可以记录发送结点所在的局域网字段。
  3. 如果一段时间会,交换机没有接受到该地址作为源地址的帧,那么就在表中删除这个地址。

6.3 交换机的性质

主要有三个:消除碰撞,异质的链路和管理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章