6.1 链路层概述
术语:
- 节点:运行链路层协议的所有设备,包括主机,路由器,WiFi交换机等。
- 链路:沿着通信路径连接相邻节点的通信信道。分为有线和无线两种链路。
- 链路层帧:承载数据报并在链路中传输的载体,与网络层数据报相比多了链路层首部。
链路层的主要功能:负责将数据报通过链路从一个节点传输到物理上相邻的节点。
把链路层帧的传输比作旅行,那么游客相当于数据报,从出发地到目的地的路径相当于一条链路,高铁,飞机等交通方式相当于不同的链路层协议,旅行社相当于路由选择协议(为游客规划路径)
6.1.1 链路层提供的服务
数据报在不同链路上可能由不同的链路层协议进行处理。
不同的链路层协议可能提供不同的服务。
(1)成帧:
- 链路层将网络层数据报加上头部和尾部,并封装成链路层帧。
- 链路层帧由若干首部和数据字段组成,网络层数据报就在数据字段中。
- 帧的结构由链路层协议规定。
(2)链路接入:
- 介质访问控制(MAC)协议规定了帧在链路上传输的规则。
- MAC协议用于当多个节点公用同一条链路时,协调多个节点的帧传输。
(3)可靠交付:
- 保证无差错经链路层移动每个网络层数据报。链路层的可靠交付通常是通过确认和重传取得的(和TCP类似)
- 许多有线的链路层协议本身具有低比特差错的特点,因此不提供可靠交付服务。
(4)差错检测和纠正:
- 目的是在差错发生的链路上纠正差错,而不是通过运输层或应用层进行端到端数据重传。
- 发送节点在数据报中添加校验码,接收节点进行检测并纠正。
- 检测和纠正在硬件中完成。
(5)流量控制:
- 在相邻的节点中限制收发流量。
6.1.2 链路层在何处实现
大多数情况下,链路层是在被称为网络适配器(网卡NIC)的芯片上实现的。但部分链路层是在运行于主机CPU上的软件中实现的,软件实现了高级功能,如组装链路层寻址信息和激活控制器硬件,响应控制器中断。
网络适配器是半自治单元,帧的发送,接收,丢弃都是自主进行,但是向上层提交数据需要节点干预,所以网络适配器最终还是受控于节点。
6.2 差错检测和纠正技术
比特级差错检测与纠正,即对从一个结点发送到另一个物理上连接的邻近结点的链路层帧中的比特损伤进行检测与纠正,它们通常是链路层提供的两种服务。
为了保护比特免受差错,使用差错检测和纠正比特(EDC)。通常,要保护的数据不仅包括从网络层传递下来需要通过链路传输的数据报,而且包括链路帧首部中的链路级的寻址信息、序号和其它字段。
即使采用差错检验比特,也还是可能有未检出比特差错,但是一般EDC越长,检测出错的概率越低。
6.2.1 奇偶校验
(1)单个奇偶校验位
在数据最后添加一个比特,使整段数据中1的个数为奇数或者偶数,1的个数为奇数称为奇校验,为偶数称为偶校验。但是这样的方式只能检测出奇数个比特出现差错的情况,无法检测偶数个比特出现差错的情况。
单个奇偶校验不能纠正比特错误,因为只知道出现了错误,不知道是哪个比特出现了错误。
(2)二维奇偶校验位
对整个数据块的每行和每列分别使用奇校验或偶校验,这样就可以通过索引找到出现比特差错的位置,并且能够纠正它。
此外,二维奇偶校验也能检测出一个分组中偶数个比特差错的情况,但是不能确定具体位置,也就不能纠正。特殊的,当比特差错对称地出现在数据块的四个角落(呈矩形)时,无法检测出错误。
接收方检测和纠错的能力被称为前向纠错(FEC),FEC可以减少发送方重发的次数,允许接收方自行更改差错,这样就避免了重传时不得不等待的往返时延。
6.2.2 检验和方法
待检验部分从头开始,每16比特进行一次加法计算(如果最后有8位剩余,最后加上这8位),这样最终计算出来的和进行一次反码运算,就是检验和。如果求和过程中遇到了任何溢出,都进行回卷(即加回到最低位)
接收方将所有的16位比特相加,最后再加上16位检验和,如果结果是1111111111111111,则没有出现差错;只要有0出现,说明出现了差错。
6.2.3 循环冗余检测
编码解码步骤:
CRC编码也称为多项式编码,因为该编码能够将要发送的比特串看成系数是0或1的一个比特串,对比特串的操作被解释为多项式算数.
这里不过多讨论多项式理论。
编码步骤如下 :
1. 发送方和接收方实现协商一个r + 1的比特模式(比特串)G,叫做生成多项式.要求G的最高位是1
2. 对于一个给定的数据段D,发送方选择r个附加比特R,并将它们附加到D上.
3. 使得得到的d + r比特模式用模2算数恰好能被G整除.(模2算数就是异或)
接收方的解码步骤很简单,用G去除收到的d + r比特.如果余数非0,接收方知道出了差错.否则认为数据被正确接收。
6.3 多路访问链路和协议
- 点对点链路:点对点协议(PPP),高级数据链路控制协议(HDLC)
- 广播链路: 让多个发送和接收结点都连接到相同的、单一的、共享的广播信道上;当任何一个结点传输一个帧时,信道广播该帧,其他结点都收到一个副本;如以太网和无线局域网。
多路访问问题:
- 如何协调多个发送和接收节点对于一个共享广播信道的访问。
- 两个以上的节点同时传输时会相互干扰;一个节点同时收到多个帧时就叫发生了碰撞,发生碰撞时无法接收帧。
多路访问协议:
- 分布式算法决定节点如何共享信道,节点合适可以传输数据。
- 三种多路访问协议:信道划分协议,随机接入协议,轮流协议。
理想情况下对速率R bps的广播信道,协议希望有的特性:
- 仅有一个结点发送数据时,结点具有R bps的吞吐量
- M个结点发送数据时,每个结点平均吞吐量R/M bps
- 协议分散,不会因为某个结点故障使得整个系统崩溃
- 协议简单不昂贵
6.3.1 信道划分协议
将信道划分成小的片(时隙,频率,编码),将每一片分给一个节点使用。
(1) 时分多路复用(TMDA)
- TDM把时间划分为时间帧,并进一步把时间帧划分为N个时隙,每个节点在每次循环(每个时间帧)中得到固定长度的时隙用于发送。(时隙长度=传输单个分组的时间)
- 即使只有一个人使用信道,最高速率只能达到R/N bps (大量时隙被浪费)
(2) 频分多路复用(FDMA)
- FDM将Rbps的信道划分为不同的频段(每个频段具有R/N带宽),并把每个频段分给N个结点中的一个。因此FDM在N个较大的信道中创建了N个较小的信道。
- 在频段不用的时候会导致浪费。
(3)码分多址(CDMA)
- 对每个结点分配不同的编码,每个结点用其唯一编码对发送数据进行编码,使得在不同结点同时传输时,接收方仍能正确而接收。
- 具有较强抗干扰特性,已经被广泛使用。
6.3.2 随机接入协议
传输结点总是以信道全部速率R bps进行发送,当发生碰撞时,涉及碰撞的节点等待一个随机长度的时延后重发它的帧,直到该帧无碰撞地通过。
(1)时隙ALOHA
将时间划分成相同大小的时隙,一个时隙等于传输一个帧的时间。
当结点有新帧发送时,等到下一个时隙开始时传输整个帧。
如果有碰撞,结点在时隙结束之前检测到这次碰撞,以p的概率在后序的每个时隙重传它的帧,直到无碰撞。
时隙ALOHA的确需要在结点中对时隙同步,刚好有一个结点传输的时隙称为一个成功时隙。
时隙多路访问协议的效率定义为:当有大量的活跃结点且每个结点总有大量的帧要发送时,长期运行中成功时隙的份额。当活跃结点数量趋向无穷大时,最大效率1/e,即37%。
缺点:多次碰撞发生时浪费时间;时隙有存在空闲的情况;时钟同步;节点必须在时隙内检测碰撞。
(2)纯ALOHA
当节点收到新帧,直接发送,不必等待时隙窗口发送;碰撞时,立即以概率p重传该帧,否则等待一个帧传输时间。
优点:简单,不需要时钟同步,也不存在时隙浪费。
缺点:效率低,仅仅为时隙ALOHA的一半,约18%.
(3)载波侦听多路访问(CSMA)
载波侦听:节点在传输前先看看信道是否空闲,如果信道空闲,那么直接传输帧;如果信道繁忙,那么推迟传输,直到发现信道空闲。
碰撞检测:如果发现有其他节点与自己同时开始传输,那么停止传输,等待随机一段时间后,继续进行载波侦听。这也说明即使在传输时,节点也一直在进行载波侦听。
缺点:碰撞会由于信道传播时延的存在而存在(两个节点都以为此时信道空闲,并同时发送帧)
广播信道端到端信道传播时延决定了性能,时延越大,不能侦听到已传输结点的可能就越大,碰撞越多,性能越差。
(4)具有碰撞检测的载波侦听多路访问(CSMA/CD)
- 适配器从网络层一条获得一条数据报,准备链路层帧,并将其放入帧适配器缓存中
- 如果适配器侦听到信道空闲,开始传输帧;如果侦听到信道在忙,等待,直到空闲
- 传输过程中,适配器监视信道
- 如果适配器传输整个帧而未检测到其他信号,该适配器完成了该帧
- 如果检测到碰撞,停止传输帧并发送干扰信号,使所有人都知道出现了碰撞
- 中止传输后,适配器等待一个随机时间量,继续侦听
随机时间的选择方式由二进制指数后退算法完成。
二进制指数后退:帧经历一连串n次碰撞,结点随机从{0,1,2,…,2^n-1}选择一个K值,一个帧经历碰撞越多,K选择的范围越大。以太网中,一个结点等待的实际时间量是K*512bit的时间。
信道在大多数时间都会有效地工作。效率为:
6.3.3 轮询协议
(1)轮流协议
- 指定一个主节点,主节点邀请“从”节点轮流传输,未被邀请的节点不能传输。
- 主节点向A节点发送报文,告知其能发送多少帧;A传输完成后主节点再邀请B发送。
缺点:轮询时延;主节点失效导致整个信道失效。
(2)令牌传递协议
- 没有主结点,一个叫令牌token的特殊帧在结点之间以固定次序交换,如1发给2,2发给3,N发给1,就像网络拓扑结构中的环状网络令牌。
- 当一个结点收到令牌时,有帧发送,则发送最大数量的帧,然后转发令牌;没帧发送,直接把令牌转发。
缺点:单点故障导致令牌丢失。
6.4 交换局域网
交换机运行在链路层,它们使用链路层地址而不是IP地址来转发链路层帧通过交换机网络。
6.4.1 链路层寻址和ARP
(1)MAC地址(LAN地址,物理地址,链路层地址)
并不是主机或路由器具有链路层地址,而是它们的适配器(网络接口)具有链路层地址。具有多个网络接口的主机或路由器也有多个链路层地址,就像它也有多个IP地址一样。
链路层交换机并没有与其接口相关联的链路层地址,交换机透明地执行在主机与路由器之间承载数据报的任务。
MAC地址的作用是再链路层标识每块网络适配器,使得能够再广播信道上寻找目标节点。
MAC地址长度为6字节,通常用十六进制表示法,如5C-66-AB-90-75-B1。前24bit由IEEE统一管理,生产公司可以从中购买一组号码;后24bit由生产厂商自行分配。所以没有任何两块适配器有相同的MAC地址。
MAC地址具有扁平接口,如果一台主机移动位置,它的MAC地址不会改变(和主机本身相关),IP地址会发生改变(和网络环境相关)。MAC地址像身份证号;IP地址像邮政地址,有层次,会改变。
MAC地址像身份证号,IP地址像邮政地址,有层次,会改变。
当某适配器要向目的适配器发送一个帧时,发送适配器将目的适配器的MAC地址插入该帧,发送到局域网上,适配器可以接受一个并非向它寻址的帧,当适配器接受一个帧时,检查帧中的目的MAC地址与自己的MAC地址是否匹配,若匹配则取出数据报,向上传递,否则丢弃。
适配器通过MAC广播地址FF-FF-FF-FF-FF-FF来广播。
(2)地址解析协议(ARP)
ARP的作用是根据目标的IP地址获取其MAC地址。
DNS为因特网中任何地方的主机解析主机名,而ARP只为在同一个子网上的主机和路由器接口解析IP地址。
每台主机和路由器在内存中有一个ARP表,包含IP地址到MAC地址的映射关系,过期时间20分钟。映射关系包含IP地址,MAC地址和TTL(寿命)。
如发送方的ARP表中没有目的主机的相关信息,那么发送方适配器通过MAC广播地址发送查询分组,子网中的每个适配器都把ARP分组向上传递给ARP模块,检查自己的IP地址和分组中的目的IP地址是否一致,匹配的主机发送回一个ARP响应分组,然后查询主机更新它的ARP表,并发送它的IP数据报。
ARP协议是一个跨越链路层和网络层的协议。
(3)发送数据报到子网以外
路由器有几个接口,就有几个IP地址、ARP模块和适配器。
假设一个路由器连着两个子网A、B,子网A中的适配器要发送帧到子网B中的适配器,那么先通过子网A的ARP把数据报发到子网A跟子网B相连的路由器(目的地址是路由器的MAC),路由器通过子网B的ARP将该数据报转发给目的适配器(目的地址是最终目的地的MAC)。
6.4.2 以太网
以太网占领了现有的有线局域网市场,就像因特网之于全球联网的地位。
集线器是一种物理层设备,作用于比特而不是帧。当0或1的比特到达一个接口时,集线器只是重新生成这个比特,将其能量强度放大,并将该比特向其他所有接口传输出去。所有接口都会收到信号,但只有目的主机会接受信号。
基于集线器的星形拓扑的以太网也是一个广播局域网,现在位于中心的集线器被交换机所取代。交换机是无碰撞的存储转发分组交换机,运行在链路层。
(1)以太网帧结构
- 数据字段(46~1500字节):承载了IP数据报(如),超过1500字节的数据报需要分片;若小于46字节,需要填充到46字节。
- 目的地址(6字节):目的适配器的MAC地址。当目的适配器收到一个以太网帧,若目的地址是自己的MAC地址或广播地址,将数据字段传给网络层,其他则丢弃。
- 源地址(6字节):传输该帧的适配器的MAC地址。
- 类型字段(2字节):允许以太网复用多种网络层协议类型。
- CRC(4字节):差错检测
- 前同步码(8字节):以太网帧以8字节的前同步码开始,前7个字节用于唤醒接收适配器,同步发送方接收方时钟,第8个字节最后两个比特(11)警告目的适配器,重要内容来了。
以太网技术向网络层提供不可靠、无连接服务。没有通过CRC校验的以太网帧会被丢弃,因此数据报流有时会有一些空隙(UDP不会填补空隙,TCP会要求发送方填补空隙)。
(2)以太网技术
早期10BASE-2和10BASE-5标准规定两种类型的同轴电缆的10Mbps以太网,每种标准限制在500米,通过转发器得到更长运行距离。
100BASE-5:BASE表示基带以太网。前面的数字代表速率。5表示传输距离为500m。
今天的以太网,节点经点对点由双绞铜线或光纤构成的线段与一台交换机相连。
现代交换机是全双工的,一台交换机和一个结点能同时向对方发送帧而没有干扰。在基于交换机的以太局域网中,没有必要使用MAC协议了。
6.4.3 链路层交换机
交换机的任务:接收入链路层帧,转发到出链路。
交换机自身对子网中的主机和路由器是透明的,主机/路由器向另一个主机/路由器寻址一个帧,顺利将帧发送进局域网,并不知道交换机的存在。
(1)转发和过滤
过滤决定一个帧应该被转发到某个接口还是应当将其丢弃。
转发决定一个帧应该被导向哪个接口,并将其移动到那些接口。
交换机表中包含MAC地址,通往该MAC地址的接口,表项建立时间。
例如:
- 从A接口到达的帧需要从B接口转发,那么从B接口转发即可。
- 从A接口到达的帧需要从A接口转发,那么直接丢弃该帧。
- 交换机表中没有找到该帧的目的地址,那么向所有接口广播转发数据帧。
(2)自学习
交换机可以自动地配置交换机表,而无需人为干预,因此交换机是即插即用设备。
建立交换机表步骤:
- 交换机表初始为空。
- 从某个接口收到帧以后,交换机表会存储该帧的源地址字段中的MAC地址和收到该帧的接口以及接收时间。
- 如果一段时间内没有收到某个MAC地址发来的帧,那么将其从交换机表中删除。
也就是说,交换机记录它所接收的帧的信息,判断某个接口背后的MAC地址。
(3)链路交换机的性质
- 消除碰撞:交换机可以缓存帧,并且保证一次只在网段上传输一个帧。
- 异质的电路:交换机可以兼容不同类型的链路连接,甚至支持原有的设备和新设备混用。
- 管理:能够识别某个适配器的异常或者某段链路的异常。
(4)交换机与路由器比较
交换机是链路层的分组交换机(使用MAC地址转发),路由器是网络层的分组交换机(使用IP地址转发)。
交换机的优点:
- 即插即用
- 具有相对更高的转发和过滤速率
交换机的缺点:
- 面对大的交换网络,超高的ARP流量和广播风暴,没有较好的应对能力。
- 结构被限制为生成树,处理能力弱。
路由器的优点:
- IP地址是有层次的,因此不会出现路由器循环。
- 可以以丰富的结构构建因特网结构,并选择最短路径。
- 对链路层的广播风暴提供防火墙保护。
路由器的缺点:
- 需要人为配置路由器转发表。
综上,对于几百台主机构成的小网络来说,交换机就足够了,但是对于几千台甚至更多的主机来说,需要路由器来配合交换机使用。
6.4.4 虚拟局域网(VLAN)
将交换机的接口划分为组,每个组构成一个VLAN(可以视为一台小的交换机),在每个VLAN中形成一个广播域,使得在广播的过程中,其他VLAN中的主机不会受到广播影响,从而隔离了流量。
为了使同一台交换机上的不同VLAN能够通信,可以将VLAN交换机上的一个闲置端口(不属于任何VLAN)与一台外部路由器相连,并将该端口配置为属于多个VLAN,这样在外界看来,不同的VLAN使用的是不同的交换机。
6.7 Web页面请求的过程
场景:学生通过校园网向www.google.com发送访问请求。
6.7.1 连接Internet
目的:电脑需要IP地址,网关,DNS服务器等信息。
步骤:
- 电脑上生成一个DHCP请求报文。
- 将DHCP请求依次通过UDP封装(运输层),IP封装(网络层),以太网帧封装(链路层)。
- 以太网帧被局域网广播到与交换机连接的所有设备。
- 网关路由器收到以太网帧,并将其解封装,得到DHCP请求。
- 网关路由器生成DHCP ACK报文,该报文中包含客户端IP,掩码,网关,DNS服务器。
- 路由器将报文封装并通过局域网发送到客户端电脑上,客户端现在有了IP地址。
6.7.2 ARP请求
目的:需要得到网关路由器的MAC地址(ARP请求)
步骤:
- 电脑创建DNS请求,并进行UDP封装,IP封装,以太网帧封装,准备发送到网关路由器。
- 客户端广播发送ARP请求,网关路由器收到以后发送ARP应答,告知自己的MAC地址。
- 客户端发送DNS请求,经过局域网交换机到达网关路由器。
6.7.3 DNS请求
目的:需要找到www.google.com的地址(DNS)
步骤:
- 网关路由器接收DNS请求,并根据目的IP将其转发到comcast网络的DNS服务器。
- 经过comcast网络内部的多路分解,将DNS请求交给了DNS域名服务器。
- 域名服务器向客户端发送包含www.google.com的IP的DNS应答。
6.7.4 TCP连接
目的:为了发送HTTP请求,首先要建立客户端与目的主机的TCP连接。
步骤:
- 创建TCP套接字。
- TCP的SYN报文发送给web server。
- web server回应TCP SYNACK。
- 成功建立TCP连接。
6.7.5 HTTP请求/响应
目的:显示Web页面。
步骤:
- HTTP请求被发送到TCP套接字中。
- 包含HTTP请求的IP数据报经过路由器被转发到www.google.com
- web server进行HTTP reply响应。
- 包含响应的IP数据报被路由器转发回客户端。