我对数据链路层的理解

我对数据链路层的理解

Scroll Down

一、数据链路层概述

1、数据链路&通信协议

通信链路是指数据传输的通路,分为物理链路数据链路物理链路指的是用于传输数据信号的物理通路,由传输介质和通信设备构成。数据链路(逻辑链路)是由物理链路+通信协议,当需要在一条线路上传送数据时,除物理链路外,还必须有必要的通信协议来控制这些数据的传输。数据链路按照通信方式的不同又分为点对点链路广播链路

  • 点对点链路是指使用一对一的通信方式
  • 广播链路是指使用一对多的通信方式

通信协议是指双方实体完成通信或服务所必须遵守的规则,根据信息传输单位分为异步协议同步协议

  • 异步协议是指以字符为独立的信息传输单位,在每个传输字符起始处和字符内添加起始位、校验位、停止位等冗余位,它不需要发送方和接收方进行时序协调,所以信道利用率低,一般用于数据传输率较低的场合
  • 同步协议是指以帧为传输单位,在帧的起始处同步,使帧内维持固定的时钟。采用帧为传输单位,所以信道利用率高,也便于实现差错控制、流量控制等功能,一般用于LAN、WAN、MAN中,同步协议又被分为面向比特的、面向字符的:
    • 面向比特的同步协议是指将传输的帧看作是连续的比特流,控制信息是一个或多个比特。
    • 面向字符的同步协议是指将传输的帧看作是连续的字符,控制信息以ASCII形式出现。

PDU是协议数据单元,就是通信协议使用的信息传输单位。数据链路层的PDU叫、网络层PDU叫/IP数据报、传输层PDU叫。数据链路层发数据和接收数据流程:

  • 数据链路层发数据流程:将网络层传递下来的数据部分前后加上首部和尾部(根据具体的数据链路层协议规定)组成帧,然后以比特流形式发送到物理链路上
  • 数据链路层接收数据流程:从物理链路上接收到比特流,根据具体数据链路层协议规定的帧定界符和转义符划分成不同的帧,进行数据帧校验后,然后剥离数据链路层首部和尾部,将数据部分交给上面的网络层

2、数据链路层协议的特点

数据链路层协议需要规定并解决三个问题:比特流进入数据链路层后根据什么规则划分成帧的、如果数据部分存在帧定界符该怎么解决、接收方接收到帧后如何对帧内容的准确性做验证,因为物理层是可能出现比特差错的。以上三个问题归纳总结为帧封装规则透明传输帧差错校验

1)封装成帧

数据链路层需要规定如何封装上层的数据并传输到链路上。封装成帧是指发送端在IP数据报的前后分别添加首部和尾部,这样就形成了帧(frame)。首部和尾部中使用帧定界符,SOH(帧首,01)和EOT(帧尾,04),分别用于表示帧开始帧结束。帧定界符不仅定义了如何封装成帧,同时另一个重要作用就是在发送方没发送完整个帧时出现错误后恢复正常,会重新发送该帧,接收方知道该帧不完整便会丢弃该帧。

SOH和EOT是ASCII码中的控制字符,十六进制表示01、04

datalink1.png

为了提高帧的传输效率,帧的数据部分尽可能地大,但是每种数据链路层协议都规定了传送的帧的数据部分长度上限——最大传送单元(即MTU,或者理解为最大的IP数据报长度),PPP MTU和DIX ethernet V2 MTU。

cisco system 中存在两个MTU,二层MTU和三层MTU:

  • 二层MTU:指网络层传递下来的数据,该MTU无法手动修改,默认为1500 bytes。这样cisco 路由器支持的最大值就是1500 + 二层帧头 + FCS = 1518 bytes
  • 三层MTU:指IP数据包,该MTU可以修改(ip mtu),但是三层MTU≤二层MTU,如果IP数据包大于三层MTUmax,那就需要分片

2)透明传输

有了帧定界符提供封装成帧的规定后,出现一个问题,如果数据部分出现SOH或者EOT呢?透明传输是该问题的解决方案。

透明传输是指数据部分出现帧定界符不将其解释为帧定界符实现透明传输的方法就是在帧定界符前加上转义字符ESC,该过程叫字符填充。ESC能够保证收发两端的数据链路层协议不将出现在数据部分的SOH或EOT解释为帧定界符,交给网络层时,剔除帧定界符和转义字符。如果ESC出现在数据部分,那么仍然加上ESC来进行转义

