感觉这可能是最后一次认真的学习数据链路层了,以后TCP/IP/HTTP还会再去看专门的书,但是数据链路层有可能以后不会接触了。所以我觉得很有必要认真的记录和总结一次。大学已经过去了3/4,大四应该也都在工作中度过。最近体验比较深,珍惜现在的时光。我爱我的室友。这篇文章主要是记录我最想知道,也是我以后还想看到的一些知识点。文章里面可能有一些更细节的地方,我不会讲。比如PPP由哪些部分组成之类的。我感觉我记了以后也不会看,所以就干脆记录下我感兴趣的东西。:)
说明:整理和学习自:《计算机网络第6版》 -谢希仁编著。感谢。
数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。–from wiki
链路与数据链路
首先区分下下面两个概念:
链路(link)是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。
一条链路只是一条通路的一个组成部分。
数据链路(data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层的功能。
其实我先前一直不太明白适配器这个东西。下面会有详细点的解释。
链路层两种通信方式
数据链路层使用的信道主要有以下两种类型:
点对点信道。这种信道使用一对一的点对点通信方式。
广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。
数据链路层的数据单元是帧
数据链路层像个数字管道:
常常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单位是帧。
使用点对点通信
三个基本问题
(1) 封装成帧
(2) 透明传输
(3) 差错控制
封装成帧
封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。
首部和尾部的一个重要作用就是进行帧定界。
透明传输
如何解决透明传输问题呢?
发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是 1B)。
字节填充(byte stuffing)或字符填充(character stuffing)——接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现数据当中,那么应在转义字符前面插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
差错检测
在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。
误码率与信噪比有很大的关系。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
这里面又涉及了循环冗余检验的原理,-在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。
注意还要区分下:帧检验序列 FCS
帧检验序列不同与CRC,CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。
PPP协议
现在全世界使用得最多的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。
用户使用拨号电话线接入因特网时,一般都是使用 PPP 协议。
这里面协议具体的格式就不介绍了。就看下里面解决透明传输用的是零比特填充这种方法。
在发送端,只要发现有 5 个连续 1,则立即填入一个 0。接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
为什么点对点协议是数据链路层使用的最多的协议呢?因为它的特点很明显:简单;只检测差错而不是纠正差错;不适用序号,也不进行流量控制,可以同时支持多种网络层协议。
使用广播信道的数据链路层
局域网的数据链路层
局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。
局域网具有如下的一些主要优点:
具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。
提高了系统的可靠性、可用性和残存性。
下面是可能的局域网拓扑结构:
数据链路层的两个子层
为了使数据链路层能更好地适应多种局域网标准,802 委员会就将局域网的数据链路层拆成两个子层:
逻辑链路控制 LLC (Logical Link Control)子层。
媒体接入控制 MAC (Medium Access Control)子层。
但是现在已经不适用LLC。LLC成为了过去时。
适配器的作用
网络接口板又称为通信适配器(adapter)或网络接口卡 NIC (Network Interface Card),或“网卡”。
适配器的重要功能:
进行串行/并行转换。
对数据进行缓存。
在计算机的操作系统安装设备驱动程序。
实现以太网协议。
计算机实际上是通过适配器和局域网进行通信的。
计算机与外界局域网的连接是通过通信适配器。适配器原来是插入主机箱内的一块网络接口板,或者是在个人PC上的一块网络接口板。这种接口板又称为网络接口卡NIC,或者我们经常称它为网卡。
由于现在计算机主板上都已经嵌入了这种适配器,不再单独使用网卡了。因此我们一般可以直接称为适配器了。
适配器和局域网的通信是通过电缆火鹤双绞线以串行传输方式进行的。而适配器和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输的方式进行的。因此适配器的一个重要功能就是要进行数据串行和并行传输的转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此在适配器中必须装有对数据进行缓存的存储芯片。
若在主板上插入适配器时,还必须把管理该适配器的设备驱动程序安装在计算机操作系统上。这个驱动程序以后就会告诉适配器,应当从存储器的什么位置吧多长的数据块发送到局域网。或者应当在存储器的什么位置吧局域网传送的数据块存储下来。适配器还要能实现以太网的协议。
适配器在接收和发送各种帧的时候不使用计算机的CPU,这是CPU可以处理其他的任务。当适配器收到有差错的帧时,就把这个帧丢弃并且不必通知计算机。当适配器收到正确的帧时,它就使用中断来通知该计算机并交付协议栈中的网络层。当计算机要发送IP数据报时,就由协议栈把IP数据报向下交个适配器,组装成帧以后发送到局域网。可以好好看看上面的一个图。
上面的几段文字摘录自《计算机网络第六版》,感谢,因为解决了我很多疑惑,以后别人再说高大上的适配器的时候,我就知道它到底是什么原理了,嘻嘻。
CSMA/CD 协议
最初的以太网是将许多计算机都连接到一根总线上。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。
总线上的每一个工作的计算机都能检测到 B 发送的数据信号。
由于只有计算机 D 的地址与数据帧首部写入的地址一致,因此只有 D 才接收这个数据帧。
其他所有的计算机(A, C 和 E)都检测到不是发送给它们的数据帧,因此就丢弃这个数据帧而不能够收下来。
具有广播特性的总线上实现了一对一的通信。
什么是CSMA/CD协议
载波监听多点接入/碰撞检测 CSMA/CD
CSMA/CD 表示Carrier Sense Multiple Access with Collision Detection
。
“多点接入”表示许多计算机以多点接入的方式连接在一根总线上。
“载波监听”是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。
什么是碰撞检测
这里面要注意一个概念叫做:碰撞检测
“碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。
当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。
当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。
所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”。
在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。
以太网提供的服务
以太网提供的服务是不可靠的交付,即尽最大努力的交付。
当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。差错的纠正由高层来决定。
如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。
使用广播信道的以太网
集线器
传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。
这种以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器(hub)
集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍然像一个传统的以太网那样运行。
使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是 CSMA/CD 协议,并共享逻辑上的总线。
集线器很像一个多接口的转发器,工作在物理层。
以太网的 MAC 层
MAC 层的硬件地址 :在局域网中,硬件地址又称为物理地址,或 MAC 地址。
适配器检查 MAC 地址
- 适配器从网络上每收到一个 MAC 帧就首先用硬件检查 MAC 帧中的 MAC 地址.
- 如果是发往本站的帧则收下,然后再进行其他的处理。
- 否则就将此帧丢弃,不再进行其他的处理。
“发往本站的帧”包括以下三种帧:
- 单播(unicast)帧(一对一)
- 广播(broadcast)帧(一对全体)
- 多播(multicast)帧(一对多)
以太网的 MAC 帧格式
高速以太网
速率达到或超过 100 Mb/s 的以太网称为高速以太网。
当吉比特以太网工作在全双工方式时(即通信双方可同时进行发送和接收数据),不使用载波延伸和分组突发。
扩展的局域网
在物理层扩展局域网
用多个集线器可连成更大的局域网,刚刚说过,集线器运行在物理层。
集线器优点和缺点
用集线器扩展局域网的优点:
使原来属于不同碰撞域的局域网上的计算机能够进行跨碰撞域的通信。
扩大了局域网覆盖的地理范围。
用集线器扩展局域网的缺点:
碰撞域增大了,但总的吞吐量并未提高。
如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。
在数据链路层扩展局域网
在数据链路层扩展局域网是使用网桥。
网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发。
网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口
使用网桥的优点
- 过滤通信量。
- 扩大了物理范围。
- 提高了可靠性。
- 可互连不同物理层、不同 MAC 子层和不同速率(如10 Mb/s 和 100 Mb/s 以太网)的局域网。
网桥使各网段成为隔离开的碰撞域
使用网桥带来的缺点
- 存储转发增加了时延。
- 具有不同 MAC 子层的网段桥接在一起时时延更大。
- 网桥只适合于用户数不太多(不超过几百个)和通信量不太大的局域网,否则有时还会因传播过多的广播信息而产生网络拥塞。这就是所谓的广播风暴。
- 在MAC 子层并没有流量控制功能。
网桥和集线器(或转发器)不同
- 集线器在转发帧时,不对传输媒体进行检测。
- 网桥在转发帧之前必须执行 CSMA/CD 算法。
- 若在发送过程中出现碰撞,就必须停止发送和进行退避。
透明网桥
目前使用得最多的网桥是透明网桥(transparent bridge)。“透明”是指局域网上的站点并不知道所发送的帧将经过哪几个网桥,因为网桥对各站来说是看不见的。
透明网桥是一种即插即用设备,其标准是 IEEE 802.1D。
网桥自学习算法
若从 A 发出的帧从接口 x 进入了某网桥,那么从这个接口出发沿相反方向一定可把一个帧传送到 A。
网桥每收到一个帧,就记下其源地址和进入网桥的接口,作为转发表中的一个项目。
在建立转发表时是把帧首部中的源地址写在“地址”这一栏的下面。
在转发帧时,则是根据收到的帧首部中的目的地址来转发的。这时就把在“地址”栏下面已经记下的源地址当作目的地址,而把记下的进入接口当作转发接口。
具体的步骤是
网桥收到一帧后先进行自学习。查找转发表中与收到帧的源地址有无相匹配的项目。
如没有,就在转发表中增加一个项目(源地址、进入的接口和时间)。如有,则把原有的项目进行更新。转发帧。查找转发表中与收到帧的目的地址有无相匹配的项目。
如没有,则通过所有其他接口(但进入网桥的接口除外)按进行转发。
如有,则按转发表中给出的接口进行转发。
若转发表中给出的接口就是该帧进入网桥的接口,则应丢弃这个帧(因为这时不需要经过网桥进行转发)。
总结
主要是有下面一些知识点:
以太网是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。
数据链路层主要使用的两种类型的信道:1:点对点信道 2:广播信道
三个数据链路层协议实现的基本问题:如何 1.封装成帧 2. 透明传输 3.差错检测
链路和数据链路的区别: 链路是指从一个结点到相邻结点的物理路线,而数据链路是指在链路的基础上还加上了保证运输的协议(包括实现这些协议的软件和硬件)
传输单元是: 帧,区别物理层bit
广播信道的实例:局域网(以太网). 由于以太网在局域网中占绝对优势,所以在今天以太网跟局域网是同义词.必须指出的是局域网工作的层次跨越了数据链路层和物理层。
适配器(网卡): 拥有物理层和数据链路层的功能. 包括RAM(处理器)和ROM(储存器),硬件地址在适配器的ROM中,软件地址即IP地址是在存储器中。
扩展以太网的2种方式:在物理层扩展:使用集线器; 在数据链路层扩展:使用网桥
最后看下下面这张图里面:网关是网络层之上的,路由器是网络层的,网关是数据链路层的,集线器是物理层的。