计算机网络(谢希仁 第七版) 数据链路层 个人笔记
写此博文目的:整理知识点方便自己以后复习和深入的学习
数据链路层
1)数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输,若把这些协议的软件和硬件加到链路上,就构成了数据链路
数据链路层传输的数据单位:帧
帧从生成到发送的一个过程:由应用层,传输层,网络层形成的数据报,在数据链路层封装成帧,然后通过数据链路传输到另外一个结点
链路层的基本功能:
1)封装成帧
加头:在哪里开始(开始标志)
加尾:在哪里结束(结束标志)
首尾还包含控制信息和最大传输单元(最大传输长度)
SOH:首部
EOT:尾部
规定首尾头的长度加起来要小于原始报文的长度(软性规定)
2)透明传输(理解透明二字,表示无论什么样比特组合的数据都能通过数据链路层)
字符填充发保证数据链路传输的透明性
以下是字符填充法:
如果数据报文中由和头SOH,尾(EOT)相同的部分怎么办?
答:数据报文中出现的SOH和EOT(不代表头尾的)前面一个转义字符ESC
如果由ESC这个数据的话,也是在ESC前面加ESC
这样无论什么样的数据,数据链路层都能传输
3)差错检测
数据可靠性的保证
循环冗余校验CRC
1)在发送端,数据报文后面加冗余码
n位数据+k位冗余码生成完整的一个帧
冗余码的生成:
数据m:1010001101(10位)
假设n=5,p=110101
然后用二进制的模2运算进行2的n次方乘以m的运算
具体:m后面加n个0,得到n+k位除数除以p得到余数r
如果r不够n位,则前面补0
二进制的除法:和十进制的除法(竖式)不同在于没有减法,而是直接异或
异或:相同为0,不同为1
在接收端:
CRC校验:把收到的每一个帧都除以相同的除数p(模2运算),然后检测余数r,r=0,则数据无误
即a/b 商c余d 那么 b*c+d==c
帧检验序列:是数据+冗余码生成的序列
注意帧检验序列和循环冗余校验的区别,一个是序列,一个是方法
CRC是无差错接受:凡是接收的帧都没有传输差错,由差错的帧就丢弃而不接受
确认和重传机制:流量控制
4)流量控制(确认和重传机制)
弥补主机a,b之间的带宽差异
发送下一个帧之前先确认上一个帧传输成功(等待接收端发送过来的接收成功信号)
(ack信号)
发送方:
1. 从主机中取一个帧
2. 进数据帧发送到数据链路层的发送缓存里
3. 将发送缓存里的数据帧发送出去
4. 等待
5. 若收到ack信号,则跳转到1
接收方:
1. 等待
2. 若收到数据帧,则放入接收缓存中
3. 先进行冗余校验,正确则上交给主机
4. 向发送端发送ack信息
5. 跳转到1
没有流量控制的话,就是不停的发不停的发,由流量控制的话,就发送一个帧,收到ack信号再发
可靠性的保证
采用流量控制的时候数据传输可能出现的四种情况:
1)正常情况
2)数据帧出错:接收端进行CRC校验之后发现数据错误,则向发送端发送NAK信号
3)数据帧丢失:接收端一直没有接收到数据,如果发送端没有超时计时器的话会一直得到接收端返回信号
4)返回信号丢失:发送端在超时计时器时间内没有收到接收信号,则重发
重传时间限定:发送的平均值
第四种因为返回信号丢失,所以发送端会一直发,那么接收端就存在接收了重复帧的问题
解决方法:给发送帧编号,然后直接去重
帧编号因为帧很多,占用的比特就大(1,2,3,......n)
所以用0,1表示帧编号,0,1区分这个帧和前面帧的不同(0,1区分上下帧)
链路层代表协议:ppp协议
Ppp协议就是用户计算机和因特网服务提供者(ISP)进行通信所用的数据链路层协议
ppp协议的特点:
1)简单
2)封装成帧
3)透明性
4)多种网络层协议:在同一条物理链路上同时支持多种网络层协议,向上兼容
5)ppp能在多种类型的物理链路上运行,向下兼容(ppp协议保证遵循ppp协议的二进制既能转换为电信号和光信号
6)差错检测
7)检测链接状态:检测物理链路是否处于链接状态
8)最大传输单元:一帧最多能传输多少数据
9)网络层地址协商:识别路由结点,mac地址(网卡上的,唯一16进制地址)
10)数据压缩协商:不经过任何有损数据的操作,对数据进行重复率删除
ppp协议的组成:
1)封装成帧的方法
2)链路控制协议LCP:保证链路是连通的,保证跟谁连,跟谁不连,还有mac地址(物理上的管理)
3)网络控制协议NCP:怎么从数据报文是给你的?所以还需要识别的进程(逻辑层面的管理)
ppp协议的帧格式:
1)各字段的意义
标志字段F仍为0x7F
地址字段A为0xFF,网络层所用
控制字段C为0x03
ppp有一个2个字节的协议字段
协议字段为0x0021时,ppp帧的信息子段就是ip数据报
协议字段为0xC021时,则是ppp链路控制数据
协议字段为0x8021时,则是网络控制数据
2)ppp协议采用字符填充法来保证透明传输(硬件实现)
出现0x7E自动转换为2字节序列:0x7D和0x5E
出现0x7D自动装完0x7D,0x5D
Assic码:7位2进制 128
前32个和最后一个都是控制字符
为区分控制字符和普通字符,在控制字符前面加上0x7D用来区分
3)零比特填充法:5个连续的1则填入一个0
除开开始和结束标志的0x7F,中间出现的0x7F出现5个连续的1就填充一个0,这样就能区分数据0x7f和结束标志0x7f:填充完毕之后,遇到5个连续的1,如果后面有0,那么他是数据0x7f,如果没有0,那么他是结束标志0x7f
数据链路层的两个子层:逻辑链路控制层LLC和媒体接入控制MAC(物理设备)
现在实际制造过程两层的概念很模糊
通信适配器:又叫网卡
网卡的重要功能:
1)进行串并转换(从传输层拿到的东西封装成帧在物理线路上进行传输)
2)对数据进行缓存(流量控制中的缓存存放地点)
3)在计算机的操作系统安装设备驱动程序
4)实现以太网协议(PPP协议)
CSMA/CD协议:避免数据链路层的数据“碰撞”影像数据准确性的协议
局域网广播发送方式:B发送一个数据,总线上的每一个工作的计算机都能检测到B发送的数据,总线上每个在工作的计算机都会检测B发送的数据,如果是发送给自己的就接收,如果不是就放弃
优点:
1)不需要先建立链接再发送数据,可以直接发送
2)不必对发送的数据帧进行编号,也不必确认重传(局域网默认通信状况非常好,不存在误差
CSMA/CD协议:载波监听多点接入/碰撞检测
1)多点接入:在总线上任意接入
2)载波监听:发送数据前先检测一下总线上是否有其他计算机在发送数据
3)碰撞检测:当总线上检测到两个电波,就认为发生了碰撞,现在不发送数据
检测出来发送碰撞之后,立即停止发送数据,等待随机时间后再发送
因为存在发送时延,虽然存在碰撞检测,但还是有可能会发生碰撞
碰撞时间是一个往返时间,不确定,这是2M网只有200k的原因
争用期:一旦检测到碰撞,等待一定时间在发送,这个时间叫争用期或者碰撞窗口
经过争用期这段时间还没有检测到碰撞,那么这次发送不会发生碰撞
长度:51.2us(现用的)
所以发送一个数据后,只有等待一个争用期才能确定这个数据没有发生碰撞,完整到达了
二进制指数类型避退算法:确定碰撞后最多重传次数
强化碰撞:发送一条干扰信号,让发生了碰撞的事件让大家都知道,避免再次碰撞
因为物理层存在不同的传输方式(传输介质的不同),所以数据链路层需要弥补物理层的这些差异,给上层提高服务!!!
集线器:转发器,相当于一段总线,目的是接收有点失真的信号,修补一下,然后再发生出去,这样可以减少远距离传输的失真数据
以太网上的物理层工作器件
数据传输总时间分为四个部分:
1)发送时间:网卡一比特一比特的发送出去需要时间
2)传输时间:从网口出来到目的端的时间
3)传输时间中的等待时间:中间的转发器转法数据需要一个一个来
4)处理时间:比如冗余错误检测需要时间
以太网的信道利用率:
1)发送时间
2)传输时间
发送时间/(发送时间+传输时间)
因为以太网中存在碰撞所以发送时间和传输时间占的比重很大,所以算信道利用率的时候只算这两个
解释一下:
以太网信道利用率S=发送成功时间/(Nr个等待时间+发送成功时间+确认传输成功信号时间)
A:总发送成功的概率(总体)
P:每一次成功的概念(个体)
S最后只和参数a有关
参数a:a的意思参考前面
所以a要小的话,则帧长L必须尽可能大
以太层的MAC地址:局域网中,硬件地址又叫物理地址(MAC地址)
避免物理设备识别和重名(48比特,6个字节)
MAC构成:
前3个字节:机构唯一标识符(厂商)
后三个字节:厂商自己决定的(生产日期,型号等)
正常情况下,一个物理设备的MAC地址是全球唯一的,但路由器除外,因为它又两个网卡,所以又两个硬件地址
MAC层拿到有一个MAC帧之后,硬件检验一下是我的,就收下,不是我的,就是不接收,是我的又分为了三种情况:
1)单播帧:明确知道该帧是发给谁的,一对一
2)广播帧:拿到帧之后,不确定是发给谁的,只确定是发给我这总线上的某一个的,所以对该帧进行广播
3)多播帧:通过集线器往其他总线上再广播一次
MAC帧格式的两种标准格式:
V2标准(书本以该为例),802.3标准
MAC地址:目的地址(6个字节)+源地址(6个字节)+类型(在数据链路层支持哪些协议,2个字节)+数据(最少64字节,小于则填充)+帧检测冗余序列(3个字节)
前8个字节+MAC地址
前8个字节中的7个字节:用来进行MAC帧的比特同步,准备工作
前8个字节中的最后一个字节:正式开始接收MAC层的标志,因为在同步过程中不是发一个就接收一个的,可能会漏掉,所以需要标识符
接收MAC帧的检验:
1)帧的长度应该是整数个字节
2)冗余检验序列FCS有差错
3)数据段长度不在46-1500之间(过小或者过大)
4)有效帧长位64-1518之间
5)无差错传输(出差错就丢弃)
帧间最小时间间隔:确认这个帧没有发送碰撞或者发生了碰撞(9.6us)
一个站在检测到总线开始空闲之后,还要等待9.6us才能再次发送数据
物理层扩展以太网:集线器
多层集线器叠加:
使用集线器在物理层扩展以太网:
优点:
1.扩大局域网的覆盖地理范围
2.扩大了碰撞域
缺点:
1.虽然碰撞域大了,单总的吞吐率并未提高
2.不能连接不同传输速率的网线
网桥:工作在数据链路层,也是扩展以太网
特点:
具有过滤帧的功能(只要拿到帧解析出来以后就知道往哪里送,发送给谁
网桥替代集线器,网桥的一个端口出来的线就相当于一个总线,网桥表记录站地址和端口,即该数据从那个机器来的,通过我的那个端口进来的
比集线器更节约资源,带有目的性的传输,而不是集线器的盲目传输
网桥带来的优点:
1. 过滤了通信量
原因说明:1和3的通信不影响4 5 6的通信,他们不在一个碰撞域上,如果使用的是集线器,那么他们就是在同一个集线器上的
2. 扩大了物理范围(各地的连接,网状)
3. 提高了可靠性
原因说明:2,3之间断了,不影响4 5 6之间的通信
4)可连接不同速率的的网
缺点:
1)储存转法增加了时延(站-端口表)
2)MAC子层没有流量控制功能
3)具有不同MAC子层的网段桥接在一起时延更大(光信号,点信号)
4)只适用于用户数不太多的局域网(不超过几百个),否则会因为过多的广播信息产生网络堵塞,产生广播风暴(因为用户多导致转法表太大!!)
网桥按照以下算法处理收到的帧和建立转发表
1)从端口x收到无差错的帧(有差错就丢弃了),然后在转法表中查找此帧的目的站的MAC地址
2)
查到了:查出到此目的地的MAC地址应该走的端口号,如果该端口号就是x,那么此帧不要再从网桥发出去了,如果不是x,就从该端口号把此帧转发出去
没有查到:向网桥除x以外的所有端口转发此帧
2)如果源站不在转发表中,则将源站的MAC地址加入转发表且登记该帧进入网桥的端口号
3)如果源站在表中则更新计时器,否则不更新
网桥转发表登记的信息:
站地址:收到帧的源MAC地址
端口:收到的帧进入网桥的端口号
时间:收到的帧进入该网桥的时间
网桥转发表计时器的作用:网桥使用了支撑树算法,避免网桥转发的帧在网络中不停的兜圈子!!
看图即可明白:
支撑树算法的核心思想:
每隔几秒要每一个网桥广播其标识号和它所知道的其他所有在网上的网桥
选择一个网桥作为支撑树的一个跟,然后以最短路径为依据,找到树上的每一个结点,当局域网中网桥数量很多时,可以划分成多给支撑树
(个人现在的理解是避免产生环)
交换机
本质:工作在数据链路层的集线器(集线器是工作在物理层的),功能和网桥的功能类似
交换机的特点:
1)每个端口都与主机相连,工作在全双工方式
2)连通的端口对,使得端口对的主机能像独占网线一样,进行没有碰撞的数据传输
3)交换速率高
上面的局域网中还存在集线器的原因:交换机太贵了,小地方没有必要用
虚拟局域网VLAN(逻辑分组)
举例:A4发送信息,先是该楼层的交换机收到,解析一下,发现A4属于VLAN组1,所以查找VLAN1组员的端口,如果该楼层没有VLAN组1的成员的话,就把信息给整栋楼的总交换机,然后整栋楼的总交换机,查找VLAN组1的成员所在楼层,将信息给该楼层的交换机,然后改楼层的交换机发给组员(其实就是一种逻辑的分组,关键是解析你是哪个VLAN组的)
虚拟局域网协议允许在以太网帧格式中插入一个4字节的标志符,叫做VLAN标记,用来指明发送改帧的工作站属于哪一个虚拟局域网
有交换机的以太网在全双工方式下工作不会存在碰撞(以太网的功能特性),属于不使用CSMA/CD碰撞协议
吉比特以太网在半双工下,必须进行哦碰撞检测,由于数据率提高了,为保证时延带宽积变小,必须减小电缆长度或者增加帧的长度
增加帧长度的方法就叫载波延申(不足512字节,填充特殊字符)
分组突发:当很多的短帧要发送的时候,你要对他们都进行载波延申,一个个的都填充字符就很麻烦,你只要将这些短帧间留有最小的间隔,将他们当作填充了特殊字符以后的帧发送(实际上没有填充特殊字符,都是有用的信息),直到大于限定帧长度(1500字节)或者稍多一点
全双工下不使用载波延申和分组突发,因为不存在碰撞