数据链路层
数据链路层服务
- 数据链路层
- 负责通过一条链路从一个节点向另一个物理链路直接相连的相邻结点传送数据报
- 相关术语terminology
- 节点node
- 主机
- 路由器
- 交换机
- WIFI接入点
- 链路links
- 连接相邻节点的通信通道
- 有线链路,无线链路,局域网(LANS)
- 链路层数据分组
- 帧(frame)
- 节点node
- 链路层提供的服务
- 成帧framing
- 封装(encapsulate)数据报成数据帧
- 一个帧由首部字段和数据字段组成,其网络层数据报插在数据字段里
- 链路接入
- MAC地址用在帧的首部字段去确认源和目的
- 不同于IP地址
- MAC地址用在帧的首部字段去确认源和目的
- 可靠交付
- 几乎不用在低比特差错的链路上(光纤,同轴电缆),因为在这里它可能被认为是不必要的开销
- 常用于高比特差错的链路上(无线链路)
- 差错检测和纠正
- 比特差错由信号衰减和电磁噪声导致
- 发送方在帧中添加差错检测比特,接收方差错检查
- 差错纠正
- 接收方不仅检测出比特差错,还能准确地确定差错出现的位置
- 成帧framing
- 链路层在何处实现(implement)
- 链路层在“适配器” (即网络接口卡-NIC)中实现 或者 在一个芯片(chip)上实现(以太网网卡)
差错检测,纠正
- 差错检测基本原理
- 三种技术
- 奇偶校验:主要用来描述差错检测和纠正背后隐含的思想
- 检验和方法:更多的应用于网络层
- 循环冗余检测:主要应用于适配器中的链路层
- 三种技术
- Parity checking奇偶校验
- 一维奇偶校验
- 检错能力弱,一比特错误都可能检测不到
- 二维奇偶校验
- 对于一比特差错,可以准确定位到出错位置并纠正
- 对于两比特差错可以检测到,不能纠正
- 一维奇偶校验
- Internet checksum检验和方法
- Cyclic redundancy check循环冗余检测(CRC)
多路访问链路和协议(multiple access protocols)
- 链路分为
- 点对点链路
- 广播(broadcast)链路
- 广播链路是指它能让多个发送结点和接收结点连接到相同的,单一的的、共享的广播信道上
- 多路访问问题
- 多路访问问题就是指如何协调多个发送和接收结点对一个共享广播信道的访问
- 两个或者两个以上结点同时传输:干扰(interference)、冲突(collision)。结果就是,结点同时接收到两个或者多个信号→接收失败!
- 多路访问控制协议
- 采用分布式(distributed)算法决定结点如何共享信道,即决策结点何时可以传输数据
- 协调必须基于信道本身,通信信道共享协调信息!
- 无带外信道用于协调(coordination)
- MAC协议分类(taxonomy)
- 信道划分(channel partitioning)MAC协议
- 多路复用技术(时间,频率,编码)
- TDMA,FDMA等
- 随机接入(random access)MAC协议
- 信道不划分,允许冲突
- 采用冲突“恢复”机制
- 轮转(taking turns)MAC协议
- 结点轮流使用信道
- 信道划分(channel partitioning)MAC协议
- 信道划分协议
- 时分多路复用TDMA
- 结点被限制与R/Nbps的平均速率
- 频分多路复用FDMA
- FDM在单个较大的Rbps信道中创建了N个较小的R/Nbps信道
- 结点被限制于R/Nbps的带宽
- 码分多路复用CDMA
- 不同节点使用不同的编码
- 不同节点能够同时传输数据
- 时分多路复用TDMA
- 随机接入协议
-
在随机接入协议当结点要发送分组时
- 利用信道全部数据速率R发送分组
- 没有事先的结点间协调
-
随机接入协议详述了
- 如何检测冲突
- 如何从冲突中恢复(例如,通过等待随机的重发时延)
-
时隙(slotted)ALOHA
- 时隙ALOHA的最大效率
- 1/e=0.37
- 时隙ALOHA的最大效率
-
非时隙(纯净)ALOHA协议
- 纯净ALOHA的最大效率
- 1/2e=0.18
- 纯净ALOHA的最大效率
-
载波侦听多路访问CSMA
- 当仍然有冲突时,会选择发送帧,浪费资源
-
具有碰撞检测的载波侦听多路访问CSMA/CD
-
当发现有冲突帧时,立即停止发送冲突帧
-
二进制指数后退算法
- 一个帧经历的碰撞越多,K选择的间隔越大,等待很长时间概率越大
-
-
- 轮转协议
- 轮询协议(polling)
- 主节点以循环的方式轮询了每个节点
- 主节点能够通过观察在信道上是否缺乏信号,来决定一个节点何时完成了帧的发送
- 缺点
- 轮询时延:通知一个节点"它可以传输"所需时间
- 如果主节点故障,整个信道都变得不可操作
- 令牌传递协议(token passing)
- 一个称为令牌的小的特殊帧在结点之间以固定次序进行交换
- 仅当一个节点收到令牌,且有一些帧要发送时,它才持有该令牌,否则,转发该令牌给下一节点
- 缺点
- 一个结点的故障可能使整个信道崩溃
- 一个结点忘记释放令牌,则必须调用某些恢复步骤使令牌返回循环中
- 轮询协议(polling)
- 总结
LANS
链路层寻址和ARP
- 见 实验 网络数据包从主机A传输到主机B的流程
- 链路层的两个控制子层
- MAC子层
- 主要是数据帧的封装/卸装,帧的寻址和识别,帧的接收与发送,链路的管理,帧的差错控制等。
- MAC子层的存在屏蔽了不同物理链路种类的差异性
- LLC子层
- 负责识别网络层协议,然后对他们进行封装,LLC报头告诉数据链路层一旦帧被接受到时,应当对数据包做何处理
- 为网络层提供服务:无确认无连接,面向连接,带确认连接,高速传送
- MAC子层
以太网
- 以太网提供无连接,不可靠的服务
- 无连接:发送方与接收方之间无 握手过程
- 不可靠:不对发送方的数据帧编号,接收方不向发送方进行确认,差错帧直接丢弃,差错纠正由高层负责
以太网只实现无差错接收,不实现可靠传输
- 以太网拓扑
- MAC帧格式
- 以太网的MAC协议
- CSMA/CD
以太网交换机
- 以太网交换机
- 多接口网桥
- 链路层设备(二层设备)
- 存储转发
- 透明
- 主机不会意识到交换机的存在
- 即插即用,自学习
- 不需要配置
- 以太网交换机
- 消除碰撞,允许多重传输
- 交换机转发表
- 每个表项由 主机的MAC地址 可达此主机的接口 表项放置在表中的时间 组成
- 初始转发表为空,交换机通过自学习更新转发表
- 对于表项中不存在的MAC 交换机通过泛洪flood来传输数据帧
- 消除碰撞,允许多重传输
- 交换机与路由器对比
- 都是存储转发
- 路由器
- 网络层设备
- 交换机
- 链路层设备
- 路由器
- 都有转发表
- 路由器
- 使用路由算法计算转发表(IP地址)
- 交换机
- 使用泛洪,自学习更新转发表(MAC地址)
- 路由器
- 都是存储转发
虚拟局域网VLAN
- 为什么需要虚拟局域网?
- 为了减小广播域
- 基于接口的VLAN划分
- 将交换机不同接口划分到不同VLAN
- 数据帧经过交换机会被打上VLAN标签
- 实际就是把数据帧的源主机的VLAN号添加进去,比如vlan 20
link virtualization 链路虚拟化:MPLS
- MPLS 多协议标签交换网络
- 客观上讲是一种分组交换的虚电路网络
- 首要的目标是:路由器基于固定长度的标签来进行高速的IP数据报的转发,而不是目的地的IP地址
- 使用固定长度标识符来快速查看,而不是最短前缀匹配
- 从虚电路网络借鉴想法
- IP数据报中仍然保留着IP地址
- 链路层帧
- MPLS capable routers MPLS使能路由器
- 也叫标签交换路由器,拥有MPLS首部
- 基于标签的值,转发分组到适当的输出端口
- MPLS转发表不同于IP转发表,不需要提取目的IP地址和在转发表中执行最长前缀匹配的查找
- 灵活性:MPLS转发决策可能不同于IP
- 使用目的地和源地址以不同方式将流路由到同一目的地(流量工程)
- 如果连接失败,则快速重新路由:预先计算的备份路径(对VoIP有用)
- MPLS与 vs IP路径
- IP路由:到达目的地的路径由目的地IP地址单独决定
- MPLS路由:到达目的地的路径可能基于源和目的地址
- 快速重新路由:如果连接失败,使用预先计算的备份路径
- 举个栗子 MPLS转发表
a day in the life of a web request Web页面请求的历程
客户端在校园网中访问www.google.com
准备:DHCP,UDP,IP和以太网
- 客户端必须连接到网络,没有IP地址什么都做不了,所以客户端采取运行DHCP协议的方式去获取IP地址,第一跳路由器的地址,DNS服务器的地址
- 操作系统生成DHCP请求报文(应用层),DHCP请求报文被封装在UDP报文段中(传输层),UDP报文段被封装IP数据报中(网络层),IP数据报被封装在802.3以太网帧中(数据链路层)
- 逐层封装(encapsulated)
- IP数据报,源IP地址0.0.0.0,目的IP地址为广播地址255.255.255.255
- 以太网帧具有目的MAC地址FF:FF:FF:FF:FF:FF
- 以太网帧会在局域网内进行广播(broadcast),最后被运行DHCP服务器的路由器接收到
- 以太网帧在路由器上就会被抽取IP数据报,再抽取UDP报文段,最后DHCP请求报文被抽取出来
- 逐层抽取(demuxed)
- DHCP服务器生成(formulate)包含IP地址,第一跳路由器(默认网关路由器)地址,DNS服务器IP地址和子网块的一个DHCP ACK报文
- 在DHCP服务器上逐层封装,通过局域网转发,最后在客户端逐层抽取
- DHCP客户端收到DHCP ACK应答,便获取到了IP地址
准备DNS和ARP
- 在发送HTTP请求之前,需要www.google.com的IP地址:通过DNS服务器获取
- DNS查询(query)报文被封装在UDP报文段,UDP报文段被封装在IP数据报,IP数据报被封装在以太网数据帧中,该帧将发送到网关路由器。为了获取网关路由器接口的MAC地址,需要通过ARP协议获取
- 客户端便生成具有目的IP地址的ARP查询报文,将报文放置在一个以太网帧中,交换机将该帧交付给所有连接的设备,包括网关路由器。网关路由器收到请求以后,准备一个包含自己接口MAC地址的ARP reply,再由交换机交付给客户端
- 客户端知道了网关路由器的MAC地址,现在发送包含DNS查询报文的数据帧到交换机,交换机交付给网关路由器
- IP数据报在网络中进行转发,最终到达DNS服务器,DNS服务器生成包含IP地址与域名映射的DNS回答报文,该报文最终交付到了客户端,客户端抽取出了IP地址
客户端与服务器的交互 TCP和HTTP
- 有了IP地址之后,客户端进程生成TCP套接字,向www.google.com发起HTTP请求
- 生成套接字时,首先需要与google.com服务器进行TCP三次握手,建立TCP连接
- TCP SYN请求报文段:几番周折到达google.com
- TCP SYN ACK:来自服务器端的应答
- TCP SYN再次请求,表示我要开始了
- 建立连接之后,就可以发请求了。HTTP 请求被放入了套接字,然后移交给运输层、网络层、数据链路层,经过以太网的路由转发到达google.com服务器
- google.com服务器,发送响应报文,客户端收到响应报文