计算机网络
本文为计算机网络相关考试的书本内容详细总结
之前专栏分享过自顶向下的分析方法,本文采用常规的自底向上的方法从物理层到应用层对计算机网络相关的内容、概念进行系统复习,总结;而计算类型题目本文暂不涉及
本文内容来自cfeng自我理解,可能有误,欢迎指正~
数据链路层 Data Link Layer
物理层的物理链路Link是一条点到点的物理线路,中间没有交换结点, 一条物理链路只是一条物理路径的组成部分
数据链路 data Link: 除了物理的链路之外,还需要有通信协议控制物理链路的数据传输,如果把实现这些协议的硬件和软件加到俩路上,就构成数据链路
数据链路层的主要功能: 将不可靠的物理链路转为可靠的数据链路,数据链路(逻辑链路) = 物理链路 + 数据链路层的通信协议
一般的适配器都是包含了数据链路层和物理层的功能
链路层的主要设备就是二层交换机、网桥, 链路层的数据PDU为帧Frame
链路层的三个基本问题: 成帧规则、 差错控制(检错纠错)、流量控制
相关概念术语
link 链路
一个结点到相邻结点的物理链路
data link 数据链路
把实现控制数据传输的协议的硬件和软件加到链路上构成数据链路; link + 通信协议
帧 frame
一个数据链路层的传输单元, 由一个数据链路层的首部和携带的数据加上尾部构成的协议数据单元
MTU maximum transfer Unit 最大传送单元
帧的数据部分的长度上限 【移动通信中针对MAC层数据分布占比不到一半,有相关帧聚合和块确认技术】
PPP point to point Protcol 点对点协议
用户计算机和ISP进行通信时,使用的数据链路层协议,PPP规定的数据帧结构:首部、数据部分、尾部
只是检错,不纠错,不进行流量控制,可以支持多种网络层协议,PPPoE为宽带上网的主机使用的链路层协议
MAC 地址 media access control
媒体访问控制,设备的物理地址,硬件地址, 定义网络设备的位置,网络层负责管理IP地址,链路层管理的就是MAC地址,一个主机只会有一个MAC地址, 每个网络位置有一个专属IP地址 【所以主从架构时,clone虚拟机后,需要修改网卡,其中除了IP,最主要就是MAC地址需要重新NAT分配】
网桥 bridge
物理层应对信号衰减使用中继器,网桥就是在链路层实现中继的设备,连接两个及以上的局域网的网络互联设备
交换机 switch
广义上的交换机指的是通信系统中完成信息交换的设备,在这里二层交换机时工作在数据链路层的集线器, 实质就是一个多接口的网桥 【 物理层的设备为集线器】; 三层交换机可以工作在网络层
成帧 规则
成帧规则是数据链路层需要研究的问题,封装成帧framing: 在IP分组前后分别添加首部后尾部,构成一个帧,例如PPP协议定义的
成帧定界
构成帧之后需要考虑帧如何定界,也就是帧开始和帧结束,常用的定界方法:
字符计数法
发送放利用首部的一个字段作为帧长字段,按字符计数, 帧长字段 = 帧包含的字符数 + 1
接收方利用帧长字段接收,计算得知结束位置
如果帧长字段出现错误,造成后面所有的数据都接收错误,无法检错,无法纠错; 只是适合高可靠链路
字符填充分界符法
面向字符同步传输, 一次发送一个数据块帧, 每一帧**使用两个不同的特殊字符作为开始和结束的标志
如果数据帧丢失了标志字符,下一个帧还是可以正确接收, PPP协议的简化
数据部分不会出现SOH和EOH等定界控制字符, 但是如果出现了非文本文件数据,可能会出现SOH和EOH的字符,造成定界错误
解决办法就是数据部分的SOH和EOH字符前面都统一加上ESC转义字符【和java中处理一样】
零比特填充分界符法
面向bit流的同步传阿叔,数据库包含任意长度和组合的bit流, 和上面的字符填充分界法类似,只需要在开始和结束填充特殊的位模式(01111110), 通过该模式识别边界
两个数据帧只需要一个位模式, 如果丢失,只需要在数据流中扫描下一个位模式
物理层编码违例法
数据为不可能出现bit编码作为帧起始或者结束定界符
比如曼彻斯特编码,一个码元中间电平跳变表示0,正向跳变; 1 负向跳变; 差分曼彻斯特编码: 中间比跳变, 0表示开始有跳变,1表示开始无跳变
比如 4B/5B 编码方案: 4bit映射为5bit, 剩余的一半16bit可以作为帧定界符
差错控制
通信的任务是高效无差错传送数据,但是任何通信线路都不可避免出现噪声
信道中的比特差错: 随机差错(随机热噪声)、 突发差错(冲击噪声)
突发差错的长度: 差错发生的第一个码元到有错的最后一个码元间所有码元个数;
误码率P = 错误bit数/ 总bit数 【码元数】
差错检查
差错控制编码: 数据位k + 校验位r, 数据帧中有校验字段
校验码分为检错码和纠错码
- 检错码会自动发现差错,主要用在高可用、误码率低的场景【光纤链路】, 偶尔发生错误就重传
- 纠错码 不仅能够发现差错而且能就诊,主要用在错误发生比较频繁的信道【无线链路】
编码效率R = k / k + r; 也就是编码中数据位所占的比例
漏检率: 某bit位出错但接收者无法检测到的概率
常见的检错码:
-
奇偶校验: 1位奇偶校验
增加1位 校验位, 使数据 + 校验位的1的个数为奇数或者偶数
-
简单校验和: 主要用于TCP/IP的网络层和传输层
发送方进行16位二进制补码求和运算,计算结果取反, 随数据一同发送,接收方也会16位二进制补码求和运算(包含校验和), 结果不是全1,那么错误【正负得0】
-
循环冗余校验 CRC: 数据链路层广泛使用
发送方将要方式弄个得数据位被除数(左移m位),选择一个预定的二进制数(m + 1位)作为除数, 利用二进制模2除法运算得到一个余数,作为CRC校验码,一起发送给接收方, 接收方以发送的数据 - CRC校验码位被除数,选同样的二进制码作为除数,余数为0,表明无错,注意CRC运算 模2除法3规则就可以快速计算
预定的二进制码(除数),国际编码,不是任意的,最高位和最低位为1,以多项式表示,G(x), 发送数据长度大于生成多项式表示的二进制码长度
CRC-8 : G(x) = X^8 + X^2 + x + 1 ----- 100000111
除数的位数等于最高次幂 + 1; 比如这里就是9位, 然后x^8 x^2 x^0(1),表示从右边0位开始第几位为1, 这里就是0,1,2,8位
被除数移动 最高次 幂位,这里移动8位
CRC计算: D = 1010001101 , M = 5, G = X^5 + X^4 + X^2 + 1, R = ?, 实际传输数据是?
这里除数G = 110101
数据D 左移M位,就是5位, 101000110100000
CRC 模2 除法:
首先需要注意:
> 模2减法: 异或操作, 被除数 和 商 * 除数 的减法 是 异或操作 【相同得0,相异得1】
> 所得余数都需要舍弃首位
> 若被除数 以及 之后舍去首位的余数R 的首位为1 , 商1; 首位为0,商0
1 1 0 1 0 1 0 1 1 0
————————————————————————————————
1 0 1 0 0 0 1 1 0 1 0 0 0 0 0
1 1 0 1 0 1
—————————————————————————————————————— 这里被除数首位为1,商1,之后异或
1 1 1 0 1 1 1 0 1 0 0 0 0 0 舍去首位,现在的R首位1,商1
1 1 0 1 0 1
————————————————————————————————————
0 1 1 1 0 1 0 1 0 0 0 0 0 异或之后舍去首位,现在R首位0,商0
0 0 0 0 0 0
——————————————————————————————————————
1 1 1 0 1 0 1 0 0 0 0 0 商0之后异或就是被除数舍去首位即可, 商1
1 1 0 1 0 1
————————————————————————————————————————————
0 1 1 1 1 1 0 0 0 0 0 首位0,商0, 直接去掉首位
????
1 1 1 1 1 0 0 0 0 0 首位1,商1
1 1 0 1 0 1
——————————————————————————————————————
0 1 0 1 1 0 0 0 0 首位0,商0
↓
1 0 1 1 0 0 0 0 首位1,商1
1 1 0 1 0 1
————————————————————————————————————————
1 1 0 0 1 0 0 首位1,商1
1 1 0 1 0 1
————————————————————————————————————
0 0 1 1 1 0 首位0,商0
↓
0 1 1 1 0 【5位,和M一样,不需要再除】
所以余数就是 0 1 1 1 0, 放在D的后面5位替代之前的全0
被除数首位为1时,商为1;被除数首位为0时,商为0;
每一步得到的余数都要抛弃首位;
若新的被除数首位(即已抛弃首位的余数)为0,除数为0;
余数位最高次幂位,M位,不够前面补0
可以检测出全部单一位出现差错, r为生成G(X最高幂次,CRC可以检测出突发差错长度小于等于R的所有突发性错误
纠错机制
- 反馈重发纠错法ARQ: 接收方检测出错误, 丢弃帧,发送方重传 【发送方对帧进行编号,接收方反馈出错帧的序号,发送发重发】, 同时发送方需要缓存已发送的数据帧
- 前向纠错法FEC: 接收方利用纠错码(汉明码)检错并且纠错, 不需要重发数据帧,同时因为编码效率低,算法复杂,很少使用,无线链路适合使用
流量控制
为了解决发送方的发送速率和接收方交付速率的匹配问题,一般采用: 利用接收方交付速率控制发送方的发送速率,链路层采用 固定大小的滑动窗口
连续ARQ协议: 后退N帧协议和选择重发协议,实现流量控制 + 差错控制
固定大小滑动窗口奇数包括: 停止-等待协议、后退N帧协议、选择重发协议
停止-等待协议 WT = 1 W R = 1
不进行流量控制,发送方将所有数据全部发送给接收方,需要接收队列足够大, 进行流量控制之后【队列有限】, 发送一个Data后需要返回ACK,再发送下一个帧
重发定时器不能设定时间过短,不然还没有ACK帧还没有受到久发送下一帧数据, 停止-等待协议引入1bit 的序号字段解决; 数据帧的每一个序号 都是0,1交替出现在数据帧中
但是这里的缺点就是效率低, 连续ARQ协议: 发送方在等待接收方返回第一个ACK应答前,再连续发送7个帧
后退N帧协议 WT > 1 WR = 1 连续ARQ
发送方可以一次性发送多个帧,同时等待ACK应答,
发送方发送一个帧后,不会停下来等待ACK,而是可以连续再发送若干数据,同时启动重发定时器;
如果重发定时器超时前,受到ACK,继续发送后面的数据帧, 如果没有受到,那么从该帧到后面继续发送的所有帧都重发
就是发送方和接收方都有一个窗口,发送方只能发送窗口内的数据帧,对发送端进行速率控制
窗口大小: 在没有受到ACK之前发送方最多可以发送的帧的个数
接收窗口控制接收方接收哪个数据帧, 只有数据帧号和接收窗口序号一致才会接收,否则丢弃, 正确处理,交付上层,窗口向前移动,发送ACK
接收方累计确认: ACKn表示确认n-1号帧,希望下次受到n号帧
接收窗口,就是一个Index从0号帧开始向后移动, 准备接收Index位置的帧
后退N帧协议中,序号字段为Kbit位, 则帧序号空间为[0, 2^K -1]; 从0开始
- 如果序号字段K bit, 发送窗口最大值为2^k -1, 可以保证该协议任何情况不出错
比如3bit, 那么窗口序号空间0 ----- 7, 最大发送7个帧保证不出错
选择重发协议 WT > 1 WR > 1
选择重发协议的发送窗口和后退N帧协议一样,但是接收窗口长度大于1,一次可以接收多个帧
如果接收的4号帧出错,只是对4号帧重传, ==选择重发协议,发送窗口最大值 <= ^k - 1,和上面的要求一样,这样才能保证正确
可以看到上面三种协议:
停止-等待协议,序号比特位1, 序号空间[0,1], 发送窗口和接收窗口大小都是1
而后退N帧协议,接收
而选择重发协议 K, 2^k -1 ,发送窗口和接收窗口大小都是2^K -1
HDLC 协议
数据链路层的协议需求: 发送方和接收方的标识,支持可靠性通信,支持点到点,支持半双工和全双工操作
停止-等待协议效率低, 面向bit 型协议 数据帧通用,效率高
HDLC协议: 高效率、高可靠性,传输任意bit
- 三种类型的站: 主站【全面管理数据链路】、次站【受控主站】、复合站【具有主站和次站的双重功能】
- 两种链路结构
- 三种数据传送操作方式
数据链路的类型:
- 非平衡式链路结构: 由一个主站和多个次站连接而成,实现点到点或者多点通信,双工通信 【主站控制,发送命令帧,将次站置于某种状态,次站响应主站状态,交换数据和控制信息】
- 平衡式链路结构: 两个复合站点点对点连接而成,通信方式为双工, 都具有数据传输和链路控制能力
数据传送操作方式
-
正常响应方式NRM: 非平衡式链路结构,只有得到主站允许,才能传送数据,传送完成之后停止
-
异步响应方式ARM: 适用于非平衡链路结构,次站不一定在接收到主站允许即可进行数据传输,次站可以一次发送多帧,将自己的信息发送给主站
-
异步平衡方式ABM: 适用于平衡链路结构,复合站自主决定数据传输,不需要得到另外一个复合站的允许,可以发送状态信息和数据
语法: 数据和命令格式
HDLC的单位为Frame
- 标志字段F, 6个1加2个0,一共8bit, 找到标志字段就可以确定帧的位置, 使用的应该是bit填充分界规则
- 控制字段实现对于数据链路的检测和控制(流量)
- FCS 校验字段: 采用16位的CRC冗余校验码,标志字段不校验
- 地址字段就是接收方或者发送方地址
组地址(点到多点): 一个地址可以分配给多个站点
广播地址(点到多点): 全1 , 链路所有站点都可以受到
地址全0, 不分配给任何站点,测试使用
语义: 数据帧类型
HDLC利用控制字段前两个bit位定义三种类型帧:
I 帧 (信息帧): 可靠通信时数据帧,面向连接
S 帧 ( 监控帧) : 实现流量控制和差错控制
U帧 ( 无编号U帧): 设置链路操作方式
同步: 事件顺序
链路的建立和拆除
确认可靠通信服务
选择重发
数据帧的封装/拆封
LAN1 ----> 路由器【 以太口 ETH IP HDLC 串口】 ----> WAN ---> 路由器【...】 ----> LAN2