物理层发出去的信号需要通过数据链路层才知道是否到达目的地;才知道比特流的分界线
- 链路(Link):从一个结点到相邻结点的一段物理线路,中间没有任何其他交换结点
- 数据链路(Data Link):把实现通信协议的硬件和软件加到链路上,就构成了数据链路
- 数据链路层以帧为单位传输和处理数据
数据链路层为数据加上帧首和帧尾使之成为帧的过程
- 帧头和帧尾中含有重要的控制信息
- 帧头帧尾的作用之一就是帧定界(变成比特传输后据此区分每个帧的起始和结束)
- 为了提高帧的传输效率,应当使帧的数据部分长度尽可能大
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(
Maximum Transfer Unit
)
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样(即保证接收方接到的数据是完整的数据)
面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输
帧头帧尾有标志位用来划分一个个帧,如果帧内部恰好也出现了标志位,则在第一次扫描时在标志位前面加一个转义字符帮助区分哪个是真正的帧头。考虑到转义字符也可能在帧内部出现,因此在转义字符前也加转义字符。接收方接到消息后但凡看到转义字符开头就会去掉转义字符并且对其后一个字符不做特殊处理
面向比特的物理链路使用比特填充的方法实现透明传输
零比特填充:在发送前,对帧的数据部分进行扫描,每
5
个连续的比特1
后就插入1
个比特0
,防止其与首部尾部的标志位混淆。接收方接收时将每5
个连续的比特1
后面的0
剔除即可
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:
1
可能变成0
,0
可能变成1
。这叫比特差错在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(
Big Error Rate
)使用差错检测码(如
Mac
帧尾的FCS
)来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
在待发送的数据后面添加
1
位奇偶校验位,使整个数据(包括所添加的校验位在内)中"1
"的个数为奇数(奇校验)或为偶数(偶校验)
比如发送数据001
- 若是奇校验,则在数据后添加
0
,使其成为0001
,1
的个数为奇数。如果传输过程中发生了1
位误码,则1
的个数会变成偶数,据此判断是否发生误码;但是若发生了2
个误码,1
的个数依然为奇数,因此检查不出来- 若为偶校验,则在数据后添加
1
,使其成为1001
,1
的个数为偶数,其他情况与奇校验类似
如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
收发双方约定好一个生成多项式
G(x)
发送方基于待发送的数据和生成多项式计算出差错检测码【冗余码】,将其添加到待传输数据的后面一起传输
接收方通过生成多项式来计算收到的数据是否产生了误码
- CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
- 在计算机网络中通常采用检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
可靠传输:想办法实现发送端发送什么,接收端就收到什么
- 一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
- 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
- 比特差错只是传输差错中的一种,从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复
- 分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层
- 可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输
- 可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求
接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。
为解决该问题
可以在发送方发送完一个数据分组时启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK回或NAK,则重传原来的数据分组,这就叫做超时重传。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”
为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需1个比特编号就够了,即编号0和1
为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号。
相对停止-等待协议多个窗口的概念
接收窗口尺寸只能等于1
,因此接收方只能按序接收正确到达的数据分组
ACK n
表示发送过来的分组x<=n的都收到了与回退
N
帧相比,接收窗口允许多个,且发送窗口最大情况有所变化
ACK
帧的部分不会超时重传数据链路层协议,用于规定帧格式
面向字节的异步链路采用插入转义字符的字节填充法
- 如
PPP
帧的标志字段取值为7E(16进制)
,如果数据中出现7E
则需要在数据前插入转义字符7D(16
进制),并将原来的7E减20(16
进制),所以7E
在数据中最终会变成7D5E
- 如果数据中有转义字符7D怎么办呢?可以在转义字符
7D
前再加一个转义字符7D
,并将数据的7D
减20(16进制)
,于是转义字符7D
在数据中最终会变成7D5D
- 数据中出现的每一个
ASCII
码控制字符【数值小于20(16进制)的字符】,则在该字符前插入一个7D,同时将该字符的编码加上20(16进制)- 接收方只需要反变换即可恢复出原来的帧的数据部分
面向比特的同步链路采用插入比特0的比特填充法
- 发送方:对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立即填充1个比特0
- 接收方:对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,就把其后的1个比特0删除
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(
Medium Access Control
)
复用(Multiplexing)就是通过一条物理线路同时传输多路用户的信号。
当网络中传输媒体的传输容量大于多条单一信道的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽
将传输线路的频带资源划分成多个子频带,形成多个子信道。各子信道之间留出隔离频带,以免造成子信道间干扰。当多个信号输入一个多路复用器时,这个复用器将每一个信号调制到不同频率的载波上,接收端由相应的分用器通过滤波将各路信号分隔开,将合成的复用信号恢复成原始的多路信号
将时间划分为一个个时隙,将带宽资源按照时隙轮流分配给不同的用户,每对用户只在所分配时隙里使用线路传输数据。
时分复用技术将时间划分为一段段等长的时分复用帧,每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙。每个用户所占的时隙是周期性出现的,其周期就是时分复用帧的长度
波分复用其实就是光的频分复用。经过光调制,分别将光载波变换到不同波长。这些光波经过光复用器就可以在一根光纤中传输。到达终点后用光分用器将不同波长的光进行还原得到信息
光信号传输一段距离后会衰减,对衰减的光信号必须进行放大才能继续传输
码分复用
CDM
(最初用于军事通信)是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA
CDM
的每一个用户可以在同样的时间使用同样的频带进行通信,由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰
在CDMA
中,每一个比特时间再划分为m
个短的间隔,称为码片。通常m
的值是64
或128
使用CDMA
的每一个站被指派一个唯一的m bit
码片序列
1
,则发送它自己的m bit
码片序列m bit
码片序列二进制反码复用是将单一媒体的频带资源划分成很多子信道,这些子信道之间相互独立,互不干扰。从媒体的整体频带资源上看,每个子信道只占用该媒体频带资源的一部分
多址(更确切地应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久地分配给用户的应用中,多址是不需要的(对于无线广播或电视广播站就是这样)
频分复用FDM
和时分复用TDM
可用于多点接入,相应名词是频分多址FDMA和时分多址TDMA。从某种程度上,FDMA、TDMA、CDMA可以分别看作是FDM、TDM、CDM的应用
多个主机连接到一根总线上,当信息同一时间传送相遇时就会发生碰撞。
如何协调各主机的工作,使信息避免碰撞是很重要的
载波监听多址接入/碰撞检测(CSMA/CD)【不用于无线网络】
96
比特时间是指发送96
比特所需要的时间,也称为帧间最小间隔。其作用是是接收方可以检测出一个帧的结束,同时也使得其他站点都能有机会平等竞争信道并发送帧
当帧发送碰撞后会停止发送,隔一段时间后再次发送,而具体隔多少时间再发送需要根据退避算法得出
载波监听多点接入/碰撞避免(CSMA/CA)【用于无线网络】
802.11
无线局域网使用CSMA/CA
协议,在CSMA
的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能由于不可能避免所有的碰撞,并且无线信道误码率较高,
802.11
标准还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收
在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以避免碰撞
在无线局域网中,不能使用碰撞检测CD,原因如下:
由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能差百万倍)。如果要在无线网卡上实现碰撞检测
CD
,对硬件的要求特别高。即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站的问题),进行碰撞检测的意义也不大(如下)。而有线网络中信号会随着总线到达各个地方,不会出现隐蔽站
MAC
地址是以太网的MAC
子层所使用的的地址
- 只有一条路径的信道不需要地址,因为没得选
- 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址
- 在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为
MAC地址
- MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器
EEPROM
中,因此MAC
地址也被称为硬件地址MAC
地址有时也被称为物理地址。但是MAC
地址不属于物理层而是属于数据链路层- MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
- 单播MAC地址即明确的目的MAC地址。将此地址填入帧的目的地址栏中,接收到该帧的主机将此地址与自身
MAC
地址进行匹配,若相同则接收,不同则丢弃- 广播MAC地址为
FF-FF-FF-FF-FF-FF
,将此地址填入帧的目的地址栏中,接收到该帧的主机检索该地址发现是广播地址,因此接收该帧- MAC地址中第一字节后4比特为(1,3,5,7,9,B,D,F)时,MAC地址是多播地址。将此地址填入帧的目的地址栏中,接收到该帧的主机将此多播地址与自己多播组列表中的地址进行逐一配对,如果有匹配的项,则接收,否则丢弃
IP
地址是TCP/IP
体系结构的网际层所使用的的地址
IP
地址是Internet
上的主机和路由器所使用的的地址,由两部分信息构成
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器各接口)
MAC地址不具备区分不同网络的功能,而IP地址可以通过网络号做到
如果只是一个单独网络,不接入因特网,则使用MAC地址就足够了(这不是一般用户的应用方式)
如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用
- 数据报转发过程中源IP地址和目的IP地址保持不变
- 数据包转发过程中源MAC地址和目的MAC地址(由ARP协议获得)逐个链路改变
- 路由器上有路由表,记录了要到目的IP地址,先要走哪些路(即下一跳位置)。所以
H1
起初只带有目的IP
地址,查询路由表后路由器指路,从而知道下一步该往哪里走,从而不断转发直至到达目的地。
地址解析协议
ARP
属于TCP/IP
体系结构的网际层,其作用是已知设备所分配到的IP
地址,使用ARP
协议可以通过该IP地址获取到设备的MAC
地址
- 数据的发送需要经过链路,仅仅知道IP地址是无法在数据链路层实现传输的,因此我们需要得到
IP
地址与MAC
地址的对应关系,即地址解析。- 每台主机都会有一个ARP高速缓存表,记录有IP地址与MAC地址的对应关系
- 初始
ARP
高速缓存表为空,假设此时B
知道C
的IP
地址,准备发送信息,但是由于不知道C
的MAC
地址,因此无法封装数据帧,所以此时会广播一个ARP请求报文(封装在MAC帧中,目的地址为广播地址FF-FF-FF-FF-FF-FF
),内容如下:- ARP高速缓存条目有静态与动态两种类型
- 动态代表是通过广播自动获取的条目,生命周期默认为两分钟
- 静态是手工设置的条目,不同操作系统下的生命周期不同。
- ARP协议只能在一段链路或一个网络上使用
集线器
HUB
的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。
- 使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是
CSMA/CD
协议- 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站网卡检测)
- 集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作
- 集线器是半双工模式,收发不能同时进行,收到帧后会广播到除本身接口外的各个接口。
交换机是一种负责转发信号的网络设备,可以为接入交换机的任意两个网络节点提供独享的电信号通路
以太网交换机通常由多个接口,每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式
以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用
CSMA/CD
协议)以太网交换机一般都具有多种速率的接口
以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧
以太网交换机是一种即插即用的设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的
帧的两种转发方式
- 存储转发
- 直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查是否有差错)
MAC地址表中的每条记录都有自己的有效时间,到期自动删除。这是因为MAC地址与交换机接口的对应关系并不是永久性的
STP
可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题
生成树原理
- 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路)
- 最终生成树的逻辑拓扑要确保连通整个网络
- 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树重新计算
一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求,每个
VLAN
就是一个独立的广播域
随着交换式以太网规模的扩大,广播域相应扩大,而巨大的广播域会带来很多弊端
广播风暴
如数台交换机连接了数台主机,当主机
A
要向主机B
发送数据帧,此时各交换机的MAC
表均为空,因此帧每到一个交换机就会进行泛洪,由于网络巨大,因此泛洪的范围也巨大难以管理和维护
潜在的安全风险
缺省VLAN ID
华为交换机上叫
PVID
,每个端口有且只有一个PVID。默认情况下端口的PVID
都为1
(即端口属于VLAN 1
)
端口上接收时总希望能够打上标签,发送出去时候总希望能去除标签
①Access端口
Access
端口一般用于终端设备与交换机之间注意:交换机与路由器连接的接口也需要使用
access
接口。这是因为路由器中的消息也不带VLAN
标签,就像终端一样,保证路由器的数据能够进入交换机领域,数据由路由器进入交换机是会被打上默认标签,接着猜按照交换机间VLAN
的规则行走。简单理解就是把路由器当作终端
②Trunk端口
Trunk
端口一般用于交换机之间或交换机与路由器之间的互连Trunk
端口可以属于多个VLAN
- 用户可以设置
Trunk
端口的PVID
值,默认情况下,Trunk
端口PVID
值为1
③Hybrid端口
Hybrid
端口既可以用于交换机之间或交换机与路由器之间的互连(同Trunk
端口),也可用于交换机与用户计算机之间的互连(同Access
端口)Hybrid
端口可以属于多个VLAN
(同Trunk
端口)- 用户可以设置
Hybrid
端口的PVID
值。默认情况下,Hybrid端口的PVID值为1