如图所示,主机H1给主机H2发送数据,中间要经过3个路由器、电话网、局域网、广域网等多个网络。从五层原理体系结构来看,主机应具有体系结构中的各个层次,而路由器只需具有体系结构的下面三层。各设备通过物理层下面的传输媒体进行互连。
当主机H1向主机H2发送数据时,数据的流动如图所示。
我们可以只关心数据链路层,而不考虑网络体系结构中的其他各层。换句话说,我们可以想象,数据包只在数据链路层从左向右沿水平方向传送。从数据链路层来看,主机H1到H2的通信,可以看成是4段不同的链路上的通信组成的。
两台主机通过一段链路互连,两台主机都会对所发送或接收的数据包进行五个层次的封装或解封。
例如,以太网V2的MAC帧格式
发送方将封装好的帧通过物理层发送到传输媒体,帧在传输过程可能由于干扰产生误码,即比特0变成比特1,反之亦然。接收机通过检错码发现是否产生误码。
发送方在发送帧之前,基于待发送的数据和检错算法计算出检错码,并将其封装在帧尾,例如以太网V2的MAC帧格式的帧尾,就是4字节的帧检验序列FCS字段,即我们所说的检错码。接收机根据帧尾中的检错码和检错算法就可以检测帧中是否有误码。
接收方接收有误码的帧后,是不会接收该帧的,将其丢弃。
尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方就能收到什么,就称为可靠传输。
除上述三个问题外,还有其他问题。
编址问题
为了确保A中数据可以准确传输到C中,需要将帧的目的地址添加到帧中一起传输。
例如,以太网V2的MAC帧格式:
碰撞
以太网使用一种特殊的协议CSMA/CD,也就是载波监听多点接入/碰撞检测。
由于无线局域网的广播天性,无线局域网仍然使用的是共享信道技术,例如802.11局域网的媒体接入控制协议是CSMA/CA,也就是载波监听多点接入/碰撞避免。
随着交换技术的成熟和成本的降低,具有更高兴能的使用点对点链路和链路层交换机的交换式局域网,在有线(局域网)领域已完全取代了共享式局域网。
网桥和交换机的工作原理?
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
假设发送方发送的是PPP帧,比特流中红色部分使帧定界标志,那么接收方的链路层,就可以依据帧定界标志,从物理层交付的比特流中提取出一个个的帧。
PS:并不是每一种数据链路层协议的帧都包含有帧定界标志,例如以太网V2的MAC帧格式,其工作原理:
以太网的数据链路层封装好MAC帧后,将其交付给物理层,物理层会在MAC帧的前面,加上8字节的前导码,然后再将比特流变成电信号进行发送
另外,以太网还规定了帧间间隔时间为96比特的发送时间,因此MAC帧不需要帧结束定界符。
若数据链路层接收的数据中存在和帧定界相同的代码,可能会造成接收机的误判导致其帧结束,即数据链路层对传进来的数据有限制,这样的数据链路层没有什么价值。所以,各种数据链路层协议会来解决这个问题。
在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符:
接收方数据链路层在物理层交付的比特流中提取帧,遇到第一个帧定界符时,认为这是帧的开始,遇到转义字符就知道,其后面的1字节内容虽然与帧定界字符相同,但它是数据不是定界符,剔除转移字符后将其后面的内容作为数据继续提取。
若在上层交付给数据链路层的协议数据单元中,既包含了帧定界符,有包含了转义字符怎么办?
在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符和转义字符,就在其前面插入一个转义字符。
转义字符是一种特殊的控制字符,其长度为1个字节,十进制为27,而并不是ESC这三个字符
见图,帧的数据部分出现了两个帧定界标志,但它们是数据而不是帧定界,在发送前,可以采用零比特填充法,对数据进行扫描,每五个连续的比特1后面就插入一个比特0,即可以实现透明传输。
接收方的数据链路层,从物理层交付的比特流中提取帧时,将帧的数据部分中的每五个连续的比特1后面的那个比特0剔除即可。
例如,以太网V2的MAC帧格式,其帧尾中包含了一个长度为4字节的帧捡验序列FCS字段,其作用就是让接收方的数据链路层检查,帧在传输过程中是否产生了误码。点对点传送的PPP帧格式,其帧尾也包含了一个长度为2字节的帧检验序列FCS字段。
例如,这是TCP/IP的四层体系结构
如图所示,收发双方基于互联网进行通信,而不是局限在一条点对点的数据链路,纵坐标为时间
发送方每发完一个数据分组后,就停止发送下一个数据分组,等待来自接收方的确认分组或否认分组,若确认分组,则可继续发送下一个数据分组,若收到否认分组,则重发之前发送的那个数据分组,这样就实现了发送方发送什么,接收方最终都能收到什么,即可靠传输。
接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时.启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传。
一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。
此时会产生分组重复的错误,为避免分组重复这种传输错误,必须给每个分组带上序号。
对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了。
Q:确认分组需要编号吗?
如果不采取措施的话,发送方会误认为这是对1号数据分组的确认,如果对确认分组也进行编号,就可以使发送方避免这种误判。
如图所示,该确认信号的序号为0,发送方通过分组的序号,知道这是一个重复的确认分组,忽略即可。
PS:对于数据链路层的点对点信道,往返时间比较确定,不会出现确认迟到的情况。因此,只在数据链路层实现停止-等待协议,可以不用给确认分组编号
注意事项:
为了简单起见,假设收发双方之间是一条直通的信道,发送方发送完一个数据分组后就停止发送,并等待接收方对该数据分组的确认,当收到确认分组后,可以发送下一个数据分组,如此反复进行。
忽略接收方以及发送方对分组的处理时延:
回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数。
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定),对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收。即使确认分组丢失,发送方也可能不必重传!
发送方将序号落在发送窗口内的5~1号数据分组依次连续发送出去,经过互联网的传输,到达了接收方
假设传送过程中受到了干扰,其中5号数据分组出现了误码,接收方通过数据分组中的检错码发现了错误,于是丢弃该数据分组,
而后续到达的这4个数据分组的序号,**与接收窗口中的序号不匹配,**接收方同样也不能接受他们,将它们丢弃,并对之前按序接收的最后一个数据分组进行确认,也就是发送ACK4,每丢弃一个分组就发送一个ACK4
这四个ACK4经过互联网的传输到达了发送方,发送方之前就接收过这ACK4,发送方收到重复的确认,就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻重传!
至于收到几个重复确认就立刻重传,由具体实现决定。
若本例中收到4个ACK4并不会立刻重传,当超时计时器超时后,发送方对之前发送窗口内已发送过的这些数据分组全部重传
在本例中,尽管序号为6,7,0,1的数据分组正确到达接收方。但由于5号数据分组误码不被接受。它们也“受到牵连”而不被接受。发送方还要重传这些数据分组,这就是所谓的Go back-N (回退N帧)。
可见。当通信线路质量不好时,回退N协议的信道利用来并不比停止:等待协议高。
Q:若W超过取值范围,例如Wr=8,会出现什么情况?
A:接收方无法分辨新、旧数据分组,进而产生分组重复这种差错
选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,需要对每个正确接收到的数据分组进行逐一确认!
Q:若WT和WR超过取值范围,会出现什么情况?
A:接收方无法分辨新、旧数据分组,进而产生分组重复这种差错
PPP ocer Ethernet 简称PPPoE 使得ISP可以通过DSL、电路调制解调器、以太网等宽带接入技术,以以太网接口的形式为用户提供接入服务
(7D,5E):相当于在7E字节前插入了转义字节7D,并将7E字节减去十六进制20;
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术。
20Gb/s=8*2.5Gb/s
码分复用CDM是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA(Code Division Multiple Access)。
同理,频分复用FDM和时分复用TDM同样可用于多址接入,相应的名词是频分多址FDMA(Frequency Division Multiple Access)和时分多址TDMA(Time Division Multiple Access)。
在本课程中,我们不严格区分复用与多址的概念。可简单理解如下;
在CDMA中,每一个比特时间再划分为m个短的间隔,称为码片(Chip)。通常m的值是64或128。为了简单起见,在后续的举例中,我们假设m为8.
使用CDMA的每一个站被指派一个唯一的m bit码片序列(Chip Sequence)。
码片序列的挑选原则如下:直接序列扩频 DSSS
当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。
以下情况必须使用退避算法:
当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即—个数据链路层地址;
在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址;
假设C向D发送帧,帧首部的目的地址字段应填入主机D的MAC地址,源地址字段应填入主机C自己的MAC地址,这样总线上其他各主机收到该帧后,就可以根据帧首部中的目的地址字段的值是否有自己的MAC地址匹配,进而丢弃或者接收该帧
MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址;
MAC地址有时也被称为物理地址,但并不意味着MAC地址属于网络体系结构中的物理层!
一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
IEEE 802局域网的MAC地址格式
由48比特构成,每8个比特1个字节,从左至右分别是第一字节到第六字节,这种标识符,称为扩展的唯一标识符EUI(EUI-48)
前三个字节是组织唯一标识符OUI,生产网络设备的厂商需要向IEEE的注册管理机构申请一个或多个OUI;后三个字节是由获得OUI的厂商可以随意分配的
MAC地址的表示方法,是将每4个比特写成一个16进制的字符,共12个字符,将每两个字符分为一组,共六组
广播地址:FF-FF-FF-FF-FF-FF
MAC地址的分类,很久第一字节的第零和第一为进行划分
假设主机BCD支持多播:
给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址,具体可在以下网址查询:
http://standards.ieee.org/develop/regauth/grpmac/public.html
略
IP地址属于网络层概念,与数据链路层的MAC地址关系密切,这里主要介绍IP地址的作用。
ps:地址均包括源和目的地址
关注重点:
我们下节介绍的地址解析协议ARP要实现的动能!
这是一个共享总线型的以太网,各主机配置的IP地址,以及网卡上固化的MAC地址如图所示:
实际上,每台主机都会有一个ARP高速缓存表,当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中,查找主机C的IP地址所对应的MAC地址,但未找到,因此主机B需要发送ARP请求报文**(广播帧)**,来获取主机C的MAC地址
此时,主机C
此时:
- 除ARP请求和响应外。ARP还有其他类型的报文(例如用于栓查I地址冲文的“无故ARP、免费ARP(Gratuitous ARP” );
- ARP没有安全验证机制。存在ARP欺骗(攻击〉向题。
Q:ARP协议是否可以在以下网络中使用H1获取H2的MAC地址?
A:ARP协议不可以跨网络使用
假设某学院下有三个系部,每个系部都有一个使用集线器作为互联设备的以太网,这三个以太网相互独立,各自共享自己的总线资源,是三个独立的碰撞域或称为冲突域,具体如下:
为了使各系部以太网可以相互通信,可再使用一个集线器,将他们互连起来,三个独立的碰撞域合并成一个更大的碰撞域,形成一个更大的总线型以太网,例如:
1.忽略ARP过程
2.假设交换机的帧交换表已“学习好了”
使用集线器的以太网,在逻辑上是共享总线的,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,也就是收发帧不能同时进行。
使用集线器扩展以太网和使用交换机扩展以太网的区别
总结:
假设各主机知道网络中其他各主机的MAC地址(无需进行ARP)
A->B
B->A
E->A
以太网交换机丢弃帧的情况
为了演示该情况,我们给交换机1的接口1再连接一台主机G,为了简单起见,没有画出集线器,主机A和交换机1的接口1 都可以收到,主机A的网卡收到该帧后,根据帧的目的MAC地址A就知道这是发送给自己的帧,于是接受该帧,交换机1收到该帧后,首先进行登记工作,随后交换机1对该帧进行转发,该帧的目的MAC地址是A,再帧交换表中查找MAC地址A可以找到,MAC地址A所对应的接口号是1,但是该帧正式从该接口1进入交换机1的,交换机1不会再从该接口将该帧转发出去,因为这是没有必要的,于是丢弃该帧,很显然交换机2不会受到该帧。
每条记录都有自己的有效时间,到期自动删除!
这是因为MAC地址与交换机接口的对应关系并不是永久性的!(更换网卡)
如何提高以太网的可靠性?
添加冗余链路可以提高以太网的可靠性
但是,冗余链路也会带来负面效应——形成网络环路
网络环路会带来以下问题:
以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在增加元余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。
以太网交换机工作在数据链路层(也包括物理层)
使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域。
随着交换式以太网规模的扩大,广播域相应扩大。
巨大的广播域会带来很多弊端:
网络中会频繁出现广播信息
分割广播域的方法
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。
同一个VLAN之间可以进行广播通信,不同VLAN之间不可以进行广播通信
IEEE 802.1Q帧(也称Dot One Q帧)对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记。
VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN.
802.1Q帧是由交换机来处理的,而不是用户主机来处理的。
交换机的端口类型有以下三种:
Access
Trunk
Hybrid
交换机各端口的缺省VLAN ID
在思科交换机上称为Native VLAN,即本征VLAN。
在华为交换机上称为Port VLAN ID,即端口VLAN ID,简记为PVID。
Access端口-般用于连接用户计算机
Access端口只能属于一个VLAN
Access端口的PVID值与端口所属VLAN的ID相同(默认为1)
Access端口接收处理方法:
一般只接受“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧**”打标签”**,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
Access端口发送处理方法:
若帧中的VID与端口的PVID相等,则**“去标签”**并转发该帧;否则不转发。
下面例子,需求将主机AB划到VLAN2,主机CD划到VLAN3,
可以在交换机上创建VLAN2和VLAN3,然后将交换机端口1和2划归到VLAN2,因此端口1和2的PVID值等于2,将交换机端口3和4划归到VLAN3,因此端口3和4的PVID值等于3,
我们来看主机A发送广播帧的情况,该帧从交换机的端口1进入交换机,由于端口1的类型是Access,它会对接受到的“未打标签”的普通以太网MAC帧“打标签”,也就是插入四字节的VLAN标记字段,由于端口1的PVID值等于2,因此,所插入的4字节VLAN标记字段中的VID的值也等于2,广播帧中的VID的取值与端口2中的PVID的取值都等于2,因此,交换机会从端口2对帧进行“去标签”转发。
我们来看主机C发送广播帧的情况,该帧从交换机的端口3进入交换机,由于端口3的类型是Access,它会对接受到的“未打标签”的普通以太网MAC帧“打标签”,也就是插入四字节的VLAN标记字段,由于端口3的PVID值等于3,因此,所插入的4字节VLAN标记字段中的VID的值也等于3,广播帧中的VID的取值与端口4中的PVID的取值都等于3,因此,交换机会从端口4对帧进行“去标签”转发。
如图所示,我们的需求,是将主机ABEF划归为VLAN1,主机EDGH划归为VLAN2,由于交换机首次上电是默认配置各端口属于VLAN1,其相应的PVID值等于1,并且端口的类型值为Access,因此我们需要对交换机进行相应的配置才能满足应用需求
分别在两个交换机上创建VLAN2,并将他们的端口3和4都划归到VLAN2,其相应的PVID值等于2,而两个交换机的端口1和2保持默认配置即可,即属于VLAN1,其相应的PVID等于1,特别注意的是,两个交换机相连的端口5,需要将它们的类型更改为Trunk类型,他们的PVID值保持默认的1即可。
Trunk端口发送处理方法:
Trunk端口接受处理方法:
总结:
在由多个交换机互联而成的交换式以太网划分VLAN时,连接主机的交换机端口应设置为Access类型,交换机之间互联的端口应设置为Trunk类型。
Hybrid端口既可用于交换机之间或交换机与路由器之间的互连(同Trunk端口),也可用于交换机与用户计算机之间的互连(同Access端口)
Hybrid端口可以属于多个VLAN(同Trun端口)
用户可以设置Hybrid端口的PVID值。默认情况下,Hybrid端口的PVID值为1(同Trun端口)
Hybrid端口发送处理方法**(与Trunk端口不同)**
查看帧的VID是否在端口的“去标签”列表中:
Hybrid端口接收处理方法(同Trunk端口)
接收“未打标签”的帧,根据接收帧的端口的
【应用举例】主机A、B、C连接在同一个交换机的不同接口上。利用Hybrid端口的功能,实现以下应用需求:A和B都能与C相互通信,但A与B不能相互通信。
主机A给C发送数据帧
主机B给C发送数据帧
主机A给B发送数据帧
主机B直接转发,收到一个带有标记的802.1Q帧,单主机B不能识别802.1Q帧,只能丢弃该帧