计算机网络-自顶向下方法-笔记【第6章-链路层和局域网】
学习的课程及图片来源:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程
文章目录
6 链路层和局域网
一般网卡实现了链路层和物理层的功能,它们是紧密捆绑的
标题并不是说广域网没有链路层,而是因为广域网的链路层相比于局域网很简单
6.1 引论和服务
网络连接形式
-
点到点的链路是指两个路由器之间有链路相连,A 通过这条链路就是发给 B,不可能到其他地方去,就是封装和解封装的过程,因此比较简单,同理 B 就是发给 A。一般用于广域网,如海底电缆、拨号接入【家里面的 ADSL 连接到运营商的 modem 池也是点到点的,因为这条线路被一个人占用,其他人不能用】
- 广域网带宽大,延迟大,因此信道容量大,因此容易碰撞冲突,不适合用多点连接
-
多点连接指多个设备连到交换机上,经过交换机到达其他点。存在寻址和媒介访问控制问题[在 WAN 中没有],要区分不同的网卡( MAC ),处理多个设备发出的报文。一般用于局域网
-
共享型介质:用同轴电缆将多个设备连接在一起,报文发送到电缆上,其他设备都能收到
-
网络交换机:所有设备与网络交换机连接,通过网络交换机来转发
如教室中的 AP 无线访问接入点 WirelessAccessPoint
AP 就相当于有线网络的集线器,它能够把各个无线客户端连接起来,该单元内的所有无线信号都要通过它才能进行交换。AP 是无线局域网基本模式中必不可少的设备
-
导论
链路层的功能:一个节点把帧通过链路传到另一个相邻的节点
服务
- 成帧
- 链路接入【发送帧之前要获得信道的使用权】
- 相邻两点之间完成可靠数据传输
- 出错率低的链路很少使用,避免了为了保证可靠所做的代价
以太网直接有线链路连接,本身很可靠,因此不提供 RDT - 无线链路出错率高,RDT 是有必要的。如果在链路层这里不重传,那么只能靠源主机重传,这样的代价太大【这就是为什么在实现了传输层 RDT 时还要实现链路层的 RDT,即减少代价】
- 出错率低的链路很少使用,避免了为了保证可靠所做的代价
- 流量控制
- 错误检测
- 差错纠正
- 半双工和全双工:像对讲机就是半双工,一次只能一个人讲话
注意这些服务的链路层各种协议服务的总和,具体到某个协议时,这个协议提供的服务可能只是上面服务的一个子集【如以太网就不提供 RDT】
网卡;网络适配器;NIC network interface card
6.2 差错检测和纠正
EDC error-detection-and-correction
奇偶校验
CheckSum
CRC
Cyclic Redundancy Check
- 模二运算,位的加法不进位,减法不借位,就是异或运算
两种表示方式等价
r 次方生成多项式,共 r+1 位
D 左移 R 位模二除 G 得到 R 位余数
- 接收方使用 G 去除以 D+R 如果除尽,则说明没有出错,否则出错
6.3 多点访问协议
MAP multiple access protocol
多个站点,一个信道,在信道上发送数据信息、控制信息
MAC
从算法角度是 MAC,从协议角度是 MAP
可以分成三大类
在理想情况下,对于速率为 R bps 的广播信 道,多路访问协议应该具有以下所希望的特点
- 当仅有一个节点发送数据时,该节点具有R bps 的吞吐量;
- 当有 M 个节点发送数据时,每个节点吞吐量为 R/M bps 这不必要求 M 个节点中 的每一个节点总是有 R/M 的瞬间速率,而是每个节点在一些适当定义的时间间隔内应该有 R/M 的平均传输速率。
- 协议是分散的;这就是说不会因某主节点故障而使整个系统崩溃。
- 协议是简单的,使实现不昂贵。
1.信道划分协议
channel partitioning protocol
低负载的时候,只有部分几个划分被利用了,利用率低;高负载大多数划分都被利用了,因此利用率高
CDMA 采用编码来区分,不同的站点的编码之间是正交的,可以区分开,是第三代移动通信技术即 3G
4G 5G 是频分时分等多种复杂技术综合使用
2.随机存取协议
random access protocol
低负载时利用率高,高负载时冲突增加,利用率下降
协议规定:【有上百种此类型协议】
- 如何检测冲突
- 如何从冲突中恢复
以太网采用 CSMA/CD
无线局域网 802.11 采用 CSMA/CA
载波监听多路访问 CSMA Carrier Sense Multiple Access:设备监听其它设备是否忙碌,只有在线路空闲时才发送。
冲突检测 CD collision detect
冲突避免 CA collision avoid
时隙 ALOHA
之所以是 ALOHA 是因为是在夏威夷发明的,ALOHA 在夏威夷语中是你好的意思
检测到碰撞时,大家都停止在这个时隙发送【会导致该时隙浪费】,而在随后的时隙以概率 p 重发
需要节点对时隙时钟同步,后面介绍的协议均不需要同步
纯 ALOHA
事实上先于时隙 ALOHA 提出
这里的所有帧的长度也是一样的,因此每个帧的传输时间是一样的。因此称为帧时
因此要求在 t0-1~t0+1的范围内都没有其他节点发送的概率
CSMA
CS:在传输前监听有没有冲突,发送后不监听
只能尽可能减少,但不能避免冲突
节点通过局部的 sense 来判断 channel 的全局使用情况,即通过听到了其他节点发送的信号,才能知道当前信道被使用,但如果其他节点的信号在路上还没有到达该节点,那么将监听不到,因此该节点也会发送信号【因此如果节点间的距离越远,就越有可能发送冲突,因为不能及时检测到】,发送冲突。如下
CSMA/CD
CD:边发送边监听
检测到冲突就停止传输,减少了对信道的浪费
以太网使用
位时:发送一个 bit 位的时间
强化冲突:检测到的站点要发 Jam,其他收到Jam 的也要发,从而强化信号,让所有站点都能知道
二进制指数退避算法 exponential backoff:发送冲突时,进入退避状态,分布式在一个范围内选择值,如果两个冲突的适配器选择了不同的值,那么就可以避免冲突。如果持续失败,那么每次范围扩大两倍,两个适配器选择同一个值的概率指数下降,因此冲突概率指数下降,但因为范围大,等待时间也会变大。
其中的 K 最大为 10
- 当传播时延接近0时,效率接近1。碰撞的节点将立即中止而不会浪费信道。
- 传输帧时间变成无穷大时效率为 1 是因为这个帧的传输一直占用信道,其他节点一直等待,也就不存在冲突了
CSMA/CA
不像有线介质,无线网络中信号衰减严重,设备间干扰严重,因此自身信号远远大于其他节点的信号,不能进行冲突检测
即使冲突检测,如下面的 A C 之间阻隔了,因为检测时 A C 不能相互检测到,因此不会冲突,但如果它们同时发送给 B,那么就导致了冲突;此外如果检测到冲突,但信号非常弱,对当前的传输影响几乎没有,那么即使冲突也可以成功。因此 WLAN 中是否检测到冲突和成功没有直接关系,检测了也没有用
【在 LAN 中没有检测到冲突和成功几乎是对应的关系,因此也不需要 ACK】
注意这里的情况有个限制,不碰撞=成功,要求帧的长度要 ≥ 2 τ,τ是两个最远的节点之间数据传输的时间,2 τ 就是一个来回。考虑一个极端情况,在 A 发送后,信号传递到 B,但还差一点才传到 B 时,B 可以发送,那么立即会引起冲突,B 的冲突信号传递到 A 需要 τ 的时间,如果 A 的帧比 2 τ 短,那么冲突信号还没到那么就发送结束了,A 会认为没有碰撞,那么成功了,而事实上是失败的,因为有 B 的信息干扰了。
因此在以太网中如果帧的长度比较短,那么会有填充码字段,用来保证长度是 ≥ 2 τ 的信号在以太网传播1km大约需要5us,即信号传播速率实际约为2x10 A 8m/s。以太网最大端到端长度约为5km,单程传播时延为25us,争用期的一半(即25.6us) 必须大于该值。
对于10M以太网,发送速率为10Mb/s,在争用期(端到端往返传播时延)可发送
512bit,即64字节,因此以太网规定了最短,帧长64字节,若发送数据非常少,那么必须加入- -些填充字节,使得帧长不小于64字节。
检测到忙碌,事前就随机选择一个回退值,并在检测到信道空闲时递减值[信道忙时不减值],从而避免后面有可能避免的冲突
因为不能做 CD,因此需要有 ACK 来保证传输的成功
使用了 CA 也无法完全避免冲突,如下
协议可选项:预约帧:可以完全避免冲突,一般用于长数据帧的传输,避免被冲突打断
线缆接入网络
有线电缆数据服务接口规范 DOCSIS Data Over Cable Service Interface Specifications
电缆数据机终端系统 CMTS Cable Modem Temination System
- 使用 FDM 将上行和下行划分成多个频率信道,上行和下行在不同的频率上发送
- 下行不存在竞争,只有一个 CMTS,它发送的信息所有节点都能收到,节点通过比较地址来接收数据
- 上行信道通过 TDM 划分时隙:
- 有一组专门用于发送时隙请求帧的时隙,节点需要向 CMTS 发送时隙请求,请求是独立随机的,这里是会产生碰撞的。【但不检测碰撞】
- CMTS 在下行信道上发送 MAP 报文指定哪个节点可以在哪个指定的时间间隔内发送。如果请求的节点没有收到下行报文种对请求分配的响应,那么节点就知道发送碰撞了。使用二进制指数退避算法
- 对于其他用于分配的时隙,因为节点是在各自时隙上发送信息的,因此不会产生冲突。
因此这种 MAP 分类在信道划分/随机存取中都可以,可以认为是几种 MAP 的综合
3.轮流 MAC 协议
taking-turns protocol
高负载和低负载的利用率都很高【但高负载和低负载的利用率没有对应的前面两种方式高,因为有一定的消耗】,但过于复杂,使用得很少。
轮询-集中式
由主节点一个个询问节点要不要传输数据
主节点首先向节点1发送一个报文,告诉它(节点1) 能够传输的帧的最多数量。在节点1传输了某些帧后,主节点告诉节点2它(节点2)能够传输的帧的最多数量。
- 等待问题
- 主节点故障问题
令牌传递-分布式
令牌:特殊的帧
当一个节点收到令牌时,仅当它有一些帧要发送时,它才持有这个令牌,发送完最大数目的帧数后,又将令牌转交给下一个节点;否则,它立即向下一个节点转发该令牌。
谁发的,最终要由其接收
- 节点忘记释放令牌问题
- 令牌丢失问题
6.4 LANS 局域网技术
-
IP 地址是分层的,便于路由聚集、计算,减少路由表数量;
-
MAC 地址是平面的
48 位 MAC 地址/链路层地址/局域网地址:用于区分一个物理网络内部的不同网卡/节点,从而将数据封装成帧发送前3个字节代表网络硬件制造商的编号,后3个字节代表该制造商所制造的某个网络产品(如网卡)的系列号
-
根据 IP 找到下一跳,再修改目标 MAC 地址为下一跳的 MAC 地址。才能使用链路层的网卡去发送到对应的节点
从网络层的角度看,最后一跳就是一跳,从一个 IP 到下一个 IP,但从链路层来看,最后一跳可能还要经过多个交换机才能到达
全 1 的 MAC 地址是广播地址,交换机应该将其转发给局域网内的所有节点
ARP
地址解析协议 Address Resolution Protocol
网络层的服务,只涉及网络层和数据链路层
原理:ARP 即查即用,A 需要查询目标 B 的 MAC 地址时就广播一个包含 B 的 IP 地址的 ARP 查询包,其中源 MAC 地址是 A 的,目标 MAC 地址是全 1 的广播地址,B 收到对比 IP 后就将自己的 MAC 地址作为源 MAC 地址发送应答帧给 A,并记录发送方 MAC 地址,如果对比后发现不是自己的 IP,那么会丢弃,且会记录下对应的发送方 IP 的MAC地址。。
A 保存这个 IP : MAC 映射时间为 20 min,超时就删除
例子
源 IP 和目标 IP 都不发生改变
但 源 MAC 和目标 MAC 在每一段中都是改变的
以太网
最主流的 LAN 技术
以太网对本地区域联网的重要性就像因特网对全球联网所具有的地位那样。
鲍勃·麦卡夫 Bob Metcalfe 以太网之父
节点都连接到同轴电缆上,两端有终结器用于吸引信号,防止信号反射回去,影响 CSMA/CD
拓扑结构
发展:总线→星形
- 同轴电缆,2 Mbps。但如果电缆损坏一部分,那么所有节点都不能使用,会有反射影响 CSMA/CD
- 使用集线器 HUB
- 交换机 switch
以太网帧结构
-
前导码/前同步码 Preamble【8 B】:前 7 个字节是 10101010,后 1 个字节是 10101011
前同步码字段的前 7 字节用于“唤醒”接收适配器,并且将它们的时钟和发送方的时钟同步。
为什么这些时钟会不同步呢?
记住适配器的目的是根据以太局域网类型的不同,分别以 10 Mbps、100 Mbps或者 1 Gbps 的速率传输帧。
然而网卡不会以精确的额定速率传输帧;相对于额定速率总有一些漂移,局域网上的其他适配器不会预先知道这种漂移的。接收适配器只需通过锁定前同步码的前7字节的比特的速率,就能够锁定适配器A的时钟。前同步码的第 8 个字节的最后两个比特(第一个出现的两个连续的 1)警告接收适配器数据要到来了。 -
目标 MAC 地址【6 B】:网卡接收:
- 目标 MAC 地址是自己地址的,非混杂模式,此时网卡只接受来自网络端口的目的地址指向自己的数据。其他丢弃
- 目标 MAC 地址是全 1 的广播地址
- 其他的不是上面两种情况的 MAC,把网卡设置成混杂模式,能够接收所有经过它的数据流,而不论其目的地址是否是它。因此抓包软件就是使用的混杂模式
-
源 MAC 地址【6 B】
-
类型 TYPE【2 B】:标识上层的网络协议是什么,如 type = 0x0806 时会将帧交给 ARP 协议
-
数据/载荷【46 ~ 1500 B】:这个字段承载了 IP数据报。以太网的最大传输单元 (MTU)是1500字节。这意味着如果IP数据报超过了 1500字节【包括头部】,则主机必须将该数据报分片。数据字段的最小长度是46字节。这意味着如 果IP数据报小于46字节,数据报必须被填充到46字节。
-
CRC【4 B】:放在最后,因此可以边发边生成,发完数据直接发送 CRC 即可
因为有形介质本身比较可靠了,如果上层是 UDP,那么就不会重传了,对方的应用层会看到 gap,有内容丢失了
而如果是 TCP 则会引起重传,但以太网并不知道它在传输一个之前的数据,因为它并不关注
缺乏可靠的传输有助于使得以太网简单和便宜
802.3 以太网标准
很多的以太网标准:是链路层也是物理层的规范
- 相同的 MAC 协议和帧结构
- 不同的速率、不同的物理层标准、不同的物理层媒介
100 Mbps 为 fast Ethernet
T 指双绞线
节点与 HUB 的最大距离是 100 m
曼彻斯特编码
曼彻斯特编码是一种自同步的编码方式,即时钟同步信号就隐藏在数据波形中。该跳变既可作为时钟信号,又可作为数据信号
如果不是这样,比如传输全为 1 的数据,那么波形电位永远是 1,接收方如果不知道时钟频率,将不知道这里面有多少个 1
跳变是为了能够将时钟信号抽取出来,跳变的方向代表传输的数据。因此一段信号可以将时钟信号和数据信号同时传输
接收方只要按照这个时钟来接收数据即可
每位中间的电平转换既表示了数据代码,也作为定时信号使用
由于曼彻斯特码在每个时钟位都必须有一次变化,因此,其编码的效率仅可达到50%左右
4b5b 编码
用 5 个bit 去代表 4 个 bit,使得波形不会一直不变,一定是错落有致的,因此可以从中提取时钟信号,而又不像上面的编码方式那样,每个 bit 都包含时钟信号,提高效率到 80%
8b10b 编码
千兆以太网中使用 8b10b 编码
网络交换设备
集线器 HUB
所有节点接到 HUB 的端口上,HUB 将信号往所有端口转发。HUB 还可以级联。所有通过 HUB 连接在一起的都在一个碰撞域【也称作网段 LAN segment】内,一次只能一个节点发送数据
物理上是星形,但逻辑上是总线形的,在盒子里面是总线
不能将不同速率的 HUB 连接在一起,将无法工作,如 10 Mbps 和 100 Mbps 不能连接在一起
交换机
实现一个端口到其他端口的转发【而不是所有端口】。一个主机连接交换机的一个端口,消除了 CSMA/CD 在高负载下的冲突问题,因为一个主机就一个端口【独享】,不同主机发到不同端口,不存在碰撞。解决了 CSMA/CD 高负载利用率低的问题。
这也是为什么以太网获得统治地位的原因,其他原因:带宽不断升级、价格低廉
是一个存储转发设备,把帧存下来,根据帧头的目标 MAC 地址决定往哪个端口发,在发送之前要根据 CSMA/CD 的机制接入到这个目标网段。【可以认为交换机每个端口都是一个网段【隔离冲突域】,因此某两个端口在发送接收的同时,其他端口也可以同时并发使用】
任何输岀接口之一的速率可能暂时会超过该接口的链路容量。为了解决这个问题,交换机输出接口设有缓存
交换机将链路彼此隔离,因此不同带宽的链路可以同时接在交换机上
因此如果主机与交换机直连,那么在发送前的监听就只是一个形式,交换机会协调转发,决不会向相同的接口转发多个帧,因此 CD 没有意义。即在基于交换机的以太局域网中,不会有碰撞,因此没有必要使用MAC协议了!
交换机同样可以级联
即插即用,自学习交换表,无需人工配置
MAC 和端口地址不是一直捆绑,经过一定时间就删除(时戳),这种状态维护机制称为软状态维护机制
在有帧通过端口发送进来时,才根据源 MAC 学习 MAC : 端口
- 如果进来的端口和匹配目标 MAC 后要发出去的端口一致,那么就过滤掉,不转发【原因是下层主机要发送到下层某个主机,经过下层级联的交换机泛洪,或者是下层的 HUB 向所有节点转发】
- 如果不知道目标 MAC 从哪个端口转发,表中还没有,那么就泛洪,向所有端口转发
交换机和路由器
通常,由几百台主机组成的小网络通常有几个局域网网段。对于这些小网络,交换机就足够了,因为它们不要求IP地址的任何配置就能使流量局部化并增加总计吞吐量。但是在由几千台主机组成的更大网络中,通常在网络中(除了交换机之外)还包括路由器。路由器提供了更健壮的流量隔离方式和对广播风暴的控制,并在网络的主机之间使用更“智能的”路由。
如下可见一般是大量的交换机级联
交换机级联
运行生成树算法,不能出现环
VLANS 虚拟局域网
局域网存在:问题
- 缺乏流量隔离
- 用户在不同局域网内移动需要改变物理布线
能够通过支持虚拟局域网(Virtula Local Network, VLAN)的交换机来处理。
原理:将交换机的端口划分成不同的组,来自一个端口的广播流量仅能到达这个组中的其他端口,而不会扩散到其他组,实现隔离
此时出现新的问题:两个系的之间不能发送信息了。
解决办法:**将 VLAN 的一个端口和一个外部路由器相连。**从电子工程系发往计算机科学系的数据报将首先跨越 EE VLAN 到达路由器,然后由该路由器转发跨越 CS VLAN 到达 CS 主机
6.5 链路虚拟化 MPLS
本科不涉及
6.6 数据中心网络
DC Data Center
在数据中心内部, 外部请求首先被定向到一个负载均衡器(load balancer) 。负载均衡器的任务是向主机分发请求,以主机当前的负载作为函数来在主机之间均衡负载。
由于负载均衡器基于分组的目的端口号 (第四层)以及目的IP地址做决策,因此它们常被称为“第四层交换机”
用全连接拓扑可以改善等级拓扑中的主机间通讯带宽收到限制的问题,这里二层交换机之间通讯有多条路径可选
6.7 web 网页的请求历程
见书本
总结
本科不涉及
6.6 数据中心网络
DC Data Center
[外链图片转存中…(img-Z6KHagD7-1656229101052)][外链图片转存中…(img-6kU8Jf9h-1656229101052)]
在数据中心内部, 外部请求首先被定向到一个负载均衡器(load balancer) 。负载均衡器的任务是向主机分发请求,以主机当前的负载作为函数来在主机之间均衡负载。
由于负载均衡器基于分组的目的端口号 (第四层)以及目的IP地址做决策,因此它们常被称为“第四层交换机”
[外链图片转存中…(img-QBKL8oIP-1656229101053)]
用全连接拓扑可以改善等级拓扑中的主机间通讯带宽收到限制的问题,这里二层交换机之间通讯有多条路径可选
6.7 web 网页的请求历程
[外链图片转存中…(img-BiSXkHVn-1656229101054)]
[外链图片转存中…(img-AZcYLyx9-1656229101055)]
见书本
总结
[外链图片转存中…(img-cKl64D9h-1656229101056)]