CS-Notes/notes/计算机网络 - 链路层.md
2020-11-17 00:32:18 +08:00

199 lines
11 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 计算机网络 - 链路层
<!-- GFM-TOC -->
* [计算机网络 - 链路层](#计算机网络---链路层)
* [基本问题](#基本问题)
* [1. 封装成帧](#1-封装成帧)
* [2. 透明传输](#2-透明传输)
* [3. 差错检测](#3-差错检测)
* [信道分类](#信道分类)
* [1. 广播信道](#1-广播信道)
* [2. 点对点信道](#2-点对点信道)
* [信道复用技术](#信道复用技术)
* [1. 频分复用](#1-频分复用)
* [2. 时分复用](#2-时分复用)
* [3. 统计时分复用](#3-统计时分复用)
* [4. 波分复用](#4-波分复用)
* [5. 码分复用](#5-码分复用)
* [CSMA/CD 协议](#csmacd-协议)
* [PPP 协议](#ppp-协议)
* [MAC 地址](#mac-地址)
* [局域网](#局域网)
* [以太网](#以太网)
* [交换机](#交换机)
* [虚拟局域网](#虚拟局域网)
<!-- GFM-TOC -->
## 基本问题
### 1. 封装成帧
将网络层传下来的分组添加首部和尾部用于标记帧的开始和结束
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/29a14735-e154-4f60-9a04-c9628e5d09f4.png" width="300"/> </div><br>
### 2. 透明传输
透明表示一个实际存在的事物看起来好像不存在一样
帧使用首部和尾部进行定界如果帧的数据部分含有和首部尾部相同的内容那么帧的开始和结束位置就会被错误的判定需要在数据部分出现首部尾部相同的内容前面插入转义字符如果数据部分出现转义字符那么就在转义字符前面再加个转义字符在接收端进行处理之后可以还原出原始数据这个过程透明传输的内容是转义字符用户察觉不到转义字符的存在
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/e738a3d2-f42e-4755-ae13-ca23497e7a97.png" width="500"/> </div><br>
### 3. 差错检测
目前数据链路层广泛使用了循环冗余检验CRC来检查比特差错
## 信道分类
### 1. 广播信道
一对多通信一个节点发送的数据能够被广播信道上所有的节点接收到
所有的节点都在同一个广播信道上发送数据因此需要有专门的控制方法进行协调避免发生冲突冲突也叫碰撞
主要有两种控制方法进行协调一个是使用信道复用技术一是使用 CSMA/CD 协议
### 2. 点对点信道
一对一通信
因为不会发生碰撞因此也比较简单使用 PPP 协议进行控制
## 信道复用技术
### 1. 频分复用
频分复用的所有主机在相同的时间占用不同的频率带宽资源
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/4aa5e057-bc57-4719-ab57-c6fbc861c505.png" width="350"/> </div><br>
### 2. 时分复用
时分复用的所有主机在不同的时间占用相同的频率带宽资源
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/67582ade-d44a-46a6-8757-3c1296cc1ef9.png" width="350"/> </div><br>
使用频分复用和时分复用进行通信在通信的过程中主机会一直占用一部分信道资源但是由于计算机数据的突发性质通信过程没必要一直占用信道资源而不让出给其它用户使用因此这两种方式对信道的利用率都不高
### 3. 统计时分复用
是对时分复用的一种改进不固定每个用户在时分复用帧中的位置只要有数据就集中起来组成统计时分复用帧然后发送
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/6283be2a-814a-4a10-84bf-9592533fe6bc.png" width="350"/> </div><br>
### 4. 波分复用
光的频分复用由于光的频率很高因此习惯上用波长而不是频率来表示所使用的光载波
### 5. 码分复用
为每个用户分配 m bit 的码片并且所有的码片正交对于任意两个码片 <img src="https://latex.codecogs.com/gif.latex?\vec{S}" class="mathjax-pic"/> 和 <img src="https://latex.codecogs.com/gif.latex?\vec{T}" class="mathjax-pic"/> 有
<!-- <div align="center"><img src="https://latex.codecogs.com/gif.latex?\frac{1}{m}\vec{S}\cdot\vec{T}=0" class="mathjax-pic"/></div> <br> -->
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/308a02e9-3346-4251-8c41-bd5536dab491.png" width="100px"> </div><br>
为了讨论方便 m=8设码片 <img src="https://latex.codecogs.com/gif.latex?\vec{S}" class="mathjax-pic"/> 为 00011011。在拥有该码片的用户发送比特 1 时就发送该码片,发送比特 0 时就发送该码片的反码 11100100。
在计算时将 00011011 记作 (-1 -1 -1 +1 +1 -1 +1 +1),可以得到
<!-- <div align="center"><img src="https://latex.codecogs.com/gif.latex?\frac{1}{m}\vec{S}\cdot\vec{S}=1" class="mathjax-pic"/></div> <br> -->
<!-- <div align="center"><img src="https://latex.codecogs.com/gif.latex?\frac{1}{m}\vec{S}\cdot\vec{S'}=-1" class="mathjax-pic"/></div> <br> -->
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/6fda1dc7-5c74-49c1-bb79-237a77e43a43.png" width="100px"> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/e325a903-f0b1-4fbd-82bf-88913dc2f290.png" width="125px"> </div><br>
其中 <img src="https://latex.codecogs.com/gif.latex?\vec{S'}" class="mathjax-pic"/> 为 <img src="https://latex.codecogs.com/gif.latex?\vec{S}" class="mathjax-pic"/> 的反码。
利用上面的式子我们知道当接收端使用码片 <img src="https://latex.codecogs.com/gif.latex?\vec{S}" class="mathjax-pic"/> 对接收到的数据进行内积运算时,结果为 0 的是其它用户发送的数据,结果为 1 的是用户发送的比特 1结果为 -1 的是用户发送的比特 0。
码分复用需要发送的数据量为原先的 m 倍。
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/99b6060e-099d-4201-8e86-f8ab3768a7cf.png" width="500px"> </div><br>
## CSMA/CD 协议
CSMA/CD 表示载波监听多点接入 / 碰撞检测
- **多点接入** 说明这是总线型网络许多主机以多点的方式连接到总线上
- **载波监听** 每个主机都必须不停地监听信道在发送前如果监听到信道正在使用就必须等待
- **碰撞检测** 在发送中如果监听到信道已有其它主机正在发送数据就表示发生了碰撞虽然每个主机在发送数据之前都已经监听到信道为空闲但是由于电磁波的传播时延的存在还是有可能会发生碰撞
记端到端的传播时延为 τ最先发送的站点最多经过 就可以知道是否发生了碰撞 **争用期** 只有经过争用期之后还没有检测到碰撞才能肯定这次发送不会发生碰撞
当发生碰撞时站点要停止发送等待一段时间再发送这个时间采用 **截断二进制指数退避算法** 来确定从离散的整数集合 {0, 1, .., (2<sup>k</sup>-1)} 中随机取出一个数记作 r然后取 r 倍的争用期作为重传等待时间
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/19d423e9-74f7-4c2b-9b97-55890e0d5193.png" width="400"/> </div><br>
## PPP 协议
互联网用户通常需要连接到某个 ISP 之后才能接入到互联网PPP 协议是用户计算机和 ISP 进行通信时所使用的数据链路层协议
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/e1ab9f28-cb15-4178-84b2-98aad87f9bc8.jpg" width="300"/> </div><br>
PPP 的帧格式
- F 字段为帧的定界符
- A C 字段暂时没有意义
- FCS 字段是使用 CRC 的检验序列
- 信息部分的长度不超过 1500
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/759013d7-61d8-4509-897a-d75af598a236.png" width="400"/> </div><br>
## MAC 地址
MAC 地址是链路层地址长度为 6 字节48 用于唯一标识网络适配器网卡
一台主机拥有多少个网络适配器就有多少个 MAC 地址例如笔记本电脑普遍存在无线网络适配器和有线网络适配器因此就有两个 MAC 地址
## 局域网
局域网是一种典型的广播信道主要特点是网络为一个单位所拥有且地理范围和站点数目均有限
主要有以太网令牌环网FDDI ATM 等局域网技术目前以太网占领着有线局域网市场
可以按照网络拓扑结构对局域网进行分类
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/807f4258-dba8-4c54-9c3c-a707c7ccffa2.jpg" width="800"/> </div><br>
## 以太网
以太网是一种星型拓扑结构局域网
早期使用集线器进行连接集线器是一种物理层设备 作用于比特而不是帧当一个比特到达接口时集线器重新生成这个比特并将其能量强度放大从而扩大网络的传输距离之后再将这个比特发送到其它所有接口如果集线器同时收到两个不同接口的帧那么就发生了碰撞
目前以太网使用交换机替代了集线器交换机是一种链路层设备它不会发生碰撞能根据 MAC 地址进行存储转发
以太网帧格式
- **类型** 标记上层使用的协议
- **数据** 长度在 46-1500 之间如果太小则需要填充
- **FCS** 帧检验序列使用的是 CRC 检验方法
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/164944d3-bbd2-4bb2-924b-e62199c51b90.png" width="500"/> </div><br>
## 交换机
交换机具有自学习能力学习的是交换表的内容交换表中存储着 MAC 地址到接口的映射
正是由于这种自学习能力因此交换机是一种即插即用设备不需要网络管理员手动配置交换表内容
下图中交换机有 4 个接口主机 A 向主机 B 发送数据帧时交换机把主机 A 到接口 1 的映射写入交换表中为了发送数据帧到 B先查交换表此时没有主机 B 的表项那么主机 A 就发送广播帧主机 C 和主机 D 会丢弃该帧主机 B 回应该帧向主机 A 发送数据包时交换机查找交换表得到主机 A 映射的接口为 1就发送数据帧到接口 1同时交换机添加主机 B 到接口 2 的映射
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/a4444545-0d68-4015-9a3d-19209dc436b3.png" width="800"/> </div><br>
## 虚拟局域网
虚拟局域网可以建立与物理位置无关的逻辑组只有在同一个虚拟局域网中的成员才会收到链路层广播信息
例如下图中 (A1, A2, A3, A4) 属于一个虚拟局域网A1 发送的广播会被 A2A3A4 收到而其它站点收不到
使用 VLAN 干线连接来建立虚拟局域网每台交换机上的一个特殊接口被设置为干线接口以互连 VLAN 交换机IEEE 定义了一种扩展的以太网帧格式 802.1Q它在标准以太网帧上加进了 4 字节首部 VLAN 标签用于表示该帧属于哪一个虚拟局域网
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/e98e9d20-206b-4533-bacf-3448d0096f38.png" width="500"/> </div><br>