介绍
数据链路层的责任是在相邻的结点之间传输数据报(datagram)
主机和路由器都是一个结点
连接相邻结点的通道,分为以下几种
- 有线连接,无线连接
- 局域网,广域网
层二包是一个帧
数据报可以在不同连接上的不同协议间传输:
- 802.3 Ethernet link,以太网
- Ppp link,point to point protocol,点对点协议,早期的宽带,需要拨号上网
- ATM link ,异步传输模式
- Frame relay,帧中机服务
- Fiber link
- 802.11 link: one type of wireless links,统称为wifi技术
- 4G/5G link
链路层服务
- 封帧,解帧:把数据打包成帧传输
- 确定传输目标地址时候需要使用MAC地址(media Access Control Address),6 * 8共四十八位,例如:00-16-EA-AE-3C-40
- 链路的访问控制功能
- 上面没有标蓝的两个有可靠性控制
- 流量控制
- 检错功能
- 检错之后直接把这个数据扔掉,不再往上传
- 网卡,交换机都是这样,检测到有错误之后直接扔掉,到达不了网络层,如果能到三层,一定没有差错,所以checknum是多余的
- 差错的校正
- 发四个包到接收端,四个包异或一下得到第五个包,如果有一个数据包丢掉之后,但是接收到了第五个包,可以把收到的包进行异或就可以恢复了
- 现在的网卡没有这个功能
- 半双工和全双工通信
- 当前的网络99%都是全双工通信的,两方可以同时发送信息
- 半双工:对讲机
链路层的实现
对于主机来说是实现在网卡的,对于路由器来说是内置的,交换机和路由器一样
网卡:NIC(network interface card),现在用的是 PCMCIA card,连接在总线上的
PCMCIA card: Personal Computer Memory Card International Association
网卡没有CPU,包含硬件,软件和固件(烧在芯片中的软件)
适配器通信
- 发送端
- 把数据报封装在帧里面
- 添加差错检验位
- 流量控制
- 接收端
- 检查错误
- 把数据报从帧中解帧出来,并向上传输到网络层
三种工作方式:
- 正常工作模式:看链路层头的mac地址是不是自己,如果是自己就解帧发送到网络层,如果不是直接扔掉
- 如果是全1的包,那么说明是一个广播地址,也会解开往上传
- 混杂模式:收到帧就解开往上传
差错检测
要求发送端发送冗余信息
奇偶校验法
一维奇偶校验
最后加一个校验码,表示这段数据中1的个数是奇数还是偶数
二维奇偶校验
把数据组织成二维的形式,一位差错时可以纠正,两位出错时可以校验
CRC
循环冗余校验(Cyclic Redundancy check),目前普遍使用的方法
把要发的数据左移若干位(比generator少一位),然后除以generator,得到的余数叫做CRC
具体移动位数取决于发送端与接收端约定的产生式(generator),现在普遍采用的是32位,也可以叫做多项式
余数连同要发的数据Data发送到接收端,接收端收到之后连同余数一起除以generator,如果没有差错的话,最后得到的余数是0
产生式是多少位就可以检测出来多少位的错误,检验错误之后直接取反就是正确数据
原始数据左移r位(其中generate是r+1位),然后异或得到的余数(任何数异或0都是自己)
例子
这里的除法是模二除法,不往前借位,10-01=11
generator:1001
Data:101110
Data左移三位为:101110,000,除以generator得到余数011,拼接到Data后面发送到接收端
lyn: :为什么余数是011,不是11
这里的remainder表示求余数
多路访问链路和协议
链路类型
- 点对点链路(P2P链路)
- PPP for dial-up access,ADSL
- 不会出现碰撞,不需要控制,通信时候甚至不需要mac地址,因为已经建立好了二者之间的通信,我发就是你收
- 广播(shared wire or medium)
- 数据同时发的话会产生碰撞
- 老的以太网
- HFC,混合光纤同轴电缆
- 802.11 无线局域网
- 交换式链路
- Ethernet
多路访问控制
多个结点同时使用链路时候需要处理冲突
冲突(interference):两个结点以上同时发数据就会发生碰撞(collision),同时发数据在收到之后一查就发现是错的,只能扔掉
分类
- 分散式的
- 目前采用比较多的方法
- 任意一个结点需要使用通道发数据时候就直接发了,有可能产生碰撞,产生碰撞之后停止发送,过一段时间之后再申请发送,直到发送成功为止
- 每一个结点自行决定什么时候发送数据
- 使用的是分布式的算法
- 需要有能力检测是不是发生碰撞了,检测到需要直接停止发送
- 集中式的
- 需要一个控制器
- 发数据前现象控制器申请,许可之后才能发送
- 可以保证任意时间点只有一个结点在发送数据
- 控制器坏了整个网络就瘫痪了
理想的多路传输协议
四个要求(假设链路带宽为R bps)
- 只有一个结点传数据的时候可以使用全部的带宽(R bps)
- 当多个结点共享时候每一个结点使用的带宽是相等的(R/M bps)
- 尽可能的完全分散
- 不需要集中的控制器
- 没有同步的时钟
- 算法要足够简单
MAC协议
三种大的分类
- 信道划分
- 时分
- 频分
- 码分
- 波分
- 空分(不同方向,例如卫星通信)
- 适合高负载的情况
- 随机访问
- 信道是随机划分的,允许碰撞
- 产生碰撞时候会重新分类
- 适合用户量比较少的情况
- taking turns
- 大家轮着使用,有一个结点控制大家使用,有一个结点使用的时候其他不许使用
- 集中式轮询
- 分布式轮询
- 同一时间只有一个用户发数据
信道划分协议
信道划分
时分复用
TDMA:每个用户分一个时间片,大约为发一帧数据的时间,大家轮流使用通道
例如:座机打电话
频分复用
FDMA:使用不同的频率发数据
分配给你的频率你不发数据就浪费掉了,别人不能使用
例如:wifi(分为三个频段),ADSL
随机访问协议
重点
思想:想发就发了
当一个结点有包要发时候
- 以带宽的速率发送
- 没有优先级的问题
两个结点同时发送时候会产生碰撞问题,如果产生碰撞,那么所有结点都停止发送,让链路回到碰撞之前的状态
典型随机访问MAC协议
- ALOHA
- Slotted ALOHA
- CSMA, CSMA/CD, CSMA/CA
Slotted ALOHA
Additive Link On-link Hawaii System ,在线夏威夷系统的附加链路
适合与活跃的用户数非常少的情况(会一直产生碰撞)
夏威夷岛上无线通信的一个协议
ALOHA是夏威夷的一个土话,打招呼的意思
Slotted ALOHA,分片的ALOHA协议
假设
- 所有的帧都是一样大小
- 是一个同步的协议,所有的结点发数据必须在一个时间片开头发数据
- 时间分为大小相等的时间片
- 如果在一个开头两个都发数据,那么就会产生碰撞,这时候两个都停止发送
- 下一个时间片开头,两个结点都有概率P的大小重新发送数据,直到发送成功
- 如果没有碰撞,那么在下一个时间片可以再发下一个帧
- 优点
- 只有一个结点在发数据的话,可使用所有带宽
- 高度分散化式的,只要求在时间片开头发数据
- 简单
- 缺点
- 发生碰撞就浪费了
- 有空闲的时间片
- 结点要有能力检测碰撞
- 要求结点的时钟严格同步
目前很少使用了
效率分析
假设有N个结点,都有大量的帧发送,发送数据的概率是P
一个结点发送成功的概率是: p ( 1 − p ) N − 1 p(1-p)^{N-1} p(1−p)N−1
N个结点发送成功的概率是: N p ( 1 − p ) N − 1 Np(1-p)^{N-1} Np(1−p)N−1
最大的效率,以p为变量求 N p ( 1 − p ) N − 1 Np(1-p)^{N-1} Np(1−p)N−1的最大值为 1 e = 0.37 \frac 1 e = 0.37 e1=0.37
最大的利用效率为37%
Pure(unslotted) ALOHA
不分时间片,碰撞的概率增加了
效率分析
最大效率仅为0.18,比上一个Slotted ALOHA协议更糟糕
协议限制了信道的吞吐量
CSMA
这个必须要记着,不要把字写错了
CSMA (Carrier Sense Multiple Access),载波侦听多路访问
在传输前感知信道是不是空闲
- 如果空闲了才发数据
- 如果不空闲就推迟传送
也无法避免碰撞,有如下原因
- 传播延迟,在感知时候另一个结点占用的信息还没有发送到自己这里
- 两个同时感知信道,发现没被使用时候同时发数据
CSMA/CD
Collision Detection,带碰撞检测的载波监听的多路访问
CSMA/CD: carrier sensing, deferral as in CSMA
- collisions detected within short time
- colliding transmissions aborted, reducing channel wastage
碰撞检测
- 有线网络较好检测:测量信号强度
- 无线网络比较复杂,采用的方式是避免碰撞
Taking Turns
链路上有一个主节点(master),其他都是从节点(slave)
任意一个时间点只有一个结点发数据,轮询到一个结点的时候只能发一帧数据,下次轮询到才能再发一帧
蓝牙采用的这种方式
集中式轮询
- 主节点邀请结点去传输数据
- 如果有数据就发,没有就继续问下一个结点
- 通常与“dumb”从设备一起使用
- dumb:哑设备,都比较简单
- 缺点
- 轮询是有开销的
- 有延时
- 单点故障(主节点)
分布式轮询
适用于环形网络
Token传输,(托肯传输,建议写成令牌传输)
Token:是一个很小的控制帧,每个结点必须拿到令牌才能传输数据
- 控制令牌在结点之间顺序传播
- 缺点
- 轮询是有开销的(网络上只有一个结点要发数据时候需要转一圈才能发)
- 延时
- 单节点故障(拥有token的结点)
总结
- 信道划分
- 适合于用户比较大情况
- 随机访问协议
- ALOHA, S-ALOHA, CSMA, CSMA/CD
- Collision detection: easy in some technologies (wire), hard in others (wireless)
- CSMA/CD used in Ethernet(以太网)(CD:碰撞检测)
- CSMA/CA used in 802.11)(CA:碰撞避免)
- Take turns
- 集中式(Polling from central site)和分布式(token passing)
- Bluetooth, FDDI, IBM Token Ring
交换局域网
MAC地址和ARP
MAC:局域网地址(LAN),物理地址(physical),网卡地址(NIC),MAC地址
- 功能:获取从一个接口到另一个物理连接接口(同一网络)的帧
- 48位长的,烧在NIC的ROM中的,
- 例如:1A-2F-BB-76-09-AD
- Broadcast address = FF-FF-FF-FF-FF-FF
不分层,不会重复,在出厂时MAC就已经设置好了
通信:
下到二楼发送时候需要填源MAC地址和目的MAC地址
所有结点在网络层和链路层之间维护了一个表,叫做ARP表,记录了IP地址和MAC地址的对应关系
当ARP表中没有一个IP的MAC地址的时候,会在局域网中进行广播,询问MAC地址,这时候目的主机会返回自己的MAC地址
然后发送到目的主机之后先CRC检查差错,没有问题就解帧变成IP段,然后继续向上传输
ARP是动态的,有一个TTL,如果在TTL时间中没有被访问过,就会删掉这个记录,通常为20min;初始时这个表是空的
记录格式: < IP address; MAC address; TTL>
ARP是工作在局域网中的,不能跨路由器
ARP: Address Resolution Protocol
跨路由器的通信过程
目的:主机A要发数据到主机B
- 网络层,目的IP地址是B的IP地址
- 然后下到链路层进行封帧,源MAC地址是A的,目的MAC地址是路由器的左侧MAC地址(DHCP技术获得)
- 如果没有路由器左边接口的地址,可以广播一个ARP报文,要路由器的MAC地址
- 路由器接收到报文之后就会发送回自己的MAC地址
- 路由器收到帧之后进行CRC检查,没有差错之后就解包,送到第三层
- 然后根据目的地址查路由表,路由包就转发到右边的地址
- 然后下到二层,进行封帧,源MAC地址是路由器右边的地址,目的MAC地址是B的MAC地址
- 如果没有就广播ARP要B的MAC地址
- 送到B之后再次进行CRC检查,没有问题就往第三层送,然后逐步解包送到应用层中
路由器上每个端口都有一个ARP表
以太网
英文:Ethernet
目前最流行的有线网络,因为技术简单,成本低,带宽也很宽(10Mbps - 10Gbps)
wifi也可以称为无线以太网
所有的网卡通过总线连到网络(ETHER)上
Star topology
曾经结构:10base2
总线式的局域网,需要先确定总线是否空闲,所有发出去的数据都会被其他结点收到(设置为混杂模式才可以)
- 10Mbps网
- base: 不需要调试,有数据直接传
- 2:有效距离200M(实际185m)
目前结构:star topology prevails
树状结构或者是层状结构
交换式的局域网
每一个枝叫做一个spoke
这里使用的交换机也是一个存储转发设备
以太网的帧结构
头和尾统称为帧头,在数据的两端
- Preamble:总共八字节长,前7个字节是10101010,后八个字节是10101011,固定死的,用于同步时钟信号
- 目标地址:MAC地址,48位的
- 源地址:MAC地址,48位的
- Type:类型,数据域中封装的什么类型的数据,一般都是IP包
- CRC:4个字节长,用于校验的,可以检查出来32位的01跳变
- Data:数据域,最长可以有1500个字节
wifi的帧结构和这个帧结构不兼容,比这个要复杂一点
在IP层上进行变换,在无线路由器(实际是一个链路转发器)进行转换,这个既不是路由器也不是交换机
以太网的服务模型
Internet: best effort
以太网的服务模型:无连接的不可靠的服务(CRC+CSMA/CD )
服务模型需要记住
- CSMA/CD: 发送之前先感知链路是否空闲
- CRC: 然后进行差错检查
发送完数据后不需要等待接收端的确认,不需要建立连接和确认,只有一个CRC检查
传输采用的是基带(base)传输,直接把数据发到响应的链路上,与ADSL不一样,ADSL需要调制解调器,
采用的是Manchester encoding,从上变到下表示的是1,从下变到上表示0,传输过程中刚干扰能力比较强(是物理层的方法)
CSMA/CD算法
中英文都要记住
Carrier Sense Multiple Access Collision Detection,带碰撞检测的载波监听的多路访问
算法也要理解并记住
A: sense channel, if idle
then {
transmit and monitor the channel;
If detect another transmission // 检测到碰撞,检测到碰撞电平就会升高
then {
abort and send jam signal;// 停止发送数据并且发送一个堵塞信号
update collisions; // 更新碰撞次数,刚开始发的时候一定是0
delay as required by exponential backoff algorithm; // 延迟做规避,延迟时间是指数型的backoff算法,依据是碰撞次数
goto A// 重新侦听信道
}
else {
done with the frame; // 数据传输完成
set collisions to zero // 清空碰撞计数器
}
}
else {wait until ongoing transmission is over and goto A}
指数型规避算法
- 第一次碰撞,从0和1中选一个数字,然后做的延时是 K ∗ 512 b i t K * 512 bit K∗512bit的传输时间
- 第二次之后k的范围是 { 0 , 1 , 2 , 3 } \{0,1,2,3\} {0,1,2,3}
- 大于10之后K的范围都是 { 0 , 1 , 2 , 3 , 4 , ⋯ , 1023 } \{0,1,2,3,4,\cdots,1023\} {0,1,2,3,4,⋯,1023}
对于10Mbps的以太网来说,传输一位的时间是1微秒,如果K=1023,传输时间是50ms
Jam Signal:确保所有的传输都可以收到碰撞信号,有48bit
CSMA/CD的效率
- 传播延时(prop)是指最远的两个点之间的时间
- 传送延时(trans)是指最大的帧传输时用的时间
理想情况下效率接近于1,
链路的控制方式是分散式的
以太网技术的类型
统称为802.3
802.11是wifi
- 总线式
- 交换机
- 光纤方式
- 双绞线
红色的使用的是光纤
蓝色的使用的是双绞线
帧结构和链路的使用方式都是一样的CSMA/CD
Mancgester Encoding
- 在 10base2使用
- 不需要对时钟进行同步
- 是一个分散式的控制
互联设备
Hubs
中文名:集线器
外表和宿舍的小交换机是一样的,是一个物理层的设备
PDU是位,不需要转发,接收到的数据全部都广播出去(不能隔离碰撞域)
没有缓存,不运行CSMA/CD算法
只要把网卡设置为混杂模式就可以收到信息,不够安全
数据采集时候比较方便
交换机
是一个链路层的设备,是链路设备
处理的PDU是帧,帧全部接受完了之后才会进行处理并转发
是一个存储转发设备(优点:隔离碰撞域)
转发的时候需要维护一个MAC表,查询转发出口
检查传入帧的MAC地址,有选择地将帧转发到一个或多个传出链路
转发之前需要运行一下CSMA/CD算法避免碰撞
对用户来说都是透明的
热插拔的,有自学习能力(学习并维护ARP表)
对应于不同的端口可以同时发送,但是如果从一个端口进出数据就不可以同时进行
例如 A → A ′ , B → B ′ , C → C ′ A\to A',B\to B',C\to C' A→A′,B→B′,C→C′就可以同时进行,但是 A → A ′ A\to A' A→A′和 B → A ′ B\to A' B→A′就不能同时进行
全双工的通信并且每个结点都有缓存的
路由器的每一个端口都有一个ARP表
每个交换机都维护一个交换表
- 交换表的每一行是(MAC地址, 端口号, TTL)
- TTL一般是60分钟,超时会直接扔掉
- 可以通过自学习获得
- 没有数据的时候Flooding(广播)一下,然后接收到了信息之后存起来方便后面使用
自学习
当Flooding之后,会把端口号和传出端口记下来,这个过程就是一个自学习过程
传入和传出的时候都会记录在表里面
过滤转发算法
-
交换机收到一帧数据的时候,把源MAC地址和接口号记录下来(自学习,如果表里面有了的话就更新一下TTL)
-
在交换表里面查找目的MAC地址
if entry found for destination
then {
if dest on segment from which frame arrived// 如果目的MAC地址和源MAC地址在一个interface就直接扔掉
then drop the frame
else {
CSMA/CD // 运行CSMA/CD算法检查是否有碰撞
forward the frame on interface indicated// 转发帧到目的端口
}
}
else {
CSMA/CD // 运行CSMA/CD算法检查是否有碰撞
flood // 广播
}
单位网络
主交换机带宽1Gbps,末端交换机带宽100Mbps
要是需要采集子网的所有进出数据,需要在主交换机上进行配置,用到的技术是端口镜像,把输出端口镜像到采集端口
交换机和路由器的比较
- 都是存储转发设备,交换机和路由器都可以隔离碰撞域
- 交换机运行在局域网,路由器运行在广域网
- 交换机维护交换表,路由器维护路由表
- 交换机运行CSMA/CD,filter & forwarding,self-learning,路由器运行路由算法
- 运行在不同的层,路由器运行在网络层,交换机运行在链路层
广播域不能被hub或者交换机隔离,只能通过路由器隔离广播域
如果虚拟化局域网则需要使用路由器进行隔离,所以需要把主交换机再进行修改(交换式的路由器),修改之后再进行MAC地址配置,把那些MAC地址放到一个虚拟局域网中
再看一下PPT73页左右的那些东西,各种访问过程
练习
A,交换机到一个结点的最远距离是100m
B
ADE
ADE(F是对角布线,一般都是沿着边边走,所以是错的)
C
B(a:54Mbps)
Spanning Tree Protocol(STP):生成树算法,把一个图转换成树
可以解决广播风暴问题:一个广播帧很快淹没了整个网络