ESC是ASCII码中的控制字符,十六进制表示1B

3)差错校验

我们知道由于通信链路并不是理想的,所以误码率不可能降低到0,所以在计算机传输数据时,必须进行差错检测,差错检测就是指如何处理在传输过程中可能会出现的比特差错和传输差错。如何解决比特差错和传输差错?

datalink2.png

比特差错解决方案

目前数据链路层协议广泛采用比特差错检测方式为循环冗余校验CRC,以例子来说明CRC原理:假设现在收发双方选择CRC生成多项式G(X)=X4 +X3 +1,要求计算出M=10110011的CRC校验码。以下是计算过程:

  • 发送端:将多项式转换成二进制数,总位为5位(最高位+1),11001(第4、3、0为1),所以二进制比特串P=11001。CRC校验码是比多项式总位少1的,所以是4bits。因为原数据帧10110011,在它后面加4个0,得到中间帧2n M=101100110000,然后将这个数进行模2除法运算,计算(2n M)/P取余,得到余数为CRC校验码。将CRC校验码和中间帧使用二进制加法计算,得出的数据为要发送出去的帧即D=101100110100。

取余时,如果余数是4bits,比如得到余数为0100,那么最前面的0不能省略

  • 接收端:接收到101100110100后,会使用P=11001以“模2除法”计算,验证余数是否为0,如果为0,表示传输过程无差错,否则就出现了差错。

CRC多项式是双方协商好的

传输差错解决方案

如果整个传输中没有出现比特差错,但是出现了传输差错,即以下几种情况:

  • 帧丢失:收到#1-#3
  • 帧重复:收到#1-#2-#2-#3
  • 帧失序:收到#2-#1-#3

OSI的观点是让数据链路层向网络层提供可靠传输服务,即传输差错在数据链路层必须全部解决。但是由于通信链路质量不好而引起差错的概率大大降低,所以目前互联网就采取了区别对待的方法:

  1. 传输层解决传输差错的问题:对于通信质量良好的传输链路,数据链路层协议不要求数据链路层向网络层提供可靠传输服务,而是由传输层的TCP协议来完成可靠传输服务
  2. 数据链路层解决传输差错的问题:对于通信质量不好的传输链路,数据链路层需要向网络层提供可靠传输服务

3、典型数据链路层协议

数据链路层使用的逻辑链路主要有点对点链路广播链路两种。对于不同的链路,有不同的通信协议,有针对数据链路层广播链路的DIX ethernet V2IEEE802.3两种常见通信协议;有针对数据链路层点对点链路的PPPHDLC两种常见通信协议。在之前,不同的局域网使用不同的数据链路层协议,该局域网内的所有主机应当采用相同的数据链路层协议才能进行通信。

datalink3.png

二、PPP

PPP(point to point,点到点)是属于数据链路层协议下的点对点链路协议。也是目前采用最广泛的数据链路层协议,设计主要用于通过拨号/专线方式/internet接入建立点对点连接发送数据,是各种主机、网桥、路由器之间简单连接的一种通用解决方案,通常用户需要使用PPP来连接到ISP的链路上。PPP是由IETF制定,1994年成为互联网的正式标准(RFC1661)。PPP因为只具有错误检测能力,而不具备纠错能力,所以是不可靠传输协议

从不可靠传输协议得知传输差错由传输层解决,PPP只解决了比特差错

1、PPP特点

设计PPP时要求实现以下特点:封装成帧、透明传输、简单、对上支持多种网络协议、对下支持多种类型物理链路、无重传机制

封装成帧:规定帧定界符为0x7E,用于标识PPP帧的首部和尾部
透明传输:PPP存在异步传输和同步传输两种模式

  • 异步传输(面向字符):逐个字符传输,规定转义字符为0x7D,字节填充实现透明传输
    • 把数据部分出现的0x7E填充为0x7D,0x5E
    • 把数据部分出现的0x7D填充为0x7D,0x5D
  • 同步传输(面向比特流):一连串比特连续发送,规定零比特填充实现透明传输
    • 发送端:只要发现11111,立即在后面填入一个0
    • 接收端:只要发现11111,立即删除后面的一个0

