数据链路层知识体系 计算机网络

2018-05-04 11:42:54 zym1348010959 阅读数 2161

计算机网络五层模型之物理层,数据链路层、网络层、传输层知识体系结构图

这里写图片描述

2017-02-18 14:50:02 moshenglv 阅读数 12500

欢迎关注公众号:

----------------------------------------------正文----------------------------------------------------

 

1、什么是数据链路层?

 

数据链路层的基本知识

数据链路层使用的信道主要有以下两种类型:

点对点信道:这种信道的通信方式是一对一的通信方式----------ppp协议

广播信道:这种信道使用一对多的广播通信方式,对于这种方式需要遵循专用的共享信道协议来协调主机数据的发送;  www.2cto.com  

链路:即使从一个结点到相邻结点的一段物理线路。而中间没有任何其他的交换结点。又称为:物理链路

数据链路:因为当需要在一条线路上传递数据时,除了必须使用一条物理设备时,还需要一些必要的通信协议来控制数据的传输,若把实现这些协议的硬件和软件的加到链路上,就叫做数据链路;最常用的是-----网络适配器。一般适配器都包含了数据链路层和物理层这两层的功能----又称为逻辑链路

点对点通信
 

一、点对点的信道在数据链路层进行通信的主要步骤如下:

   1>结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部

   2>结点A把封装好的帧发给结点B的数据链路层

   3>若结点B的数据链路层收到所谓帧无差错,则从收到的帧中提取出IP数据报交给网上面络层
 

二、数据链路层共同的问题:封装成帧、透明传输、差错控制

   1>封装成帧:在一段数据的前后分别添加首部和尾部,这样就构成了帧。首部与尾部的重要的作用是进行帧定界,此外还包含了许多必要的控制信息。对于每一种数据链路层协议都规定了帧的数据部分的长度上限----最大传送单元MTU。  www.2cto.com  

   对于帧的定界可以特殊的帧定界符:EOF、SOH

   2>透明传输:由于帧的界限是固定的界符,所以对于在传输的数据部分不允许任何8bit组合与界定符的ASCII一样,否则惠出现定界错误。如果在传输的数据部分中有界符,则在界符的前面加一个转移字符‘ESC’,而在接收端的数据链路层需要将转义字符去掉。如果转义字符出现在数据部分是,则在他前面添加“ESC”,接收端如果发现有两个ESC 则删除一个。

   3>差错检测:比特在传输过程中可能会产生差错,1变为0,0变为 ------叫作差错控制。在数据链路测一般使用的差错控制是:CRC校验。
 

三、PPP协议的特点

   1>满足的要求:简单、封装成帧、透明性、多种网络层协议、多种类型链路、差错控制、检测连接状态、最大的传输单元、网络层地址协商、数据压缩协商

   2>不需要的特点:纠错、序号、多点线路、半双工或单双工
 

四、PPP协议有三部分组成

    1>一个将IP数据报封装到串行链路的方法。

    2>一个用来建立、配置和测试数据链路连接的链路控制协议LCP 

    3>一套网络控制协议NCP
 

五:PPP协议的格式

    PPP帧的首部和尾部分别分为4个字段和3个字段

    首部的第一个字段和尾部的第二个字段斗志标志段F,规定为0x7E。表示一个帧的开始或结束

    首部中的地址字段A规定为0FF,控制字段C规定为0x03

    首部的第四个字段是2个字节的协议字段。当为0x0021时,PPP帧的信息就是IP俗话举报、若为0xC021则信息字段是PPP链路控制协议上LCP的数据,而0x8021表示这是网络层的控制数据

    尾部的第一个字段(2个字节)是使用CRC的帧检验序列FCS

CSMA/CD:CSMA/CD采用 IEEE_802.3 标准。
它的主要目的是:提供寻址和媒体存取的控制方式,使得不同设备或网络上的节点可以在多点的网络上通信而不相互冲突。  www.2cto.com  
 

网桥:数据链路层扩展一台玩要使用网桥。网桥工作在数据链路层,他根据MAC帧的目的地址对先收到的帧进行转发和过滤。

网桥的好处:过滤通信,增大吞吐量;扩大物理范围;提高了可靠性;可互连不同的物理层、不同的MAC层何不同的速率;

虚拟网络VLAN:是由一些局域网网段构成的与物理地址无关的逻辑组。

 

 

 

http://www.2cto.com/net/201205/130788.html

 

2、既然ip地址可以寻址到唯一的主机,为什么还需要mac地址?

 

作者:不求东西
链接:https://www.zhihu.com/question/21546408/answer/28155896
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

一. 整体与局部
信息传递时候,需要知道的其实是两个地址:

  • 终点地址(Final destination address)
  • 下一跳的地址(Next hop address)

IP地址本质上是终点地址,它在跳过路由器(hop)的时候不会改变,而MAC地址则是下一跳的地址,每跳过一次路由器都会改变。

这就是为什么还要用MAC地址的原因之一,它起到了记录下一跳的信息的作用。

注:一般来说IP地址经过路由器是不变的,不过NAT(Network address translation)例外,这也是有些人反对NAT而支持IPV6的原因之一。

二. 分层实现
如果在IP包头(header)中增加了”下一跳IP地址“这个字段,在逻辑上来说,如果IP地址够用,交换机也支持根据IP地址转发(现在的二层交换机不支持这样做),其实MAC地址并不是必要的。

但用MAC地址和IP地址两个地址,用于分别表示物理地址和逻辑地址是有好处的。这样分层可以使网络层与链路层的协议更灵活地替换,网络层不一定非要用『IP』协议,链路层也不一定非用『以太网』协议。

这就像OSI七层模型,TCP/IP五层模型其实也不是必要的,用双层模型甚至单层模型实现网络也不是不可以的,只是那样做很蛋疼罢了。

三. 早期的『以太网』实现
早期的以太网只有集线器(hub),没有交换机(switch),所以发出去的包能被以太网内的所有机器监听到,因此要附带上MAC地址,每个机器只需要接受与自己MAC地址相匹配的包。

 

 

 

https://www.zhihu.com/question/21546408

 

3、网络中数据传输过程

 

