韩立刚计算机网络——第三章:数据链路层
Posted 想文艺一点的程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了韩立刚计算机网络——第三章:数据链路层相关的知识,希望对你有一定的参考价值。
数据链路层的关键点:网卡 + 物理线路 + 协议
(ppp 协议就是其中一种协议)
1、基本概念
(1)数据发送模型
应用层和应用层的通讯
流程:主机1 和 主机2 之间的网络通讯:主机1网卡 ——> 电话网 ——> 路由器 ——> 主机2网卡
H1:
运输层:对数据进行封装 ,分段
传输层:给数据 加上目标网络地址
链路层:给数据 加上MAC地址,封装成帧。
R1:
链路层:根据传输的 MAC 地址,判断数据包是不是自己的。
网络层:根据 IP 地址,选择最优路径,再给数据 加上目标网络地址,发给下一个路由器。
总体流程:H1 ——> R1 ——> R2 ——> R3 ——> H2
- 点对点通信和广播信道
点对点:两个笔记本使用一个网线直连。
广播:中间有一个集线器接了很多设备,就成广播信号了。
我们这一章,只关心数据链路层怎么传输。
底层是什么介质(光纤、同轴电缆、电话线)我们不用管。
底层是什么复用(时分、频分、码分)我们也不用管。
数据链路层具体是指哪一部分呢?
(2)链路和数据链路?
链路:是一个物理线路,比如一根网线。
但是只有一个物理线路,它还不能通讯,还缺一个控制它的 通信协议,谁来提供呢?
答案:网卡(网卡上面是有数据链路层的协议的,负责来控制数据传输)
(3)帧
什么是帧:数据链路层传输的数据单位。
数据链路层:像是一个数字管道,而在数字管道上传输的数据单位是帧。
2、三个基本问题
封装成帧
透明传输
差错控制
(1)封装成帧
计算机接受过程中:
-
只有既收到帧首部,又收到帧尾部的时候,才会接受这个帧,只收到其中一个,是不会接受的。
-
以太网上传输,最大帧长度为 1500 个字节。
为什么要添加帧头和帧尾?
- 为了保持数据的完整性, 如果只有帧头的话,我们数据丢了一半对方也不知道 。
(2)透明传输
- 透明传输其实就是指无论是什么报文都可以传输,非透明传输就是指某些特殊字符不能传输。
- 在计算机网络中,透明传输在数据链路层提到过,在数据链路层将网络层协议封装成帧时,会在首部和尾部分别添加 SOH 以及 EOT 这两个特殊字符。
- 接收方是根据这两个字符来确定帧首和帧尾的,如果上层协议发送过来的数据(即链路层的数据部分)包含EOT,那么接收方在解析这个帧的时候就会误以为数据已经结束。
- 所以,如果链路层对这种情况没有特殊处理,那么就可以理解链路层为非透明传输(因为无法传输EOT这个字符)。
- 但是数据链路层通过对这个字符添加转移符(如果网络层数据中还存在转移符,就再添加一个转移符)的办法来使数据部分可以传输EOT字符,就实现了透明传输。
再论什么是透明传输?
- 在传输的时候,为数据添加了转义字符。
- 接收之后再将转移子符去掉。
- 注意!!!:这三个问题都是在数据链路层解决,由网卡进行解决。
- 所以对于发送者和接收者来说,不知道底层加了这一层保险。
(3)差错控制
传输过程中:可能产生差错,由环境因素,可能 0 变为1, 1 变为 0。
问题:我们要怎么发现,我们是否在物理线路上发生了差错?
解决:CRC 循环冗余检验
关键:在二进制里面,如何实现冗余检验?
数据规则:
-
模 2 运算:不进位,不退位(1 + 1 = 0,不等于 10 )
-
一个数 对 一个 n+1 位的数进行模2 运算的出发,所得的余数是 n位。(比除数少一位)
分析冗余计算的流程:
-
原始数据:110101
-
自己设定一个除数,有 k 个 bit 位,位数和我们的原始数据长度有关。(我们设定 k = 4)
-
先固定冗余码全为 0 ,位数为 k-1 位,然后将其添加到原始数据后面。 (我们设定 k-1 = 3)
-
第一次 原始 bit 数据 + 冗余码 / 除数,除不尽会产生余数。 (这个余数叫做 FCS 帧检验序列)
-
所以我们将余数加回去,余数 + 原始 bit 数据 + 冗余码 / 除数 。 这样就可以除尽了。
余数 + 原始 bit 数据 + 冗余码 = 原始 bit 数据 + 余数
因为原来的冗余码是 000 ,加任何的三位数,都会变为这三位数 。
000 + 001 = 001
- 如果此时我们除不尽,则说明我们 原始bit 数据已经发生了变化。
计算举例:
所以发送端此时要发送的数据为: 原始数据+余数 。
接受到拿到数据之后:进行 原始数据+余数 / 除数 。去判断是否有余数,即是否为 0 ,或者不为 0。
如果结果不为 0 ,我们则丢弃这一段数据, 让发送方重新发送一次。
总结:CRC 校验的特点:
-
CRC 只管判断是否出错,并不操心到底是哪里出错了,发现出错之后直接丢弃。
-
直接丢弃不就丢包了吗? 丢不丢包,数据链路层不管
注意:CRC 校验并不是 百分之百 可靠,如果差错正好是除数的倍数,我们就没有办法发现。
3、点到点通信(ppp协议)
数据链路层的关键点:网卡 + 物理线路 + 协议
(ppp 协议就是其中一种协议)
是一种数据链路层的协议,ppp协议(point to point protocol)。
应用于拨号上网。
如果我们直接插网线,不适用拨号,就不是使用ppp 协议。
举例:
通过电话线上网: 电脑通过电话线,直接连到运营商。(用户点到点运营商)
ppp 协议实现的功能:
- 给我们主机分配一个 IP 地址。
- 记账功能:如果我们欠费,就不让我们继续使用网络
- 记录使用时间:我们通过拨号上网,发帖的时间,发帖的 IP 地址,运营商就可以知道。
(比如有人使用网络发帖,运营商那边就可以知道该数据包的IP地址,发送时间)
数据链路层的关键点:网卡 + 物理线路 + 协议 (ppp协议 就是其中一种)
既然是数据链路层的协议,那么就一定要解决数据链路层的三个基本问题。
- 多种类型链路:可以使用在光纤、同轴电缆、电话线等。
- 检测连接状态:拨号上网的时候,欠费、密码错误、网线没插好、弹出的框都不一样。
- 最大传输单元:不大于 1500 个单元。
- 数据压缩协商:节省数据带宽。(比如有 连续 00000000000,我就可以进行压缩)
在数据链路层 ppp 协议,又分成了 3 层。
(1) 提供一个将IP数据报封装到串行链路的方法。IP数据报在PPP帧中就是信息部分,长度受最大传送单元MTU的限制。PPP支持异步链路(无奇偶校验的8比特数据)和面向比特的同步链路。
(2) 链路控制协议LCP(Link Control Protocol),当线路不再需要时,挑出这些线路,测试它们,商议选择,并仔细地再次释放链路控制协议。
(3) 一套网络控制协议NCP(Network Control Protocol),其中每一个协议支持不同的网络层协议,如IP、OSI的网络层等。
(4) 认证协议
(1)ppp 协议的帧格式
字段 | 长度 | 说明 |
---|---|---|
F:flag | 1字节 | 标志一个帧的开始或结束,固定为0x7E, |
A:address | 1字节 | 地址字段A是固定不变的,固定为0xFF。(因为点到点,地址已经固定) |
C: | 1字节 | 控制字段C是固定不变的,固定为0x03。 |
协议 | 2字节 | 协议字段不同,后面信息部分表示的数据类型不同。 |
值 | 协议 |
---|---|
0x0021 | IP数据报 |
0xC021 | 链路控制数据LCP |
0x8021 | 网络控制数据NCP |
0xC023 | 安全性认证PAP |
0xC025 | LQR |
0xC223 | 安全性认证CHAP |
问题:信息段(有效数据) 中出现了标志段的值,被误以为是标志段怎么办?
第一种办法:字节填充法
-
当信息字段中出现 0x7E 时,将每一个0x7E字节转变成2字节序列(0x7D,0x5E)。
-
若信息字段中出现一个 0x7D 的字节,则将其转变成2字节序列(0x7D,0x5D)。
-
若信息字段中出现ASCII码的控制字符(即数值小于0X20的字符),则该字符前面需要加入一个0x7D字节,同时将该字符的编码加以改变(+20)。
例如:出现0x03,就要把它转为2字节序列(0x7D,0x23)
第二种办法:0比特填充法
适用于传输数据是比特流(图像的位图数据),此时传输数据就不是有效字符了。
-
PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续传送),此时使用0比特填充法。
-
在发送端扫描整个信息字段,当有5个1连续出现时,立即填入一个0,保证信息字段中不会出现6个连续1。 (7E:0111 1110 当中有连续的 6个 1)
-
在接收端删除连续5个1后面的0。
(2)ppp 协议的工作状态
- 演示路由器怎么配置 ppp 协议
不要求掌握。
4、广播通信
- 局域网的拓扑
- 认识以太网
以太网是局域网的一种, 最初的以太网是将许多计算机都连接到一根总线上,这种连接方法简单又可靠。
优点:不用划分信道,谁也可以进行通信。
缺点:在这一根链路上,只能有两个电脑在通信。还有容易被其他电脑进行抓包,所以不可靠。
(1)以太网使用 CSMA/CD 协议
CSMA/CD 即 载波侦听 多点接入/冲突检测 (Carrier Sense Multiple Access with Collision Detectio)
-
多点接入:许多计算机以多点接入的方式,连接在一根总线上面。
-
载波侦听:发送端在发送数据前对总线进行监听,若监听到其他计算机在发送数据,则等待一段随机时间后,确认总线空闲时才开始发送数据。
提问:如果总线总的带宽是 10M ,该总线上面有10台计算机,那么平均每台计算机的带宽是多少?
10 M / 10 = 1M ; 最理想的情况之下,平均每台的带宽是 1M 。
如果发送数据时候,产生碰撞,就会有空闲时间产生,白白浪费带宽。
举例:如果以太网分布很广,网线之间有 1000 米,电信号在网线上传输的时间就会被拉长。
A先给B 发数据,在快到 B 的时候,此时 B 同时给 A 发数据。 在传输线上发送碰撞。
所以以太网一般不超过 100 米,也是有道理的。
CSMA/ CD 的特点:
不能不进行全双工通信,只能进行半双工通信。(一个时刻,只能有一个方向传输)
(2)争用期、最短有效帧长
争用期:
- 发送端,在发送数据帧之后,最多经过时间 2t (两倍的传播延时时间)就可以知道到底有没有受到碰撞。(2t 称之为 争用期)
- 在争用期这段时间之内,如果没有发现碰撞,才能肯定这次发送不会发送碰撞。
- 对于 10Mb/s 的以太网,在争用期内可发送 512 bit,即 64 字节。
- 总结:如果在 64 字节之内没有发生冲突,本次传输就不会发生冲突。
最短有效帧:
- 如果发生冲突,就一定在 64 字节之内。
- 由于一检测到冲突就立即中止发送,这时候发送的数据一定小于 64 字节。
- 所以以太网会将小于 64 字节的帧,认为时无效帧,从而将他丢掉。
5、以太局域网(以太网)
(1)概述
注意:现在很多厂商生成的适配器上,仅装有 MAC 协议,而没有 LLC 协议。
(2)集线器的星型拓扑
之前使用的是总线型:但是有 容易被抓包、速度低的缺点。
- 星型拓扑
集线器的内部结构:
网卡:有两个接口:一个是发送、一个接收。
仍然像传统以太网:所有的机器都能接收,容易被窃取。
工作在物理层:集线器像网线一样,没有任何智商,看不懂传输的协议,不管什么地址。
(3)信道利用率
以太网发送一帧数据所需要的时间:
信道利用率,参数 a (a越小,利用率就越高)
分析:发送速率,因为是电磁波传输,所以速率已经定死了。想要降低 a 有两种办法:
- 减短物理线的长度
- 增加一帧数据的长度。
这种情况是不可能出现的,在传输过程中肯定有冲突。
(4)MAC 层
当网卡一出厂的时候,在芯片上面就已经烧写了一个全球唯一的 MAC 地址。
疑问:网卡厂商那么多,怎么知道这个 MAC 地址有没有被使用呢?
- MAC 地址一共有 48 位 bit 位。 前24位代表不同的厂家,后24位由厂家自己指定。
- 如果我们想要生成网卡,先让 IEEE(注册管理机构)给分配一个 24 的号,我们才能自己生成。
适配器检查 MAC 地址:
适配器就使网卡,网卡收到 MAC 地址之后,就会和自己进行匹配。
MAC 地址冲突造成的网络故障:
有一台笔记本电脑,在 A 教室上网不同,在其他地方上网都可以通。怎么回事呢?
问题排查:
(1)是不是网线的事情?
不是,因为换别人可以上网的网线,也不能使用。
(2)既然不是网线的故障,那肯定就是笔记本的问题了。 但是笔记在其他地方可以正常上网。
MAC 地址发生了冲突, 疑问不是说每个网卡的MAC 地址都是唯一的吗?怎么还会冲突呢?
1、首先肯定在芯片上面的 MAC 肯定是不能修改的。
2、我们只是让计算不使用网卡的地址,而是使用我们人工指定的 MAC 地址。
怎么修改 MAC 地址? 参考博客
MAC 帧格式
名称 | 作用 |
---|---|
前导码 | 每个字节的比特模式为“10101010”。作用:实现收发双方的时钟同步 |
帧起始定界符字段SFD | 比特模式为“10101011”。作用:指示一帧的开始。 |
目的地址字段DA | 标识接收站点的地址。它可以是单个的地址,也可以是组地址或广播地址 |
源地址字段SA | 标识发送站点的地址。但它的长度必须与目的地址字段长度相同。 |
类型/长度字段LEN | 标识数据字段的字节数长度。 (协议类型) |
数据字段 | 为了使协议正常操作,帧长度不能太短,对于10Mbps的CSMA/CD网中,帧的最小长度为64. |
6、扩展以太网
1、如何让以太网变得远一点(通过光纤)(光猫:光电转换)
2、三个小的冲突域,变成了一个大的冲突域。
-
怎么理解冲突域:在这个冲突域当中,如果有两台计算机在通讯,其他都不能通信。
-
合成大的冲突域:使通信的效率变低了,意味着冲突更多了。
-
使用集线器来扩展,一个冲突域的计算机,不宜超过 30台。
(1)网桥
在数据链路层进行扩展 ,集线器属于在物理层进行扩展。(因为集线器和网线一样,没有任何识别功能)
网桥是一个智能的设备:
-
一开始网桥内部并没有各个机器的 MAC 地址,但是网桥在通信过程中会进行自动学习,记录各个主机的 MAC 地址。
-
所以一开始,网桥可能会进行广播,对所有机器进行发送。(这是记录的过程)
-
当网桥里面记录了所有主机的 MAC 地址之后,就可以对相应的冲突域转发, 不继续进行广播。
网桥自学习的算法
(2)交换机
现在我们很少看到网桥这个设备了,我们现在使用交换机。
交换机的特点
- 并不会对所有计算机进行转发,而是一对一进行转发。
- 所以,其他电脑就不能对冲突域当中的计算机,进行抓包了。
- 自带有存储转发的功能:当多个数据传来的时候,先放到交换机的缓存区域,然后排队转发。
- 使用交换机之后,我们每个计算机可以实现全双工通信。
举例:查看交换机的 MAC 地址表
7、虚拟局域网
(1)什么 VLAN
虚拟局域网是建立在交换机上面的,首先我们的交换机必须支持 VLAN ,并且可以划分网段。
举例:一个公司有一个交换机,然后有销售部、研发部、人事部。我们想将这个三个部门划分三个网段。(但是本质上还是在一个网段,只是用软件将他分割开来)
理解:
- VLAN ,可以将一个交换机划分为一个一个小的交换机。
- PC0 给 VLAN1 发送一个广播的时候, 只会在自己这个小的交换机进行广播,并不到 VLAN 2 那个小的交换机
- 此时,PC 0 就不能和 PC2 通信了。(VLAN1 和 VLAN2 被划分开来)
演示:
(2)多个交换机划分 VLAN
- 交换机与交换机之间,可以用一根线连接起来。
8、高速以太网
(1)快速以太网
- 10Mb/s 是标准以太网。
- 100mb/s 叫做快速以太网。
- 1000mb/s 叫做吉比特以太网。
(2)吉比特以太网
吉比特以太网的数据传输速率是快速以太网的10倍,可达到1Gb/s。吉比特以太网保留了传统10BASE-T以太网的基本特征,具有相同的帧格式和类似的组网方法。
吉比特以太网定义了基于双绞线的物理层标准1000BASE-T和基于光纤通道的物理层标准1000BASE-X:
组网的三层模型:
接入层:端口一定要多,解耦我们对应的电脑。
汇聚层:将我们一栋楼的交换机汇聚起来。
核心层:将很多栋楼的 汇聚层 交换机连接起来。
以上是关于韩立刚计算机网络——第三章:数据链路层的主要内容,如果未能解决你的问题,请参考以下文章