差错校验:对接收端收到的帧进行检测,立即丢弃出错的帧,注意不具备纠错的能力。差错检测一定需要在数据链路层协议上实现,否则错误帧被传输到网络层会浪费网络资源。

简单:PPP不提供差错检测中的传输差错校验,而是将传输差错(最复杂的部分)交给了TCP。因为IP协议也简单,它提供的是不可靠的数据报服务,所以PPP作为数据链路层协议无需提供比IP协议更多的功能。所以对数据链路层的帧,不需要纠错,序号,流量控制。

对上支持多种网络协议:必须支持在链路所连接的局域网或路由器上运行的各种网络层协议,比如IP、IPX、netBEUI、NWLINK、OSPF等

对下支持多种类型物理链路:支持串口线、电话线、移动电话、光纤、并行、同步、异步、低速、光速、交换、非交换的链路。比如PPPOE协议(RFC 2516),在以太网上运行的PPP,这是PPP协议能够适应多种类型链路的一个典型例子。PPPoE是为宽带上网的主机使用的数据链路层协议。这个协议把PPP帧封装在了以太网帧中(当然需要增加一些能够识别各用户的功能)。宽带上网时由于数据传输速率高,因此可以让多个连接在以太网上的用户共享一条到ISP的宽带链路。现在,即使是只有一个用户利用ADSL进行宽带上网(并不知道和其他人共享ISP的宽带链路),也是使用PPPoE协议

无重传机制:网络开销小,速度快

PPP具有以下功能:检查连接状态、MTU、网络层地址协商、身份验证

  • 检查连接状态:必须具有自动检测链路状态的功能
  • MTU:PPP协议必须对每一种类型的点对点链路设置MTU。如果高层协议发送的分组长度超过MTU的数值,PPP就会丢弃该帧,并返回差错。值得注意的是MTU是帧中的数据部分所能承载的最大数据量,而不是帧的长度。如果MTU为1500字节,那么加上PPP帧的首部和尾部一起是1500 + 5 + 3 =1508字节
  • 网络层地址协商:具有动态分配IP地址的功能,允许在连接时协商IP地址。PPP协议提供了一种机制使通信的两个网络层(例如两端都是IP层)的实体能够通过协商了解和配置双方的网络层地址。所以如果没有该功能,则表示数据链路层建立了连接,但是不知道对方的网络层地址,这就无法保证网络层可以传送分组。如果是以太网链路,那么不需要这种协商,因为以太网中存在ARP协议来获知MAC和IP的对应关系

2、PPP帧格式

PPP帧格式首部5字节,尾部3字节。FCS用于对数据部分的校验。

datalink4.png

PPP首部中协议字段标识数据部分采用网络协议类型:

  1. 0x0021,表示数据部分是IP数据报
  2. 0xC021,表示LCP数据
  3. 0x8021,表示网络层的控制数据

3、PPP工作原理

datalink5.png

LCP用于启动线路、测试线路、协商参数、关闭线路。LCP建立点对点链路,是PPP中实际工作的部分。LCP负责建立、配置、测试数据链路连接,LCP还负责协商和设置WAN数据链路上的控制选项,这些选项由NCP处理。

NCP具有协商网络层选项的方法,并且协商方法与使用的网络层协议独立。PPP允许多个网络协议共用一个链路,NCP负责连接PPP二层和三层(类似采用广播链路的以太网协议的附加ARP协议)。对于所使用的每个网络层协议,PPP都分别使用独立的NCP来连接,比如IP使用IPCP、IPX使用IPXCP等

PPP提供身份认证:PAP、CHAP。CHAP安全性高,CHAP不会传输密码,而是使用hash,且通过三次握手实现。CHAP主动发出请求,对端回复一个数据包(包含随机hash值),主动方在数据库中确认无误后发送一个连接成功的数据包连接。

datalink6.png

1st.用户PC拨号呼叫路由器时,在双方建立物理层连接后,PPP进入链路建立状态
LCP开始协商配置参数,发送了LCP配置请求帧(PPP帧),协议字段为0xC021,数据部分包含了配置请求。配置参数包含了:最大帧长、验证协议(PAP、CHAP)。ISP端可以发送以下几种响应:

  • 配置确认帧:所有选项都接受
  • 配置否认帧:所有选项都理解但不能接受
  • 配置拒绝帧:选项无法识别/不能接受,需要协商