我们每天都在使用互联网,我们电脑上的数据是怎么样通过互联网传输到到另外的一台电脑上的呢?把自己的理解写一下,可能有很多细节还没有能的很清楚!希望在以后可以使之更加的完善!有不对的地方还请指正.
     我们知道现在的互联网中使用的TCP/IP协议是基于,OSI(开放系统互联)的七层参考模型的,(虽然不是完全符合)从上到下分别为 应用层 表示层 会话层 传输层 网络层 数据链路层和物理层。其中数据链路层又可是分为两个子层分别为逻辑链路控制层(Logic Link Control,LLC )和介质访问控制层((Media Access Control,MAC )也就是平常说的MAC层。LLC对两个节点中的链路进行初始化,防止连接中断,保持可靠的通信。MAC层用来检验包含在每个桢中的地址信息。在下面会分析到。还要明白一点路由器是在网路层的,而网卡在数据链路层。
     我们知道,ARP(Address Resolution Protocol,地址转换协议)被当作底层协议,用于IP地址到物理地址的转换。在以太网中,所有对IP的访问最终都转化为对网卡MAC地址的访问。如果主机A的ARP列表中,到主机B的IP地址与MAC地址对应不正确,由A发往B数据包就会发向错误的MAC地址,当然无法顺利到达B,结 果是A与B根本不能进行通信。
     首先我们分析一下在同一个网段的情况。假设有两台电脑分别命名为A和B,A需要相B发送数据的话,A主机首先把目标设备B的IP地址与自己的子网掩码进行“与”操作,以判断目标设备与自己是否位于同一网段内。如果目标设备在同一网段内,并且A没有获得与目标设备B的IP地址相对应的MAC地址信息,则源设备(A)以第二层广播的形式(目标MAC地址为全1)发送ARP请求报文,在ARP请求报文中包含了源设备(A)与目标设备(B)的IP地址。同一网段中的所有其他设备都可以收到并分析这个ARP请求报文,如果某设备发现报文中的目标IP地址与自己的IP地址相同,则它向源设备发回ARP响应报文,通过该报文使源设备获得目标设备的MAC地址信息。为了减少广播量,网络设备通过ARP表在缓存中保存IP与MAC地址的映射信息。在一次 ARP的请求与响应过程中,通信双方都把对方的MAC地址与IP地址的对应关系保存在各自的ARP表中,以在后续的通信中使用。ARP表使用老化机制,删除在一段时间内没有使用过的IP与MAC地址的映射关系。一个最基本的网络拓扑结构:

 


   如果中间要经过交换机的话,根据交换机的原理,它是直接将数据发送到相应端口,那么就必须保有一个数据库,包含所有端口所连网卡的MAC地址。它通过分析Ethernet包的包头信息(其中包含不原MAC地址,目标MAC地址,信息的长度等信息),取得目标B的MAC地址后,查找交换机中存储的地址对照表,(MAC地址对应的端口),确认具有此MAC地址的网卡连接在哪个端口上,然后将数据包发送到这个对应的端口,也就相应的发送到目标主机B上。这样一来,即使某台主机盗用了这个IP地址,但由于他没有这个MAC地址,因此也不会收到数据包。
   现在我们讨论两台不在同一个网段中的主机,假设网络中要从主机PC-A发送数据包PAC到PC-C主机中,如下图所示:


    PC-A并不需要获取远程主机(PC-C)的MAC地址,而是把IP分组发向缺省网关,由网关IP分组的完成转发过程。如果源主机(PC-A)没有缺省网关MAC地址的缓存记录,则它会通过ARP协议获取网关的MAC地址,因此在A的ARP表中只观察到网关的MAC地址记录,而观察不到远程主机的 MAC地址。在以太网(Ethernet)中,一个网络设备要和另一个网络设备进行直接通信,除了知道目标设备的网络层逻辑地址(如IP地址)外,还要知道目标设备的第二层物理地址(MAC地址)。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
    数据包在网络中的发送是一个及其复杂的过程,上图只是一种很简单的情况,中间没有过多的中间节点,其实现实中只会比这个更复杂,但是大致的原理是一致的。
(1)PC-A要发送数据包到PC-C的话,如果PC-A没有PC-C的IP地址,则PC-A首先要发出一个dns的请求,路由器A或者dns解析服务器会给PC-A回应PC-C的ip地址,这样PC-A关于数据包第三层的IP地址信息就全了:源IP地址:PC-A,目的ip地址:PC-C。
(2)接下来PC-A要知道如何到达PC-C,然后,PC-A会发送一个arp的地址解析请求,发送这个地址解析请求,不是为了获得目标主机PC-C的MAC地址,而是把请求发送到了路由器A中,然后路由器A中的MAC地址会发送给源主机PC-A,这样PC-A的数据包的第二层信息也全了,源MAC地址:PC-A的MAC地址,目的MAC地址:路由器A的MAC地址,
(3)然后数据会到达交换机A,交换机A看到数据包的第二层目的MAC地址,是去往路由器A的,就把数据包发送到路由器A,路由器A收到数据包,首先查看数据包的第三层ip目的地址,如果在自己的路由表中有去往PC-C的路由,说明这是一个可路由的数据包。
(4)然后路由器进行IP重组和分组的过程。首先更换此数据包的第二层包头信息,路由器PC-A到达PC—C要经过一个广域网,在这里会封装很多广域网相关的协议。其作用也是为了找下一阶段的信息。同时对第二层和第三层的数据包重校验。把数据经过Internet发送出去。最后经过很多的节点发送到目标主机PC_C中。
   现在我们想一个问题,PC-A和PC-C的MAC地址如果是相同的话,会不会影响正常的通讯呢!答案是不会影响的,因为这两个主机所处的局域网被广域网分隔开了,通过对发包过程的分析可以看出来,不会有任何的问题。而如果在同一个局域网中的话,那么就会产生通讯的混乱。当数据发送到交换机是,这是的端口信息会有两个相同的MAC地址,而这时数据会发送到两个主机上,这样信息就会混乱。因此这也是保证MAC地址唯一性的一个理由。
   知识补充:
(1)网关的含义:是说这样一种设备:如果主机要发包,就往这个设备发送。也就是说此设备要有路由功能或有去往外部网路的路径。
在实际网络里,网关一般由路由器或server充当。
(2)ARP(Address Resolution Protocol)是地址解析协议,ARP是一种将IP地址转化成物理地址的协议。从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。ARP 具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。ARP协议是通过IP地址来获得MAC地址的。
(3)网络中需要唯一的MAC地址的理由:(a)IP地址的分配是根据网络的拓朴结构,而不是根据谁制造了网络设置。若将高效的路由选择方案建立在设备制造商的基础上而不是网络所处的拓朴位置基础上,这种方案是不可行的。(b)当存在一个附加层的地址寻址时,设备更易于移动和维修。例如,如果一个以太网卡坏了,可以被更换,而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无须换一个新的网卡。(c)无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP,负责将IP地址映射到MAC地址上来完成的。
(4)标识网络中的一台计算机,一般至少有三种方法,最常用的是域名地址、IP地址和MAC地址,分别对应应用层、网络层、物理层。网络管理一般就是在网络层针对IP地址进行管理,但由于一台计算机的IP地址可以由用户自行设定,管理起来相对困难,MAC地址一般不可更改,所以把IP地址同MAC地址组合到一起管理就成为常见的管理方式。
交换机和路由器的主要区别:
(1)、二者的工作层次不同
最初的的交换机是工作在OSI/RM开放体系结构的数据链路层,也就是第二层,而路由器一开始就设计工作在OSI模型的网络层。由于交换机工作在 OSI的第二层(数据链路层),所以它的工作原理比较简单,而路由器工作在OSI的第三层(网络层),可以得到更多的协议信息,路由器可以做出更加智能的转发决策。
(2)、二者的据转发所依据的对象不同
交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的ID号(即IP地址)来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络,有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经 固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。
(3)、传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域
由交换机连接的网段仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,在某些情况下会导致通信拥挤和安全漏洞。连接到路由器上的网段会被分配成不同的广播域,广播数据不会穿过路由器。虽然第三层以上交换机具有VLAN功能,也可以分割广播域,但是各子广播域之间是不能通信交流的,它们之间的交流仍然需要路由器。
(4)路由器提供了防火墙的服务,而交换机则没有
路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。
MAC地址的安全问题:
    我们为了防止IP地址被盗用,就通过简单的交换机端口绑定(端口的MAC表使用静态表项),可以在每个交换机端口只连接一台主机的情况下防止修改MAC地址的盗用,如果是三层设备还可以提供:交换机端口/IP/MAC 三者的绑定,防止修改MAC的IP盗用。一般绑定MAC地址都是在交换机和路由器上配置的。

 

2018-07-22 09:59:51 sd4567855 阅读数 5786

【计算机网络高分笔记】第三章:数据链路层

标签(空格分隔):【计算机网络】


第三章:数据链路层

  • 大纲要求:

    1. 数据链路层功能
    2. 组帧
    3. 差错控制
      • 检错编码
      • 纠错编码
    4. 流量控制与可靠传输
      • 流量控制、可靠传输与滑动窗口机制
      • 停止-等待协议
      • 后退 N 帧(GBN)协议
      • 选择重传(SR)协议
    5. 介质访问控制
      • 信道划分介质访问控制:频分多路复用、时分多路复用、波分多路复用、码分多路复用的概念和基本原理。
      • 随机访问介质访问控制:ALOHA 协议、CSMA 协议、CSMA/CD 协议、CSMA/CA 协议
      • 轮询访问介质访问控制:令牌传递协议
    6. 局域网
      • 局域网的基本概念与体系结构
      • 以太网与 IEEE 802.3
      • IEEE 802.11
      • 令牌环网的基本原理
    7. 广域网
      • 广域网的基本概念
      • PPP
      • HDLC协议
    8. 数据链路层设备
      • 网桥的概念和基本原理
      • 局域网交换机及其工作原理
  • 考点和要点分析

    1. 核心考点:
      • 流量控制与可靠传输机制、CSMA/CD原理,特别是争用期和截断二进制指数退避算法
      • 网桥的概念和基本原理
      • 组帧机制和差错控制机制,特别是循环冗余码和海明码
    2. 基础要点:
      • 数据链路层的概念和功能
      • 帧的概念,了解帧的 4 种组帧方法,掌握其中带位填充的首尾标志法
      • 帧的概念,了解帧的 4种组帧方法,掌握其中带位填充额首尾标志法
      • 差错控制的基本概念和方法
      • 流量控制的基本概念和可靠传输机制
      • 4 种信道划分介质访问控制的基本概念
      • 3 种可靠传输协议以及 HDLC 协议和 PPP
      • 数据链路层各层设备的基本工作原理和其他各层设备的区别

3.1 数据链路层的功能

  • 数据链路层 在物理层所提供的服务的基础上 向网络层提供服务,即将原始的、有差错的物理线路改进成为逻辑上无差错的数据链路,从而向网络层提供高质量的服务。它一般包括 3 种基本服务:无确定的无连接服务、有确定的有连接服务、有确定的无连接服务(不存在无确定的有连接服务)。
    具体而言,数据链路层的主要功能如下:
    1. 链路管理:负责数据链路的建立、维持和释放,主要用于面向连接服务。
    2. 帧同步:接收方确定收到的比特流中一帧的开始位置和结束位置。
    3. 差错控制:用于使接收方确定收到的数据就是由发送方发送的数据。
    4. 透明传输:不论数据是什么样的比特组合,都应当能够在链路上进行传输。

问,什么是帧定界?
答:当两个主机之间互相传送消息时,网络层的分组必须将封装成帧,并以帧的格式进行传送。将一段数据的前后分别添加首部和尾部,就够成了帧。首部和尾部中含有很多控制信息,这些信息的重要作用之一就是确定帧的界限,这就是帧定界。
例如,在 HDLC 协议中,帧格式使用标志 F(01111110) 来标识帧的开始和结束。

标志 地址 控制 信息 帧校验序列 标志
F 01111110 A 8位 C 8位 Info N位(可变) FCS 16位 F011111110

上表中 地址到帧校验序列之间为 透明传输区间。

常见问题 1 :旧版《计算机网络》教材认为数据链路层的任务是在两个相邻节点之间线路上无差错地传送以帧(frame)为单位地数据。数据链路层可以把一条有可能出差错地实际链路,转变成让网络层向下看起来好像是一条不出错地链路。但是《计算机网络》第五版中对数据链路层地提法改变:数据链路层地传输不能让网络层向下看起来好像是一条不出差错的链路。那种说法正确?
答:首先,在旧版本地计算机网络教材中对数据链路层的阐述都是基于 OSI 体系结构的,OSI 体系结构的数据链路层采用的是面向连接的 HDLC 协议,它提供可靠传输服务。因此旧版本中的提法对于 OSI 体系结构是正确的。也就谁说,以前确实是数据链路层向网络层提供了一条不出差错的链路。
而第五版之后,教材更加突出了 TCP/IP 体系结构,现在互联网的数据链路层协议使用最多的是 PPP 和 CSMA/CD 协议。这两种协议都不使用序号和确定机制,因此也就不能让网络层向下看起来好像是一条不出差错的链路。
新版教材中的提法更符合当前计算机网络的现状。当接受度按通过差错检错后发现帧在传输过程中出现差错之后,或者默默丢弃不做任何处理(当使用 PPP 或 CSMA/CD 协议时),或者使用重传机制要求发送方重传(使用 HDLC 协议时)。在以上两类协议中,前者占大多数,后者极少使用。如果需要可靠传输,那么就由高层的 TCP 负责重传。但是数据链路层并不知道这是重传的帧,所以还是默认可靠传输由 传输层 的 TCP 负责,而不是数据链路层。

问题 2:当数据链路层使用 PPP 或者 CSMA/CD 协议时,既然不能保证可靠传输,为什么对所传输的帧进行差错检验的?这不是多此一举吗?
答:并不是多此一举,当数据链路层使用 PPP 或者 CSMA/CD 协议时,在数据链路层的接收端对所传输的帧进行差错检验是为了不将已经发现错误的帧瘦下来。如果或在接受端不进行差错检验,那么接收端上交给主机的帧就有可能包括在传输过程中除了差错的帧,而这样的帧对于接收端主机而言没有用途的。换而言之,接受度按进行差错检验的目的是为了保证“上交主机的帧都是没有传输差错的,因为有差错的帧都已经被丢弃了(丢弃不重传,所以不可靠)”。更严格来说,“我们以很接近 1 的概率认为,凡是上交主机的帧都是没有传输差错的)

