第一次写博客,之前笔记习惯写在纸上。今天突然心血来潮,用notion记下了课内课程的笔记,然后把markdown导来做成我的第一篇博客。由于notion里面的toggle在csdn中无法显示,因此看起来会比较费劲,如果需要的话可以给我留邮箱,我把我的notion分享给你。
如果觉得我写的不错的话,希望多多关注。转发的话麻烦也注明一下呀。麻烦啦。
所用的主要参考书籍:计算机网络–谢希仁
第三章 数据链路层
-
重点内容
-
点对点通信和广播通信的特点及协议:PPP,CSDA
-
数据链路层的三个基本问题:封装成帧,透明传输和差错检测
-
以太网MAC层的硬件地址
-
适配器,转发器,集线器,网桥,以太网交换机的作用和使用场所
-
-
使用点对点信道的数据链路层
-
数据链路和帧
-
链路:进行数据通信时,两个节点间的物理线路(中间不应该有其他节点)(物理链路)
-
数据链路:当需要数据通信的时候,除了物理线路我们还需要必要的协议来控制传输。实现这些协议的硬件和软件就成为数据链路。(逻辑链路)
-
帧:从网络层收到的IP数据包经过加头加尾形成一个帧
-
-
点对点通信
-
A节点从网络层接收到IP数据包,并且加头加尾形成帧
-
A节点的数据链路层把一帧一帧的数据发送给B节点的数据链路层
-
B节点的数据链路层把没有出错的帧的数据取出来传给B节点的网络层
-
由此可以看出,点对点通信有三个重要的环节:封装成帧,透明传输,差错检测
-
封装成帧
-
由于分组交换的概念:网络中传输的数据都应该是分组的形式,也即IP数据报。因此,从网络层中获取到数据报,通过加首部(SOH)和尾部(EOT)用于帧定界之后从帧的首部开始发送。
-
为了提高发送数据的效率,应当使得发送的帧中数据部分尽量大。但是不能任意大,每种链路层协议都会给定一个最大传输单元MTU。
-
-
透明传输
-
透明:某一实际存在的事物看起来就像是不存在一样。
-
也就是说,数据在通过数据链路层传输的时候就像是没有通过任何东西一样,无需做任何变化。
-
字节填充:由于非ASCⅡ码文本数据进行传输的时候可能会出现SOH/EOT,为了不影响对首和尾的判断,使用到了插入转义字符ESC的方法 **,也即当发送的数据中有SOH/EOT的时候就在他们的前面加上转义字符ESC,如果刚好也需要发送转义字符的话就在它前面再加一个转义字符(类似于C语言中想要print /的时候的情况)。**通过这样的对数据进行处理的方法就可以实现数据的透明传输。
-
-
差错检测
在数据链路层中普遍使用循环冗余校验CRC。如果校验没有出错,链路层便会把数据交给网络层。并且一般认为,凡是从链路层传给网络层的数据都是完全没有发生比特错误的(但是注意,还是有可能发生帧重复、帧丢失、帧失序等传输差错)。
-
-
点对点协议PPP
-
PPP协议特点
- PPP为用户计算机和ISP进行通信时所使用的数据链路层协议。
-
PPP协议应该满足的需求(其实就是链路层应该有的基本功能)
-
简单:将复杂的功能都放到了TCP协议中了
-
封装成帧:能够进行帧定界
-
透明性:需要对数据中出现帧头帧尾而产生的问题进行解决,例如填充转义字符。
-
多种网络层协议:PPP协议必须能够支持多种网络层的协议。
-
多种类型链路:必须能够在多种类型的链路上运行:串行/并行等。
-
差错检测:进行差错检测,丢弃错误的帧
-
检测连接状态:必须能够及时检测出链路(注意看上一部分的链路的定义,十个物理实现)是否发生了错误。
-
最大传输单元:MTU,数据链路层的一个帧中可以携带的最大的数据内容。
-
网络层地址协商:
-
数据压缩协商:必须提供一种方法协商使用数据压缩的算法
-
-
PPP协议的组成
-
一个将IP包进行封装的方法。
-
一个用来建立、配置、测试数据链路连接的链路控制协议LCP。
-
一套网络控制协议,其中的每一个协议分别支持不同的网络层协议。
-
-
PPP协议的帧格式
-
各字段的意义
-
F: 标志字段0x7E,1Byte,它被放在一个帧的头部和尾部,作为PPP帧的定界符。连续两帧之间只需要一个标志字段。
-
A、C::尚未被定义的两个字段(0xFF,0x03),分别是1Byte。
-
协议字段:两字节,使用不同的双字节字符可以分别表示:该帧携带的什么控制信息。
-
FCS:在尾部两字节,用于CRC校验。
-
IP数据报:信息部分,最大不超过MTU
-
-
字节填充
-
零比特填充 p80
-
-
PPP协议的工作状态
p81
-
-
使用广播信道的数据链路层
-
局域网的数据链路层
-
局域网的特点:网络为一个单位所拥有,且地理范围和站点数目均有限
-
局域网的优点:
-
局域网上的主机可以共享连接在局域网上的各种硬件和软件资源。
-
便于系统的扩展和逐渐演变,
设备的位置可以灵活地调整和改变
-
提高了系统的
可靠性、可用性、生存性
-
-
局域网按照拓扑结构分类
-
星形网:由于集线器以及双绞线的应用导致星形以太网等获得了非常广泛的应用。
-
环星网
-
总线网:其以传统以太网最为出名,由于太出名了导致现在以太网几乎成了局域网的代名词。
-
-
共享信道
由于局域网不再是建立一对一的信道连接方式,而是所有的用户全部接入到同一条信道中也即共享信道。为了合理和方便的使用信道,技术上有两种方式:
-
静态划分信道
也即采用频分复用、波分复用等手段来给每个用户单独开辟一小块用于该用户的通信。
-
动态媒体接入控制
-
随机接入:所有用户可以随机地接入到网络中,但如果恰好,在同一时刻有多个用户发送信息,则会发生碰撞,因此必须要有解决碰撞的协议。
-
受控接入:用户不能随机地发送数据,必须服从一定的控制,典型的有多点线路轮询。(不是常用的方法)
-
-
-
适配器
适配器完成了数据链路层和物理层两个层次的功能。
-
计算机与外部局域网的连接是通过通信适配器进行的。
-
适配器与局域网之间通过电缆或者双绞线以串行传输的方式进行传输。
适配器与计算机之间则是通过IO总线以并行的方式进行的。
==》适配器的其中一个重要功能就是:串行传输和并行传输的转换。
- 网络上的数据率和计算机总线上的数据率并**不相同
==》因此在适配器中必须装有对数据缓存的存储芯片**
-
主板上如果插入了适配器,那么操作系统必须要有对其进行操作的驱动,来告诉适配器:1. 存储器应该从哪里把多大的数据发送到局域网。2. 从局域网获取的数据应该存储在存储器的什么地方。
-
由于适配器内部有自身的存储器、处理器,因此:
-
适配器接收或者发送各种帧的时候(可能要进行差错检测等计算工作)不必麻烦计算机的CPU。
-
当适配器接收到正确的帧之后,通过中断的方式提醒计算机,并且把数据掐头去尾然后放入到网络层。
-
当计算机发送数据的时候,先把IP数据报交给适配器,适配器组装成帧然后发送到局域网
-
注意:IP软地址存储在计算机内部的存储器中,而硬件地址则存储在适配器中(一般现在的笔记本都会把适配器固化在计算机中,这就导致本台计算机永远都是使用这一个MAC地址作为接入到局域网的MAC唯一地址,而IP地址则是按照当前的连接的局域网分配的一个地址,暂时存储在存储器中,并不是固化的地址)。
-
-
-
-
CSMA/CD协议
以太网的基础:
-
早期的以太网都是使用的传统的总线连接的方式,其所具有的特点是:广播通信方式,也即,一台计算机发送数据之后,所有的计算机都可以检测到这个数据。
-
但是我们并不想进行一对多的广播通信,更多时候,我们是想进行一对一的通信。
》在每个帧的首部中写明接收的计算机中的适配器中存储器中存储的硬件地址,这样便可以使得只有该硬件地址的计算机才能接收数据。》实现一对一通信。
-
为了方便,以太网采取了如下的连个措施:
- 采用无连接的方式:不必先建立连接就可以直接发送数据。适配器也不对数据帧进行编号,也不要求接受发发回确认信号。==》以太网是采用的是尽最大努力的交付,也即**不可靠的交付。
仅仅做比特错误的检测,其他的错误则由上层的TCP来进行判决与处理。以太网啥都不管,就管传。**
- 以太网发送的数据都是曼彻斯特码:这是为了方便时钟的检测与同步。但是导致了数据的带宽变成了原来的两倍。
CSMA/CD协议的要点
-
**多点接入:**说明这是总线型网络
-
**载波监听:**不论是发送前还是发送中都应该不停地检测信道,必须要等到信道变为空闲才可以发送。
-
**碰撞检测:**边发送信号,边监听总线上的信号电压变化的幅度。几个站同时发送时会导致电压超过一定的幅度。
-
设总线两端的两个站之间的传播时延为τ(考虑最极端的延迟情况),则碰撞检测的过程将会如下进行:(这个分析过程中,由于电磁波的传播速度是恒定的,因此,可以直接将时间与距离做等价看待)
-
设A,B两站为总线两端的两个站点
-
A站在0时刻向B站发送数据,与此同时,B站检测到信道是空的
-
在τ-σ的时刻,这个信号还没有到达B,由于B站刚刚检测到信道是空的,所以开始发送数据
-
在τ-σ/2 的时刻(A和B的信号都往中间传),两个信号发生碰撞。
-
在σ的时刻,碰撞信号传回到B中,B停止发送
-
在((τ-σ/2)*2)=2τ-σ时刻,碰撞信号传回到A中,A停止发送
-
由此可以看到,碰撞信号最多经过2τ时间才会传回到发送者手中。因此:
定义2τ为争用期。如果在争用期没有检测到碰撞,那么就可以确认没有发生碰撞。通常我们定义2τ为51.2μs,如果用传统的总线以太网10Mbit/s的方式来传输,则争用期期间最多发送512bit=64Byte。,因此争用期也可以说为512比特时间。
- 由于只要在争用期没有发生碰撞,就一定是没有发生碰撞。如果换成数据量的度量方式的话==》只要发送了64Byte之后如果还没有发生碰撞,那就一定没有发生碰撞。==》规定**最短帧长为64Byte**。 如果接收端收到了**小于64Byte**的数据帧那么一定是由于**发送到了一半**发现**发生了碰撞**于是中断,导致的。因此这种帧我们称之为**无效帧**。
- 检测到碰撞使得其中断之后通过二进制指数退避的方法来选择再次重传的时机。
-
-
-
强化碰撞
相比于一般的碰撞检测:一旦发现了发生碰撞,除了立即停止以外,还需要再发送32bit/48bit的认为干扰信号,从而让所有的用户都知道发生了碰撞。(用10M/s的以太网,发送这些数据需要3.2/4.8μs)这个干扰信号从头传到尾需要τ时间,因此总共消耗的时间为:发送到接收到碰撞信号的时间+发送干扰信号的时间+干扰信号从头发到尾消耗的时间
-
帧间最小间隔:要求每个帧之间间隔9.6μs,这是为了接收端能够更好地清理刚刚的接收缓存能够快速地安全地被清理。
-
整体的发送过程如下:
-
适配器从网络层接收到一个分组,加上以太网的首部和尾部形成帧
-
检测信道,是否空闲
-
如果保持96bit时间的空闲,那么就发送这个数据包
-
发送的时候也不断地监听,如果在争用期发生了碰撞,那么就停止发送并按照二进制指数退避的方法,如果没有,那就说明不会再发生碰撞了,安心发就好了。
-
-
注意以太网每次开始发送一个帧之前,应该把这个帧先暂时保存一下,以便如果在争用期发生了碰撞重新进行发送。
-
-
使用集线器的星形拓扑
-
以太网的传输媒介从同轴电缆发展为双绞线之后,以太网所采用的拓扑结构也由原来的总线型变成了星型结构,在星型结构中间多了一个可靠性十分高的设备:集线器。
-
每个站(主机)需要两个双绞线来和集线器相连,分别用于发送和接收。
-
从双绞线+集线器的结构出现之后原本的同轴电缆马上被淘汰。随之出现的是代替原本总线型网络的**星形以太网:**10BASE-T:10M/s,BASE:发送基带信号,T:使用双绞线
集线器:
特点:
-
虽然物理上是星型结构,但是,由于集线器实际上使用了电子器件来模拟了总线的工作,因此逻辑上来说还是总线网。
-
集线器有多个接口:8-16个,用于和双绞线的RJ-45插头相连从而与计算机相连。使用两条双绞线来和计算机相连。因此集线器更像是一个多接口的转发器。
-
集线器工作在物理层:集线器中没有数据链路层所需的数据传输的协议等,每个接口仅仅负责传输bit数据。也不进行碰撞检测等,如果两个接口同时输入数据,那么每个接口都会收到错误的帧。
-
集线器一一般使用多个堆叠的形式,它有一定的检错能力,比如发现某个主机的适配器发生错误,不断地发送帧,那么他会选择把这个适配器的连接断开。从而不影响其他的主机。
集线器之间的连接通常使用光纤(长距离的衰减小,双绞线一般使用100m以内),因此使用的标准是10BASE-F, F表示使用光纤。
-
-
以太网的信道利用率
仍然是看总线型的结构:
-
τ为单程端到端的**最长传播时延
-
T0为发送一个数据帧所需要的时间。**
因此,如果一个数据帧正常发送(没有发生碰撞),总共需要的最长时间为:T0+τ(没有考虑帧间隔)。假设所有的帧都按照这样没有碰撞地发送,只有T0是在发送数据==》信道利用率为:S = T0/(T0+τ)
定义α = τ/T0. α越小说明τ越小,实际占用线路地时间越大==》碰撞导致的时间损耗越小==》信道的利用率整体上来看更高。==》S = 1/(1+α)
-
-
以太网的MAC层
-
MAC层的硬件地址(物理地址,MAC地址)
-
IEEE为局域网规定了一种48位的全球地址,每个适配器中都会固化一个MAC地址。
-
这6byte的地址中前三字节必须是局域网适配器的厂家从IEEE的注册管理机构购买,因此前三字节的码被称作是公司标识符。至于后三字节如何进行在适配器产品中分配就是公司的事情了,因此又被称作扩展标识符
-
特殊的两个位:
-
第一字节的最低位:用来表示0:单个站地址Individual/1:组地址Group(用于
多播
) -
第一字节的第二最低位:0:Global表示从IEEE购买来的全球管理MAC地址; 1:Local表示不是从IEEE购买来的,是私人使用的本地管理MAC地址
-
-
因此在全球管理时(认为上述两个特殊的位都是0:全球管理的单个站地址),剩下46位来组成月70万亿个地址。
-
-
MAC帧的格式(DIX Ethernet V2标准)
-
第一个字段:6字节表示目的MAC地址
-
第二个字段:6字节表示源MAC地址
-
第三个字段:2字节表示网络层使用的什么协议(eg 0x0800 表示IP协议),从而方便把接收到的数据交给上一层的这个协议
-
第四个字段:数据字段(这里的帧一共有16个字节来表示帧头帧尾,它不同于ppp协议的一个帧只有六个字节)
-
第五个字段:四字节帧检测序列FCS(使用CRC检验)
-
具体看课本96-97
-
-
以太网的帧传输过程中不需要帧结束定界符,因此也不需要填充字符(转义字符)来达成透明传输的要求了。(具体课本97)
-
-
-
扩展的以太网
-
在物理层扩展以太网
由于10BASE-T以太网的传输距离十分有限,通常认为是100m。现在拓展主机与集线器之间的距离的一种方法便是:
-
使用光纤和一对光纤调制解调器。由于光信号的衰减很少,因此可以很容易地使得主机和几公里外地集线器连接。
-
使用多个集线器(主干集线器来连接多个局域网(以太网,其实就是一个集线器形成的局域网)),可以连接成覆盖更大范围地多级星型结构的以太网。
-
优点:使得多个以太网中的主机可以相互通信;扩大了以太网覆盖的地理范围(没有使用这种结构时,连接到同一个集线器的两个主机,如果使用双绞线,则最远相距200米,但是使用了这种多级星型结构的话,集线器之间使用双绞线200m,使得不同主机之间的通信距离最大扩展到 400m)。
-
缺点:在多个以太网连接起来之前,各自有自己的冲突域,但是当连接起来之后遍只剩下一个公用的冲突域了。由于任何两个主机之间进行通信,都要所有的集线器进行转发,使得其他的主机无法进行通信。
-
-
-
在数据链路层扩展以太网
-
网桥:
在数据链路层进行==》网桥通过对接收到的帧根据MAC帧的目的地址进行转发和过滤,当网桥收到一个帧之后,他并不是向所有的的接口转发这个帧,而是根据网桥中的地址表查找目的MAC地址,从而确定转发到那个接口或者抛弃。
-
交换式集线器(以太网交换机)
-
特点
-
交换机工作在数据链路层
-
以太网交换机的每个接口都直接与一台主机或另外一台以太网交换机连接
-
一般都工作在全双工的模式
-
同时具有并行性,可以同时连同多对接口,使得多对主机能够同时通信。相互通信的主机独占传输媒体,无碰撞地传输数据。由于是独占传输媒体,如果每个接口到主机的带宽是10M/s,如果有十个用户,则交换机的总容量就会达到100M
-
交换机的接口还有存储器,使得端口繁忙时对帧进行缓存
-
交换机可以有多种接口的组合,例如可以具有10Mbit/s、10Gbit/s等组合,方便不同情况的客户。
-
即插即用的设备,其内部的帧交换表(地址表)是通过自学习算法自动建立起来的
-
大多数交换机采用存储转发的方式,但也有一些采用直通的方式,也即不需要存储转发,而是确定了数据帧中目的MAC地址之后,查表找到应该转发到那个接口,直接发过去,从而提高帧的转发速率。
-
-
自学习功能
看课本吧p100,很清晰
-
从总线以太网到星形以太网
以太网刚开始发展的时候,由于还很难通过廉价的方法制造出靠谱的以太网交换机,因而总线型的以太网得到了快速的发展。但随着接入的主机数量逐渐增多,其可靠性快速下降,与此同时大规模的集成电路使得以太网交换机称为可能,因此星形的结构重新打入市场。
由于换成了星形结构,并且使用了以太网交换机,碰撞现象不会再发生了,CSMA/CD协议也不再需要了,而且是双工通信。但是由于帧结构没有变,仍然是以太网的帧结构(LCD MAC等层的协议),因此仍然称其为以太网。
-
-
-
虚拟局域网 VLAN
虚拟局域网只是局域网给用户提供的一种服务,而非是一种新型局域网。
在以太网的帧格式中的帧首加入4字节的VLAN标记,称为VLAN tag。通过这个tag来表示发送该帧的计算机术语那个虚拟局域网。
VLAN tag被插入到MAC帧的源地址字段和类型字段之间。而且前两个字节总是设为0x8100,然后是3bit表示优先级,接着以为规范格式指示符,然后是12bits的VLAN的标识符VID。
-
-
课堂习题
1:已知结点数为100,平均帧长度为1000bit,传播延时为5us/km.
1)总线长度为4km,发送速率为5Mbps.
2)总线长度为4km,发送速率为10Mbps.
试计算Ethernet中结点每一秒平均发送帧的数量以及最大可能成功发送的帧数量?(采用极限信道利用率)
T0 = 1000/5000000 = 0.2*10^-3=0.2ms=200μs
所以一个节点每秒钟平均发送的帧的数量为:1/T0 = 5000
Tao = 5*4 = 20μs
信道利用率:S = (T0/(T0+tao))= (1/(1+α)) = 0.999
因此最大可能成功发送的帧数量为:5000*S = 4995
2:Ethernet总线长度为1000m,数据传输速率为10Mbps,信号在总线上的传播速度为2*108m/s,计算:能够使CSMA/CD算法成立的最短帧长度是多少?
10000000(2*1000/200000000) = 100bit*