2nd.协商结束后就建立了LCP链路,开始验证,这一状态只允许发送LCP协议的分组、验证协议的分组、检测链路质量的分组。如果验证成功,进入网络层协议状态

3rd.PPP协议两端的网络层可以运行不同的网络层协议,但仍然可使用同一个PPP协议进行通信。如果PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块(如分配IP地址)时就要使用NCP中支持IP的协议——IPCP。IPCP分组也可以封装成PPP帧。

4th.当网络层配置完毕后,链路进入了可进行数据通信的链路打开状态,链路两端的PPP端点可以彼此向对方发送分组。两个PPP端点还可以发送回送请求LCP分组和回送回答LCP分组,以检查链路状态

三、ethernet

LAN是典型的广播链路,具有广播功能,从一个节点可以访问全网。LAN上的主机可共享连接在局域网上的各种硬件和软件资源。局域网便于系统的扩展和逐渐演变,各设备的位置可进行灵活调整。局域网提高了网络系统的可靠性、可用性、生存性。

  • LAN(local area network):局域网,一般为企业/单位自行组件的一套网络,该网络遵守标准以太网协议,且地理范围和计算机数量均有限。LAN的特点就是具有更高的数据率、较低的时延和较小的误码率,但是随着光纤在WAN中的使用,现在的WAN也拥有很高的数据率。
  • WAN:广域网

1980年左右,不同的厂商拥有着不同的局域网的标准,比如令牌环网、FDDI、ARCNET。其中两个局域网标准分别是DIX ethernet V2(RFC 894)和IEEE 802.3(RFC 1042)。因为这两个局域网标准的差别较小,人们常把802.3局域网标准称为“以太网”,但是严格来说,DIX ethernet V2才是以太网。1990年经常使用的局域网标准只剩下了DIX ethernet V2。再经过30多年发展后,快速以太网(100Mbit/s)、吉比特以太网(1 Gbit/s)、10吉比特以太网(10 Gbit/s)相继出现在了市场中,以太网成为了局域网标准且占了绝对优势。

1、以太网

1)物理层基本组件

switch/router

switch指的是交换机,是扩展以太网的关键硬件,所有的端口默认都处于一个局域网内,每个端口都是独立的冲突域。router指的是路由器,不同的端口为不同的局域网,每个端口隔离广播域。

cable/fiber optics

以太网可使用多种传输媒体, 10Mbit/s-10Gbit/s的局域网都可以使用双绞线(cable)。当数据率很高时,比如超过10Gbps时,需要使用光纤(fiber optics)作为传输媒体。

NIC

计算机和外界局域网的连接是通过网络适配器/网络接口卡(即NIC)这个设备来实现的。NIC和LAN之间的通信时通过双绞线以串行传输的方式进行的,但是由于计算机内部使用的是并行传输,所以NIC还有一个重要功能就是进行数据串行传输和并行传输的转换。同时由于网络上的数据率和计算机总线上的数据率并不相同,因此NIC中还得装有对数据进行缓存的存储器。

数据率:是指在传输介质或者总线上的数据传输速度,一般用Mbps/Gbps表示

NIC需要有相对应的驱动程序,驱动程序会告诉NIC,应当从存储器的什么位置上把多大的数据块从“我”这发出去,相反将局域网上来的数据块存到存储器的什么位置上。NIC需要实现以太网协议(即ethernet)。NIC在接受和发送各种帧时,不使用CPU,这样减轻CPU的工作压力。当NIC收到有错误的帧时,直接丢弃而不用通知计算机;当NIC收到正确的帧时,它使用中断来通知计算机,并交付给协议栈中的网络层。

2)数据链路层

