(1) 数据链路层(Data Link Layer)是OSI模型的第二层,负责建立和管理节点间的链路。
(2) 数据链路层的最基本的功能是向该层用户提供透明的和可靠的数据传送基本服务。透明性是指该层上传输的数据的内容、格式及编码没有限制,也没有必要解释信息结构的意义;可靠的传输使用户免去对丢失信息、干扰信息及顺序不正确等的担心。在物理层中这些情况都可能发生,在数据链路层中必须用纠错码来检错与纠错。数据链路层是对物理层传输原始比特流的功能的加强,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一无差错的线路。如果您想用尽量少的词来记住数据链路层,那就是:“帧和介质访问控制”。
(3) 在计算机网络中由于各种干扰的存在,物理链路是不可靠的。因此,这一层的主要功能是在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。该层通常又被分为介质访问控制(MAC)和逻辑链路控制(LLC)两个子层。
MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制;
LLC子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制。
(4) 数据链路层的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。
802.3(局域网)是共享介质的,而广域网是专用的(通常是点对点的)不存在介质冲突的问题。
(1) 点对点信道
点对点信道使用一对一的点对点通信方式。这里是指数据链路层使用的信道一种类型,在这种信道上最常用点对点协议PPP。
(2) 广播信道
广播信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专门的共享信道协议来协调这些主机的数据发送。
数据链路层的多种协议共同遵守三个基本原则:
(1) 发送端把网络层交下来的IP数据报添加首部和尾部,封装成帧接收端在收到物理层上交的比特流后,根据首尾的标记,识别帧的开始和结束,将中间的数据部分上交给网络层。
注意:为了提高帧的传输效率,应当使帧的数据部分长度尽可能大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限——最大传送单元MTU(Maximum Transfer Unit)。
(2)当数据是由可打印的95个ASCII码组成的文本文件时,帧的定界可以用特殊的帧定界符。首部为SOH(00000001),尾部为EOT(00000100)。
注意:当数据在传输中出现差错时,帧定界符的作用更加明显。假定发送端在尚未发完一个帧时突然出现故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧。由于使用了帧定界符,在接收端就知道前面收到的数据时个不完整的帧(只有首部SOH,没有传输结束符EOT),必须丢弃。而后面收到的数据有明显的帧定界符(SOH和EOT),因此这是一个完整的帧,应当收下。
透明传输表示无论什么样比特组合的数据都能通过数据链路层。
由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。
(1) 当传送的帧使用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。
(2) 当数据部分是非ASCII码的文本文件时(如二进制代码的计算机程序或图像等),情况就不同了,如果数据中的某个字符的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层就会错误地找到帧的边界,把部分帧收下(误认为是完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制字符SOH)。这样的帧的传输显然就不是透明传输。
(a) 问题分析
为了解决透明传输的问题,就必须设法使数据中可能出现的控制字符”SOH”和”EOT”在接收端不被解析为控制字符。
(b) 解决方法(字节填充)
发送端的数据链路层在数据中出现控制字符”SOH”和”EOT”的前面插入一个转义字符”ESC”(其十六进制编码是1B)。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。
传输差错:可分为两大类,一类就是最基本的比特差错,另一类就是收到的帧并没有出现比特错误,但却出现了帧丢失、帧重复或帧失序。
(1) 比特差错:就是比特在传输过程中可能会产生差错,即1可能会变成0,0可能会变成1。比特差错是传输差错中的一种。
(a) 问题分析
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种检测措施。
(b) 解决方法
目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检测技术。
注:在数据链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。
(2) 三个帧:[#1]-[#2]-[#3],假定在接收端收到的却有可能出现的情况:
(a) 帧丢失:收到[#1]-[#3](丢失了[#2])。
(b) 帧重复:收到[#1]-[#2]-[#2]-[#3](收到两个[#2])。
(c) 帧失序:收到[#1]-[#3]-[#2](后面发的帧反而先到达了接收端,这与一般的数据链路层传输概念不一样)。
注意:OSI的观点是必须把数据链路层做成是可靠传输的。因此在CRC检测基础上,增加了帧编号、确认和重传机制。收到正确的帧就要向发送端发送确认。发送端在一定的期限内若没有收到对方的确认,就认为出现了差错,因而就进行重传,直到收到对方的确认为止。
这种方法在历史上曾经起到很好的作用。但现在的通信线路的质量已经大大提高了,由通信链路质量不好引起差错的概率已经大大降低。
因特网广泛使用的数据链路层协议都不适用确认和重传机制,即不要求数据链路层向上层提供可靠传输的服务(因为这要付出的代价太高,不合算)。如果在数据链路层传输数据时除了差错并且需要进行改正,那么改正差错的任务就由上层协议(如,运输层TCP协议)来完成。实验证明,这样可以提高通信效率。
因特网用户需要连接到某个ISP(互联网服务提供商)才能接入到因特网。PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议。
(1) 简单:对数据链路层的帧不进行纠错,不需要序号,不需要流量控制。
(2) 封装成帧:加入帧界定符。
(3) 透明性:字节填充法。
(4) 多种网络层协议:在同一条物理链路上同时支持多种网络层协议(如IP和IPX等)的运行。
(5) 多种链路类型:PPP必须能够在多种类型的链路上运行,例如串行或并行链路。
(6) 差错检测:接收方收到一个帧后进行CRC检验,若正确就收下这个帧,反之则丢弃。
(7) 检测连接状态:自动检测链路是否处于正常工作状态。
(1) 提供一个将IP数据报封装到串行链路的方法。IP数据报在PPP帧中就是信息部分,长度受最大传送单元MTU的限制。PPP支持异步链路(无奇偶校验的8比特数据)和面向比特的同步链路。
(2) 链路控制协议LCP(Link Control Protocol)
当线路不再需要时,挑出这些线路,测试它们,商议选择,并仔细地再次释放链路控制协议。
(3) 一套网络控制协议NCP(Network Control Protocol)
其中每一个协议支持不同的网络层协议,如IP、OSI的网络层等。
(1) 首部
(a) 标志字段F,固定为0x7E,标志一个帧的开始或结束。连续2个帧之间只需要一个标志字段,如果出现连续两个标志字段,表示这是一个空帧。
(b) 地址字段A和控制字段C都是固定不变的,分别为0xFF、0x03。
(c) 协议字段为2字节,协议字段不同,后面信息部分表示的数据类型不同。
0x0021——信息字段是IP数据报
0xC021——信息字段是链路控制数据LCP
0x8021——信息字段是网络控制数据NCP
0xC023——信息字段是安全性认证PAP
0xC025——信息字段是LQR
0xC223——信息字段是安全性认证CHAP
(2) 信息部分
长度不超过1500字节 。
(3) 字节填充法
(a) 当信息字段中出现0x7E时,将每一个0x7E字节转变成2字节序列(0x7D,0x5E)。
(b) 若信息字段中出现一个0x7D的字节,则将其转变成2字节序列(0x7D,0x5D)。
(c) 若信息字段中出现ASCII码的控制字符(即数值小于0X20的字符),则该字符前面需要加入一个0x7D字节,同时将该字符的编码加以改变(+20)。例如,出现0x03,就要把它转为2字节序列(0x7D,0x23)
(4) 0比特填充法
PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续传送),此时使用0比特填充法。
(a) 在发送端扫描整个信息字段,当有5个1连续出现时,立即填入一个0,保证信息字段中不会出现6个连续1。
(b) 在接收端删除连续5个1后面的0。
(5) 尾部
FCS:使用CRC的帧校验序列。
(1) 当用户拨号接入ISP后,就建立了一条从用户PC机到ISP的物理连接。这时,用户PC机向ISP发送一系列LCP分组(封装成多个PPP帧),来建立LCP连接。这些分组及其响应选择了PPP参数以及进行网络层配置,NCP给新接入的用户分配临时IP地址。这样用户PC机就成为因特网上一个有IP地址的主机了。
(2) 当用户通信完毕后,NCP释放网络层连接,收回分配的临时IP。LCP释放数据链路层连接,最后释放物理层连接。
(a) PPP链路的起始和终止状态永远是“链路静止”状态,这时用户PC机和ISP的路由器之间不存在物理层的连接。
(b) 用户PC机通过调制解调器呼叫路由器时,路由器检测到调制解调器发出的载波信号。在双方建立物理层连接后,PPP进入“链路建立”状态,目的是建立链路层的LCP连接。
(c) LCP发送配置请求帧,协商一些配置选项,这是一个PPP帧,协议字段为LCP对应代码,信息字段包含特定的配置请求。
(d) 协商结束后双方建立了LCP链路,进入“鉴别”状态。发起通信的一方发送身份标识符合和口令。
(e) 鉴别成功或不需鉴别后,进入“网络层协议”。PPP链路的两端的网络控制协议NCP,根据网络层采用的协议不同,互相
交换网络层特定的网络控制分组。
(f) 网络层配置完毕后,进入“链路打开”状态,两段的PPP端点可以互相发送分组。
(g) 数据传输结束后,由链路的一端发出中止请求LCP分组请求终止链路连接,在收到对方发来的终止确认LCP分组后,转到“链路终止”状态。
局域网最主要的特点:就是网络为一个单位所拥有,且地理范围和站点数目均有限。
注:在局域网刚刚出现时,局域网比广域网具有较高的数据率、较低的时延和较小的误码率。但随着光纤技术在广域网中普遍使用,现在的广域网也具有很高的数据率和很低的误码率。
(1)具有广播功能,从一个站点可方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
(2)便于系统的扩展和逐渐地演变,各设备的位置可灵活地调整和改变。
(3)提高系统的可靠性(reliability)、可用性(availibility)、生存性(survivability)。
星形网:由于集线器(hub)的出现和双绞线大量用于局域网中,星形以太网和多级星形结构的以太网获得了非常广泛的应用。
环形网: 最典型的就是令牌环形网(token ring),简称为令牌环。
总线网:各站直接连在总线上。总线两端的匹配电阻吸收在总线上传播的电磁波信号的能量,避免在总线上产生有害的电磁波反射。总线网可使用两种协议:(1)传统以太网使用的CSMA/CD。(2)令牌传递总线网,即物理上是总线网而逻辑上是令牌环形网。前一种总线网现在已演变为星形网,而后一种令牌传递总线网早已退出了市场。
树形网: 树形网是总线网的变形,都属于使用广播信道的网络,但这主要用于频分复用的宽带局域网。
(1) 静态划分信道
(a) 如利用频分复用、时分复用、波分复用和码分复用等。用户只要分配到了信道就不会和其他用户发送冲突。 这种划分信道的方法代价比较高,不适合于局域网使用。
(2) 动态媒体接入控制
(a) 随机接入
随机接入的特点是所有用户可随机地发送信息。但如果恰巧有两个或更多的用户在同一时刻发送信息,那么在共享媒体上就要发生碰撞(即发生了冲突),使得这些用户的发送都失败。因此,必须有解决碰撞的网络协议。
(b) 受控接入
受控接入的特点是用户不能随机地发送信息而必须服从一定的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路探询(polling)或称为轮询。
注:广播信道可以进行一对多的通信。局域网使用的就是广播信道。局域网工作的层次已跨越了数据链路层和物理层。局域网不仅仅和数据链路层有关。
DIX Ethernet V2,是世界上第一个局域网产品的规约。
1983年制定了第一个IEEE的以太网标准IEEE 802.3,数据率为10Mb/s。
802.3局域网对以太网标准中的帧格式作了很小的一点更动,但允许基于这两种标准的硬件实现可以在同一局域网上互操作。
注:出于有关厂商在商业上的激烈竞争,IEEE 802委员会未能形成一个统一的、最佳的局域网标准,而是被迫制定了几个不同的局域网标准,如802.4令牌总线网、802.5令牌环网等。
(1)为了使数据链路层更好地适应不同的局域网标准,IEEE802委员会就把局域网的数据链路层拆成两个子层,即逻辑链路控制子层LLC(Logical Link Control)和媒体接入控制子层MAC(Medium Access Control)。
(2)与接入到传输媒体有关的内容都放到MAC子层,而LLC子层则与传输媒体无关,不管采用何种传输媒体和MAC子层的局域网对LLC子层来来说都是透明的。
(3) LLC为上层提供了处理任何类型MAC层的方法,例如,以太网IEEE802.3CSMA/CD或者令牌环IEEE802.5令牌传递(TokenPassing)方式。
(4) LLC是在高级数据链路控制(HDLC:High-LevelData-LinkControl)的基础上发展起来的,并使用了HDLC规范的子集。LLC定义了三种数据通信操作类型:
类型1:无连接。该方式不保证发送的信息一定可以收到。
类型2:面向连接。该方式提供了四种服务:连接的建立、确认和数据到达响应、差错恢复(通过请求重发接收到的错误数据实现)以及滑动窗口(系数:128)。滑动窗口用来提高数据传输速率。
类型3:无连接应答响应服务。
类型1的LLC无连接服务中规定了一种静态帧格式,并允许在其上运行网络协议。使用传输层协议的网络协议通常会使用服务类型1方式。类型2的LLC面向连接服务支持可靠数据传输,运用于不需要调用网络层和传输层协议的局域网环境。
(1) 计算机与外界局域网的连接是通过通信适配器(adapter)。
(2) 适配器本来是在电脑主机箱内插入的一块网络接口板(或者是在笔记本电脑中插入一块PCMCIA卡)。这种接口板又称为网络接口卡NIC(Network Interface Card)或简称为网卡。
(3) 适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的,而适配器和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行的。
(4) 适配器的一个重要功能就是要进行数据串行传输和并行传输的转换。
(5) 由于网络上的数据率和计算机总线上的数据率并不相同,所以在适配器中必须装有对数据进行缓存的存储芯片。
(6) 若在主板上插入适配器时,还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。这个驱动程序以后就会告诉适配器,应当从存储器的什么位置上把多长的数据块发送到局域网,或应当在存储器的什么位置上把局域网传送过来的数据块存储下来。
(7) 适配器还要能够实现以太网协议。
(8) 适配器接收和发送各种帧时不使用计算机的CPU。这时CPU可以处理其他任务。
(9) 当适配器收到有差错的帧时,就把这个帧丢弃而不必通知计算机。
(10) 当适配器收到正确的帧时,它就使用中断来通知该计算机并交付给协议栈中的网络层。
(11) 当计算机要发送IP数据报时,就由协议栈把IP数据报向下交给适配器,组装成帧后发送到局域网。
(12) 计算机的硬件地址——MAC地址,就在适配器的ROM中。
(13) 计算机的软件地址——IP地址,就在计算机的存储器中。
(1) 前2个字段分别为6字节长的目的地址和源地址。
(2) 第3个字段是2字节的类型字段,标志上一层使用的是什么协议。
(3) 第4个字段是数据字段,长度在46到1500字节之间。若长度小于46字节,则在后面加入一个整数字节进行填充。
(4) 最后是4字节的帧检验序列FCS(使用CRC检验)。
(5) 当适配器没有与比特流达成同步时,需要在MAC帧前面插入8字节。
以太网的帧开销是18字节,是“目的MAC(6)+源MAC(6)+Type(2)+CRC(4)”。以太网最小帧长为64字节,那么IP报文最小为46字节,而局域网规定IP最大传输单元1500字节,实际上加上以太网帧的18字节,就是1518字节。
CSMA/CD是英文carrier sense multiple access/collision detected 的缩写,可把它翻成“载波监听多路访问/冲突检测”,或“带有冲突检测的载波侦听多路访问”。
所谓载波监听(carrier sense),意思就是以太网络上的各个工作站在发送数据前,都要监听总线上有没有数据正在传输。若有数据传输 (称总线为忙),则不发送数据,需要等待;若无数据传输(称总线为空),可以立即发送准备好的数据。
所谓多路访问(multiple access),意思就是以太网络上的各个工作站在发送数据时,共同使用一条总线,且发送数据是广播式的。
所谓冲突(collision),意思就是,若以太网上有两个或两个以上工作站同时发送数据,在总线上就会产生信号的冲突;多个工作站都同时发送数据,在总线上就会产生信号的冲突,哪个工作站接收到的数据都辨别不出真正的信息。这种情况称冲突或者碰撞。
为了减少冲突发生的影响,工作站在发送数据过程中还要不停地检测自己发送的数据,检测自己传输过程中有没有其他工作站在发送数据,在传输过程中与其它工作站的数据发生冲突,这就是冲突检测(collision detected)。
(1) 准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中。但在发送之前,必须先检测信道。
(2) 检测信道:若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在96比特时间内信道保持空闲(保证了帧间最小间隔),就发送这个帧。
(3) 在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。两种情况
(a) 发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。
(b) 发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待r倍512比特时间后,返回到步骤(2),继续检测信道。但若重传达16次仍不能成功,则停止重传而向上报错。
在使用CSMA/CD协议的以太网不可能进行双向同时通信(全双通信工),而只能进行双向交替通信(半双工通信)。此外以太网还采取一种强化碰撞的措施,就是当发送数据的站一旦发现发生了碰撞时,除了立即停止发送数据外,还要再继续发送32比特或48比特的人为干扰信号(jamming signal),以便让所有用户都知道现在已经发生了碰撞。以太网号规定了帧间最小间隔为9.6μs,相当于96比特时间,这样使得刚刚收到数据帧1的站接收缓存来得及清理,做好接收下一帧的准备。
当多个工作站均想向以太网发送数据时,如果总线处于忙的状态,大家都等待,也不会有何争议;但是如果总线处于空的状态,而且工作站是依次监听到空状态,那么各个工作站就会陆续向总线发送数据,A工作站发送的数据还未传递到另一个要发送数据的B工作站,那么B工作站仍然认为总线为空的状态,那么B工作站也向总线注入数据;如果还有更多工作站向总线注入数据,原理一样,只是更加复杂而已。
A工作站传递的数据与B工作站传递的数据就会在总线的某处发送冲突,导致此次数据发送失败。那有什么办法可以提前判断,使得工作站不必每次都源源不断的向总线注入数据,其后又检测到冲突,而重新等待,如此反复,既浪费了宝贵的工作站资源与总线资源,又使得数据迟迟不能发送出去。
先了解下碰撞信号,就是连续的01010101或者10101010,十六进制就是55或AA。以太网实现原理是,假设某个工作站检测到冲突发生,那就发送碰撞信号,使冲突更加明显,使得所有工作站均能检测到总线发生了冲突。
我们来看一下,假设A检测到总线是空闲的,开始发数据包,尽力传输,当数据包还没有到达B时,B也监测到总线是空闲的,开始发数据包,这时就会发生冲突。假设B 首先发现发生碰撞,开始发送碰撞信号。
这个碰撞信号会返回到 A,如果碰撞信号到达A时,A还没有发完这个数据包,A就知道这个数据包发生了错误,就会重传这个数据包。但如果碰撞信号会返回到A时,数据包已经发完, 则A不会重传这个数据包。
以太网为什么要设计这样的重传机制。首先,以太网不想采用连接机制,这会降低传输效率,但他又想保证一定的传输效率。因为以太网的重传是微秒级,而传输层的重传,如TCP的重传达到毫秒级,应用层的重传更达到秒级。我们可以看到越底层的重传,速度越快,所以对于链路层发生的错误,以太网必须有重传机制。
要保证以太网的重传,必须保证A收到碰撞信号的时候,数据包没有传完,要实现这一要求,A和B之间的距离很关键,也就是说信号在A和B之间传输的来回时间 必须控制在一定范围之内。
解决方法就是,每个想要发送数据的工作站,检测到总线为空状态,在发送数据之前,先发送一个探测帧,探测帧的发送就圆满的解决了上面的问题。而探测帧的长度既要达到最快速的传递到目的地,又要确保探测帧的传递时间足够使得其他工作站能够监听到。这个探测帧的长度就是以太网规定的最小帧长,就是一个最小最长帧。
由于以太网传递的帧,归根结底还是由比特流组成。上面提到的传输速率,其实就是工作站的发送速率,传输一个帧还是一个个的比特发送出去。即,工作站发送一个帧的第一个比特到达目的地,而此帧的最后一个比特正好发送出去。
C代表光速,也就是20.3cm/ns(每纳秒20.3厘米), C是30W。电子在铜介质(普通铜)中的移动速度是21W/s 。
假设公共总线媒体长度为S,帧在媒体上的传播速度为0.7C(光速),网络的传输率为R(bps),帧长为L(bps),tPHY为某站的物理层时延;
则有:
碰撞槽时间=2S/0.7C+2tPHY
因为Lmin/R=碰撞槽时间
所以:Lmin =(2S/0.7C+2tPHY )×R
Lmin 称为最小帧长度。
碰撞槽时间在以太网中是一个极为重要的参数,有如下特点:
(1) 它是检测一次碰撞所需的最长时间。
(2) 要求帧长度有个下限。(即最短帧长)
(3) 产生碰撞,就会出现帧碎片。
(4) 如发生碰撞,要等待一定的时间。t=rT。(T为碰撞槽时间)
假设:A、B两地之间通过一个单向传送带传递物品,传送带的传输速度是C(C代表光速),也就是20.3cm/ns(每纳秒20.3厘米),A点有个人叫Marcia,她要把一车荔枝一串一串的发送给B点的那个人Allen,现在Marcia需要抉择的是:我在传送荔枝给Allen的时候,如果Allen同时也有荔枝传给我,这个时候就会产生冲突,而冲突会把传送中的荔枝撞碎,破碎的荔枝渣会通过传送带反送给我,我很想知道是哪一串荔枝被撞碎了,如何实现?一个办法就是:在我收到荔枝碎片的时候,我仍旧在传着这串荔枝!比如有很多串荔枝,第1串,第2串等,当我发送第3串荔枝的过程中,收了荔枝碎片,那肯定是第3串里先发出的荔枝出现了碰撞,而不是第2串或第1串中的荔枝发生碰撞。
为了实现这一点,假如Marcia到Allen点的距离是2500米(250000厘米),传送带上的荔枝每纳秒20.3厘米,那么一串荔枝中的第一个荔枝到达Allen点的用时就是250000除以20.3=12500纳秒,在加上碎片返回的时间是12500纳秒,等于25000纳秒,这个时间就是一串荔枝在传送带上必须持续的时间。
Marcia高兴的时候,往传送带上放荔枝的时候快,不高兴的时候就慢。高兴的时候每秒可以往传送带上放100Mbit个荔枝,换算一下,也就是说放一个荔枝用10纳秒。不高兴的时候每秒钟只能往传送带上放10Mbit个,也就是说放一个荔枝用100纳秒。
因为一串荔枝必须持续的时间25000纳秒,那么对于不高兴的时候,25000除以100=250个荔枝,这个结果就是一串荔枝的数量。所以,理论上一个10Mbit/s的以太网,最小帧长应该是250bit。但为了确保Marcia在放荔枝的过程中不会被扎到手,放送荔枝间会有一定的延时,所以最小帧长被定义为512bit(64字节)。
因为一串荔枝必须持续的时间25000纳秒,对于高兴的时候,25000除以10=2500个荔枝,这个结果就是一串荔枝的数量。所以,理论上一个100Mbit/s的以太网,最小帧长应该是2500bit。但一个2500bit的帧又太大了,上层来的数据包不可能这么大。所以我们只能缩短A点到B点的距离为250米,一个荔枝在传送带上往返的时间也变成了2500纳秒。这时用2500除以10=250个荔枝,这个结果就是一串荔枝的数量。所以,理论上一个100Mbit/s的以太网,最小帧长应该是250bit,网络最大有效距离是250米。但为了确保Marcia在放荔枝的过程中不会被扎到手,放送荔枝间会有一定的延时,所以帧长被定义为512bit(64字节)。
由此可见,MAC层发送的速度越快,以太网的最大有效距离就越短。但对于1000Mb/s的吉比特以太网,MAC层有两种选择,要么保留CSMA/CD,要么不用它。若保留CSMA/CD协议,必须面临碰撞检测问题,这就要再一次减小网络的最大有效传输距离到25米。当然您可以不缩短网络的距离,而是增加一个帧的程度,就如我们开始分析100Mb/s以太网那样,让一个帧持续足够长的时间。但因为上层来的数据没有这么多,所以就需要在MAC层进行一些无用数据的填充来满足这个要求。
下面我们来估计在最坏情况下,检测到冲突所需的时间
(1) A和B是网上相距最远的两个主机,设信号在A和B之间传播时延为τ,假定A在t时刻开始发送一帧,则这个帧在t+τ时刻到达B,若B在t+τ-ε时刻开始发送一帧,则B在t+τ时就会检测到冲突,并发出阻塞信号。
(2) 阻塞信号将在t+2τ时到达A。所以A必须在t+2τ时仍在发送才可以检测到冲突,所以一帧的发送时间必须大于2τ。
(3) 按照标准,10Mbps以太网采用中继器时,连接最大长度为2500米,最多经过4个中继器(以太网中使用中继器的5-4-3-2-1原则),因此规定对于10Mbps以太网规定一帧的最小发送时间必须为51.2μs。
(4) 51.2μs也就是512位数据在10Mbps以太网速率下的传播时间,常称为512位时。这个时间定义为以太网时隙。512位时=64字节,因此以太网帧的最小长度为512位时=64字节。
802.3-2002标准定了以太网的头结构为DA(6)+SA(6)+Len/Type(2)=14字节。帧校验序列(FCS):4字节,使用CRC计算从目的MAC到数据域这部分内容而得到的校验和。
以太网的帧开销是18字节,是“目的MAC(6)+源MAC(6)+Type(2)+CRC(4)”。以太网最小帧长为64字节,那么IP报文最小为46字节,而局域网规定IP最大传输单元1500字节,实际上加上以太网帧的18字节,就是1518字节。
IEEE定义了这个标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit time。(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域的直径。
512个位时,也就是64字节的传输时间,如果以太网数据包大于或等于64个字节,就能保证碰撞信号到达A的时候,数据包还没有传完。
这就是为什么以太网要最小64个字节,同样,在正常的情况下,碰撞信号应该出现在64个字节之内,这是正常的以太网碰撞,如果碰撞信号出现在64个字节之后,叫 late collision。这是不正常的。
CISCO交换机有一种转发方式叫fragment-free,叫无碎片转发,他就是检查64个字节之内有没有错误,有的话不转发,这样就排除了正常的以太网错误包。
以太网访问控制用的是CSMA/CD,即载波侦听多点接入/ 冲突检测,是以广播的方式将数据发送到所有端口;
交换机能主动学习端口所接设备的MAC地址,在获知该端口的MAC 地址后,就会把传送给目标设备的直接发送到该端口而不是广播出去。
之所以有CSMA/CD的存在,是因为在早期的共享式以太网中,双向的传输是在同一线路上进行的,而以太网是一种共享介质的广播技术,所以同一时间只能有一面的信号在线路上,即要么A往B发,要么B往A发,如果AB同时发送数据或者线路上已有信号,那么信号就会发生碰撞,继而影响数据有效传输,为了解决此一问题,才有了CSMA/CD的技术。
随着技术的发展,CSMA/CD在最初的以太网中具有的历史和实践的重要性在慢慢减弱,现在交换式以太网取代了共享式以太网,甚至于共享式以太网消失。这主要是因为介质和交换技术的发展而造成的。
介质方面:
使用4对线的UTP,传输和接收各自使用一对,可以全双工方式工作,这样,一边只管发,一边只管收,因此就能够避免碰撞了,光纤方面也可如此。
交换技术方面:
当两个工作站需要通信时,交换技术在两个站之间建立了一个点到点的虚链路,也叫做微分段,因此同样也避免了碰撞了,这就是交换机使用的技术。
所以,从上面可以看出,以太网访问控制机制和交换机工作原理并没有相冲突的地方,只是随着技术的发展,一些不必要的机制就慢慢不要了。
以太网中到底何时使用CSMA/CD检测机制来避免冲突,在于网络处于什么样的工作模式(全双工或者半双工)下工作,网卡将自动与网络接入设备(例如:交换机或者集线器)进行协商来判断什么时候使用CSMA/CD检测机制避免冲突的发生。
大家都知道,以太网工作模式有两种,一种是全双工工作模式,一种是半双工工作模式。我们看分析一下这两个模式下到底是不是用CSMA/CD冲突检测机制。
(1) 在全双工工作模式下的以太网使用CSMA/CD检测机制来避免冲突吗?
在这一工作模式下的以太网是不需要使用CSMA/CD冲突检测机制的。我们知道,全双工工作模式下可以完成同时接收和发送数据。我们想想,网卡可能会在同一时刻发送两个数据包吗?这是不可能的。绝对不可能会出现在同一时刻网卡接收到两个或两个以上同时需要发送数据的请求,就连CPU也不可能同时做到在同一时刻处理两个或两个以上指令呀。这个时候,如果我们假设网卡启用CSMA/CD机制来检测冲突,请问他检测哪一条冲突通道呢?我们可要知道,网卡在接收到需要发送的数据包后,就像排队一样一个一个往外发送,怎么可能会冲突呢?
这个时候有人可能要问了,那接收呢?它可能会和接收的冲突呀?其实这么想就错了。全双工工作模式下,我们将使用双绞线中的2对线进行工作。一对用于发送,一对用于接收。那么既然发送和接收是分开的2条链路,就不存在冲突的问题了。就像在高速公路上,有一个车道是由东往西行驶车道,一个车道是由西往东行驶车道。那么,你说两车对开,各行驶于各自的车道,有可能会冲撞吗?所以,全双工工作模式下是不需要使用CSMA/CD冲突检测机制的。
(2) 在半双工工作模式下的以太网使用CSMA/CD检测机制来避免冲突吗?
在这一工作模式下的以太网是需要使用CSMA/CD冲突检测机制的。我们知道,半双工模式下虽然可以实现在同一链路上进行发送和接收,但不是在同一时间。这就必须使用CSMA/CD冲突检测机制来避免冲突的发生。半双工工作模式的典型接入设备就是集线器。
(3) 我们都说交换机中有智能设备,如CPU和缓存。为什么工作在半双工模式下的交换机,还会使用CSMA/CD呢?
这个问题问得特别好。其实大家想一想就知道了。我们先明白一点:交换机确实有CPU和缓存来调节数据包的输出和接收,是不会发生冲突的。交换机只关心它的背板速率,关心的是整个带宽。所以,在交换机内的数据包是绝对不会发生冲突的情况。只会发生是否出现网络拥塞。这是和冲突没有任何关联的。
理解了这一点,我们再理解下一个问题:CSMA/CD侦听包是有谁发出,什么时候才会发出呢?我们回忆一下CCNA的教程,其实,CSMA/CD侦听包是由网卡发出的,并不是有交换机或者集线器发出的侦听包。而且,网卡在发送数据前,才会发送CSMA/CD侦听包侦听网络是否畅通。
理解了这两点,我们就好解释了。对于CSMA/CD冲突检测机制而言,交换机和集线器的侦听对象是不完全相同的。在集线器中,每一个端口都同在一个冲突域中,CSMA/CD检测的整个同处一个冲突域每一个端口的每一种状态。它既侦听网络中正在发送的数据包,也真听网络中正在接收的数据包。因为,它只有1条通道。就像总线一样,所有数据都在同一个通道内跑。CSMA/CD必须侦听到没人使用,它才发送数据包。而交换机则不太相同。虽然每一个端口都是一个独立的冲突域,端口之间并不相互冲突。可如果实在半双工工作模式下,一个端口中的接收和发送就产生冲突了。这个时候,CSMA/CD冲突检测机制将侦听在这个端口上是否有数据正在被接收而占用。所以,交换机在半双工工作模式下工作,网卡同样会启用CSMA/CD冲突检测机制来避免冲突的发生。
(1) 为什么数据链路层要以帧为单位来传送数据呢?
因为如果不以帧为单位,就无法加入冗余码来进行差错检验。
(2) 为什么标准以太网帧长度下限为64字节?
以太网帧长度限制最小帧是为了半双工工作方式的碰撞检测。
最早的以太网工作方式:载波多路复用/冲突检测(CSMA/CD),因为网络是共享的,即任何一个节点发送数据之前,先要侦听线路上是否有数据在传输,如果有,需要等待,如果线路可用,才可以发送。
假设A发出第一个bit位,到达B,而B也正在传输第一个bit位,于是产生冲突,冲突信号得让A在完成最后一个bit位之前到达A,这个一来一回的时间间隙slot time是57.6μs。
在10Mbps的网络中,在57.6μs的时间内,能够传输576个bit,所以要求以太网帧最小长度为576个bits,从而让最极端的碰撞都能够被检测到。这个576bit换算一下就是72个字节,去掉8个字节的前导符和帧开始符,所以以太网帧的最小长度为64字节。
(3) 为什么标准以太网帧长度上限为1518字节?
限制帧的最大长度是为了避免一台设备长时间占用信道,所以在传输过程中一定要有机制强制一个设备停止传输,让出信道的使用。
IP头total length为两个byte,理论上IP packet可以有65535 byte,加上Ethernet Frame头和尾,可以有65535 +14 + 4 = 65553 byte。如果在10Mbps以太网上,将会占用共享链路长达50ms,这将严重影响其它主机的通信,特别是对延迟敏感的应用是无法接受的。
由于线路质量差而引起的丢包,发生在大包的概率也比小包概率大得多,所以大包在丢包率较高的线路上不是一个好的选择。
但是如果选择一个比较小的长度,传输效率又不高,拿TCP应用来说,如果选择以太网长度为218byte,TCP payload = 218 - Ethernet Header - IP Header - TCP Header = 218 - 18 - 20 - 20 = 160 byte
那有效传输效率= 160 / 218 = 73%
而如果以太网长度为1518,那有效传输效率= 1460 / 1518 = 96%
通过比较,选择较大的帧长度,有效传输效率更高,而更大的帧长度同时也会造成上述的问题,于是最终选择一个折衷的长度:1518 byte ! 对应的IP packet 就是 1500 byte,这就是最大传输单元MTU的由来。
本文转自:
https://blog.csdn.net/charleslei/article/details/53147856
https://blog.csdn.net/qq1987924/article/details/7798684