问题 3:数据链路层有流量控制吗?
答:这个问题不能一概而论,而需要看讨论的前提。在 OSI 体系结构中,数据链路层肯定有流量控制。而在 TCP/IP 体系结构中,数据链路层的流量控制被转移到传输层,因此没有必要再数据链路层设置流量控制。

3.2 组帧

问:为什么组帧时及要求加首部,也要加尾部?而报文切割成分组只加首部?
答:因为在网络中是以帧为最小单位进行传输的,所以接收端要正确地收到帧,必须要清楚该帧再一串比特流中是从哪里开始再哪里结束(因为接收端接收到的时一串比特流,没有首部和尾部不能正确的区分帧)。而分组(也称为 IP数据报)仅仅是包含在帧的数据部分,所以不需要加尾部来定界。

  • 为什么要组帧?直接传送比特流不就可以了?还免去了帧同步、帧定界、透明传输等问题。但是反过来思考,万一传送的比特流出错了怎么办?那就得重新传输全部的比特流,组帧的优点就在于,如果传输出现了错误,只需要重新发送错误的帧即可,这相对于增加帧同步、帧定界、透明传输问题是值得的。组帧不能随意组合,需要让接收方看懂才行,这就需要依据一定的规则将网络层递交下来的分组组装成帧。
  • 四种组帧方法:字符计数法、字节填充的首尾界符法、比特填充的首尾标志法、物理编码违例法。

    1. 字节计数法:用一个特殊的字符来表示一帧的开始,然年后用一个计数字段来表明帧包含的字节数。当目的主机接收到该帧时,根据此字段提供的字节数,便可以知道该帧接受位和下一帧的开始位。如下图
      image.png-9.4kB
      从上图中可以看出,计数字段提供的字节数包含自身所占的一个字节。
      缺点:如果计数字段在传输过程中出错,接收方就无法判断所传输帧的结束位,当然也无法知道下一帧的开始位,这样就无法帧同步。由于此原因,字符计数法很少被使用。
    2. 字符填充的首尾界符法:

      • 首先讨论首尾界符法,由 C 语言知识我们直到 ASCII 码是 7 位编码,可以组成 128 个不同的ASCII码,但是可以打印的字符(可以从键盘上输入的字符)只有 95 个,那么当传送的帧是文本文件(都是由键盘输入的)时,就可以在剩下的 33 个控制字符里选定 2 个字符作为每一帧的开始和结束,我们选定 SOH 和 EOT 分别作为帧开始符和帧结束符,这样接收端只需要判断这两个控制字符出现的位置就可以准确地分割成帧,如下图。
        image.png-1.8kB
        注意: 字符 SOH 代表 Start of Header(首部开始),而 EOT 表示 End of Transmission(传输结束)。 SOH 和 EOT 都是 ASCII 中的控制字符,SOH 的十六进制编码是 01, 而 EOT 的十六进制编码是 04。不要与一位 SOH 是 ‘S”O”H’ 三个字符,同样也不要误以为 EOT 是 ‘E”O”T’三个字符。
        缺点:首尾界符法对于帧数据文件是文本文件完全没有问题。但是还有一种情况,假如帧传输的数据不是文本文件,即真传输的数据可能包含种植字符,就不能仅仅使用控制字符来进行帧定界了,否则会导致错误的定界,而仅仅把一部分帧收下,例如image.png-2.6kB
        在这种情况下,采用首尾界符法便会仅仅收下前小半段数据。
      • 如此看来,首尾界符法是不严谨的,因此出现了字符填充的首尾界符法,其方法是,当数据中出现字符 “EOF” 或者 “SOH” 时,就将它们转换成另外一个字符,而这个字符是不会被错误解释的。但是所有字符都可能在数据中出现,于是就将数据中出现的字符
        “SOH” 转换成 “ESC” 和 ‘x’ 两个字符;
        “EOF” 转换成 “ESC” 和 ‘y’ 两个字符;
        而当数据中出现控制字符 “ESC” 时,就将其转化为 “ESC” 和 ‘z’ 两个字符。
        这种转换方法能够在接收端将收到的数据正确地还原为源来的数据,其中 “ESC” 是转义符,它的十六进制编码为 1B.如下图:
        image.png-9.5kB
        在接收端只需要按照上述规则进行相反的转化,便可以还原原来的数据。

      问:为什么在谢希仁的教材中和上述转换方法不一样?
      答:教材上是将 EOT 转换成 ESC EOT 等。其实解决透明传输的方法由很多种,只要合理即可,即与接收方约定一种方式,可以在创新的情况下不一定非要与教材一致。

  • 比特填充的首尾标志法:比特填充的首尾标志法是使用 01111110 作为帧的开始和结束的标志,这样看来似乎帧定界的问题便解决了,单位体随着而来,如果帧的数据部分含有 01111110 怎么办?透明传输依然是一个问题。

    • 解决方法如下:在 01111110 中拥有 6 个连续的 ‘1’,只要数据帧检测到有 5 个连续的 ‘1’,便马上再其后面插入 ‘0’,而在接收方对该过程实施逆操作,即每次收到 5 个连续的 ‘1’,自动删除后面紧紧跟随的 ‘0’,以恢复数据。这样的方法又称为零比特填充法。
    • 我们来模拟这这个过程:
      原始数据: 0110101111110010111111011 数据中两次出现了 01111110.
      零比特填充后的数据:01101011111 0 1001011111 0 1011,其中加粗部分表示填充的 0.
      接收方收到数据后,遇到 5 个连续的 ‘1’ 删除后面的 ‘0’ ,便可以得到原始数据。
  • 物理编码违例法:物理编码违例法是利用物理介质上编码的违法标志来区分帧的开始与结束,例如,在曼彻斯特编码中,码元 1 编码成高-低电平,码元 0 编码成低-高电平,而高-高和低-低点公平在编码中是无效的,可以用来作为帧的起视标志和结束标志。

  • 注意:

    1. 在使用字节填充的首尾界符法时,并不是所有形式的帧都需要开始符和帧结束符,如 MAC 帧便不需要帧结束符。因为以太网在传送帧时,各帧之间还必须要有一定的间隙,所以,接收端只要找到帧开始定界符,其后面的连续到达的比特流就都属于同一个 MAC 帧,可见,以太网不需要使用帧结束定界符,也不需要使用字节插入来保证透明传输。
    2. PPP帧用来及逆行帧定界的字段是 Ox7E. 1B是普通帧透明传输的处理,即转义字符 “ESC” 的十六进制编码。
  • 3.3 差错控制

    3.3.1 检错编码

    • 检错编码:通过一定的编码和解码,能够在接收端解码时检查出传输的错误,但不能纠正错误。常见的检错编码具有有奇偶校验码和循环冗余校验码(CRC).
    • 奇偶校验码:在信息码后面加一位校验码,分奇校验和偶校验。
      1. 奇校验:添加以为校验码之后,保持整个码字里面的 1 的个数是奇数。接收端收到数据之后就校验数据里面 1 的个数,如果检查到奇数个 1 ,那么认为传输过程中没有出错,如果检查到偶数个 1 ,则说明传输过程中数据发生了改变,要求重发。
      2. 偶校验:添加一位校验码之后,保持整个码字里面的 1 的个数是偶数。接收端收到数据之后就校验数据里面 1 的个数,如果检查到偶数个 1 ,那么认为传输过程中没有出错,如果检查到奇数个 1 ,则说明传输过程中数据发生了改变,要求重发。
        当数据中有一位发生变化时,奇偶校验码能够检测出来,但是不知道是哪一位发生了错误。如果数据中有两位数据发生了编码,那么奇偶校验码检测不到数据出错。所以它的检错能力是有限的。
        奇偶校验码在实际使用中又分为垂直奇偶校验、水平奇偶校验与水平垂直奇偶校验。上述内容属于水平奇偶校验。
      3. 循环冗余校验码(CRC):适当选择多项式 G(x) ,在计算机二进制信息 M(X) 的长度确定时,余数与 CRC 码出错位的对应关系是不变的,可以使用余数作为判断出错位置的依据而纠正编码。检错方式:将受到的 CRC 码与 G(x) 相除,如果余数为 0 ,那么数据正确。如果余数不为 0 ,那么可以判断出错的位置。
        举个例子:试计算 10110010000/11001.
        计算技巧:在除法过程中,进行异或运算,无视进位;上商的规则是看余数的首尾,如果为 1,则上 1,如果为 0 ,则上 0;当部分余数的位数小于除数的位数时,该余数便是最后的余数。
        可以得到 10110010000/11001 余数为 1010.
        CRC码进行检错的重要特征
        1. 具有 r 检测位的多项式嫩能够检测出所有小于或者等于 r 的突发错误
        2. 长度大于 r + 1 的错误逃脱的概率为 12r.
        注意:1. 循环冗余码仅能做到无差错接受。 2. CRC 具有纠错功能。但是在计算机网络中一般发现错误直接重传,因此在默认情况下,CRC为检错码而不是纠错码。

    3.3.2 纠错编码

    • 纠错编码:在接受端不仅能够检查出错误,而且还能够就成检查出来的错误。常见的纠错码是海明码。
    • 海明码:又称为汉明码,他是在信息字段中插入若干位数据,用于监督码字的哪一位数据发生了变化,具有一位纠错能力。假设信息位有 k 位,整个码字的长度就是 k + r 位,每一位的数据只有两种状态,因此有 r 位数据就有 2r 种状态。如果每一种状态就代表一个码元发生了错误,有 k + r个码元,就要有 k + r 种状态来表示,另外还要有一种状态来表示数据正确的情况,所以 2r1k+r 才可以检查出一种错误。
      海明码求解步骤:

      1. 确定校验码的位数 r .2rk+r+1.
      2. 确定校验码的位置。第 i 个校验码处于位置 Pi 处,Pi 对应的位置为 2i1 ,   i=0,1,2.....
      3. 确定数据的位置。
      4. 求出校验位的值。

        • 例:D = 101101 的海明码。
          首先确定 r ,易得 r = 4。
      M1 M2 M3 M4 M5 M6 M7 M8 M9 M10
      P1 P2 1 P3 0 1 1 P4 0 1

      如何求取 Pi 的值?
      首先把 D 所在位置的 Mi 的二进制写出来:

      M3 3 0011
      M5 5 0101
      M6 6 0110
      M7 7 0111
      M9 9 1001
      M10 10 1010

      假设出错位是 e1,e2,e3,e4, 可以知道:
      e1=M1M3M5M7M9
      e2=M2M3M6M7M10
      e3=M4M5M6M7
      e4=M8M5M9M10
      把数据带入可以得到
      当海明码没有错误信息时,e1,e2,e3,e4 必须都等于 0,因此等式右侧的值也全部为 0,由于异或符号的特性,Pi 等于 Mi 位置上 i 的二进制数上为 1的位置上的对应的 D 相应位置上求异或。
      可以得到 P1=P2=P3=0,P4=1

      • 海明码的校验:
        1. 直接写出错位 e1,e2,...,emM1,M2,...,MN 之间对应关系,计算出e1,e2,...,em 的值。
        2. 写出 em,em1,...,e1 对应的十进制的值,这个值便是出错的位数,取反便可以得到正确的编码。
    • 补充:
      1.海明码如果要检测出 d 位错误,需要一个海明距为 d + 1 的编码方案;如果要纠正 d 位错误,需要一个海明距为 2d + 1 的编码方案。
      理解:首先,什么是码距?码距指的是两个bima’zi码字的不一样的程度,就是把码距对其之后,有几位不同,码距便是多少。码距又称为海明距。例如,码字 110 和 111 的码距便是 1. 什么是海明距为 1 的编码方案?一个编码方案一般对应许多码字,而定义许多码字的海明距只需要看最小的即可。例如,某个编码方案中有码字 110、001、111,尽管 110 和 001 的码距为 3,但是110 与 111 的码距为 1.我们取 1 即可。

      1. 海明码得纠错能力恒不大于检错能力。
      2. 为什么误码率与信噪比有关?
        因为信噪比越高,失真自然会越小,到达接受端之后得波形得变化就会很小,误码率自然变低。

        • 公式 L1=D+C,DC
          其中 L 为编码方案,D 为检错位数,C 为纠错位数。
          如果要纠正 d 位错误,意味着至少检测出 d 位错误,代入即可以得到 L - 1 = d + d ,即 L = 2d + 1;瞳孔里,如果要求检测出 d 位错误(默认纠错为 0 ,即 C = 0),代入得 L = d + 1.

    3.4 流量控制与可靠传输机制

    3.4.1 流量控制

    申明:流量控制与可靠传输机制其实是属于传输层的功能。
    - 流量控制就是要控制发送方发送数据的速率,使得接收方来得及接受。一个基本的方法就是由接收方来控制发送方的数据流。
    - 常见的两种方式:停止-等待流量控制滑动窗口流量控制
    1. 停止-等待流量控制:这是流量控制中最简单的形式。停止-等待流量控制的工作原理就是发送方发出一帧,然后等待应答信号到达之后再发送下一帧;接收方每收到一帧之后,返回一个应答信号,表示可以接受下一帧,如果接收方没有收到应答信号,则发送方必须一直等待。
    2. 滑动窗口流量控制,在停止-等待流量控制中每次只允许发送一帧,然后就陷入等待接收方确定信息的过程中,传输效率很低。而滑动窗口流量控制允许一次发送多个帧。
    滑动窗口流量控制的工作原理是在任意时刻,发送方都维持了一组连续的允许发送的帧的序号,称为发送窗口同时,接收方也维持了一组连续的允许接受的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。发送方窗口内的序列号代表了那些已经发送但是还没有被确定的帧,或者那些可以被发送的帧。发送端没收到一个帧的确定,发哦是那个窗口就向前滑动一个帧的位置。当发送窗口尺寸达到最大尺寸时,发送方就会强行关闭网络层,直到有一个空闲的缓冲区出来。当接受度按只有当收到的数据帧的发送序号落入接收窗口内才允许将该数据帧收下,并将窗口向前移动一个位置。如果接收到的数据帧落在窗口之外(就是说收到的帧号在接收窗口中找不到相应的该帧号),则一律丢弃。
    用一个例子来说明:
    image.png-159.6kB
    1.PNG-93.9kB

    3.4.2 可靠传输机制

    • 可靠传输机制与无差错接受的区别
      在数据链路层如果仅仅使用循环冗余码检验差错检测技术,只能做到对帧的无差错接受,即 “凡是接收端数据链路层接受的帧,都能以非常接近 1 的概率认为这些帧在传输过程中没有产生差错”。
      注意:现在并没有要求数据链路层向网络层提供“可靠传输”的服务。所谓“可靠传输”,就是数据链路层的发送端发送什么,接收端就接受什么。传输差错可以分为两大类,一类就是比特差错(可以通过CRC来检错),另一类传输差错更复杂,这就是收到的帧并没有出现比特差错,但是出现了 帧丢失(例如发送 1,2,3,收到 1,3)、帧重复(例如发送 1,2,3 ,收到 1,2,2,3)、帧失序(例如发送 1,2,3,收到1,3,2)。这三种情况都属于出现传输差错,但都不是这些帧里有比特差错。
      帧丢失比较容易理解,但是帧重复、帧失序的情况比较复杂。
      总而言之“无比特差错”和“无传输差错”并不是同样的概念,在数据链路层使用 CRC 检验只能实现无比特差错的传呼是,但这并不是可靠传输。
      也许会有人提出:既然会丢失那就是让接收端不管收到还是没收到都给回复,即确认。如果没有接收到回复就再发一次,直到对方确认。对于帧失序只要给发的帧的编号,等到所有帧均接收到再排序。以上说的都是对的,但为什么不采用以上方法?原因有二:1. 以前在数据链路层使用这种方式是因为以前的通信质量太差了,所以确定和重传机制会起到很好的效果,但是如今的通信质量已经大大提高,由通信链路质量不好引起的差错的概率大大降低,再使用这种机制的代价太大,不合算。2. 即时数据链路层能够实现无差错的传输,端到端的传输也可能出现差错,这样得不偿失,还不如把数据链路层做的简单一点,可靠的传输由上层协议来完成。为了更清楚数据链路层的可靠传输移到高层的原因,我们可以先看一下网络层的一个知识。

      • 互联网使用的 IP 是无连接的,因此其传输时不可靠的。这样容易使得人们感到互联网很不可靠,那么为什么当初不把互联网的传输设计成为可靠的?
        答:这个问题很重要。打个比方:邮局寄送的平信很像无连接的 IP 数据报。每封平信都可能走不同的传送路径,因此平信也不保证不丢失。当发现收信人没有收到寄出的平信时,找邮局索赔时没有用的,邮局会答复:平信不保证不丢失,如果担心丢失,请您寄挂号信。但是大家并不会将所有信件都是用挂号信的方式基础,这是因为丢失平信的概率不大,况且挂号信的成本较高。总之,尽管寄平信可能会丢失,但是绝大多数信是平信,因为平信方便,实惠。
        在我们生活中,传统的电信网的最主要的用途之一就是进行电话通信,普通的电话机很简单,只有电话功能,电信公司就不得不把电信网设计的非常好,进而保证用户通话时质量。但是电信公司却付出了很大的代价,例如使用昂贵的程控交换机和网管系统。
        当时,在数据传输的过程中,对于哪部分应该负责数据传输的可靠性,工程师们有两个意见 :其一,主张像电信网络一样由网络负责数据传输的可靠性;其二,主张用户的主机负责数据传输的可靠性。第二种思路更容易实现,因为具有智能的主机使得计算机网络和电信网络有两个重要的区别。
        1. 即时传送数据的因特网有一些缺陷,例如导致比特差错或者分组丢失,但是具有智能的终端主机仍然有办法实现可靠的数据传输,例如能够及时的发现错误并通知发送方重新发送刚才出错的数据。
        2. 即时网络可以实现 100% 的无差错传输,端到端的数据传输仍然有可能出现差错。
          例如,假设主机 A 像 主机 B 传送一个文件。文件通过一个文件系统存储在主机 A 的硬盘中,主机 B 也有一个文件系统,用来接收和存储从主机 A 发送过来的文件。应用层使用的应用程序现在就是文件传送程序,这个程序一部分在主机 A 运行,另外一部分在主机 B 运行。
          现在讨论文件传送的大致步骤:1. 主机 A 的文件传送程序调用文件系统将文件从硬盘中独处,然后文件系统将文件传递给文件传送程序。2. 主机 A 请求数据通信系统将文件 B 传送给主机 B,这里包括使用一些通信协议和数据文件划分为适当大小的分组。3. 通信网络将这些文件逐个传送给主机 B。 4. 在主机 B中,数据通信协议将收到的文件传递给文件传送应用程序在主机 B 与运行的那部分。5. 在主机 B中,文件传送程序请求主机 B的文件系统将受到的数据写入主机 B的硬盘中。
          以上步骤中,存在一些使得数据受到损伤的因素。例如:1. 虽然文件源来是正确地写在主机 A 的硬盘上,但是在读出后文件就出现了差错(例如在磁盘存储系统中的硬件出现了故障)。2. 文件系统、文件传送程序或者数据通信系统的软件在对文件中的数据进行缓存或者复制的过程中都有可能出现故障。 3. 主机 A 或者主机 B 的硬件处理器胡总和存储器在主机 A 或者 B 进行数据缓存或复制的过程也有可能出现故障。4. 通信系统在传输分组时有可能产生检测不出来的比特差错,甚至丢失某些分组。5. 主机 A 或者 B 都有可能在进行数据处理的过程中突然崩溃。
          以上可以看出,即时一个简单的文件传送任务,即时通信网络可以 100% 无差错传输,并不能保证文件从主机 A 硬盘到主机 B 硬盘的传送也是可靠的。也就是说,花费很多的财力将网络做的非常可靠,对于计算机网络的数据传输而言是得不偿失的。那么既然终端设备内具有只能,就应该把网络设计的简单一些,从而让具有只能的终端设备来完成:“传输变得可靠”的任务。
          因此,计算机网络的设计者采用了一种策略,便是“端到端的可靠传输”,这便是在传输层使用面向连接的 TCP,它可以保证端到端的可靠传输。只要主机 B 的 TCP 发现传输数据有差错,就告诉主机 A 将出现差错的那部分数据重传,直到这部分数据正确传送到主机 B为止。而 TCP 发现不了数据错误的概率是非常小的。
      • 采用以上的建网策略,即可一将使网络部份价格便宜和灵活可靠,又可以保证端到端的可靠性传输,可以想象,将互联网的范围稍稍扩大,即扩大到主机中的传输层。由于传输层使用了 TCP,使得端到端的数据传输变得可可靠,因此这样扩大了范围的因特网就成了可靠地网络。“互联网提供的提供的数据传输是不可靠的”或“互联网提供的数据传输是可靠的”这两种说法都可以在文献中找到,但是关键在于如何界定互联网的范围。如果说互联网提供的数据传输不可靠,那么这里的互联网指的时不包括主机在内的网络(仅有物理层、数据链路层和网络层);如果说互联网提供的数据传输是可靠的,那么这里的互联网包含主机的传输层。

    3.4.3 滑动窗口机制

    • 只有在接受窗口向前滑动时(与此同时也发送了确定),发送窗口才有可能向前滑动。
    • 可靠传输机制包括 停止-等待协议、后退 N 帧协议和选择重传协议。从滑动床阔的层次上看,这三种协议知识在发送窗口和接收窗口的大小上有所区别。
      1. 停止-等待协议:发送窗口大小 = 1,接收窗口大小 = 1.
      2. 后退 N 帧协议:发送窗口大小 > 1,接收窗口大小 = 1.
      3. 选择重传协议:发送窗口大小 > 1,接收窗口大小 > 1.
    • 当接受窗口大小等于 1 时,一定可以保证帧按照顺序接受。

    补充:为什么不管发送窗口多大,只要当接受窗口大小等于 1 时,一定可以保证帧按照顺序接受?
    答:因为接受窗口为 1,所以里面有一个唯一的帧序号,不管发送窗口一次性可以发送多少字节的数据,接收窗口只选择接收窗口里的帧序号接受,只有等到该帧,接受窗口才会向后移动,所以按照这样的顺序接受的帧一定是有序的。

    3.4.4 停止-等待协议

    • 怎么去实现可靠传输?
      可靠传输指的是发送方发送什么,接收方就受到什么,一般而言,使用确定(发送确认)超时重传两种机制来共同完成。确认帧是一个没有数据部分的控制帧,只是用来告诉发送方的某一帧已经收到了。有时候,为了提高传输效率,将确认捎带在一个回复帧中,称为捎带确认。
      超时重传是指发送方在发送一个数据桢时设置一个超市计时器,如果在规定的时间限制之内没有收到该帧的确认,那么就重新发送该数据帧。导致发送方没有收到确认得的原因有以下两种:1. 当接收方检测到出错帧时,接收方直接丢弃该帧,而不返回确认。2. 该帧在传输过程中丢失。
      使用确认和超时重传两种机制实现可靠传输的策略又称为自动请求重发(ARQ)

      稍待确认与累计确认有什么区别?
      答:
      捎带确认:每两个发送数据的站都是通过全双工连接的,每个站既维持发送窗口也维持接收窗口,但是在课本中,为了讲解清楚,仅仅是单方向发送,所以在同一时间某站可能即使发送数据又发送确认,这样就可以将确认放到数据里面一起发过去,这就是捎带确认;
      累计确认:还有一种情况是接收方没收到 K 个帧就发送一个 ACK 告知发送方已经正确接受前 (K-1) 个帧并期待第 K 个帧,有人可能会问那发送方在发送第一个帧设计的计时器早就超时了,没错,这种可能性相当大,所以与超市的就要单独发 ACK ,以免发送方一直放松,这就是累计确认。

    • 停止-等待协议
      从名称上可以看出,停止-等待协议是基于停止-等待流量控制技术的。从滑动窗口的角度来看就是其发送窗口大小等于 1,接收窗口大小也是 1.
      基本思想:发送方传输一个帧之后,必须等待对方的确认才能发送下一帧。如果在规定的实践之内没有收到确认,则发送方超时,并重传原始帧。
      有人会问,停止-等待流量控从v行程序制技术(这里是停止-等待流量控制技术而不是停止-等待协议)为什么要一直在等待?为什么不设置一个规定时间?我们来看协议的指定。首先协议需要建立在一定的技术(停止-等待流量控制技术)之上,然后在此技术上需要考虑一切可能突发的不利状况(可以理解:协议 = 技术 + 考虑不利因素,即 停止-等待协议 = 停止-等待流量控制技术 + 不利因素),设定规定时重传就是为了解决这些不利因素。如果不设定时间就会造成死锁,这样就无法推进,在这里可以联想操作系统的死锁,如果没有外力参与打破死锁,就会一直等待下去,而这个外力就是重传计时器。
      停止-等待协议会出现的差错主要有以下两大类:

      1. 帧一般被分为数据帧和确认帧。
      2. 第一类错误就是数据帧被损坏或者丢失,那么接收方在进行差错校验时,会被检测出来。处理数据帧被损坏的情况时,使用计时器可以解决。这样发送方再发送一个帧之后,如果数据能够被正确的接收到,那么就接收方就发送一个确认帧,没有问题;如果接收方接收到的是一个被损坏的数据帧,则直接丢弃,此时发送方处于等待状态,直到计时器超市,发送方就会重新发送这个数据帧,如此重复,直到这一个数据帧无错误地到达接收方为止。
      3. 第二类错误就是确认帧被破坏或者丢失。一旦确认帧被破坏或者丢失,造成的后果就是发送方会不断地重新发送该帧,从而导致接收方不断地重复接受该帧。如何解决?显然,对于接收方而言,需要有能力区分某一帧是新帧还是重复帧。解决方法很简单,让发送方再每一个待发地帧地头部加一个编号,而接收方对每一个到达的帧地编号进行识别,判断是新帧还是需要抛弃的重复帧。

      疑问:确认帧需要序号吗?考虑以下条件:假设 a 发送 1 号帧给 b,b收到,但是 b 发送给 a 的确认帧在网路中堵塞了,于是当 a 端的计时器超时后看,a 又重新发送了 1 号帧,此时,b 又收到了一个 1 号帧。就在此时,b 发送的第一个确认帧到达 a,于是 a 发送 2 号帧,但是 b 没有收到,但此时 b 的第二个确认帧到达了 a 端,如果确认帧没有编号,因此 a 认为 b 收到了 2 号帧,这难道不是发生了错误吗?
      解析:这个问题的本身在于技术演变,题目的分析也没有错误,很好的说明了需要对确认帧进行编号才能够正常工作。但是由于目前的数据链路层协议是用于点对点的链路上,而在条件固定的链路上,数据的往返时延一般比较稳定,不会出现忽大忽小地大幅度起伏变化。而在这种情况下,如果选择合适大小地超时重传时间,那么对于确认帧没有序号的停止-等待协议也是可以工作的。
      因此,在讨论停止-等待协议的原理时,有时也省略了确认帧中的序号。从严格意义上讲,既然协议应当保证在任何不利情况下都能正常工作,那么完整的停止-等待协议的确认帧就应当存在序号。

    3.4.5 后退N帧(GBN)协议

    • 后退 N 帧协议基于滑动窗口流量控制技术。如果采用 n 个比特对帧进行编号,其发送窗口尺寸 WT 必须满足 1<WT2n1 ,接受窗口尺寸为 1.如果发送床阔尺寸大于 2n1,会造成接收方无法分辨新、旧数据帧的问题。由于接受窗口尺寸为 1,因此接收方只能按序来接受数据帧。
    • 基本原理:发送方发送完一个数据帧之后,不是停下来等待确认帧,而是可以连续再发送若干个数据帧。如果这时候收到了接收方的数据帧,那么还可以接着发送数据帧。如果某一个帧出错了,接收方只能简单地丢弃该帧及其所有的后续真。发送方超时后需要重新发出该出错帧及其后续的所有帧。由于检查了等待时间,后退 N 帧协议使得整个通信的吞吐量得到了提高。但接收方一发现错误帧,就不再接收后续的帧,造成一定量的浪费,据此改进,得到了选择重传协议。
      补充:为什么后退 N 帧协议的发送窗口尺寸 WT 必须满足 1<WT2n1 ?
      答:假设发送的窗口的大小为 2n,发送方发送了 0 号帧,接收窗口发送 ACK1(0 号帧已经收到,希望接受 1 号帧,但是 ACK1丢失),接着发送方发送了 1 号帧,接收窗口发送 ACK2( 1 号帧已经收到,希望接受 2 号帧,但是 ACK2 丢失),依次推类,知道发送方发送了第 2n1 号帧,,接收方发送 ACK 2n(丢失),此时不能再发送数据了,因为已经发送了 2n 个帧,但是一个确认都没有收到,所以过一段时间 0 号帧的计时器会到达预定的时间进行重发,此时发过去接受方认为是新一轮 0 号帧还是旧一轮重传的呢?接收方并不知道,所以很有可能接收方就把新一轮的 0 号帧当作旧一轮的帧接受了,但实际上这个 0号帧是重传的,所以出现了错误,即发送窗口的大小不能是 2n .
      现在假设发送窗口的大小为 2n1,情况和上面一样,发送方发送 0 ~ 2n2 号帧,接收方发送的确认帧都丢失了,如果没有丢失就应该继续传送 2n1号帧,但是丢失了,发送方应该发送 0 号帧,由于这种情况接收方可以判断出来(下一这帧只要不是第 2n1 号帧就重传),因此不会发送错误。如果接收方窗口尺寸小于 2n1,那么就更不会发生错误了。
      综上所述,后退 N 帧协议的最大发送窗口是 2n1.

    3.4.6 选择重传(SR)协议

    • 选择重传协议也是基于滑动窗口流量控制技术的。它的接受窗口尺寸和发送窗口尺寸都大于 1,以便能够一次性接受多个帧。如果采用 n 个比特对帧机型编号,为了避免接受端向前移动窗口后,新接收窗口与旧接收窗口产生重叠,发送窗口的最大尺寸应该不超过序列号范围的一般:WT2n1.当发送窗口取最大值时,WR=WT=2n1(大部分情况都是发送窗口等于接收窗口并且都等于 2n1,因为在这种情况下可以达到最大效率),此时,如果 WT 取大于 2n1 的值,可能造成新、旧接收窗口重叠。
    • 基本思想:如果某一帧出错,其后续帧先存入接收方的缓冲区中,同时要求发送方重新传输出错帧,就和原先存在缓冲区的其余帧一起按照正确的顺序送到主机。选择重传协议避免了重复传输那些本来已经正确到达接收方的数据帧,进一步提高了信道利用率,代价是增加了缓冲空间。
      补充:为什么选择重传协议的最大发送窗口大小是 2n1
      答:现在先假设选择重传协议的最大发送窗口是 W,那么可以一次性发送 0 ~ W - 1 号帧,并且接收方都已经收到了(就是说,这 W 个确认帧都已经发了),但是这 W 个确认帧全部在传输过程中丢失了,此时接收窗口的位置已经移动到 W ~ 2W - 1. 如果发送方再发一轮,这 W 个帧应该落在W ~ 2W - 1上,但是此时的 W 帧是重传的,所以如要正确,就必须满足 2W - 1 是在最大序号 2n1之内,也就是说 2W12n1,即 W2n1.
      由于选择重传协议的最大发送窗口是 2n1 还是比较难以理解的。举个例子,假设 n=3 ,则 2n1=4.如果发送窗口和接收窗口为 5. 假设 t1 时刻发送方发送序号为 0~4 的帧 ,t2 时刻接收方收到序号为 0~4 的帧,但是确认帧在传输过程中丢失了。于是,发送方在 t3时刻重新发送帧0,当t4时刻接收方收到帧 0时候,由于帧0 在其接受范围之内, 0 被错误的当作下一个新帧接受,导致协议错误。因此 W2n1.

      另外一个疑问点:如果不按需接受,交给主机时不是全部乱套了?
      答:如果没有按序,正确的接受帧先存入接收方的缓冲区中,同时要求发送方重传出错帧,一旦接收到重传帧之后,就和原先存在缓冲区的其余帧按照正确的顺序发送到主机。所以说选择重选协议避免了重复传输那些本来已经正确到达接收方的数据帧,进一步提高了信道的利用率,但是代价是增加了缓冲空间。

    3.4.7 发送缓存和接受缓存

    • 发送窗口与发送缓存的区别:
      image.png-20.7kB
    • 接收窗口与接受缓存的区别:
      image.png-24.4kB
    • 从上图中可以看到,在接收窗口中,按序到达的且没有被交付给主机的帧被放到接受缓存(接收窗口外的那一部分的接受缓存,一下所述的接受缓存都是指这里)里(因为已经发送过确认帧了,仅仅是等待主机的应用程序来取),而不是接收窗口里面。那些不是按序到达的数据且没有错误的帧一定是要放在接受窗口里面,因为这些帧不能直接给主机,而是放在接受缓存的帧是要给主机的,等到缺少的帧到达之后,在一起放到接受缓存中,这一点注意区分。
    • 发送窗口的大小不一定等于接受窗口的大小(但是在通常情况下是等于的)。
    • 当计算机的两个进程(同一个机器中或者两台不同的机器中)进行通信时,如果发送进程将数据直接发送给接受进程,那么接受与发送两个动作是非常难协调的。因为计算机的动作十分快,如果在某一时刻接受进程开始执行接受的动作,但是发送进程的发送动作稍微晚一点或者早一点,这都会导致接受失败(在收发双方事先没有及逆行同步的情况下,发送时刻不可能精确的吻合)。
    • 综上所述,在计算机进程之间的通信中,广泛使用缓存。缓存就是izai计算机的存储器中设置一个临时存放数据的空间。发送进程将想要发送的数据先写入缓存,然后接受进程在合适的时机独处这些数据。缓存很好的解决发送速率和接受速率不一致的矛盾,还可以很方便地进行串并转换,即比特流串行写入并行读出,或并行写出串行读出。缓存也可以称作缓冲或者缓冲区。

    我的微信公众号

    2019-04-21 15:50:56 dhjxncu 阅读数 937

    根据之前对计算机网络OSI参考模型的学习,我们知道网络体系结构的第二层是数据链路层,那么数据链路层有什么功能,主要发挥什么作用呢?为此,我总结了三点:1、数据链路层完成网络之间相邻节点的可靠传输;2、物理层传输的是比特流(Bit),那么数据链路层传输的就是帧(Frame);3、数据链路层是通过MAC(Media Access Control)地址负责主机之间数据的可靠传输。那么要完成这些功能,数据链路层有哪些设备呢?数据链路层的主要设备有网卡(NIC,Network Interface Card)、网桥(Bridge)、交换机(Switch)。

    网卡也叫网络适配器,是连接计算机与网络之间的硬件设备。网卡的主要功能是整理计算机发往网线的数据,并且将数据分解成适当大小的数据包之后向网络上发送出去。网卡的MAC地址是在它被生产时厂家烧录到ROM(Read Only Memory只读存储)中的,是唯一且不可更改的。那么我们通常如何查看自己电脑的网卡的MAC地址呢?通常查看本机网卡的MAC地址用命令:ipconfig[空格]/all,MAC地址用十六进制表示,如Physical Address:00-1A-4B-59-A2-45,占用48个bit,前24bit表示生产厂商,后24个bit表示设备编号。
    网卡
    网桥的主要作用是将两个LAN连接在一起,并且按MAC地址进行数据转发,同时网桥还可以分隔冲突域。
    网桥
    交换机的工作过程是根据源MAC地址学习,目标MAC地址转发。交换机有3种转发方式:1、对已知单播帧,只往对应端口转发;2、对未知的单播帧,即交换机还没有学习到的目的MAC地址,会进行广播(发往除接收端口以外的所有端口);3、对广播帧或者组播帧进行广播。
    交换机
    来讨论讨论交换机的分类,交换机按功能可以分为三大类:1、传统二层交换机,它比集线器多了MAC地址表功能,属于数据链路层,有一个广播域和多个冲突域;2、VLAN型交换机,它是可以网管的交换机,多了VLAN功能,属于数据链路层,有多个广播域和多个冲突域;3、三层交换机,三层交换机是VLAN型交换机+路由器,是属于网络层的设备,出于安全考虑,实际工程中使用三层交换机居多。

    最后替初学者提三个问:
    初学者问1:交换机有几个冲突域和几个广播域?
    网络雇佣军答:交换机有几个端口就有几个冲突域,且只有一个广播域。

    初学者问2:交换机和网桥的区别?
    网络雇佣军答:网桥通常只有2个端口,交换机至少有4个端口,也要24、48或更多端口的交换机。网桥是基于软件转发,交换机是基于硬件转发,所以它的造价比网桥低。

    初学者问3:两个端口的网桥有几个冲突域和就几个广播域?
    网络雇佣军答::有两个冲突域和一个广播域。

    初学者问4:网桥和集线器比,哪个工作速度更快?
    网络雇佣军答:因为网桥要比集线器处理更多的事情,如添加MAC地址表,进行MAC地址表的转发,因此速度要比集线器慢。

    最近在回顾计算机网络的基础知识,有兴趣学习的同学,可以扫面下方二维码,或者搜索【资深无证 IT man】关注我的微信公众号,后续的学习将继续在微信公众号中更新。
    在这里插入图片描述

    2018-08-19 17:10:00 zx48822821 阅读数 1120

    前言

    数据链路层与物理层组合起来对应实际广泛应用的 TCP/IP 协议中的网络接口层,数据链路层不必考虑物理层如何实现比特传输的细节。

    数据链路层定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。并提供功能上和规程上的方法,以便建立、维护和释放网络实体间的数据链路 。

    数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:

    1. 如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;
    2. 如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;
    3. 以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。

    而本文将着重介绍以上知识,对于谢老师书中的4(拓展的以太网)、5(高速以太网)小节略去,有需要的请自行阅读书籍。

    数据链路和数据帧

    物理链路(物理线路)

    是由传输介质与设备组成的。原始的物理传输线路是指没有采用高层差错控制的基本的物理传输介质与设备。当采用复用技术时,一条物理链路上可以有多条数据链路。

    这里要再强调一下,为什么物理链路是属于数据链路层里,而不属于物理层。因为物理层是为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。简单的说,就是“信号和介质”。

    数据链路(逻辑线路)

    在一条物理线路之上,通过一些规程或协议来控制这些数据的传输,以保证被传输数据的正确性。实现这些规程或协议的硬件和软件加到物理线路,这样就构成了数据链路。从数据发送点到数据接收点(点到点 point to point)所经过的传输途径。

    数据帧

    是数据链路层的协议数据单位。它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包。

    在发送端,数据链路层把网络层传下来得数据封装成帧,然后发送到链路上去;在接收端,数据链路层把收到的帧中的数据取出并交给网络层。不同的数据链路层协议对应着不同的帧,所以,帧有多种,比如PPP帧、MAC帧等,其具体格式也不尽相同。

    为了把主要精力放在点对点信道的数据链路层协议上,可以采用如下图所示的三层模型。在这种三层模型中,不管在哪一段链路上的通信(主机和路由器之间或两个路由器之间),我们都看成是结点和结点的通信(如图中的结点A和B),而每个结点只有下三层——网络层、数据链路层和物理层。

    三个基本问题

    数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题是:封装成帧、透明传输和差错检测。下面分别讨论这三个基本问题。

    封装成帧

    封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。下图表示用帧首部和帧尾部封装成帧的一般概念。

    一个帧的帧长等于帧的数据部分长度加上帧首部和帧尾部的长度。首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。我们知道,ASCII码是7位编码,一共可组合成128个不同的ASCII码,其中可打印的有95个,而不可打印的控制字符有33个。下图的例子可说明帧定界的概念。控制字符SOH (Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT (End Of Transmission)表示帧的结束。请注意,SOHEOT都是控制字符的名称。它们的十六进制编码分别是01(二进制是00000001)和04(二进制是00000100)。SOH(或EOT)并不是S, O, H(或E, O, T)三个字符。由于使用了帧定界符,接收端就知道前面收到的数据是否是个不完整的帧,进而判定是否丢弃。

    透明传输

    但当帧的数据部分是非ASCII码的文本文件时(如二进制代码的计算机程序或图像等),情况就不同了。如果数据中的某个字节的二进制代码恰好和SOHEOT这种控制字符一样,数据链路层就会错误地“找到帧的边界”,把部分帧收下(误认为是个完整的帧),而把剩下的那部分数据丢弃。

    透明是一个很重要的术语。它表示:某一个实际存在的事物看起来却好像不存在一样(例如,你看不见在你前面有块100%透明的玻璃的存在)。在数据链路层透明传送数据表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层。因此,对所传送的数据来说,这些数据就“看不见”数据链路层有什么妨碍数据传输的东西。或者说,数据链路层对这些数据来说是透明的。

    为了解决透明传输问题,就必须设法使数据中可能出现的控制字符SOHEOT在接收端不被解释为控制字符。具体的方法是:发送端的数据链路层在数据中出现控制字符SOHEOT的前面插入一个转义字符ESC(其十六进制编码是1B,二进制是00011011)。而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)字符填充(character stuffing)。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。下图表示用字节填充法解决透明传输的问题。

    明白了吗,字节填充的ESC对于发送及接收双方就像玻璃一般,实际存在,但又不被觉察。这就是透明传输。

    差错检测

    现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错1可能会变成0,而0也可能变成1。这就叫做比特差错。比特差错是传输差错中的一种。本小节所说的“差错”,如无特殊说明,就是指“比特差错’。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER (Bit Error Rate)。例如,误码率为10^-10时,表示平均每传送10^10个比特就会出现一个比特的差错。误码率与信噪比有很大的关系。如果设法提高信噪比,就可以使误码率减小。实际的通信链路并非是理想的,它不可能使误码率下降到零。因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC (Cyclic Redundancy Check)的检错技术。有兴趣的话可以进行查阅。

    点对点协议PPP

    我们知道,互联网用户通常都要连接到某个ISP才能接入到互联网。PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议,如下图

    主要是用来通过拨号或专线方式在两个网络节点之间建立连接、发送数据。PPP是各类型主机、网桥和路由器之间简单连接的一种解决方案。PPP协议在RFC1661中有详细的描述。 PPP协议是目前广域网上应用最广泛的协议之一,它的优点在于简单、具备用户验证能力、可以解决IP分配等。

    PPP特征

    PPP协议应满足的需求:

    1. 简单

      数据链路层没有必要提供比IP协议更多的功能,IETF把“简单”作为首要的需求。协议非常简单:接收方每收到一个帧,就进行CRC检验。如CRC检验正确,就收下这个帧;反之,就丢弃这个帧,其他什么也不做。

    2. 封装成帧。如上文。

    3. 透明传输。如上文。

    4. 多种网络层协议。

      PPP协议必须能够在在同一条物理链路上同时支持多种网络层协议(如IPIPX等)的运行。当点对点链路所连接的是局域网或路由器时,PPP协议必须同时支持在链路所连接的局域网或路由器上运行的各种网络层协议。

    5. 多种类型链路

      除了要支持多种网络层的协议外,PPP还必须能够在多种类型的链路上运行。例如,串行的(一次只发送一个比特)或并行的(一次并行地发送多个比特),同步的或异步的,低速的或高速的,电的或光的,交换的(动态的)或非交换的(静态的)点对点链路。

    6. 差错检测。如上文。

    7. 检测连接状态

      PPP协议必须具有一种机制能够及时(不超过几分钟)自动检测出链路是否处于正常工作状态。

    8. 最大传送单元

      PPP协议必须对每一种类型的点对点链路设置最大传送单元MTU的标准默认值。这样做是为了促进各种实现之间的互操作性。如果高层协议发送的分组过长并超过MTU的数值,PPP就要丢弃这样的帧,并返回差错。需要强调的是,MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度。

    9. 网络层地址协商

      PPP协议必须提供一种机制使通信的两个网络层(例如,两个IP层)的实体能够通过协商知道或能够配置彼此的网络层地址。协商的算法应尽可能简单,并且能够在所有的情况下得出协商结果。这对拨号连接的链路特别重要,因为如果仅仅在链路层建立了连接而不知道对方网络层地址,则还不能够保证网络层可以传送分组。

    10. 数据压缩协商

      PPP协议必须提供一种方法来协商使用数据压缩算法。但PPP协议并不要求将数据压缩算法进行标准化。

    PPP协议有三个组成部分:

    1. 一个将IP数据报封装到串行链路的方法。

      PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。

    2. 一个用来建立、配置和测试数据链路连接的链路控制协议LCP (Link Control Protocol)

      通信的双方可协商一些选项。在RFC 1661中定义了11种类型的LCP分组。

    3. 一套网络控制协议NCP (Network Control Protocol)

      其中的每一个协议支持不同的网络层协议,如IP, OSI的网络层、DECnet,以及AppleTalk等。

    PPP协议的帧格式

    1. 各字段意义

      PPP的帧格式如下图:

      • 首部中的标志字段 F(Flag) ,规定为0x7E(符号0x表示它后面的字符是用十六进制表示的。十六进制7E二进制表示是01111110),标志字段表示一个帧的开始。
      • 首部中的地址字段A规定为0xFF(即11111111)。
      • 首部中的控制字段C规定为0x03(即00000011)。
      • 首部中的2字节的协议字段
        • 当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。
        • 当协议字段为0xC021时,PPP帧的信息字段就是PPP链路控制协议LCP的数据。
        • 当协议字段为0x8021时,PPP帧的信息字段就是网络层的控制数据。
      • 尾部中的第一个字段(2字节)是使用CRC的帧检验序列FCS 。
    2. 字节填充

      当信息字段中出现和标志字段一样的比特(0x7E)组合时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。

      当PPP使用异步传输时,它把转义符定义为0x7D(即01111101),并使用字节填充,

      RFC 1662规定了如下所述的填充方法:

      1. 把信息字段中出现的每一个0x7E字节转变成为2字节序列(0x7D,0x5E) 。
      2. 若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把0x7D转变成为2字节序列(0x7D, 0x5D)。
      3. 若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要把它转变为2字节序列(0x7D, 0x23) 。

      由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数。但接收端在收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息。

    3. 零比特填充

      PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续传送)而不是异步传输(逐个字符地传送)。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。如下图:

    PPP协议的工作状态

    使用广播信道的数据链路层

    广播信道可以进行一对多的通信。下面要讨论的局域网使用的就是广播信道。局域网是在20世纪70年代末发展起来的。局域网技术在计算机网络中占有非常重要的地位。

    局域网的数据链路层

    局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。在局域网刚刚出现时,局域网比广域网具有较高的数据率、较低的时延和较小的误码率。但随着光纤技术在广域网中普遍使用,现在广域网也具有很高的数据率和很低的误码率。

    局域网具有如下一些主要优点:

    1. 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
    2. 便于系统的扩展和逐渐演变,各设备的位置可灵活调整和改变。
    3. 提高了系统的可靠性(reliability)、可用性(availability)和生存性(survivability).

    常见的局域网拓朴结构如下:

    局域网经过了四十年的发展,尤其是在快速以太网(100 Mbit/s)和吉比特以太网((1 Gbit/s)。 10吉比特以太网(10 Gbit/s)相继进入市场后,以太网已经在局域网市场中占据了绝对优势。现在以太网几乎成为了局域网的同义词,因此本文从此节开始都是讨论以太网技术。

    必须指出,局域网工作的层次跨越了数据链路层和物理层。由于局域网技术中有关数据链路层的内容比较丰富,因此我们就把局域网的内容放在数据链路层这一章中讨论。但这并不表示局域网仅仅和数据链路层有关。

    在实际工作中,经常会遇到多个用户(计算机或终端)要同时与一个主机相连。若每个用户都用独立的信道与主机相连,则往往要消耗很多的通信线路资源。因此,只要有可能,就应尽量采用信道共享。信道共享可以提高信道资源的利用率。但却有一个严重的问题,当多个站点同时发送数据时将会产生冲突。为了解决这个问题,目前已有多种技术。大致分为两类:

    1. 静态划分信道

      上一篇文章已经介绍过的频分复用、时分复用、频分复用和码分复用等。用户只要分配到了信道就不会和其他用户发生冲突。但这种划分信道的方法代价较高,不适合于局域网。

    2. 动态媒体接入控制

      它又称为多点接入(multiple access),其特点是信道并非在用户通信时固定分配给用户。这里又分为以下两类:

      1. 随机接入

        随机接入的特点是所有的用户可随机地发送信息。但如果恰巧有两个或更多的用户在同一时刻发送信息,那么在共享媒体上就要产生碰撞(即发生了冲突),使得这些用户的发送都失败。因此,必须有解决碰撞的网络协议。

      2. 受控接入

        受控接入的特点是用户不能随机地发送信息而必须服从一定的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路探询(polling),或称为轮询

      属于随机接入的以太网将被重点讨论。受控接入则由于目前在局域网中使用得较少,不再讨论。

    以太网

    上文提到,现在以太网几乎成为了局域网的同义词,由于以太网的数据率己演进到每秒吉比特或甚至高达100吉比特,因此通常就用“传统以太网”来表示最早流行的10 Mbit/s速率的以太网。为了讨论原理,下面我们就从传统以太网开始。

    1. 以太网的两个标准

      以太网的两个标准DIX Ethernet V2IEEE802.3标准只有很小的差别,因此很多人也常把802.3局域网简称为“以太网”(严格说来,“以太网”应当是指符合DIX Ethernet V2标准的局域网)。

      然而到了20世纪90年代后,以太网在局域网市场中己取得了垄断地位,并且几乎成为了局域网的代名词。由于互联网发展很快而TCP/IP体系经常使用的局域网只剩下DIX Ethernet V2而不是IEEE 802.3标准中的局域网,因此之前IEEE 802委员会为了使数据链路层能更好地适应多种局域网标准而制定的逻辑链路控制子层LLC(即IEEE 802.2标准)的作用已经消失了,很多厂商生产的适配器上就仅装有MAC协议而没有LLC协议。后面在介绍以太网时就不再考虑LLC子层。这样对以太网工作原理的讨论会更加简洁。

    2. 适配器的作用

      其实这里提到的适配器就是网卡。由于现在计算机主板上都己经嵌入了这种适配器,不再使用单独的网卡了,因此
      使用适配器这个更准确的术语。适配器是工作在数据链路层的网络组件,是局域网中连接计算机和传输介质的接口,不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及帧的发送与接收、帧的封装与拆封、介质访问控制、数据的编码与解码以及数据缓存的功能等。

      请注意,虽然我们把适配器的内容放在数据链路层中讲授,但适配器所实现的功能却包含了数据链路层及物理层这两个层次的功能。现在的芯片的集成度都很高,以致很难把一个适配器的功能严格按照层次的关系精确划分开。

    3. CSMA/CD协议

      CSMA/CD(Carrier Sense Multiple Access/collision detection,带有冲突检测的载波侦听多路存取)是IEEE 802.3使用的一种媒体访问控制方法。从逻辑上可以划分为两大部分:数据链路层的媒体访问控制子层(MAC)和物理层。它严格对应于ISO开放系统互连模式的最低两层。LLC子层和MAC子层在一起完成OSI模式的数据链路层的功能。

      为什么要采用CSMA/CD协议:

      最早的以太网是将许多计算机都连接到一根总线上。当初认为这种连接方法既简单又可靠,因为在那个时代普遍认为:“有源器件不可靠,而无源的电缆线才是最可靠的”。而总线的特点是当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据。这种就是广播通信方式。总线上只要有一台计算机在发送数据,总线的传输资源就被占用。因此,在同一时间只能允许一台计算机发送数据,否则各计算机之间就会互相干扰,使得所发送数据被破坏。因此,如何协调总线上各计算机的工作就是以太网要解决的一个重要问题。因此采用CSMA/CD协议来解决这一问题。

      CSMA/CD的基本原理是:

      1. 多点接入

        所有节点都共享网络传输信道。

      2. 载波监听

        不管在发送前,还是在发送中,每个站都必须不停地检测信道。

        在发送前检测信道,是为了获得发送权。如果检测出已经有其他站在发送,则自己就暂时不许发送数据,必须要等到信道变为空闲时才能发送。在发送中检测信道,是为了及时发现有没有其他站的发送和本站发送的碰撞。这就称为碰撞检测。关于碰撞的计算若有兴趣请自行查阅。

    使用集线器的星型拓扑

    集线器的英文称为“Hub”。“Hub”是“中心”的意思,集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上,使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线。

    它工作于“物理层”。集线器与网卡、网线等传输介质一样,属于局域网中的基础设备,采用CSMA/CD(即带冲突检测的载波监听多路访问技术)介质访问控制机制。集线器每个接口简单的收发比特,收到1就转发1,收到0就转发0,不进行碰撞检测。

    集线器(hub)属于纯硬件网络底层设备,基本上不具有类似于交换机的”智能记忆”能力和”学习”能力。它也不具备交换机所具有的MAC地址表,所以它发送数据时都是没有针对性的,而是采用广播方式发送。也就是说当它要向某节点发送数据时,不是直接把数据发送到目的节点,而是把数据包发送到与集线器相连的所有节点,如图所示,简单明了。

    以太网的信道利用率

    信道利用率就是信道平均被占用的程度。如果信道利用率是10%,就表示这个信道平均在10%的时间是被成功利用的(处于忙的状态),而平均在90%的时间是不被成功利用的(处于空闲或冲突状态)。

    上图为一帧发送平均时间的简单图示。据统计,当以太网的利用率达到30%时就己经处于重载的情况。很多的网络容量被网上的碰撞消耗掉了。信道利用率的计算若有兴趣请自行查阅。

    以太网的MAC层

    1. MAC层的硬件地址

      在局域网中,硬件地址又称为物理地址MAC地址(因为这种地址用在MAC帧中)。大家知道,在所有计算机系统的设计中,标识系统(identification system)都是一个核心问题。在标识系统中,地址就是识别某个系统的一个非常重要的标识符。

      在讨论地址问题时,很多人常常引用著名文献[SHOC78]给出的如下定义:名字指出我们所要寻找的那个资源,地址指出那个资源在何处,路由告诉我们如何到达该处。这个非形式的定义固然很简单,但有时却不够准确。严格地讲,名字应当与系统的所在地无关。这就像我们每一个人的名字一样,不随我们所处的地点而改变。IEEE 802标准为局域网规定了一种48位的全球地址(一般都简称为“地址”),是指局域网上的每一台计算机中固化在适配器的ROM中的地址。严格地讲,局域网的“地址”应当是每一个站的“名字”或标识符[PERLOO] 。不过计算机的名字通常都是比较适合人记忆的不太长的字符串,而这种48位二进制的“地址”却很不像一般计算机的名字。现在人们还是习惯于把这种48位的“名字”称为“地址”,尽管这种说法并不太严格。

    2. MAC帧的格式

      常用的以太网MAC帧格式有两种标准,一种是DIX Ethernet V2标准(即以太网V2标准),另一种是IEEE802.3标准。这里只介绍使用得最多的以太网V2的MAC帧格式。如下图,图中假定网络层使用的是IP协议。实际上使用其他的协议也是可以的。

      以太网V2的MAC帧较为简单,由五个字段组成。前两个字段分别为6字节长的目的地址源地址字段。第三个字段是2字节的类型字段,用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。例如,当类型字段的值是0x0800时,就表示上层使用的是IP数据报。若类型字段的值为0x8137,则表示该帧是由Novell IPX发过来的。第四个字段是数据字段,其长度在46到1500字节之间(46字节是这样得出的:最小长度64字节减去18字节的首部和尾部就得出数据字段的最小长度)。最后一个字段是4字节的**帧检验序列**FCS(使用CRC检验)。当传输媒体的误码率为1x10^-8时,MAC子层可使未检测到的差错小于1x10^-14。

      从上图可看出,在传输媒体上实际传送的要比MAC帧还多8个字节。这是因为当一个站在刚开始接收MAC帧时,由于适配器的时钟尚未与到达的比特流达成同步,因此MAC帧的最前面的若干位就无法接收,结果使整个的MAC成为无用的帧。为了接收端迅速实现位同步,从MAC子层向下传到物理层时还要在帧的前面插入8字节(由硬件生成),它由两个字段构成。第一个字段是7个字节的前同步码((1和0交替码),它的作用是使接收端的适配器在接收MAC帧时能够迅速调整其时钟频率,使它和发送端的时钟同步,也就是“实现位同步”(位同步就是比特同步的意思)。第二个字段是帧开始定界符,定义为10101011。它的前六位的作用和前同步码一样,最后的两个连续的1就是告诉接收端适配器:”MAC帧的信息马上就要来了,请适配器注意接收”。MAC帧的FCS字段的检验范围不包括前同步码和帧开始定界符。顺便指出,在使用SONET/SDH进行同步传输时则不需要用前同步码,因为在同步传输时收发双方的位同步总是一直保持着的。

      IEEE 802.3标准规定凡出现下列情况之一的即为无效的MAC帧:

      1. 帧的长度不是整数个字节
      2. 用收到的帧检验序列FCS查出有差错
      3. 收到的帧的MAC客户数据字段的长度不在46一1500字节之间.考虑到MAC帧省部和尾部的长度共有18字节,可以得出有效的MAC帧长度为64一1518字节之间。

      对于检查出的无效MAC帧就简单地丢弃。以太网不负责重传丢弃的帧。

    参考

    1. PPP协议的帧格式 —— Cainv89
    2. 数据链路层 —— 百度百科
    3. 网卡 —— 百度百科
    4. CSMA/CD协议 —— 百度百科
    5. 集线器 —— 百度百科