ethernet采用广播链路,可以进行一对多的通信。所以广播信道要解决的问题就是如何合理的共享通信媒体资源。为了解决这个问题,ethernet引入多点接入技术,多点接入技术的特点就是用户随机的使用信道(即随机发送数据),那如果两个用户同时发送数据,会在共享媒体上发生碰撞(也称冲突),这就会导致两位用户发送数据同时失败,解决同时间共享媒体冲突需要引入CSMA/CD协议来解决。

  • 冲突/碰撞:在ethernet中,两个数据帧同时发送到物理介质上,数据产生重叠,导致数据不再有效
  • 冲突域:在同一个冲突域中的每一个节点都能收到所有被发送的帧
  • 广播:向所有连通的节点发送数据
  • 广播域:网络中能够接收到任何一设备发出的广播帧的所有设备的集合
  • 共享型以太网理解:ethernet内的所有主机共同使用同一个固定带宽的物理介质,因为集线器不会将帧存储起来等待再发,而是立即发送到物理链路上。即集线器连接的ethernet是共享型ethernet,交换机连接的ethernet是非共享型ethernet

由于早期使用集线器比较多,集线器的机理是所有接口处于同一个碰撞域下(即所有主机都在一个碰撞域下),使用CSMA/CD(载波侦听多路访问/冲突检测)协议能够有效减少碰撞。CSMA/CD适用于共享性ethernet,对于非共享型的ethernet,比如交换机所组件的小型局域网,交换机的原理是每个接口都是一个单独的碰撞域。只要不将端口设置为半双工模式,就不需要用到CSMA/CD。

  • 交换机能够隔绝冲突,因为交换机内部有缓存机制、双绞线可以通过两对线实现全双工
  • 半双工(half duplex)是指同一时间只能发送/接收数据;半双工比如使用对讲机,同一时间只有一个人可以说话,另一个人只能听
  • 全双工(full duplex)是指同一时间可以同时发送和接收数据;全双工比如手机,同一时间两个人可以同时说话和收听
CSMA/CD工作机理具象化描述:如果你听见有人在发言,那就必须停下来等别人讲完,但如果有时碰到两个人同时发言,那么就发生了碰撞,大家必须立即停止发言,等听到没人发言时你再发言。可以总结为“先听后说,边听边说,一旦冲突,立即停说,等待时机,然后再说”

“听”,指的是监听,即检测局域网总线中传输的信号,这里的“说”,指的是传输,即向这个LAN总线发送数据

因此,在数据发送前,先要检测这个局域网总线是否空闲,当检测数据帧没有被发送时,这台设备才开始尝试发送电信号。如果发送信号的设备突然检测到局域网有冲突,会立即停止发送数据帧,并发送阻塞信号。将发生冲突的情况通告给局域网中的每个节点。而引起冲突的设备在收到阻塞信号后,会等待下一个随机时间,再次尝试发送数据。CSMA/CD:并不能避免共享介质上发生冲突,它提供了只是检测冲突的方案,以及发生冲突时保证以太网能够继续工作的方法。

局域网上的计算机人们一般称为“主机”、“工作站”、“站点”、“站”,这些词都是同义词

ethernet特点:

  • 广播链路
  • 无连接工作方式:(不必先建立连接就可以直接发送数据):因为局域网的广播信道质量很好,产生差错的概率较小,所以NIC对发送的数据帧不进行编号,也不要求对方发回确认。因此以太网提供的服务是不可靠交付。当目的主机收到帧经过CRC检测后,发现有差错就直接丢弃该帧,其他什么都不做,对差错帧是否需要重传则由高层来决定。如果高层使用了TCP协议,那么TCP发现丢失了一些数据,于是TCP要求将这些数据重新传递给以太网进行重传。但是以太网并不将其当作重传帧,而是当作新的数据帧来发送。
  • 发送的数据采用曼彻斯特编码:就是采用高低电压交替出现的信号

2、以太网帧格式

1)MAC地址

在局域网中,MAC地址(又称物理地址/硬件地址),MAC地址是指每一台主机中固化在NIC的ROM中,能唯一标识一个NIC。MAC(media access control address)地址为48位,形象的说就是标识一个人身份的身份证,不管你到了地球上的哪个角落,你都不会改变身份证的信息,具有唯一性。

MAC地址不是标识一台主机,而是标识一个NIC!因为主机中的NIC损坏是可以更换NIC的,更换的NIC则拥有了不同的MAC地址。或者一台主机中可以安装多个NIC,那么就拥有了多个MAC地址,所以更准确的说MAC地址应当是某个接口的标识符。

IEEE的注册管理机构RA是局域网全球地址的法定管理机构,它负责分配地址字段6字节的前3个字节(称为公司标识符,OUI)。生产NIC的厂家都必须向RA购买OUI,RA再分配OUI给该厂商。比如TP-link公司生产的NIC的MAC地址的OUI为24:69:68。6字节的后3字节由该公司自行分配,只要保证生产的NIC没有重复地址即可,可见一个OUI可以生产2^24个不同的MAC地址。用这种方式得到的48位地址称为EUI-48。但值得注意的是24位的OUI不能够单独用来标志一个公司,因为一个公司可能有几个OUI,也可能有几个小公司合起来购买一个OUI。

datalink7.png

地址记法中有两种标准:

  • 把每个字节的最低位写在最左边(IEEE 802.3标准采用这种记法)
  • 把每个字节的最高位写在最左边

在发送数据时,两种记法都是按照字节的顺序发送,而在每一个字节中的发送顺序都是从低位到高位,即先发送该字节的最低位,最后发送该字节的最高位。

OUI中的第一个字节的最低位叫I/G(individual/group)位:

  • I/G=0时,地址字段表示一个单个站地址
  • I/G=1时,地址字段表示一个组地址,用来进行组播(又称多播)
    因此,RA只分配地址字段的前三个字节中的23位,当I/G位分别表示0和1时,一个地址块分别生成223个单个站地址和223个组地址。

OUI中的第一个字节的最低第二位叫G/L(global/local)位:

  • G/L=0时,表示全球管理,保证在全球没有相同的地址,厂商向IEEE购买的OUI都属于全球管理
  • G/L=1时,表示本地管理,用户可任意分配网络上的地址。以太网不会理会G/L=1时的地址

这样在全球管理时,对每一个站的地址可用46位的二进制数字来表示(最低位和最低第二位为0),剩下的46位组成了地址空间可以有2^46个地址,已经超过70万亿个,可保证世界上的每一个NIC都可有一个唯一的地址。当然迟早会用完的,IEEE已经开始制定EUI-64标准的地址了。

当路由器通过NIC连接到局域网时,NIC上的MAC地址就用来标志路由器的某个接口。路由器如果同时连接到两个网络上,那么它就需要2个NIC和2个MAC地址。
NIC拥有过滤功能,当NIC从网络上每收到一个MAC帧就先用硬件检查MAC帧中的目的地址。如果是发往本站的帧则就收下,然后再进行其他的处理。否则就将此帧丢弃,不再进行其他的处理。这样做就不浪费主机的CPU和内存。发往本站的帧分为:

  • 单播帧(unicast):收到的帧的MAC地址与本站的MAC地址相同
  • 广播帧(broadcast):发送给本局域网上的所有站点的帧(全1地址)
  • 多播帧(multicast):发送给本局域网上一部分站点的帧

所有的NIC都至少应当能够识别前两种帧。NIC还可设置为一种特殊的工作方式,即混杂模式。工作在混杂模式的NIC只要“听到”有帧在以太网上传输就都悄悄地接收下来,而不管这些帧是发往哪个站。这样做实际上是窃听其他站点,而不中断其他站点地通信。

2)ethernet帧格式

常用ethernet的MAC帧格式有两种标准:DIX ethernet V2、IEEE 802.3。假设网络层使用的是IP协议(使用其他网络层协议也可以)。802.3标准定义了以下内容:

  • 首部14bytes、尾部4bytes
  • CRC计算从目的MAC到数据部分的校验和
  • 最小帧长64bytes、最大帧长1518bytes

下图是V2的MAC帧格式:
datalink8.png

  • 前导码(7bytes)
  • 帧起始定界符(1bytes)
  • 目MAC(6bytes):目的MAC地址
  • 源MAC(6bytes):源MAC地址
  • 类型(2bytes):用来标识上一层使用的是什么协议,以便把收到的MAC帧数据部分上交给上一层的这个协议。
  • 数据(46~1500bytes):长度从46-1500字节;最小长度64字节-18字节的首部和尾部长度
  • FCS(4bytes):用于CRC校验

V2的帧中,在数据链路层前会增加长达8bytes的前同步码(7bytes)和帧开始定界符(1byte),接收方如何准确的标识出一帧的开始和结束以及如何取出数据部分交给上层网络层协议?

前同步码作用:考虑到接收方的适配器始终尚未与到达的比特流达成同步,因此MAC帧的最前面的若干位就无法接收,结果使整个的MAC成为无用的帧。

  • 数据部分长度在46~1500bytes正常流程:
    前面讲到,ethernet使用曼彻斯特编码,曼彻斯特编码特点就是在曼彻斯特编码的每一个码元的正中间有一次电压的转换(1到0,0到1)。当发送方把一个ethernet帧发送完毕后,就不再发送其他码元了,因此发送方NIC的接口上的电压也就不变化了,这样接收方就可以很容易地找到ethernet帧的结束位置,帧开始位置则是由帧开始定界符决定的。知道一帧的开始和结束位置后,从结束位置往前数4bytes,就能确定数据字段的结束位置,开始位置则是从前往后数14bytes,数据部分的开始和结束就能确定了。
  • 数据部分长度小于46bytes,追加流程:
    V2标准就会在数据字段中加入一个整数字节的填充字段,以保证以太网的MAC帧长不小于64bytes = 6 + 6 +2 +4 +46(前导码、帧定界符不计入帧头长度)。我们应该注意到,MAC帧的首部并没有指出数据字段的长度是多少,在有填充字段的情况下,接收端的MAC在剥离首部和尾部后就把数据字段和填充字段一起交给了上层协议。现在的问题是:上层协议如何知道填充字段和长度呢(网络层应当丢弃没有用处的填充字段)?其实网络层协议具有识别有效的数据字段长度的功能。如果是IP协议,那么IP首部有一个总长度字段,总长度字段+填充数据长度=MAC帧数据字段的长度,比如当IP数据报的总长度为42字节时,填充字段共有4字节,当MAC帧把46字节的数据上交给IP后,IP层就把其中最后4字节的填充数据丢弃。

3、以太网工作原理

4、以太网发展

1)扩展以太网

数据链路层扩展以太网

在很多时候,希望对以太网的覆盖范围进行扩展(比如说增加多台服务器接入到以太网中),这种扩展的以太网在网络层看来仍然是一个网络。扩展以太网常用的方法是在数据链路层进行,一开始使用的是网桥(birdge)。当网桥收到一个帧时,根据此帧的目的MAC地址,查找网桥中的地址表,然后确定将该帧转发到哪一个接口,或者是把它丢弃。

后来,人们使用了以太网交换机,淘汰了网桥。以太网交换机工作在数据链路层,其实质就是一个多接口的网桥,通常有十几个接口。每个接口所连的主机都是独占传输媒体,无碰撞地传输数据(翻译成人话就是对于传统的10Mbit/s的共享式以太网,10个接口,每个接口只占1Mbit/s,而采用以太网交换机的10Mbit/s交换式以太网,每个接口独占10Mbit/s的带宽,同时每个接口都是一个独立的碰撞域)。同时以太网交换机拥有内存,如果在输出接口繁忙时,会把接收地帧暂存到内存中,等空闲后再发出去。

以太网交换机拥有学习功能,将学习到的目的MAC地址和接口所对应,存到CAM中,其转发速率也高于网桥。

虚拟局域网

在IEEE 802.1q标准中,虚拟局域网(VLAN)定义:VLAN是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个VLAN的帧都有一个明确的标识符,指明发送这个帧的计算机属于哪一个VLAN。

利用以太网交换机可以很方便的实现VLAN,VLAN其实只是局域网给用户提供的一种服务,并不是一种新型的局域网。

每一个VLAN的计算机可处在不同的局域网中,也可以不在同一个楼层中。利用以太网交换机可以很方便的将这9台主机划分到三个VLAN中。在VLAN上的每一个主机都能收到同VLAN上其他成员所发出的广播。比如人力资源部的B3发送了一个广播,那么人力资源部这个VLAN的其他成员B1、B2都能收到这个广播。而连接在同一个以太网交换机上的A3、C3则无法收到广播,因为以太网交换机不向VLAN以外的主机传送广播。这样就不会造成广播风暴!

所以虚拟局域网是用户和网络资源的逻辑组合,因此可按照需要将有关设备和资源非常方便地重新组合,使用户从不同地服务器或数据中存取所需地资源。

以太网交换机可以分为二层交换机、三层交换机。其中二层就是普通的以太网交换机,而三层交换机是具有路由功能的以太网交换机。

IEEE 802.3ac标准定义了以太网的帧格式的扩展,以便支持VLAN。VLAN协议允许在以太网的帧的MAC源地址和类型字段之间插入一个4字节的标识符,称为VLAN tag(VLAN标记)。用来指明发送该帧的计算机属于哪一个VLAN,插入VLAN tag得出的帧称为802.1q帧。如果仍使用原有的以太网帧格式,那就无法区分是否划分了VLAN。上图在以太网交换机之间传输的是802.1q帧,而在以太网交换机和主机之间传送的是普通的以太网帧。

当以太网交换机的数据链路层检测到帧的MAC源地址字段后面的两个字节的值是0x8100时,就知道现在插入了4字节的VLAN tag。以下是VLAN tag的具体内容:

datalink9.png

由于VLAN的以太网帧的首部增加了4字节,因此以太网的最大帧长从原来的1518字节(1500字节(最大MTU) + 18字节(首部))变为1522字节

2)高速以太网

随着以太网的速率不断提升,从传统的10Mbit/s以太网一直发展的到现在常用的速率为1Gbit/s的吉比特以太网,甚至更快的以太网,以下是几种高速以太网技术:快速以太网、吉比特以太网、10吉比特以太网、40吉比特以太网等。以太网技术发展一直没有改变最大最小帧长和使用的帧格式。

datalink10.png

Mbit/s = Mbps

快速以太网(百兆网络)在双绞线上的带宽是100Mbps。符合快速以太网标准的交换机只有在半双工模式下才会使用CSMA/CD,快速以太网使用802.3帧格式,快速以太网标准被收录在802.3u。用户只需要使用百兆NIC和百兆交换机才会发挥百兆以太网的性能。百兆NIC能够支持10Mbps和100Mbps。

datalink11.png

吉比特以太网(千兆网络)在双绞线/光纤的带宽是1000Mbps。符合吉比特以太网标准的交换机只有在半双工模式下才会使用CSMA/CD,吉比特以太网使用802.3帧格式,吉比特以太网标准被收录在802.3z。千兆NIC能够支持1000Mbps以下的带宽。

datalink12.png

10吉比特以太网(万兆网络)在光纤的带宽是10Gbps。符合10吉比特以太网标准的交换机只能工作在全双工模式下,因为只工作在全双工模式,所以不需要CSMA/CD,这就使得10GE的传输距离大大提高了。万兆NIC能够支持10Gbps以下的带宽。

datalink13.png

前三项标准收录在802.3ae、第四项标准收录在802.3ak、最后一项是802.3an

40吉比特和100吉比特只工作在全双工模式

datalink14.png

现在以太网的工作范围已经从局域网(校园网、企业网)扩大到城域网和广域网,从而实现了端到端的以太网传输。这种工作方式的好处是:

  • 以太网是一种成熟技术,不管是ISP还是普通用户都很喜欢以太网
  • 以太网的互操作性也很好,不同厂商生产的以太网都能可靠的进行相互操作
  • 在广域网中使用以太网时,其价格大约是只有同步光纤网SONET的五分之一和异步传递方式ATM的十分之一。以太网能够适应多种传输媒体(铜缆、双绞线、光纤)
  • 同时以太网也是可扩展、灵活的、易于安装、稳健性良好

5、以太网的宽带接入

人们也常使用以太网进行宽带接入互联网,因此,IEEE成立了802.3EFM工作组,专门研究高速以太网的宽带接入技术问题。

以太网接入的一个重要特点就是它可以提供双向的宽带通信,并且可以根据用户对带宽的需求灵活的进行宽带升级。当城域网或者广域网都采用吉比特以太网或10吉比特以太网时,采用以太网接入可以实现端到端的以太网传输,中间不需要进行帧格式的转换。这就提供了数据的传输效率且降低了传输的成本。但是以太网帧格式中,没有用户名字段、密码字段,这就无法解决鉴别用户身份的问题。如果ISP想要利用以太网接入到互联网,就必须解决这个问题。

在仔细想想PPP这个数据链路层协议可以提供鉴别用户身份的问题,所以就采用了将PPP协议中的PPP帧再封装到以太网中来传输,这就是PPPOE。现在的光纤宽带接入FTTX都要使用PPPOE的方式进行接入。