├── .gitignore ├── README.md ├── 传输层.md ├── 应用层.md ├── 物理层.md ├── 网络层.md ├── 考研题目参考 ├── 计算机网络考研模拟卷1.docx ├── 计算机网络考研模拟卷2.docx ├── 计算机网络考研模拟卷3.docx ├── 计算机网络考研模拟卷4.docx ├── 计算机网络考研模拟卷5.docx ├── 计算机网络考研模拟卷6.docx ├── 计算机网络考研模拟卷7.docx └── 计算机网络考研模拟卷8.docx ├── 试题 ├── 2014-2015复旦大学《计算机网络A》.pdf └── 华南理工大学期末考试《computer network》A卷.pdf └── 链路层.md /.gitignore: -------------------------------------------------------------------------------- 1 | ref/ 2 | .DS_Store/ 3 | .*/ 4 | .DS* -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # :star: 复旦大学2021~2022学年《计算机网络》秋季学期期末复习资料 2 | 3 | - 视频自学资源 [王道计算机考研](https://www.bilibili.com/video/BV19E411D78Q?from=search&seid=15031313008683801555&spm_id_from=333.337.0.0) 4 | 5 | - 学长复习笔记 [Commits · HatsuneHan/coumputer-network-note (github.com)](https://github.com/HatsuneHan/coumputer-network-note/commits?author=Charles613) 6 | 7 | - 再来点复习题 [jiwang/test at master · aimerneige/jiwang (github.com)](https://github.com/aimerneige/jiwang/tree/master/test) 8 | 9 | -------------------------------------------------------------------------------- /传输层.md: -------------------------------------------------------------------------------- 1 | # 传输层 2 | 3 | 提供进程间的可靠通信。 4 | 5 | 复用:应用层所有的应用进程都可以通过传输层再传输到网络层。 6 | 7 | 分用:传输层从网络层收到数据后指明的应用进程。 8 | 9 | - **套接字与端口** 10 | 11 | 端口号是16bit数字,端口号只有**本地意义**。 12 | 13 | 套接字Socket = (主机ip,端口号)唯一标识了主机和其某个进程。 14 | 15 | ## UDP 16 | 17 | *UDP只在IP数据报之上增加了很少的功能,即复用分用和**差错检测**的功能*。 18 | 19 | - 主要特点 20 | 21 | 1. UDP是面向无连接的,减少开销和发送数据之前的时延。 22 | 2. UDP使用最大努力交付,即**不保证**可靠交付。 23 | 3. UDP是面向报文的,适合一次性传输少量数据的网络应用。如果UDP报文长度太大,就会导致网络层分片。 24 | 4. UDP无拥塞控制,适合很多实时应用。没有了拥塞控制,适合视频会议/直播等场景。 25 | 5. UDP的首部开销很小,只要8B,而TCP首部有20B。 26 | 27 | 28 | 29 | *分用时,找不到对应的目的端口号,就丢弃报文,并向源端发送端口不可达的ICMP报文。* 30 | 31 | - UDP 校验需要考虑虚头部 32 | 33 | ## TCP 34 | 35 | - *面向连接的的传输层协议,连接是逻辑上的。* 36 | 37 | - *每条TCP连接只能有两个端点。* 38 | - *TCP 提供可靠交付的服务,无差错、不丢失、不重复、按序到达。* 39 | - *全双工通信。* 40 | - *面向字节流。协议只会认为数据是无意义的字节串。* 41 | 42 | ### TCP 报文段格式 43 | 44 | 45 | 46 | 4字节对齐的首部,最小20字节。 47 | 48 | ### TCP 连接管理 49 | 50 | #### 三次握手 51 | 52 | 53 | 54 | 通常在第三次握手时,数据就可以发送了。 55 | 56 | #### 四次挥手 57 | 58 | TCP 连接被看成由两个方向的单工连接组成,在释放时,两个方向的连接都应该要关闭。 59 | 60 | - 信息传输完毕的一方发送一个 FIN 标志,表示没有数据要发送,当 FIN 被确认以后,那个方向的连接就被关闭; 61 | - 只有当两个方向的连接都被关闭之后,该 TCP 连接才被完全释放; 62 | - TCP 连接释放也可以看作三次握手过程:把一个FIN 和 ACK 合并,就是三次握手的过程。 63 | 64 | 65 | 66 | 主动释放的一端最后要进入 TIME-WAIT 状态 67 | 68 | - 需要维护连接状态 2*MSL (Maximum Segment Lifetime——最大报文段生存时间) 69 | - 在 C/S 模式中一般由**客户方**主动释放连接 70 | 71 | 72 | 73 | ### TCP 可靠传输 74 | 75 | *可靠:保证接收方进程从缓冲区读出的字节流与发送方发出的字节流是完全一样的。* 76 | 77 | *累计确认:只发送目前未收到的最小序列。* 78 | 79 | *捎带确认:确认和数据一起被接收方发送。* 80 | 81 | #### 重传与 TCP 计时器 82 | 83 | 确认机制和重传机制关系密切,TCP的发送方在**规定时间内**没有收到确认,就要重发已发送的报文段。 84 | 85 | TCP采用自适应的算法,动态改变重传时间RTTs。 86 | 87 | 计算超时间隔的算法: 88 | $$ 89 | Timeout ~=~ EstimatedRTT + 4~Deviation 90 | $$ 91 | 92 | $$ 93 | EstimatedRTT = \alpha EstimatedRTT + (1-\alpha)SampleRTT 94 | $$ 95 | 96 | $$ 97 | Deviation = (1-x)Deviation + x(|EstimatedRTT-SampleRTT|) 98 | $$ 99 | 100 | *注意这里 $\alpha$在公式(2)中是momentum参数, 而 $(1-x)$在公式(3) 中才是momentum参数.* 101 | 102 | ##### 冗余ACK与快速重传机制(冗余确认) 103 | 104 | 每当比期望序列更大的失序报文段到达时,就发送一个冗余ACK,指明下一个期待字节的序号。冗余确认到达一定上限,就快速重传不再等待超时。 105 | 106 | 一个例子: 107 | 108 | 109 | 110 | ### TCP 流量控制 111 | 112 | ==流量控制和拥塞控制是TCP考察的重点== 113 | 114 | 流量控制:让发送方发送得慢一点, 让接收方来得及接收. 115 | 116 | TCP利用滑动窗口实现流量控制. 在通信过程中, 接收方根据自己接收缓存的大小, 动态地调整发送方的发送窗口大小, 即接收窗口 rwnd, 发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值. 117 | 118 | **即通过动态调整发送窗口控制流量.** 119 | 120 | **一个需要解决的问题: 0接收窗口** 121 | 122 | 123 | 124 | 如图所示, 接收方0窗口后, 发送方将停止发送数据帧, 若之后接收方的接收窗口不再为0, 它又不向发送方发送任何数据了, 发送方就一直以为rwnd 为0, 进而一直不发送数据. 为了解决该问题, 只要TCP一方的收到对方的零窗口通知, 就设置一个计时器, 若计时器到期, 就发送一个数据长度为1的探测报文段. 如果依然为0, 就重新设置计时器, 如果不为0 ? 那就继续正常发送数据. 125 | 126 | ### 拥塞控制 127 | 128 | 对于拥塞的条件: 对资源需求的总和 > 可用资源 129 | 130 | 网络上有许多资源同时呈现出供应不足 $\rightarrow$ 网络性能变坏 $\rightarrow$ 网络吞吐量随输入负荷增大而下降. 131 | 132 | > 拥塞控制 v.s. 流量控制 133 | > 134 | > 和流量控制不同, 拥塞控制可以用下面第一张图描述其差异. 二者的关键在于拥塞控制解决“全局性”的问题. 135 | > 136 | > 137 | 138 | #### 慢开始算法&拥塞避免 139 | 140 | *一个传输轮次: 一个RTT的时间* 141 | 142 | 在ssthresh之前, 二指数增长拥塞窗口. 143 | 144 | 在到达ssthresh 之后, 采用加法增大策略. 145 | 146 | 出现网络拥塞, ssthresh 变为此时的一半, 拥塞窗口变为1, 开始新的慢开始过程. 147 | 148 | > 为什么叫做慢开始? 拥塞窗口的初始大小仅为1 149 | > 150 | > TCP Tahoe 版本采用该算法, 但该算法已经被弃用, TCP 的reno 版本采用快重传方案 151 | 152 | 153 | 154 | #### 快重传&快恢复 155 | 156 | 快重传 : 回忆一下冗余 ACK 机制, 当发送者发送同一个 ACK 大于或等于 3 次之后, 直接进入快恢复状态, 而不用等到检测到拥塞. 157 | 158 | 快恢复: 出现拥塞之后, 直接到新的 sshthresh 拥塞窗口大小并进入拥塞避免状态. 159 | 160 | 161 | 162 | #### 空闲后的拥塞窗口 163 | 164 | TCP 连接空闲较长一段时间之后,在重新开始传输数据时进入如同拥塞后的慢启动过程。 165 | 166 | 167 | 168 | 169 | 170 | ## 传输层总结 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | -------------------------------------------------------------------------------- /应用层.md: -------------------------------------------------------------------------------- 1 | # 第一章 概述 2 | 3 | ## 网络应用模型 4 | 5 | #### C/S 模型 (客户-服务器模型) 6 | 7 | 服务器: **提供计算服务**的设备 8 | 9 | 1. 永久提供服务 10 | 2. 永久性访问地址/域名 11 | 12 | 客户机: **请求计算服务的主机** 13 | 14 | 1. 与服务器通信, 使用服务器提供的服务 15 | 2. 间歇性接入网络 16 | 3. 可能使用动态 IP 地址cc 17 | 4. 不与其他客户机直接通信 18 | 19 | C/S 模型的常见应用: Web, 文件传输FTP, 远程登录, 电子邮件 20 | 21 | #### B/S 模型 (浏览器-服务器模型) 22 | 23 | *与C/S模型不同, B/S模型采用的范式是瘦客户机+胖服务器模型, 客户机比较简单, 没有专用的客户软件, 也比较容易维护. 一个比较好的例子是页游.* 24 | 25 | #### P2P 模型 26 | 27 | 1. 不存在永远在线的服务器 28 | 2. 每个主机既可以提供服务, 也可以请求服务 29 | 3. 任意端系统/节点之间可以直接通讯 30 | 4. 节点间歇性接入网络 31 | 5. 节点可能改变 IP 地址 32 | 6. 可拓展性更好 33 | 34 | ![img](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/%E6%88%AA%E5%B1%8F2022-01-05%20%E4%B8%8B%E5%8D%8810.49.36.png) 35 | 36 | > 在P2P 模型中, 接入节点越多, 响应的效率越高, 同时P2P模型拥有更大的健壮性. 应用: 迅雷的P2P加速服务 37 | 38 | ### 资源子网 & 通信子网 39 | 40 | 前者: 提供信息应用服务, 即**资源访问**服务. 41 | 42 | 后者: 负责计算机之间的数据通信, 即**传输**服务. 43 | 44 | ### 计算机网络的分类 45 | 46 | - 按照拓扑结构, 如不规则网型, 星型, 总线型以及环型. 47 | - 按照传输媒体, 比如光纤网 48 | - 按照地理位置, 比如局域网, 校园网, 城域网和广域网, 乃至Internet. 49 | 50 | ### 计算机网络的度量 51 | 52 | - 速率(Rate) 53 | 54 | - 别名:数据率/比特率/位率 55 | - 含义:在通信线路上传输数据的速率(**传输的基本单位是比特**) 56 | - 单位:bps(b/s) = $10^{-3}$ Kbps = $10^{-6}$Mbps = $10^{-9}$Gbps = $10^{-12}$Tbps 57 | 58 | - 带宽(Bandwidth) 59 | 60 | - 含义:网络通信线路所能传送数据的能力 61 | 62 | - 单位:bps 63 | 64 | > 频带越宽,速率就会越高。因此,宽带代表高速 65 | 66 | - 吞吐量/吞吐率(Throughput) 67 | 68 | - 含义:在**单位时间**内通过某个网络/信道/设备/端口的**数据量** 69 | - 单位:bps 或 **每秒**传送的**字节**数/**帧**数 70 | 71 | - 延迟(Delay) 72 | 73 | - **传输**延迟: 74 | 75 | - 含义:因为网络**数据传输速率**的限制而需花费的时间 76 | - 公式:$\frac{要传输的数据量}{网络数据传输速率}$ 77 | 78 | - **传播**延迟: 79 | 80 | - 含义:信号在信道中传播一定的距离需花费的时间 81 | - 公式:$\frac{信道长度}{信号传播速率}$ 82 | 83 | - 延迟 = 传输延迟 + 传播延迟 + 处理延迟 84 | 85 | > 想象水龙头流水: 86 | > 87 | > - 传播延迟:最前面的水流到桶底的时间 88 | > - 传输延迟:之后水流进桶是线性增加的。这个线性增加累计到总量的时间就是传输延迟 89 | 90 | - 延迟×带宽 91 | 92 | - 若发送端连续发送数据,则在发送的**第一个**比特即将到达终点时,发送端就**已经发送的数据量** 93 | - 也代表**线路的暂存容量** 94 | 95 | - 往返时间(RTT) 96 | 97 | - 从发送方**发送数据**,到发送方**收到**来自接收方的**确认**,**总共经历的时间** 98 | 99 | - 利用率 100 | 101 | - 信道利用率:在一段时间内信道被利用时间的百分比 102 | 103 | > 并非越高越好。一般不应超过50% 104 | 105 | 106 | 107 | ## 数据交换方式 108 | 109 | - 电路交换 110 | - 报文交换 111 | - 分组交换 112 | 113 | ### 电路交换 114 | 115 | ***基本过程:*** 116 | 117 | 1. 建立连接 118 | 2. 通信 119 | 3. 拆除连接 120 | 121 | 122 | 123 | 链路上数据具有突发性的特征。为了提高链路的通信效率,可以使用多路复用的技术如 FDM, TDM, WDM 以及 CDM。 124 | 125 | ***优点*** 126 | 127 | 1. 通信时延小 128 | 2. 有序传输 129 | 3. 没有冲突 130 | 4. 实时性比较强 131 | 132 | ***缺点*** 133 | 134 | 1. 建立连接的代价比较高 135 | 2. 线路独占,使用效率比较低 136 | 3. 灵活性比较差 137 | 4. 没有差错控制能力 138 | 139 | > 灵活性差的解释:某个交换设备出问题对电路交换的影响比较大,可能导致数条电路无法正常通信。 140 | 141 | ### 报文交换 142 | 143 | ***概述*** 144 | 145 | 146 | 147 | ***优点*** 148 | 149 | 1. 无需建立连接 150 | 2. 储存转发,动态分配线路 151 | 3. 线路可靠性比较高 152 | 4. 线路利用率比较高 153 | 5. 多目标服务 (可以传输到多个目的位置) 154 | 155 | ***缺点*** 156 | 157 | 1. 有储存转发时延 158 | 2. 报文大小不确定,需要网络设备有较大缓存空间 159 | 160 | ### 分组交换 161 | 162 | 分组:把数据块分割成小的数据块。 163 | 164 | 两种实现路径: 165 | 166 | 1. 数据包方式 167 | 2. 虚电路方式 168 | 169 | ***优点*** 170 | 171 | - 报文交换具有的所有优点 172 | - 储存管理相较于报文交换更为容易 173 | 174 | ***缺点*** 175 | 176 | 1. 储存转发时延 177 | 2. 额外信息需要传输 178 | 3. 乱序到达目的主机时,需要对分组排序重组 179 | 180 | > 计算时延:从发送方发送第一个比特到最后一个比特到达接受者的时间。 181 | > 182 | > 通常来说,分组交换在理想条件下有更优的效率。 183 | 184 | ### 不同交换方式的比较 185 | 186 | 187 | 188 | | 比较项 | 内容 | 189 | | :----------------: | :--------------: | 190 | | 链路利用率 | 电路<报文<分组 | 191 | | 头部开销 | 电路<报文<分组 | 192 | | 长连续报文——总延迟 | 电路<分组<报文 | 193 | | 短突发负载——总延迟 | 分组<报文<电路 | 194 | 195 | > 报文交换和分组交换都采取储存转发。 196 | > 197 | > 网络流量有突发性的特征, 使用分组交换总体上是最优的. 198 | 199 | ### 网络的分层 200 | 201 | #### 为什么要分层? 202 | 203 | - 分治: 将一个比较复杂的问题分解成若干个容易处理的, 相对独立的**子问题**, 其中用到的**模块化**思想在工程设计中是很好的思路. 204 | - 把一个复杂的系统分解成多个可管理、好研究、相对独立的层次. 205 | - 通过接口透明地使用下层的服务, 便于**实现和维护** 206 | - 灵活, 易于**交流、 理解和标准化** 207 | 208 | #### 层次模型的封装 * 209 | 210 | ![](https://pic.imgdb.cn/item/61d812992ab3f51d911ef36d.png) 211 | 212 | **封装**流程: 213 | 214 | - 每一层从**高层**接收数据(SDU) 215 | - 添加**头部信息**封装成新的数据单元(PDU) 216 | - 把新的数据单元通过服务接口传递给更低层 217 | 218 | **解封装**流程: 219 | 220 | - 每层可能会有多个协议,这些协议通过SAP**复用底层提供的服务** 221 | - 每一层从底层接收到数据后,剥离该层协议所添加的头部,同时根据该头部给出的**解复用关键字**将解封装后的数据单元**交给更高层**。 222 | 223 | #### OSI 七层网络模型 224 | 225 | ![](https://pic.imgdb.cn/item/61d8151e2ab3f51d9120daf1.png) 226 | 227 | **自顶向下**介绍各层基本功能: 228 | 229 | | 层次 | 主要功能 | 230 | | :--------: | :----------------------------------------------------------: | 231 | | 应用层 | 使**应用程序**能够在**不同计算机**的**网络应用服务**之间**传递信息** | 232 | | 表示层 | 处理**数据表示形式**或**代码的变换** | 233 | | 会话层 | 建立、管理、维持、协调会话 | 234 | | 运输层 | 负责**数据正确有效**地从一端运输到另一端(端到端服务) | 235 | | 网络层 | 决定通信子网中或通信子网间**分组传递**的路径(网际互连) | 236 | | 数据链路层 | 数据**检错与纠错**以及数据**链路的维护**(数据块传输) | 237 | | 物理层 | 在物理媒体上传输原始的数据比特流信号 | 238 | 239 | #### Internet 四层模型 240 | 241 | 242 | 243 | #### 网络标准化组织 244 | 245 | 太多了, 知道了也没什么用, 不会考. 246 | 247 | 248 | 249 | # 应用层 250 | 251 | ## 应用层概述 252 | 253 | *应用层对应用程序的通信提供服务.* 254 | 255 | **应用层协议应当定义?** 256 | 257 | - 应用进程交换的报文类型, 请求还是响应 ? 258 | 259 | - 各种报文类型的语法, 如报文中各个字段及其详细描述. 260 | - 字段的含义, 即包含在字段中信息的含义. 261 | - 进程何时、如何发送报文, 以及对报文进行响应的规则. 262 | 263 | **应用层的功能?** 264 | 265 | - 文件传输、访问和管理 266 | - 电子邮件 267 | - 虚拟终端 268 | - 查询服务和远程作业登录 269 | 270 | ## DNS 协议 271 | 272 | 人们不会记忆 IP 地址, 因此需要域名系统方便人们访问网站. 273 | 274 | DNS 协议提供域名 $\rightarrow$ IP 的映射查询机制 (域名解析服务) 275 | 276 | **域名** 277 | 278 | 域名分级, 比如 www.fudan.edu.cn 从右向左依次重要度下降, cn 是一级域名, www 是四级域名. 279 | 280 | **域名服务器** 281 | 282 | - 跟域名服务器 283 | - 顶级域名服务器 284 | - 权限域名服务器 285 | - 本地域名服务器 286 | 287 | 当一个主机发出 DNS 查询请求, 这个查询请求报文就发送给本地域名服务器. 288 | 289 | ***分层次域名服务器*** 290 | 291 | 292 | 293 | ### 域名解析过程 294 | 295 | #### 递归查询 296 | 297 | 如果本地域名服务器没有相应内容, 本地域名服务器就查询根域名服务器; 298 | 299 | 如果根域名服务器没有缓存, 就查询顶级域名服务器; 300 | 301 | 递归地, 如果顶级域名服务器没有缓存, 就查询权限域名服务器 302 | 303 | 304 | 305 | #### 迭代查询 306 | 307 | 查询一直由一台主机/服务器发起. 308 | 309 | 310 | 311 | - 服务器维护高速缓存 312 | - 不光服务器维护高速缓存, 主机本身也会维护解析缓存 313 | 314 | ## FTP 协议 315 | 316 | - 登录 FTP 地址 1) 用户名 + 密码 2) *匿名登录* 317 | 318 | - 使用 **TCP 协议 ** 实现可靠传输 319 | 320 | FTP 服务器维护多个服务器进程, 包括一个主进程和 n 个从属进程. 321 | 322 | 323 | 324 | 控制连接相当于传送文件之前的准备流程, 传输指令, 在会话过程中始终保持 325 | 326 | 正式传输数据之前会初始化一个数据连接, 文件传输完就可以关闭 327 | 328 | **主动传输** 329 | 330 | 采用 TCP 20 端口 331 | 332 | **被动传输** 333 | 334 | 被动方式由服务器和客户端自行协商决定 (端口号 > 1024) 335 | 336 | ## 电子邮件 337 | 338 | *电子邮件系统* 339 | 340 | 341 | 342 | - 发送客户通过用户代理发送邮件 343 | - 邮件缓存在发送方邮件服务器 344 | - 发送方邮件服务器把邮件缓存发送到接收方邮件服务器 345 | - 接收方通过用户代理读取邮件 346 | 347 | > 客户代理就是指客户所用的软件 348 | 349 | ### SMTP 协议 350 | 351 | SMTP 规定了在两个相互通信的 SMTP 进程之间应如何交换信息. 352 | 353 | 负责发送邮件的 SMTP 进程就是 SMTP 客户, 负责接收邮件的进程就是 SMTP 服务器. 354 | 355 | SMTP 规定了 14 条命令和 21 种应答信息 (三位数字代码+简单文字说明) 356 | 357 | 358 | 359 | **大致过程** 360 | 361 | 1. 连接建立 362 | 363 | 364 | 365 | 2. 邮件发送 366 | 367 | 368 | 369 | 3. 邮件释放阶段 370 | 371 | 372 | 373 | **缺点** 374 | 375 | 只支持 ASCII 码. 376 | 377 | **解决方法** 378 | 379 | MIME 通用因特网邮件扩充, 将非ASCII码数据转换成 ASCII 码文件, 代价是更低的编码效率. 380 | 381 | 382 | 383 | ### POP3 协议 384 | 385 | 在 POP3 协议中, 服务端是接收端邮件服务器, 客户端是客户代理. 386 | 387 | 388 | 389 | ## 万维网 & HTTPS 390 | 391 | 万维网是一个大规模的、联机式的信息储藏所/资料空间, 是一个无数个网络站点和网页的集合. 392 | 393 | **URL** 统一资源定位符, 用于唯一标识网络资源. 394 | 395 | 用户通过点击超链接 比如 [https://www.google.com](https://www.google.com) 获取网络资源, 这些资源通过 HTTP 或者 HTTPS 协议传送给使用者. 396 | 397 | 万维网以**客户/服务器**方式工作, 用户使用的浏览器就是万维网客户程序, 万维网文档所驻留的主机运行服务器程序. 398 | 399 | 万维网使用**超文本标记语言 (HTML)**, 使得万维网页面设计者可以很方便地从一个界面的链接转到另一个界面, 并能在自己的屏幕上显示出来. 400 | 401 | ### HTTP 协议 402 | 403 | HTTP 定义了浏览器 (或者其他万维网客户进程) 怎么样向万维网服务器请求万维网文档, 以及服务器怎么样把文档传送给浏览器. 404 | 405 | 406 | 407 | 具体而言: 408 | 409 | 1. 浏览器解析URL 410 | 2. 浏览器向 DNS 请求解析 IP 地址 411 | 3. DNS 解析出 IP 地址 412 | 4. 浏览器与服务器建立 TCP 连接 413 | 5. 浏览器发送取文件命令 414 | 6. 服务器响应 415 | 7. 释放 TCP 连接 416 | 8. 浏览器显示 417 | 418 | #### HTTP 特点 419 | 420 | - HTTP 协议是无状态的, 但在实际工作中, 一些万维网站点常常希望能够识别用户. 方案就是 cookie, 它方便站点识别用户. 421 | - HTTP 协议采用 TCP 连接作为运输协议, 但 HTTP 协议本身是无连接的. 422 | 423 | ##### 非持久连接 424 | 425 | HTTP 报文和 TCP 确认可以一起发送, 每次资源请求需要**两个**RTT 426 | 427 | 428 | 429 | ##### 持久连接 430 | 431 | ###### 非流水线 432 | 433 | 除了第一个请求需要2*RTT时间, 后面的报文请求都只需要1个RTT时间. 434 | 435 | 436 | 437 | ###### 流水线 438 | 439 | 类似于SR与停等协议之间的区别, 第二个RTT开始可以并行式地发送请求, 因此所有请求用2*RTT 就够了. 440 | 441 | #### HTTP 报文结构 442 | 443 | HTTP 报文包括请求报文、响应报文. 444 | 445 | HTTP 报文**面向文本**, 因此在报文中的每一个字段都是一些 ASCII 码串. 446 | 447 | 448 | 449 | 某浏览器发送的请求报文 450 | 451 | 452 | 453 | **状态码的分类(5🀄️), 实际上有31种状态码** 454 | 455 | 1. 1xx表示通知, 如请求收到或正在处理 456 | 2. 2xx表示成功 457 | 3. 3xx表示重定向 458 | 4. 4xx表示客户差错, 比如请求中有语法错误 459 | 5. 5xx表示服务器差错, 如服务器失效无法完成请求 460 | 461 | -------------------------------------------------------------------------------- /物理层.md: -------------------------------------------------------------------------------- 1 | # 物理层 2 | 3 | ## 概述 4 | 5 | 物理层解决如何在连接各种计算机的传输媒体上传递数据比特流,而不是指具体的传输媒体。 6 | 7 | 物理层的主要任务:确定与传输媒体接口有关的一些特性。**定义标准** 8 | 9 | ### 经典数据传输模型 10 | 11 | 计算机处理的是二进制数字信号,但是实际上在网络中传输的是模拟信号。 12 | 13 | > 数字信号与模拟信号的区别:前者表现为离散的信号比如01串,而后者表现为连续的波形,比如无线电波。 14 | 15 | 16 | 17 | ### 数据传输形式 18 | 19 | #### 并行 20 | 21 | 速度快,费用高,适合短距离传输。 22 | 23 | 比如VGA接口(视频传输)。 24 | 25 | 26 | 27 | #### 串行 28 | 29 | 速度慢,费用低,适合长距离传输。 30 | 31 | 比如信号在光纤中的传播。 32 | 33 | 34 | 35 | ## 物理层基本概念 36 | 37 | ### 码元 38 | 39 | 40 | 41 | ### 速率 42 | 43 | 速率也叫数据率,也指数据的传输速率,表示单位时间内的传输数据量。 44 | 45 | 1)码元的传输速率,用单位时间内传输的码元个数衡量,单位是**波特(Baud)**。这里的码元可以是二进制也可以是多进制,码元传输速率与进制无关。 46 | 47 | 2)信息的传输速率:别名信息速率、比特率,表示单位时间内数字通信系统传输的二进制码元个数(即比特数),单位是比特/秒 (b/s)。 48 | 49 | 二者关系: 若一个码元有 $k$ 个离散状态,且波特率是 $M$,则信息传输速率是 $M~log_2k$。 50 | 51 | 带宽就是指网络某点到另一点的“最高通信速率”,单位是 bps。 52 | 53 | 54 | 55 | ## 奈氏准则和香农定理 56 | 57 | ### 奈奎斯特定理 58 | 59 | #### 码间串扰 60 | 61 | 一种失真的现象。接收端收到的信号波形失去了码元间清晰界限的现象。 62 | 63 | 影响信号失真的因素: 64 | 65 | 1. 码元传输速率 66 | 2. 信号传输距离 67 | 3. 噪声干扰 68 | 4. 传输媒体质量 69 | 70 | 71 | 72 | 并不是所有频率都能通过电话线,频率过低没有办法通过电话线,频率过高导致没有办法识别清晰的波形(即**码间串扰**),码元之间的距离过短。 73 | 74 | **奈氏准则:** 在理想低通条件下,为了避免码间串扰,极限码元传输速率为 $2W~Baud$,$W$ 代表信道带宽,单位是 $Hz$ 。极限数据率是 $2Wlog_2V~bps$。 75 | 76 | > 低通条件:无噪声,带宽受限。 77 | > 78 | > 只有在奈氏准则和香农定理中,带宽的单位才用赫兹。一般而言的带宽单位都是bps。 79 | > 80 | > 信道带宽(单位:赫兹) 的标准计算方法:能够通过信道的最高频率 - 能够通过信道的最低频率,在这里的例子中,带宽为 3300 - 300 = 3000 Hz。 81 | 82 | - 在任何信道中,码元的传输速率都有所上限。若传输速率超过此上限,就会出现严重的码间串扰问题,使得接收端对码元的识别成为完全不可能。 83 | - 信道的频带越宽(即能通过的信号高频)分量,就越可以更快地码元传输。 84 | - 奈氏准则则给出了码元传输速率的限制,但没有对信息传输速率给出限制。 85 | 86 | > 香农定理补充了这方面。 87 | 88 | - 由于码元的传输速率,所以要提高数据的传输速率,就应当设法让每个码元携带更多比特的信息量,这里就需要采用多元调制的方法,教材里介绍了[星座图](https://zh.wikipedia.org/wiki/星座图_(数字通信))**【考点】**。 89 | 90 | ### 香农定理 91 | 92 | **噪声**存在于所有电子设备和通信信道中。 93 | 94 | 由于噪声随机产生,它的瞬时值有时会很大,因此噪声会使接收端对码元的判决产生错误。但噪声对信息传输的影响是相对的,如果信道传输的功率足够大,噪声的存在也不会影响正常传输。因此,信噪比很重要。 95 | $$ 96 | 信噪比 (dB)~=~10log_{10}(S/N) 97 | $$ 98 | **香农定理**:在带宽受限且有噪声的信道中,为了不产生误差,信息的数据传输速率有上限值。 99 | 100 | 信道的极限数据传输速率: 101 | $$ 102 | Wlog_2(1+S/N) 103 | $$ 104 | 105 | 106 | - 奈氏准则:解决内忧(码间串扰问题)。 107 | - 香农定理:解决外患(噪声干扰)。 108 | - 通常极限信息传输速率取二者计算出的下限。 109 | 110 | > 如果给了信噪比/分贝形式信噪比,就需要计算香农极限 111 | > 112 | > 如果给了码元离散状态数,需要计算奈氏极限 113 | > 114 | > 如果二者都给,取下限。 115 | 116 | ## 调制与编码 117 | 118 | **信道:** 信道的传输媒介. 一般用来表示向某一个方向传送信息的介质, 因此一条通信线路往往包含一条发送信道和一条接收信道. 119 | 120 | **信道上传输的信号:** 121 | 122 | - 基带信号 **直接表达了要传输的信息, 比如计算机的二进制信息或者人说话的声波** 123 | - 宽带信号 将基带信号进行调制之后形成的频分复用模拟信号, 再传送到模拟信道上去传输. 把基带信号经过载波调制之后, 把信号的频率范围搬移到较高的频段以便再信道中传输. 124 | 125 | **编码与调制** 126 | 127 | 128 | 129 | 130 | 131 | ### 常见编码归纳 132 | 133 | #### (1) 非归零编码 NRZ 134 | 135 | 高1低0, 编码容易实现. 136 | 137 | **缺点** 138 | 139 | 1. 没有检错机制 140 | 2. 缺乏同步机制 141 | 142 | #### (2)曼彻斯特编码 143 | 144 | 在一个时槽中, 信号变化两次 145 | 146 | 高 $\rightarrow$ 低 : 1 147 | 148 | 低 $\rightarrow$ 高 : 0 149 | 150 | #### (3)差分曼彻斯特编码 151 | 152 | 如果为1, 就和前面码元不同 153 | 154 | 如果为0, 就和前面码元相同 155 | 156 | #### (4)归零编码 RZ 157 | 158 | 一个码元内需要电平归零 159 | 160 | 对于1码元, 就是高$\rightarrow$低编码, 对于0码元, 就是一直低电平 161 | 162 | #### (5)反向不归零 NRZI 163 | 164 | 信号翻转表示0, 如果电平不变就表示1. 165 | 166 | #### (6) MLT-3 167 | 168 | 为1, 就和前面电平不同, 低 $\rightarrow$ 高 或者 高 $\rightarrow$ 低. 至于为负还是为正, 取决之前出过的最晚非0电平. 169 | 170 | 171 | 172 | ## 物理层设备 173 | 174 | ### 中继器 175 | 176 | #### 作用 177 | 178 | 对信号再生与还原,对衰减的信号进行放大,保持与原数据相同。 179 | 180 | #### 5-4-3规则 181 | 182 | - 5个网段 183 | 184 | - 4个集线器/转发器 185 | 186 | - 3个段才可以连接工作站 187 | 188 | ### 集线器 189 | 190 | #### 功能 191 | 192 | 对信号转发放大,对衰减的信号放大,接着转发到所有接收端口以外的工作中端口,以增加信号传输的距离,延长网络长度。 193 | 194 | 195 | 196 | 197 | 198 | -------------------------------------------------------------------------------- /网络层.md: -------------------------------------------------------------------------------- 1 | [toc] 2 | 3 | # 网络层 4 | 5 | ## 概述 6 | 7 | 主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报。 8 | 9 | ### 功能 10 | 11 | - 路由选择 (为网络包找路) 12 | - 异构网络互联 13 | - 拥塞控制 14 | 15 | > 拥塞控制与流量控制的区别: 16 | > 17 | > 前者是全局性问题,有两种方式1)开环控制/静态方法 2)闭环控制; 18 | > 19 | > 后者通过调节发送方速度解决。 20 | 21 | #### 数据报 22 | 23 | ##### 几种传输单元名词辨析 24 | 25 | 网络层可能将报文段分组以满足链路层 MTU 限制。 26 | 27 | 28 | 29 | **无连接服务** 不事先为分组的传输确定传输路径,每个分组独立确定传输路径,不同分组传输路径可能不同。 30 | 31 | #### 虚电路 32 | 33 | 虚电路方式将数据报和电路交换方式结合,以发挥二者优点。 34 | 35 | 虚电路:一条源主机到目的主机类似于电路的路径(逻辑连接),路径上所有节点都要维持这条虚电路的建立,维持一张虚电路表,每一项记录了一个打开的虚电路的信息。 36 | 37 | 38 | 39 | > 本书描述的虚电路服务略有不同:虚电路号是局部性的而非全局性的,用来唯一地标识某条链路。 40 | 41 | ## VLAN 虚拟局域网 42 | 43 | **三种划分 VLAN 的方法** 44 | 45 | - 基于端口: 46 | - 如果节点移动位置,需要重新配置交换机相应端口的VLAN设置。 47 | - 连接到交换机的一个端口上所有节点都必须属于同一个 VLAN 中。 48 | - 基于 MAC 地址: 49 | - 交换机维护了一个MAC地址和对应 VLAN 的表。 50 | - 表的维护是一项繁琐的工作。 51 | - 节点的移动无需进行重新配置。 52 | - 基于协议: 53 | - 根据第三层的协议和第三层地址来判断属于哪一个VLAN。 54 | - 要求交换机支持第三层的交换。 55 | - 很灵活但是容易被欺骗。 56 | 57 | **VLAN帧 v.s. 传统以太网帧** 58 | 59 | 帧的字段格式不同 60 | 61 | 62 | 63 | 64 | 65 | ## IP 数据报 66 | 67 | ### IP 数据报格式 68 | 69 | 70 | 71 | 协议字段举例: 72 | 73 | - TCP : 6 74 | - UDP : 17 75 | 76 | #### IP 数据报的分片 77 | 78 | > 链路上帧的数据部分有一定限制,比如在以太网下的限制是 1500 字节,这个大小被称作 MTU。 79 | 80 | IP分组的标识字段就是为了标识同一数据报的各个分片。 81 | 82 | - 标志(三位)只有末两位有意义。 83 | 84 | **中间位 DF (Don't Fragment)** 85 | 86 | DF = 1,禁止分片 87 | 88 | DF = 0,允许分片 89 | 90 | **最低位 MF(More Fragment)** 91 | 92 | MF = 1,后面还有分片 93 | 94 | MF = 0,代表最后分片 95 | 96 | - 片偏移量的单位是**8字节** (作业题踩坑) 97 | 98 | 99 | 100 | #### IP 头部三个长度的总结 101 | 102 | 总长度字段:1 Byte 103 | 104 | 片偏移:8 Byte 105 | 106 | 首部长度:4 Byte 107 | 108 | ### NAT协议 109 | 110 | 网络地址转换(Network Address Translation) 111 | 112 | 在**专用网**连接到**因特网**的路由器上安装NAT软件,安装了NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。 113 | 114 | 115 | 116 | > 如同路由表之于路由器。 117 | > 118 | > NAT的关键部分是一个由NAT路由器维护的转换表。 119 | 120 | ### CIDR 无分类编址 121 | 122 | 提出变长的子网长度。 123 | 124 | #### CIDR 地址块 125 | 126 | 消除了传统A,B,C 类地址的划分。 127 | 128 | 129 | 130 | *CIDR记法:IP地址后加上 / ,然后写上网络前缀位数。* 131 | 132 | 一个例子:$192.199.170.82/27$ 133 | 134 | #### 构成超网 135 | 136 | 一种路由聚合的算法。把几个小的子网聚合成一个较大的子网。 137 | 138 | 本质上是合并前缀域。 139 | 140 | 141 | 142 | *在以上的例子中,R2的两个相邻子网具有共同前缀 $206.1.0.0/16$,因此在路由表中可以合并网络一和网络二对应的表项。* 143 | 144 | > 使用CIDR可能导致查找路由表可能得到好几个匹配结果,这时采用的策略是默认最长匹配。前缀越长,地址块越小,路由越具体。 145 | > 146 | > 为了提高匹配效率,一般使用的底层数据结构是Trie树,查询的复杂度是O(1) (考虑到查询串是定长的32位)。 147 | 148 | 计算每个子网的最大可分配地址个数:$2^b-2$ 149 | 150 | 需要排除掉子网号全0和全1的地址。 151 | 152 | ### ARP 协议 153 | 154 | 在链路层传输时需要 MAC地址,对 IP 分组封装成链路帧。 155 | 156 | 一般而言,MAC地址使用 ARP高速缓存 IP 到 MAC 地址的映射,如果没有储存相应的映射,就采用ARP协议广播查询。 157 | 158 | 159 | 160 | **广播 ARP 请求分组/响应分组** 161 | 162 | 163 | 164 | - 由于在实际网络的链路上传输数据帧时,最终必须使用 MAC 地址。 165 | - ARP协议:完成主机或者路由器IP地址到MAC地址的映射。解决下一跳走哪的问题。被认为是网络层的协议。 166 | 167 | ARP协议的4种典型情况: 168 | 169 | 1. 主机A发送给本网络上的主机B 170 | 2. 主机A发给另外一个网络上的主机B 171 | 3. 路由器发给本网络的主机A 172 | 4. 路由器发送给另一个网络的主机A 173 | 174 | ### DHCP 协议 175 | 176 | 动态主机配置协议 DHCP 是应用层协议,使用客户/服务器方式,客户端与服务端通过广播方式进行交互,基于 **UDP** 传输。 177 | 178 | DHCP 采用即插即联网的机制,主机可以从服务器动态获取 IP 地址、子网掩码、默认网关、DNS 服务器名称与 IP地址。 179 | 180 | #### 基本工作流程 181 | 182 | 1. 主机广播 DHCP 发现报文 183 | 2. DHCP 服务器广播 DHCP 提供报文 (本质上是一个预分配的过程) 184 | 3. 主机广播 DHCP 请求报文 185 | 186 | 4. DHCP 服务器广播 DHCP 确认报文 187 | 188 | ### ICMP 协议 189 | 190 | 支持差错(或异常)报告。 191 | 192 | 193 | 194 | **ICMP 差错报文/ICMP查询报文** 195 | 196 | 1. 终点不可达 197 | 2. 源点抑制,当路由器或者主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据发送速率放慢。 198 | 3. TTL = 0 199 | 4. 参数问题 200 | 5. 改变路由(重定向) 201 | 202 | **不发送ICMP差错报文** 203 | 204 | 1. 对于ICMP报文本身不再递归地发送差错报告报文 205 | 2. 对于第一个分片之后的数据报片都不发送 ICMP 差错报告报文 206 | 3. 对于具有组播地址的数据报都不发送 ICMP 差错报文 207 | 4. 对于特殊地址如 localhost 的数据报不发送 ICMP 差错报告报文 208 | 209 | #### ICMP 应用 210 | 211 | ##### Ping 212 | 213 | 测试两个主机之间的连通性,使用ICMP 回送请求和回答报文。 214 | 215 | ##### Traceroute 216 | 217 | 跟踪一个分组从源点到终点的路径,使用了ICMP时间超过差错报告报文。 218 | 219 | ### IPv6 与 IPv4 之间的区别 220 | 221 | 1. 32bit -> 128bit 222 | 2. **移除了校验和字段**,优化了每跳的处理时间 223 | 3. **移除了可选字段**,变成拓展首部,灵活,由于路由器通常不检查而提高了路由器的处理效率。 224 | 4. 支持即插即用,不需要DHCP协议 225 | 5. 首部长度必须是8B的整数倍 226 | 6. 只能在主机处分片 227 | 7. ICMPv6:附加报文类型“分组过大” 228 | 8. 支持资源预分配 229 | 9. 取消了协议字段,改成了下一步首部字段 230 | 10. 取消了总长度字段,该用有效载荷长度字段 231 | 11. 取消了服务类型字段 232 | 233 | #### IPv6 基本地址类型 234 | 235 | - 单播 236 | - 多播 237 | - 任播 238 | 239 | #### IP隧道 240 | 241 | - 在采用IP协议的网络上任意两个节点之间建立一个虚拟链路。 242 | - 隧道可由管理人员手工配置,也可以通过一个隧道建立协议自动建立。 243 | 244 | 245 | 246 | *本质上就是在中间传输的一段再加上了一层封装,隧道对分组的传输并没有加速的效果。* 247 | 248 | 249 | 250 | #### IPv6 向 IPv4 过渡的策略 251 | 252 | ##### 双栈协议 253 | 254 | 双协议栈技术就是在一台设备上同时启用IPv4 和 IPv6 协议栈,以同时能够与 IPv4网络以及 IPv6 网络通信。如果这台设备是一个路由器,那么这台路由器的不同接口上,分配配置 IPv4 和 IPv6 地址,并很有可能分别连接了 IPv4 网络和 IPv6 网络。 255 | 256 | 如果设备是一台计算机,那么它同时拥有IPv4 地址和 IPv6 地址,并具备同时处理这两个协议地址的功能。 257 | 258 | ##### 隧道技术 259 | 260 | 隧道协议将其他协议的数据帧或包重新封装之后然后通过隧道。以实现在不同网络基础设施间通信。 261 | 262 | > 从下面的例子可以看出,IPv6的包通过IPv4网络时会被重新封装成IPv4分组,从IPv4 到 IPv6 协议栈是前向兼容的。 263 | 264 | 265 | 266 | #### 总结 267 | 268 | 269 | 270 | > 补充:IP分组的路由(转发)过程 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | ## 路由算法与路由协议 279 | 280 | - 静态路由算法 281 | - 动态路由算法 282 | 283 | > 静态路由由管理员配置,简便、可靠,在负荷稳定、拓扑变化不大的网络中运行效果很好,广泛用于小型商业网络和高度安全性的军用网络。 284 | > 285 | > 路由更新更慢,不适用于大型网络。 286 | 287 | 288 | 289 | 290 | 291 | ### 因特网的分层次路由选择协议 292 | 293 | **自治系统 AS**:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定该 AS 内的路由,同时还使用一种 AS 之间的路由协议以确定 AS 之间的路由。 294 | 295 | 一个AS 内的所有网络都属于一个行政单位管辖,一个自治系统的所有路由器在本自治系统内部都必须联通。 296 | 297 | ### RIP协议和距离向量算法 298 | 299 | RIP 是一种分布式的基于距离向量的路由选择协议,是因特网的协议标准,最大优点是简单。 300 | 301 | RIP 协议要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录。 302 | 303 | **算法流程** 304 | 305 | 1. 仅和相邻路由器交换信息。 306 | 2. 路由器交换的信息是自己的路由表。 307 | 3. 每30秒交换一次路由信息,然后路由器根据新信息更新路由表。若超过180s 没收到邻居路由器的通告,则判定与邻居的连接断开,并更新路由表。 308 | 309 | *路由器刚开始工作时,只知道直接连接的网络的距离(即1),接着每一个路由器也只和数目很有限的相邻路由器交换并更新路由信息。* 310 | 311 | *经过若干次更新之后,所有路由器最终都会知道到达本自治系统任何一个网络的最短距离和下一条路由器的地址,即“收敛”*。 312 | 313 | **具体的路由器更新流程** 314 | 315 | 316 | 317 | 1. 对地址为 X 的相邻路由器发来的 RIP 报文,修改此报文中的所有项目:把下一跳字段中的地址改为 X,并把所有的距离字段+1。 318 | 2. 对于修改后的 RIP 报文中每一个表项,进行以下操作: 319 | 1. R1 路由表中若没有 Net3,则把该项目填入 R1 路由表 320 | 2. R1 路由表中若有 Net3,则查看下一跳路由器地址: 321 | - 若下一跳是 X,则直接更新 322 | - 否则,只有当原来距离更长才选取该表项并更新。 323 | 324 | #### RIP 报文 325 | 326 | 需要记忆:RIP 是应用层协议,使用传输层的 UDP 协议。 327 | 328 | 329 | 330 | #### RIP 协议问题 331 | 332 | RIP 特点:当网络出现故障时,要经过比较长的时间才能将此消息传送给所有的路由器,“慢收敛”/书上称作**无限计数**问题。 333 | 334 | 335 | 336 | **水平分割** 这是一种尝试抑制无限计数的方法:如果 A 从 B 学习到距离向量,那么 A 发给 B 的路由表将会过滤掉相关的表项。 337 | 338 | **反向抑制的水平分割** 如果A 从 B 学习到了距离向量,那么 A 给 B 的路由表对应表项不是被过滤,而是设置成无穷大,表示目的网络不可达。 339 | 340 | 341 | 342 | 343 | 344 | ### OSPF协议与链路状态算法 345 | 346 | **可靠扩散** 347 | 348 | *为什么要可靠扩散?* 349 | 350 | 顺序号可能重复使用,并且路由器可能崩溃 351 | 352 | *方法* 353 | 354 | - 扩散LSP时要求ACK 355 | - 收到LSP之后不立即扩散,而是等待一段时间,丢弃这段时间内的重复和过时LSP,减少网络负担。 356 | 357 | *更”新“的LSP* 358 | 359 | 由于顺序号可能复用,因此不能通过直接比较顺序号大小的方式确定。 360 | 361 | 可以画一个顺序号的圆,对于顺序号$A$, 如果另一个顺序号 $B$ 在圆圈的顺时针半圆范围内,就可以认为$B$ 更**“新”**。 362 | 363 | **交换方式** 364 | 365 | 使用洪泛法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻路由器发送消息,而每一个相邻路由器又再次将此信息发往其所有相邻路由器(广播)。 366 | 367 | **交换内容** 368 | 369 | 发送的信息就是本路由器相邻的所有路由器的链路状态,包括时延带宽等信息。 370 | 371 | **多久交换** 372 | 373 | 只有监测到链路状态变化时,AS 内部才发生一次泛洪交换。最后,一个路由器都能获知整个 AS 的全局路由状态/全局拓扑。 374 | 375 | **算法的大致工作流程** 376 | 377 | 1. 通过 HELLO 问候分组,了解邻居节点的网络地址 378 | 2. 设置到它的每个邻居的成本度量 **metric** 379 | 3. 构造 DD 数据库描述分组,并向邻站发送自己的链路状态数据库中的所有链路状态项目中的摘要信息。如果DD 分组中的摘要自己都有,则邻站不做处理;如果有缺失的或者有更新的,则发送 **LSR(链路状态请求分组)** 。 380 | 4. 收到邻站的 LSR 之后,发送 **LSU(链路状态更新分组)**进行更新。 381 | 5. 更新完毕之后,邻站返回一个 **LSAck(链路状态确认分组)** 表示确认收到。 382 | 383 | > 只要有一个邻居路由器的状态变化,就会导致泛洪更新。 384 | > 385 | > 更新完毕之后,使用 Dijikstra 算法构造自己到其他节点的最短路径。 386 | 387 | #### OSPF 区域 388 | 389 | 为了使 OSPF 适用更大的网络,每个 AS 分成若干区域,每一个区域都有一个 32 位的区域标识符。区域也不能太大,在一个区域的路由器原则上不超过200个路由器。 390 | 391 | 392 | 393 | #### OSPF LSA类型 394 | 395 | - 第一类LSA 396 | 397 | 路由器LSA,描述OSPF 区域内路由器旁边的路由情况。 398 | 399 | | 目的地 | 花费 | 400 | | ------ | ---- | 401 | | N2 | 3 | 402 | | N3 | 1 | 403 | 404 | - 第二类LSA 405 | 406 | 网络LSA,描述区域内子网 (包括中心的广播网络,不过广播网络到各个邻居路由器的花费为0,邻居路由器到广播网络的花费一般不为0)的链路状态。 407 | 408 | | 目的地 | 花费 | 409 | | ------ | ---- | 410 | | R2 | - | 411 | | R3 | - | 412 | 413 | - 第三类LSA 414 | 415 | 汇集LSA,区域边界路由器承担汇集本区域内LSA的重任,并将其发送至主干区域。 416 | 417 | | 目的地 | 花费 | 418 | | ------ | ---- | 419 | | N1 | 4 | 420 | | N2 | 4 | 421 | | N3 | 1 | 422 | | N4 | 2 | 423 | 424 | #### OSPF 分组 425 | 426 | 可以认为是传输层的报文段,采用 IP 协议传输。 427 | 428 | 429 | 430 | #### 评 OSPF 431 | 432 | - 每隔30min,要刷新一次数据库中的链路状态。 433 | - 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此网络规模很大时,OSPF表现比距离向量路由RIP好得多。 目前中国骨干网 [chinanet](https://www.ctamericas.com/products-services/internet/chinanet-access/) 采用的 IS-IS 协议和 OSPF 相似。 434 | - OSPF 并不存在坏消息传得慢的问题,它的收敛速度很快。 435 | 436 | 437 | 438 | ### 外部网关协议 BGP 439 | 440 | BGP 协议交换信息的过程。 441 | 442 | BGP 所交换的网络可达性信息就是要到达某个网络所要经过的一系列 AS。当 BGP 发言人相互交换了网络可达性信息之后,各 BGP 发言人就根据所采取的策略从收到的路由信息中找到各 AS 的较好路由。 443 | 444 | BGP 发言人交换路径向量的过程: 445 | 446 | 447 | 448 | #### BGP 协议报文格式 449 | 450 | 一个 BGP 发言人与其他自治系统的 BGP 发言人要交换路由信息,就要先建立 **TCP** 连接,在此基础上交换 BGP 报文以建立 BGP 会话,利用 BGP 会话交换路由信息。 451 | 452 | 453 | 454 | ##### BGP-4 的四种报文 455 | 456 | 1. OPEN 报文 457 | 2. UPDATE 报文 458 | 3. KEEPALIVE 报文 459 | 4. NOTIFICATION 报文 460 | 461 | ### 三种路由算法的比较 462 | 463 | 464 | 465 | 466 | 467 | ## IP 组播/多播 468 | 469 | - 单播 470 | - 广播 471 | - 组播/多播 472 | 473 | 组播提高了数据的传输效率,发送方只需要发送一个副本,减少了主干网出现拥塞的可能性。 474 | 475 | IP组播地址让源设备可以将分组发送给一组设备。属于多播组的设备将被分配一个组播组IP地址(一群共同需求主机的相同标识),这个标识就是D类地址 (224.0.0.0~239.255.255.255)。 476 | 477 | > D类地址只能用做分组的目的地址。**源地址总是为单播地址。** 478 | 479 | ### 组播路由选择协议 480 | 481 | 以源为根节点的**树状路由**,实现了高效且简单的路由分发。 482 | 483 | 484 | 485 | 组播路由选择协议常使用的三种算法 486 | 487 | - 基于链路状态的路由选择 488 | - 基于距离-向量的路由选择 489 | - 协议无关的组播(稀疏/密集) 490 | 491 | ### 硬件组播地址 492 | 493 | 组播MAC地址以16进制值01-00-5e开头,余下的6个十六进制位通过IP组播组地址的最后23位转发得到。 494 | 495 | TCP/IP 协议使用的以太网多播地址的范围是: 496 | 497 | 01-00-5e-00-00-00 到 01-00-5e-7f-ff-ff 498 | 499 | ![img](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/%E6%88%AA%E5%B1%8F2022-01-04%20%E4%B8%8B%E5%8D%888.47.01.png) 500 | 501 | *收到多播数据报的主机把不是本主机要接受的数据报丢弃。* 502 | 503 | ### IGMP 协议 504 | 505 | 让局域网的组播路由器知道子网是否还有可以接受组播数据报的主机。 506 | 507 | 更详细地,IGMP协议让路由器知道本局域网上是否有主机(的进程)*参加或退出*了某个组播组。 508 | 509 | IGMP使用IP协议栈传输报文。 510 | 511 | 1. 某主机要加入组播组时,该主机向组播组的组播地址发送一个 IGMP 报文,声明自己要称为该组的成员。本地组播组路由器收到 IGMP 报文后,要利用组播路由选择协议把这组成员关系发送给因特网上的其他组播路由器。 512 | 2. 本地组播路由器周期性地探询局域网上的主机,以便知道这些主机是否还是组播组的成员。只要有一个主机对某个组相应,那么组播路由器就认为这个组是活跃的;如果经过几次探询之后没有一个主机响应,组播路由器就认为本网络没有此组播组的主机,因此就不再把这组的成员关系发送给其他组播路由器。**(软状态)** 513 | 3. **(反馈抑制)** 组播路由器周期性地探询,只需要有一个主机回应了,其他主机都不用再回应。主机随机选择 $[0, MaxResp.Time]$ 时间等待再发送Report,如果这段时间内听到有来自其他主机的Report,自己就不再发送了。 514 | 515 | > 是不是有点像 CSMA/CA 的先听后说?不过二者有很大不同,CSMA/CA 的机制是为了避免冲突,而IGMP的反馈抑制是为了减少无用Report。 516 | 517 | 518 | 519 | ### 总结 520 | 521 | 522 | 523 | ## 移动 IP 524 | 525 | ### 怎么支持主机的移动?(重点) 526 | 527 | > 如果你想和老朋友写信,但是朋友经常搬家,为了知道朋友的住址你会怎么做?朋友不一定会每次告知你他搬到什么地方,但他的父母往往知道。你可以和朋友的父母联系,从而知道他目前所在的住址。 528 | > 529 | > 每个移动主机都有一个归属网络,每当它所在的网络发生变更时,都会通知他的归属网络。 530 | 531 | - `MH`: 移动主机。 532 | - `HA`: 归属代理,用于标识移动主机。 533 | - `CoA`:转交地址,主机当前位置。 534 | - `FA`:外地代理,部署在外地网络中,为到访的移动主机提供服务。 535 | 536 | 移动路由: 537 | 538 | - `CN`发送到`MH`的分组首先到达 `Home Network`,然后通过 `HA` 递交给隧道 (再封装) 到达 `FA`,`FA`通过链路层协议递交给 `MH`。 539 | - `MH`发送给`CN`的分组采用**IP路由**,或者通过隧道到`HA`然后到`CN`。 540 | 541 | 三角路由: 542 | 543 | - 移动主机发给通信节点的分组可以采用 IP 路由沿着最优路径到达通信节点 544 | - 但是反过来通信节点发给移动主机的分组首先达到归属代理,然后通过隧道方式到达外地代理并递交给移动主机。这一步带来了比较大的开销。 545 | 546 | 547 | 548 | 三角路由的解决方案: 549 | 550 | - 通信节点在发送分组时首先查询**绑定缓存表**,如果没有则与原来的移动IP一样根据 IP 路由到达归属代理,归属代理通过隧道转发到外地代理并最终到达移动主机。如果绑定缓存表中有相应表项,就通过 IP 隧道将分组传送给外地代理。 551 | 552 | - **绑定缓存表如何更新?** 分组到达归属代理时,归属代理会向通信节点发送绑定更新消息给出移动主机的当前位置(转交地址),通信节点相应地更新绑定缓存。 553 | - 当通信节点的绑定缓存即将超时时,通信节点可以发送一个 Binding 请求给归属代理,归属代理发送 Binding Update 消息以将其更新为最新的位置。 554 | 555 | 平滑切换 (smoth handoff): 556 | 557 | > 当一个主机从一个外地网络移动到新的地址时,那些发送到旧外地代理的分组会丢失,因此引入了一个平滑切换的机制,让移动切换的过程平稳进行(不发生突然的大规模丢包)。 558 | 559 | - 移动主机向新外地代理发送的Register请求中包含旧外地代理地址,新外地代理发送 Binding Update 消息给旧外地代理,这样以后那些到旧外地代理的分组会被递交给新的外地代理。 560 | - 与此同时,新外地代理发送 Binding Warning 给归属代理,归属代理更新移动主机的位置信息。同时归属代理发送Binding Update 消息给通信主机,让它更新移动主机的位置。 561 | 562 | *由于Binding Update消息可能会丢失,因此发送时可以要求接收方通过回应 Binding ACK来确认。* 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | -------------------------------------------------------------------------------- /考研题目参考/计算机网络考研模拟卷1.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ekonwang/computer-network-final/dbc395e093efdc393aef9b27116cf4d820776c67/考研题目参考/计算机网络考研模拟卷1.docx -------------------------------------------------------------------------------- /考研题目参考/计算机网络考研模拟卷2.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ekonwang/computer-network-final/dbc395e093efdc393aef9b27116cf4d820776c67/考研题目参考/计算机网络考研模拟卷2.docx -------------------------------------------------------------------------------- /考研题目参考/计算机网络考研模拟卷3.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ekonwang/computer-network-final/dbc395e093efdc393aef9b27116cf4d820776c67/考研题目参考/计算机网络考研模拟卷3.docx -------------------------------------------------------------------------------- /考研题目参考/计算机网络考研模拟卷4.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ekonwang/computer-network-final/dbc395e093efdc393aef9b27116cf4d820776c67/考研题目参考/计算机网络考研模拟卷4.docx -------------------------------------------------------------------------------- /考研题目参考/计算机网络考研模拟卷5.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ekonwang/computer-network-final/dbc395e093efdc393aef9b27116cf4d820776c67/考研题目参考/计算机网络考研模拟卷5.docx -------------------------------------------------------------------------------- /考研题目参考/计算机网络考研模拟卷6.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ekonwang/computer-network-final/dbc395e093efdc393aef9b27116cf4d820776c67/考研题目参考/计算机网络考研模拟卷6.docx -------------------------------------------------------------------------------- /考研题目参考/计算机网络考研模拟卷7.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ekonwang/computer-network-final/dbc395e093efdc393aef9b27116cf4d820776c67/考研题目参考/计算机网络考研模拟卷7.docx -------------------------------------------------------------------------------- /考研题目参考/计算机网络考研模拟卷8.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ekonwang/computer-network-final/dbc395e093efdc393aef9b27116cf4d820776c67/考研题目参考/计算机网络考研模拟卷8.docx -------------------------------------------------------------------------------- /试题/2014-2015复旦大学《计算机网络A》.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ekonwang/computer-network-final/dbc395e093efdc393aef9b27116cf4d820776c67/试题/2014-2015复旦大学《计算机网络A》.pdf -------------------------------------------------------------------------------- /试题/华南理工大学期末考试《computer network》A卷.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ekonwang/computer-network-final/dbc395e093efdc393aef9b27116cf4d820776c67/试题/华南理工大学期末考试《computer network》A卷.pdf -------------------------------------------------------------------------------- /链路层.md: -------------------------------------------------------------------------------- 1 | # 数据链路层 2 | 3 | [toc] 4 | 5 | ## 基本概念 6 | 7 | **结点:**主机、路由器 8 | 9 | **链路:**网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。 10 | 11 | **数据链路:**网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。 12 | 13 | **帧:**链路层的协议数据单元,封装网络层数据报。 14 | 15 | **主要作用:**负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。 16 | 17 | 18 | 19 | ## 功能概述 20 | 21 | 数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。 22 | 23 | **主要作用:**加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。 24 | 25 | 1. 为网络层提供服务 26 | 27 | - 无确认无连接服务:适合实时通信,误码率比较低。不用事先建立连接,收到后不返回确认也不处理差错。(通信质量好,有线) 28 | - 有确认无连接服务:适合无线通信,误码率比较高。收到后发回确认,未收到则重发。(通信质量差,无线) 29 | - 有确认面向连接服务:事先建立好连接,并需要确认。(有连接一定有确认) 30 | 31 | 2. 链路管理,即连接的建立、维持、释放(用于面向连接的服务) 32 | 3. 组帧 33 | 4. 流量控制 34 | 5. 差错控制(帧错/位错) 35 | 36 | ### 组帧 37 | 38 | 在一段数据的前后部分添加首部和尾部,构成帧。 39 | 40 | 接受端可以利用首部和尾部来识别开始和结束。 41 | 42 | 43 | 44 | 首部和尾部的重要作用:帧定界(确定帧的界限) 45 | 46 | **帧同步:**接收方应当能从接收到的二进制比特流中区分出帧的起始和终止。 47 | 48 | **组帧的四种方法:** 49 | 50 | 1. 字符计数法 51 | 2. 字符(节)填充法 52 | 3. 零比特填充法 53 | 4. 违规编码法 54 | 55 | ### 透明传输 56 | 57 | 不管所传数据是什么样的比特组合,都应当能够在链路上传送。(不会因为某些冲突导致没法传送某一比特组合的数据) 58 | 59 | 当所传数据中的比特组合恰巧与某一控制信息完全一样时,就必须采取适当的措施,使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。 60 | 61 | ### 字符计数法 62 | 63 | 帧首部使用一个计数字段(第一个字节,八位)来表明帧内字符数 64 | 65 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/字符计数.png) 66 | 67 | **计数位错了则都错!** 68 | 69 | ### 字符填充法 70 | 71 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/字符填充.png) 72 | 73 | 传送的帧是由文本文件组成时(ASCII码与首尾不会相同),可以实现透明传输。 74 | 75 | 传送的帧是由非ASCII码的文本文件(二进制代码的程序或图像)组成时,就要采用字符填充方法实现透明传输。 76 | 77 | **实现方法:**加入转义字符,对于转义字符后面的那一段不认为是控制信息。(类似:) 78 | 79 | 80 | 81 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/转.png) 82 | 83 | ### 零比特填充法 84 | 85 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/5110.png) 86 | 87 | **操作:** 88 | 89 | 1. 在发送端,扫描整个信息字段,只要连续5个1,就立即填入1个0。 90 | 2. 在接收端收到一个帧时,先找到标志字段确定边界,再用硬件对比特流进行扫描,发现连续5个1时,就把后面的0删除。 91 | 92 | PS:需要注意是**>=5**个1的时候就要在第5个1的后面加。 93 | 94 | *保证了透明传输* 95 | 96 | ### 违规编码法 97 | 98 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/违规.png) 99 | 100 | 101 | 102 | 字节计数法:一错都错 103 | 104 | 字符填充法:实现复杂,不兼容 105 | 106 | 目前普遍使用**比特填充**和**违规编码法** 107 | 108 | ## 差错控制 109 | 110 | 都是由噪声/外界冲击引起的 111 | 112 | ### 差错类别 113 | 114 | **全局性:**电气特性所产生的随机噪声,提高信噪比来解决(对传感器下手) 115 | 116 | **局部性:**外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因,利用编码技术解决。 117 | 118 | ### 差错类型 119 | 120 | 1. 位错:比特位出错,0/1之间转变 121 | 2. 帧错:1-2-3 122 | - 丢失1-3 123 | - 重复1-2-2-3 124 | - 失序1-3-2 125 | 126 | ### 比特错 127 | 128 | #### 编码方式 129 | 130 | 1. 检错编码 131 | - 奇偶校验码 132 | - 循环冗余码 133 | 2. 纠错编码 134 | - 海明码 135 | 136 | **注意:**物理层的数据编码与调制针对的是*单个比特的同步问题*,而数据链路层的编码是利用冗余码来解决一组比特的差错问题。 137 | 138 | #### 奇偶校验码 139 | 140 | n+1个bit为n位信息元+1位校验码,最后校验码表示的奇偶是包含校验码本身的”1“的个数的奇偶性。比如当校验码采用偶校验时,校验位$p$ = $a_1 \oplus a_2\oplus\dots\oplus a_n$,相应的监督关系式:$S=p\oplus a_1 \oplus a_2\oplus\dots\oplus a_n$ 为 0 时才代表校验成功。 141 | 142 | **特点:**只能检查出*奇数个比特*错误,检错能力为50% 143 | 144 | #### CRC循环冗余码 145 | 146 | 最终发送的数据:要发送的数据+帧检验序列FCS 147 | 148 | 计算冗余码: 149 | 150 | 1. **加0:**假设生成多项式G(x)的阶为r,则增加r个0。**也就是$G(x)$ 比 $R(x)$ 要多出1位.** 151 | 152 | 2. **模2除法:**数据加0后*除以多项式**余数*为冗余码/FCS/CRC检验码的比特序列。 153 | 154 | 二进制串 $\rightarrow$ 多项式域过程: 155 | 156 | 157 | 158 | 竖式除法计算过程: 159 | 160 | 161 | 162 | ##### 接受端检错过程 163 | 164 | ​ 把收到的每一个帧都除以相同的除数,然后检查得到的余数R。 165 | 166 | 1. 余数为0,判定这个帧没有差错。 *接受* 167 | 168 | 2. 余数不为0,判定这个帧有差错(无法确定到位) *丢弃* 169 | 170 | ​ FCS的生成以及接受端CRC检验都是由*硬件*实现,处理很迅速,因此不会延误数据的传输。 171 | 172 | ​ 只能做到对帧的无差错接收(接近于1的概率)。 173 | 174 | 175 | 176 | ### 线性分组码(海明码) 177 | 178 | *检测双*比特错,*纠正单*比特错。 179 | 180 | 对于突发性错误无能为力,可以采用p列的矩阵来解决一部分问题。 181 | 182 | 实践中可以增加一个*奇偶校验位*进一步判断错误类型。 183 | 184 | #### 海明距 185 | 186 | 相同位数的两个数,若某一位不同,则距离$+1$ 187 | 188 | 为检出$e$个错码,要求码集的海明距离$d≥e+1$。 189 | 为纠正$t$个错码,要求码集的海明距离$d≥2t+1$。 190 | 为检出$e$个错码,同时能纠正$t$个错码,则应满足 $d≥e+t+1 (e>t)$。 191 | 192 | #### 海明不等式 193 | 194 | $$ 195 | 2^r \geq k+r+1\\ 196 | r为冗余信息位,k为信息位 197 | $$ 198 | 199 | #### 工作流程 200 | 201 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/hmm.png) 202 | 203 | 确定校验码位数r->确定校验码和数据的位置->求出校验码的值->检错并纠错 204 | 205 | 1. 确定校验码位数:利用下面的海明不等式进行确定。 206 | 207 | 2. 确定校验码和数据码的位置:假设校验码$a_2,a_1,a_0$,数据码$a_6,...,a_3$,则最后发送为$a_6,...,a_0$。 208 | 209 | 利用上述的式子构成监督关系式S2,S1,S0,有几个校验码就有几个监督关系式。 210 | 211 | | $S_2S_1S_0$ | 000 | 001 | 010 | 100 | 011 | 101 | 110 | 111 | 212 | | ----------- | ---- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | 213 | | 错码位置 | 无错 | $a_0$ | $a_1$ | $a_2$ | $a_3$ | $a_4$ | $a_5$ | $a_6$ | 214 | 215 | 具体方式是,000表示无错,校验码$a^i$处在值为$2^i$的位,其余依次补全(顺序换一下也没事)即可。**(关键)** 216 | 217 | 按上式可以得到 218 | $$ 219 | S_2 = a_2 \oplus a_4 \oplus a_5 \oplus a_6\\ 220 | S_1 = a_1 \oplus a_3 \oplus a_5 \oplus a_6\\ 221 | S_0 = a_0 \oplus a_3 \oplus a_4 \oplus a_6 222 | $$ 223 | 224 | 3. 求出校验码的值:我们要确保S2,S1,S0均为0,由此就可以得到 225 | $$ 226 | a_2 = a_4 \oplus a_5 \oplus a_6\\ 227 | a_1 = a_3 \oplus a_5 \oplus a_6\\ 228 | a_0 = a_3 \oplus a_4 \oplus a_6 229 | $$ 230 | 231 | 4. 检错并纠错:当接收到传送的数据后,算出S2,S1,S0的值,在一位错的情况下,查表判断谁是错的。 232 | 233 | ### 总结 234 | 235 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/差错控制.png) 236 | 237 | ## 流量控制与可靠传输机制 238 | 239 | ### 数据链路层的流量控制 240 | 241 | *较高的发送速度**较低的接受能力*的不匹配,会造成传输错误。 242 | 243 | 数据链路层的流量控制是点对点(两个相邻的结点)的,而传输层的流量控制是端到端(两个主机之间的)。 244 | 245 | *数据链路层*流量控制手段:接收方收不下就不回复确认。 246 | 247 | *传输层*流量控制手段:接受端给发送端一个窗口公告 248 | 249 | ### 流量控制的方法 250 | 251 | #### 停止-等待协议 252 | 253 | 每发送完一个帧就停止发送,等待对方的确认,在收到确认后再发送下一个帧。 254 | 255 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/停等.png) 256 | 257 | #### 滑动窗口协议 258 | 259 | 后退N帧协议,选择重传协议 260 | 261 | ##### 基础概念 262 | 263 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/滑动.png) 264 | 265 | 发送窗口与接收窗口的大小在这是固定的 266 | 267 | 1. 停止-等待协议:发送窗口大小=1,接收窗口大小=1 268 | 2. 后退N帧协议(GBN):发送窗口大小>1,接收窗口大小=1 269 | 3. 选择重传协议(SR):发送窗口大小>1,接收窗口大小>1 270 | 271 | **可靠传输:**发送端发啥,接收段收啥 272 | 273 | **流量控制:**控制发送速率,使接收方有足够的缓冲空间来接收每一个帧。 274 | 275 | 滑动窗口解决: 276 | 277 | 1. 流量控制(收不下就不给确认,想发也发不了) 278 | 2. 可靠传输(发送方自动重传) 279 | 280 | ### 停止-等待协议 281 | 282 | **需要的原因:** 283 | 284 | 1. 除了*比特出差错*,底层信道还会出现丢包问题 285 | 2. 为了实现流量控制 286 | 287 | **研究停等协议的前提:** 288 | 289 | 1. 只考虑一方发送数据一方接收数据。 290 | 2. 不考虑在哪个层次 291 | 292 | #### 无差错情况 293 | 294 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/wcctd.png) 295 | 296 | #### 有差错情况 297 | 298 | **数据帧丢失或检测到帧出错** 299 | 300 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/ycctd.png) 301 | 302 | **ACK丢失** 303 | 304 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/ack.png) 305 | 306 | **ACK迟到** 307 | 308 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/acklate.png) 309 | 310 | #### 性能分析 311 | 312 | 简单,但信道利用率太低 313 | 314 | #### 信道利用率及信道吞吐率 315 | 316 | 发送方在一个发送周期内,有效地发送数据所需要的时间占整个发送周期的比率。 317 | $$ 318 | 信道利用率=(L/C)/T\\ 319 | T为发送周期\\ 320 | L为T内发送的数据的比特数\\ 321 | C为发送方数据传输率\\ 322 | 信道吞吐率=信道利用率*发送方的发送速率 323 | $$ 324 | **PS:**计算时间的时候总时间发送周期$T$是时延+传播时间,需要注意题目条件给的是发送周期还是时延。 325 | 326 | #### 总结 327 | 328 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/tdsum.png) 329 | 330 | ### GBN协议 331 | 332 | **流水线技术:** 333 | 334 | 1. 必须增加序号范围 335 | 2. 发送方需要缓存多个分组 336 | 337 | #### 滑动窗口 338 | 339 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/gbn_n.png) 340 | 341 | ##### GBN发送方必须响应的三件事 342 | 343 | 1. 上层的调用 344 | 上层发送数据时候,发送方检查发送窗口,已满则将数据返回给上层,让其等一会再发送(可以缓存一部分),未满则产生一个帧并将其发送。 345 | 346 | 2. 收到了一个ACK 347 | 348 | GBN协议中,对n号帧的确认采用*累积确认*的方式,标明接收方已经收到n号帧和它之前的全部帧。 349 | 350 | 3. 超时事件 351 | 352 | 超时后发送方重传*所有*已发送但未被确认的帧。 353 | 354 | ##### GBN接收方要做的事 355 | 356 | 1. 如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK,并将该帧中的数据部分交付给上层。 357 | 2. 其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需要维护下一个按序接收的帧序号。 358 | 359 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/gbn.png) 360 | 361 | ##### 滑动窗口长度 362 | 363 | 采用n个bit对帧编号,那么发送窗口的尺寸$W_T$应满足$1\leq W_T \leq 2^n-1$,否则接收方无法区别新旧帧。 364 | 365 | #### 重点 366 | 367 | 1. 累积确认(偶尔捎带确认:确认帧和数据一起发)-> 批量重传 368 | 2. 接收方只按顺序接收帧,不按序丢弃 369 | 3. 确认序列号最大的、按序到达的帧 370 | 4. 发送窗口最大为$2^n-1$,接收窗口最大为1 371 | 372 | #### 性能分析 373 | 374 | 因连续发送数据帧而提高了信道利用率 375 | 376 | 但在重传时必须把原来已经正确传送的数据帧重传,使传送效率降低。 377 | 378 | #### 总结 379 | 380 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/gbn_sum.png) 381 | 382 | ### SR协议 383 | 384 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/sr_f.png) 385 | 386 | 上下无关系 387 | 388 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/sr_j.png) 389 | 390 | #### SR发送方必须响应的三件事 391 | 392 | 1. 上层的调用 393 | 394 | 跟GBN类似 395 | 396 | 2. 收到了一个ACK 397 | 398 | 如果收到ACK,假如该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接受。如果该帧序号是窗口的下界,则窗口向前移动到具有最小序号的未确认帧处。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧。 399 | 400 | 3. 超时事件 401 | 402 | 每个帧都有自己的定时器,一个超时事件发生后*只重传一个帧* 403 | 404 | #### SR接收方要做的事情 405 | 406 | 1. 来者不拒(窗口内) 407 | 408 | SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回一个对应帧的ACK,直到所有帧皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。 409 | 410 | 如果收到了窗口序号外(小于窗口下界)的帧,就返回一个ACK。 411 | 412 | 2. 其余情况 413 | 414 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/sr.png) 415 | 416 | #### 滑动窗口长度 417 | 418 | 发送窗口最好等于接收窗口(大了会溢出,小了没意义) 419 | $$ 420 | W_{Tmax} = W_{Rmax}=2^{(n-1)}\\ 421 | $$ 422 | 423 | #### 重点 424 | 425 | 1. 对数据帧逐一确认,收一个确认一个 426 | 2. 只重传出错帧 427 | 3. 接收方有缓存 428 | 429 | #### 总结 430 | 431 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/sr_sum.png) 432 | 433 | ### 信道划分介质访问控制 434 | 435 | **点对点链路:**两个相邻节点通过一个链路相连,没有第三者。应用于PPP协议,常用于*广域网*。(大) 436 | 437 | **广播式链路:**所有主机共享通信介质。应用于早期的总线以太网、无线局域网,常用于*局域网*。(小) 438 | 439 | ​ 典型拓扑结构:总线型(单点故障?)、星型(逻辑总线型) 440 | 441 | #### 介质访问控制 442 | 443 | 1. 静态划分信道 444 | 445 | **信道划分介质访问控制** 446 | 447 | - 频分多路复用FDM 448 | - 时分多路复用TDM 449 | - 波分多路复用WDM 450 | - 码分多路复用CDM 451 | 452 | 2. 动态分配信道 453 | 454 | - 轮询访问介质访问控制 令牌传递协议 455 | - **随机访问介质访问控制** 456 | - ALOHA协议 457 | - CSMA协议 458 | - **CSMA/CD协议** 459 | - **CSMA/CA协议** 460 | 461 | #### 信道划分介质访问控制 462 | 463 | 将使用介质的每个设备与来自同一信道上的其他设备的通信隔离开,把**时域和频域资源**合理地分配给网络上的设备。 464 | 465 | **多路复用技术:**把多个信号组合在一条物理信道上进行传输,使得多个计算机或终端设备**共享信道资源**,提高信道利用率。 466 | 467 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/mux.png) 468 | 469 | #### 频分多路复用 470 | 471 | 频分复用的所有用户在同样的时间占用不同的带宽资源。 472 | 473 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/fmux.png) 474 | 475 | 优点: 476 | 477 | 1. 充分利用传输介质带宽,系统效率较高 478 | 2. 技术比较成熟,实现也比较容易 479 | 480 | #### 时分多路复用 481 | 482 | 每一个时分复用的用户在每一个TDM帧中占用**固定序号的时隙**,所有用户轮流占用信道(时间片) 483 | 484 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/tmux.png) 485 | 486 | ##### 统计时分复用 487 | 488 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/ttmux.png) 489 | 490 | STDM帧的时隙数**小于**连接在集中器上的用户数。用户有了数据就随时发往集中器的**输入缓存**,集中器依据先来先服务(按顺序放入缓存),一个STDM帧满了就直接发走。*STDM不是固定分配时隙,而是按需动态分配时隙。* 491 | 492 | #### 波分多路复用 493 | 494 | 本质是*光的频分多路复用* 495 | 496 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/lmux.png) 497 | 498 | #### 码分多路复用CDM 499 | 500 | **码分多址(CDMA)**是码分复用的一种方式 501 | 502 | 1个bit分为多个码片/芯片,每一个站点被指定一个唯一的m位的芯片序列。 503 | 504 | 发送1时站点发送芯片序列,发送0时发送芯片序列反码(通常把0写成-1)。 505 | 506 | **不冲突:**确保各个站点芯片序列相互正交 507 | 508 | **合并方式:**各路数据在信道中被线性相加 509 | 510 | **分离方式:**合并的数据和源站规格化内积 511 | 512 | 以课本P117为例 513 | 514 | **发送过程:** 515 | 516 | 1. 首先得到每个节点的码片序列,确保一起发送的一组节点之间两两互相正交,即内积为0。 517 | 518 | 同时也得保证发送的码片序列与自己的内积为1 519 | 520 | 发送0的时候即发送码片序列的按位取反. 521 | 522 | 2. 对于码片序列中的0,其双极型表示为-1,1则就是1。 523 | 524 | 比如 0 0 0 1 1 0 1 1的双极型表示即为(-1-1-1+1+1-1+1+1)(可以看成一个向量) 525 | 526 | 3. 假如A想要不发,B想要发1,C想要发0,D想要不发,则序列为-10-,最后发送的内容即为四个节点的双极型表示的和,令其为S(按位相加)。 527 | 528 | 4. 在收到S之后,假如节点A的码片序列为A,则节点A发送的内容即为$\frac{S \cdot A}{8}$, 529 | 530 | 在此过程中,接收方必须要知道发送方的码片序列。记得这里的8是码片序列的长度,实际的码片序列长度比8位要长得多,通常是64/128位。 531 | 532 | **可能遇到的问题:** 533 | 534 | 1. 软容量(正交码并不多,所以实际中采用个数没有硬性规定的准正交码,虽不能准确分割但大多数情况下影响较小)。 535 | 2. 远近问题(考虑无线信号,远端用户的信号有更大的多址干扰,性能更差,一般通过功率控制解决。) 536 | 537 | **特性:** 538 | 539 | 1. 软容量 540 | 2. 抗噪声和多径干扰能力强(得益于扩频技术),支持小区之间的软切换。3G基础 541 | 542 | ### 随机访问介质控制 543 | 544 | 所有用户可随机发送信息。发送信息时占**全部带宽**。 545 | 546 | 解决不协调导致的冲突问题 547 | 548 | #### 纯ALOHA协议 549 | 550 | 不监听信道,不按时间槽发送,随机重发。*想发就发* 551 | 552 | 如果发生冲突,接收方就会检测出差错,然后不予确认,发送方在一定时间内收不到就判断发生冲突。 553 | 554 | 超时后等一随机时间再重传。 555 | 556 | > ​ 分析思路:吞吐率 = 帧时内平均帧数 * 每帧期望发送成功率 557 | > 558 | > ​ 对于$t_0+t$时间开始的时长为$t$的数据帧,$t_0$开始到$t_0+2t$结束这段时间内发送的数据帧都会与其冲突,由泊松分布$P_r[k]=\frac{G^ke^{-G}}{k!}$可知,生成0帧的概率为$e^{-G}$,故在两个帧时都没有帧生成的概率为$e^{-2G}$,这也是其帧传输成功概率。根据$S(吞吐率)=G(负载)P_0(帧传输成功概率)$可知$S=Ge^{-2G}$,当G=0.5时,吞吐率最大约为0.18。 559 | 560 | > ​ 分析思路:每个用户的每帧时发送平均成功率 = 每用户每帧时期望发送帧数 * 平均发送成功率。 561 | > 562 | > ​ 对于N位用户的话,可以得到如下公式$\frac{S}{N}=\frac{G}{N}*(1-\frac{G}{N})^{2(N-1)}$(之后回头推一下),极限与上面那个S相同。 563 | 564 | #### 时隙ALOHA协议 565 | 566 | 把时间分成若干个相同的时间片,所有用户在时间片开始时刻同步接入网络信道,若发生冲突,则必须等到下一个时间片开始时刻再发送。 567 | 568 | > ​ 分析思路:每个时槽平均负载 * 每个帧的期望成功率 569 | > 570 | > ​ $S=Ge^{-G}$,可以用习题的那个推导,主要区别在于普通 ALOHA 本质上要求两个连续时槽没有其他负载,而时隙 ALOHA 要求本时槽没有其他负载就可以。 571 | > 572 | > ​ 对于有限用户:$\frac{S}{N}~=~\frac{G}{N}(1-\frac{G}{N})^{N-1}$,求极限之后$S$ 依然为 $S=Ge^{-G}$ 推导关键:$lim_{n\rightarrow \inf}(1+\frac{x}{n})^n~=~e^{x}$ 573 | 574 | ##### 二者特点 575 | 576 | 纯ALOHA协议比时隙ALOHA协议吞吐量更低,效率更低。 577 | 578 | 纯ALOHA想发就发,时隙ALOHA有控制地发。 579 | 580 | #### CSMA协议(载波监听多路访问协议) 581 | 582 | **CS:**载波监听,每一个站在发送数据之前要检测一下总线上是否有其他计算机在发送数据。(检测总线上的信号电压摆动值) 583 | 584 | **MA:**多点接入,表示许多计算机以多点接入的方式连接在一根总线上。 585 | 586 | **协议思想:**发送帧之前,*监听*信道 587 | 588 | **监听结果:** 589 | 590 | 1. 信道空闲:发送完整帧 591 | 2. 信道忙:推迟发送 592 | - 1-坚持CSMA 593 | - 非坚持CSMA 594 | - p-坚持CSMA 595 | 596 | ##### 1-坚持CSMA 597 | 598 | 坚持指的是对于监听信道忙之后的坚持 599 | 600 | 如果一个主机要发送消息,那么它先监听信道。*空闲则直接传输*,不必等待;*忙则一直监听*,直到空闲马上传输;如果*有冲突*(一段时间内未收到肯定回复),则*等待一个随机长的时间*再监听,重复上述过程。 601 | 602 | 优点:只要媒体空闲,站点就马上发送,避免了媒体利用率的损失。 603 | 604 | 缺点:假如有两个或两个以上的站点有数据要发送,冲突就不可避免。 605 | 606 | ##### 非坚持CSMA(0-) 607 | 608 | 非坚持指的是对于监听忙之后就不继续监听。 609 | 610 | 如果一个主机要发送消息,那么它先监听信道。*空闲则直接传输*,不必等待;*忙则等待一个随机的时间*之后再进行监听; 611 | 612 | 优点:采用随机的重发延迟时间可以减少冲突发生的可能性。 613 | 614 | 缺点:可能存在大家都在延迟等待过程中,使得媒体仍处于空闲状态,媒体使用率降低。 615 | 616 | ##### p-坚持CSMA 617 | 618 | p-坚持指的是对于监听信道空闲的处理 619 | 620 | 如果一个主机要发送消息,那么它先监听信道。*空闲则以概率p立即传输,不必等待**以概率1-p延迟一个时槽*后重新监听媒体(并不是发送,而是监听,相当于重复之前的操作)。*忙的话则一直监听到空闲*为止(这个地方貌似好几个地方讲法不一样,以书上为准)。 621 | 622 | 优点:既能像非坚持算法那样减少冲突,又能像1-坚持算法那样减少媒体空闲时间的这种方案。 623 | 624 | 缺点:发生冲突后还是要坚持把数据帧发送完,造成了浪费。(CSMA协议不能同时说和听) 625 | 626 | 627 | 628 | #### CSMA/CD协议 629 | 630 | *“先听再说,边听边说”* 631 | 632 | 载波监听多点接入 / 碰撞检测协议 633 | 634 | **CS:**载波侦听/监听,每一个站在*发送数据之前以及发送数据时*都要检测一下总线上是否有其他计算机在发送数据。(检查是否有信道接入自己站点) 635 | 636 | **MA:**多点接入,表示许多计算机以多点接入的方式连接在一根总线上。(总线型网络) 637 | 638 | **CD:**碰撞检测(冲突检测),“*边发送边监听*”,适配器边发送数据边检测信道上信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。(半双工网络) 639 | 640 | ##### 传播时延对载波监听的影响 641 | 642 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/crash.png) 643 | 644 | ##### 截断二进制指数规避算法 645 | 646 | 确定碰撞后的重传时机 647 | 648 | 1. 确定基本退避(推迟)时间为一个时槽(=在传输媒体上的往返传播时间,以书上为准) 649 | 2. 定义参数k,它等于*碰撞次数*,但k不超过10,k=min{碰撞次数,10}。 650 | 3. 从离散的整数集合[0,1,...,$2^k-1$]中随机取出一个数r,重传所需要退避的时间就是r倍的基本退避时间,即r个时槽。 651 | 4. 当重传达16次仍不能成功时,说明网络太拥挤,认为此帧永远无法正确发出,抛弃此帧并向高层报告出错。 652 | 653 | PS:注意第k次重传和第k次发送的区别 654 | 655 | ##### 最小帧长问题 656 | 657 | 帧的传输时延至少要两倍于信号在总线中的传播时延 658 | 659 | 最小帧长=$2\tau$*数据传输速率 660 | 661 | 以太网规定最短帧长为64B,凡是长度小于64B都是由于冲突而异常终止的无效帧 662 | 663 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/csmacd_sum.png) 664 | 665 | > ##### CSMA/CD 协议性能分析 666 | > 667 | > 某时槽一个节点竞争成功的概率:A = $C_N^1~p~(1-p)^{N-1}~=~Np(1-p)^{N-1}$ 668 | > 669 | > 竞争时槽为 $i$ 个的概率 $p_i~=~(1-A)^i~A$ 670 | > 671 | > 平均竞争时槽 $\Sigma~p_i~i~=~\frac{1}{A}-1$ 672 | > 673 | > 当 $p=\frac{1}{N}$ 时,A 取得最大值,此时 $lim_{N\rightarrow \infin}A=\frac{1}{e}$ 674 | > 675 | > 平均竞争时槽长度为 $e-1$ 676 | > 677 | > 平均信道使用率为 $\frac{1}{1~+~2(e-1)a}$ 其中 $a~=~\frac{T_{prop}}{T_{trans}}$ 678 | 679 | #### CSMA/CA协议 680 | 681 | 载波监听多点接入/碰撞避免协议 682 | 683 | 无线局域网 684 | 685 | - 无法做到360度全面检测碰撞 686 | - 隐藏节点,暴露节点 687 | 688 | 而/CD是以太网 689 | 690 | ##### 工作原理 691 | 692 | 发送数据前,先检测信道是否空闲 693 | 694 | 空闲则发出*RTS*,RTS包括发射端的地址、接受端的地址、下一份数据将持续发送的时间等信息;信道忙则等待。 695 | 696 | 接收端收到RTS后,将响应*CTS* 697 | 698 | 发送端收到CTS后,开始发送数据帧(同时*预约信道*:发送方告知其他站点自己要传多久数据)。 699 | 700 | 接受端收到数据帧后;将用CRC来检验数据是否正确,正确则响应*ACK帧* 701 | 702 | 发送方收到ACK就可以进行下一个数据帧的发送,若没有则一直重传至规定重发次数为止(采用*二进制指数退避算法*来确定随机的推迟时间) 703 | 704 | ##### 重点 705 | 706 | 1. 预约信道 707 | 2. ACK帧 708 | 3. RTS/CTS帧(可选) 709 | 710 | #### CSMA/CD与CSMA/CA异同 711 | 712 | 相同:先听再说 713 | 714 | 不同: 715 | 716 | 1. 传输介质不同,CA用于总线式以太网(有线),CA用于无线局域网(无线) 717 | 2. 载波检测方式不同,CD检测电缆中电压的变化,CA采用能量检测,载波检测和能量载波混合检测三种检测信道空闲的方式。 718 | 3. CD检测冲突,冲突有上限重传16次,CA避免冲突,次数待定。 719 | 720 | ### 三种比较 721 | 722 | #### **信道划分介质访问控制:** 723 | 724 | ​ 基于多路复用技术划分资源 725 | 726 | ​ *网络负载重:*共享信道效率高且公平 727 | 728 | ​ *网络负载轻:*共享信道效率低 729 | 730 | #### **随机访问MAC协议:** 731 | 732 | ​ 用户根据意愿随机发送消息,发送消息时可独占信道带宽。 733 | 734 | ​ *网络负载重:*产生冲突开销 735 | 736 | ​ *网络负载轻:*共享信道效率高,单个结点可利用信道全部带宽 737 | 738 | #### **轮询访问MAC协议:** 739 | 740 | ​ 既不产生冲突,又要发送时占全部带宽 741 | 742 | ### 轮询访问介质访问控制 743 | 744 | #### 轮询协议 745 | 746 | 主结点轮流“邀请”从属结点发送数据,具体而言,主节点会轮流向其他节点发送询问帧。 747 | 748 | 问题: 749 | 750 | 1. 轮询开销 751 | 2. 等待延迟,靠后节点需要等待 752 | 3. 单点故障,如果主节点宕机会导致局域网瘫痪 753 | 754 | #### 令牌传递协议 755 | 756 | 令牌:一个特殊格式的MAC控制帧,不含任何信息。 757 | 758 | ​ 控制信道的使用,确保同一时刻只有一个结点独占信道。 759 | 760 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/lp.png) 761 | 762 | 问题: 763 | 764 | 1. 令牌开销 765 | 2. 等待延迟 766 | 3. 单点故障 767 | 768 | 应用于令牌环网(物理星型拓扑,逻辑环形拓扑) 769 | 770 | 采用令牌传送方式的网络常用于*负载较重,通信量较大*的网络中 771 | 772 | 773 | 774 | ## 局域网概述 775 | 776 | 局域网:简称LAN,是指在某一区域内由多台计算机互联成的计算机组,使用*广播信道*。 777 | 778 | 特点: 779 | 780 | 1. 覆盖的地理范围较小,几km (如复旦的校园网) 781 | 2. 使用专门铺设的传输介质(双绞线、同轴电缆)进行联网,数据传输速率高(10Mb/s~10Gb/s) 782 | 3. 通信延时短,误码率低,可靠性较高 783 | 4. 各站为平等关系,共享传输信道 784 | 5. 多采用分布式控制和广播式通信,能进行广播和组播 785 | 786 | 决定局域网的主要要素为:*网络拓扑**传输介质**介质访问控制方法*。 787 | 788 | #### 局域网拓扑结构 789 | 790 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/tp.png) 791 | 792 | #### 局域网传输介质 793 | 794 | 有限局域网:双绞线、同轴电缆、光纤 795 | 796 | 无线局域网:电磁波 797 | 798 | #### 局域网介质访问控制方法 799 | 800 | 1. CSMA/CD:常用于总线,也用于树型 801 | 802 | 2. 令牌总线:常用于总线,也用于树型 803 | 804 | 物理总线,逻辑环 805 | 806 | 3. 令牌环:用于环形局域网,如令牌环网 807 | 808 | #### 局域网的分类 809 | 810 | 1. 以太网:符合IEEE 802.3系列标准规范。逻辑拓扑总线型,物理拓扑是星型或拓展星型。使用CSMA/CD 811 | 2. 令牌环网:物理上星型,逻辑上环型,已基本用不上 812 | 3. FDDI网:采用了双环拓扑,逻辑上是环型拓扑,用光纤,贵 813 | 4. ATM网:较新型的单元交换技术,使用53字节固定长度的单元进行交换。 814 | 5. 无线局域网(WLAN):使用IEEE 802.11标准 815 | 816 | #### IEEE 802标准 817 | 818 | IEEE 802.3:以太网/Ethernet (有限网) 819 | 820 | IEEE 802.5:令牌环网 821 | 822 | IEEE 802.8:FDDI 823 | 824 | IEEE 802.11:WLAN 825 | 826 | #### MAC子层和LLC子层 827 | 828 | IEEE 802标准会将数据链路层划分为逻辑链路层LLC子层和介质访问控制MAC子层。 829 | 830 | **LLC:**负责识别网络层协议,然后对它们进行封装。LLC报头告诉数据链路层一旦帧被接收到时,应当对数据包做何处理。*为网络层提供服务*:无确认无连接、面向连接、带确认无连接、高速传送 831 | 832 | **MAC:**主要功能包括数据帧的封装/卸装,帧的寻址和识别,帧的接收与发送,链路的管理,帧的差错控制等。*MAC子层的存在屏蔽了不同物理链路种类的差异性。* 833 | 834 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/jyw.png) 835 | 836 | ### 以太网 * 837 | 838 | 839 | 840 | 基带总线局域网规范,使用CSMA/CD技术,基于总线的局域网标准。 841 | 842 | 统治性地位: 843 | 844 | 1. 造价低廉 845 | 2. 应用最广泛的局域网技术 846 | 3. 比令牌环网、ATM网便宜,简单 847 | 4. 满足网络速率要求:10Mb/s~10Gb/s 848 | 849 | #### 两个标准 850 | 851 | DIX Ethernet V2 852 | 853 | IEEE 802.3 854 | 855 | 二者帧有一点微小的区别,影响不大。 856 | 857 | #### 以太网提供无连接、不可靠的服务 858 | 859 | 无握手,发送方数据不编号,接收方不向发送方确认,差错帧直接丢弃,纠正由高层负责。 860 | 861 | *只实现无差错接收,不实现可靠传输* 862 | 863 | #### 10BASE-T以太网 864 | 865 | 传送基带信号的双绞线以太网,T表示采用双绞线,现10BASE-T采用的是无屏蔽双绞线,传输速率是10Mb/s 866 | 867 | 物理上星型,逻辑上总线型,每段双绞线最长为100m 868 | 869 | 采用曼彻斯特编码 870 | 871 | 采用CSMA/CD介质访问控制 872 | 873 | #### 适配器与MAC地址 874 | 875 | 计算机与外界有局域网的连接是通过*通信适配器*的。 876 | 877 | 适配器上的ROM中有计算机硬件*MAC地址* 878 | 879 | 硬件地址又称为物理地址或MAC地址 880 | 881 | **MAC地址:**每个适配器有一个全球唯一的48位二进制地址,前24位厂家,后24位厂家自己指定。通常由6个十六进制数表示,比如02-60-8c-e4-b1-21 882 | 883 | #### SNAP 拓展 884 | 885 | 886 | 887 | #### LAN地址与MAC帧 888 | 889 | *这是一个普通的以太网帧(DIX协议下)。* 890 | 891 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/v2.png) 892 | 893 | 目的地址:**单播**、**广播**、**多播** 894 | 895 | 896 | 897 | IEEE地址格式采取低位在前 (little endian), 前24位用以标识不同厂商。 898 | 899 | 单播:I/G = 0 目的主机MAC地址。 900 | 901 | 组播:I/G = 1 代表局域网中的一组站点。 902 | 903 | 广播:48位地址全1。 904 | 905 | U/L = 1 代表本地管理地址,U/L = 0 代表全球唯一的 MAC 地址。 906 | 907 | ##### 前导 908 | 909 | 前面7个字节每个字节为`10101010`,目的是唤醒**接受者**。 910 | 911 | 最后一个字节取值为`10101011`,最后两个取值为`11`的比特提醒接收方帧的开始。 912 | 913 | > 一个问题:以太网下能否同时使用DIX帧与IEEE 802.3帧? 914 | > 915 | > 能。 916 | > 917 | > 采用DIX格式的帧类型字段取值大于`0x0600 = 1536`, 不会与IEEE 802.3 局域网的长度字段混淆(以太网帧长度 <= 1500(MTU) + 18)。 918 | > 919 | > 网卡的驱动程序可以根据该字段的取值范围来确定该帧是那种形式的帧,大多数主机采用的是DIX帧格式。 920 | 921 | #### 高速以太网 922 | 923 | 速率>=100Mb/s的以太网 924 | 925 | 1. 100BASE-T以太网:双绞线,100Mb/s,基带信号,星型,IEEE 802.3 CSMA/CD,支持全双工和半双工,全双工方式(中心结点变为交换机)下工作无冲突 926 | 2. 吉比特以太网:光纤或双绞线,1Gb/s,支持全双工和半双工,全双工下可无冲 927 | 3. 10吉比特:光纤,10Gb/s,全双工,无争用问题 928 | 929 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/ytw.png) 930 | 931 | #### 全双工以太网 932 | 933 | **全双工:**允许两个节点通过支持全双工数据传输的点到点来交换数据,这样节点能够同时传输和接收数据。 934 | 935 | **CSMA/CD** 是半双工,一个节点要么传输,要么接受,不能同时做。 936 | 937 | **其他方面的比较:** 938 | 939 | - 没有别的站点竞争对链路的访问权限,从而不会出现冲突。 940 | - 接收的同时也可以发送,端口支持的吞吐率是**半双工方式的两倍**。 941 | - 站点和交换机之间的连接距离也不再受到**最短帧长的限制**(毕竟不会发生冲突了),而纯粹考虑的是链路的物理特性。 942 | - 采用同样的以太网帧格式、**同样的最小帧长**(历史包袱)、同样的物理层协议。 943 | - 流量控制机制: 944 | - 半双工:反压机制 945 | - 全双工:PAUSE帧 946 | 947 | **PAUSE帧——流量控制机制** 948 | 949 | - 站点可以向链路的另一端发送一个暂停帧而要求停止所有帧的发送。 950 | - **MAC 控制参数为0**的PAUSE帧表示恢复数据帧的传输。 951 | - 有两种流量控制 952 | - 对称流量控制:全双工链路的两端都可以发送PAUSE帧。 953 | - 非对称流量控制:只允许其中某一端发送PAUSE帧。 954 | - 交换机可以发送Pause来阻塞端系统,而反过来则不行(减少注入网络的负载)。 955 | - 端系统可以阻塞交换机,而反过来则不行(借用交换机的内部缓冲区)。 956 | - 双方可用自动协商机制决定采用哪种流量控制。 957 | 958 | ### IEEE 802.11无线局域网 959 | 960 | IEEE 802.11a_h,满足b和g属于wifi 961 | 962 | #### 802.11的MAC帧头格式 963 | 964 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/mac.png) 965 | 966 | #### 四种帧类型 967 | 968 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/4mac.png) 969 | 970 | #### 无线局域网的分类 971 | 972 | 1. 有固定基础设施无线局域网 973 | 974 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/gd.png) 975 | 976 | ​ wifi名字:服务集标识符 977 | 978 | 2. 无固定基础设施无线局域网的自组织网络 979 | 980 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/zzz.png) 981 | 982 | ### 广域网 983 | 984 | 跨接很大的物理范围,所覆盖的范围从几十公里到几千公里 985 | 986 | 广域网的通信子网主要使用*分组交换*技术。广域网的通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网,它将分布在不同地区的局域网或计算机系统互连起来,达到*资源共享*的目的。例如因特网 987 | 988 | 节点交换机:链路层,单个网络转发分组 989 | 990 | 局域网覆盖物理层、链路层,多点接入,强调传输速度 991 | 992 | 广域网覆盖物理层、链路层、网络层,点对点,强调资源共享 993 | 994 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/gyw.png) 995 | 996 | ### PPP协议(点对点) 997 | 998 | #### 特点 999 | 1000 | 只支持全双工链路 1001 | 1002 | #### 需要满足的要求 1003 | 1004 | **简单:**对于链路层的帧,无需纠错,无需序号,无需流量控制 1005 | 1006 | **封装成帧:**帧定界符 1007 | 1008 | **透明传输:**与帧定界符一样的比特组合的数据应该如何处理:异步线路用字节填充,同步线路用比特填充 1009 | 1010 | **多种网络层协议:**封装的IP数据报可以采用多种协议 1011 | 1012 | **多种类型链路:**串行/并行,同步/异步,电/光 1013 | 1014 | **差错检测:**错就丢弃 1015 | 1016 | **检测连接状态:**链路是否正常工作 1017 | 1018 | **最大传送单元:**数据部分最大长度MTU 1019 | 1020 | **网络层地址协商:**知道通信双方的网络层地址 1021 | 1022 | **数据压缩协商** 1023 | 1024 | #### 无需满足的要求 1025 | 1026 | **纠错** 1027 | 1028 | **流量控制** 1029 | 1030 | **序号** 1031 | 1032 | **不支持多点线路** 1033 | 1034 | #### 三个组成部分 1035 | 1036 | 1. 一个将IP数据报封装到串行链路的方法 1037 | 2. 链路控制协议LCP:建立并维护数据链路连接 (身份验证) 1038 | 3. 网络控制协议NCP:PPP可支持多种网络层协议,每个不同的网络层协议都要一个相应的NCP来配置,为网络层协议建立和配置逻辑连接。 1039 | 1040 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/ppp.png) 1041 | 1042 | > ​ 突然发现广域网貌似没教过,那就不看了 1043 | 1044 | ### RFID射频识别 1045 | 1046 | #### 基本信息 1047 | 1048 | ​ 称为电子标签,自动识别技术,非接触式,可工作于各种恶劣环境,通过一个全球唯一的ID标识,标签上储存数据容量更大,可以读取、修改、附加数据,可以对标签数据加密,安全性高。 1049 | 1050 | ​ 可用于标识识别、物品跟踪、信息采集 1051 | 1052 | #### 架构 1053 | 1054 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/rfid.png)阅读器包括天线、射频模块和数字信号处理单元 1055 | 1056 | 电子标签包括天线和芯片 1057 | 1058 | 标签识别码保存在ROM中,用户数据区可以读写、覆盖和添加,容量从几字节(甚至1bit)到几千字节。 1059 | 1060 | #### 分类 1061 | 1062 | 1. 基于供电方式 1063 | - 无源电子标签:没有内装电池,射频信号传输通过磁场供电 1064 | - 半无源:内装但仅为电子芯片供电 1065 | - 有源:内装,射频信号传输可通过电池工地那,可以传播较远距离,严格来说不算电子标签 1066 | 2. 按照是否能够修改 1067 | - 只读 1068 | - 可重写 1069 | 3. 封装形式 1070 | - 信用卡标签 1071 | - 线形标签 1072 | - ... 1073 | 4. 频率 1074 | - 低频 1075 | - 高频 1076 | - 超高频 1077 | 5. 阅读距离远近 1078 | - 0-1cm的密耦合系统、0-1m的遥耦合和超过1m的远距离系统 1079 | 1080 | #### 耦合方式 1081 | 1082 | 近距离电感耦合 1083 | 1084 | 远距离电磁耦合 1085 | 1086 | #### 数据传输方式 1087 | 1088 | 阅读器往电子标签的方向采用广播,通过调制一定频率的载波的参数来传递信息 1089 | 1090 | 电子标签往阅读器方向的数据传输依然依赖于阅读器一直发送的射频信号 1091 | 1092 | #### 标签防冲突机制 1093 | 1094 | 随机选择时槽[0,$2^Q-1$]来响应,多个时槽没有响应时减少Q值,出现冲突增加Q值。(第4章79页) 1095 | 1096 | ## 物理层扩展以太网 1097 | 1098 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/ct.png) 1099 | 1100 | 将多个冲突域通过主干集线器连接,实现冲突域之间的互相传输,但此时冲突域会变大。 1101 | 1102 | > ​ 第一组两个互相通信时,第二组两个能不能通信? 1103 | 1104 | ### 网桥(书上貌似在网络层?) 1105 | 1106 | 根据*MAC帧*的目的地址对帧进行*转发**过滤*。当网桥收到一个帧时,并不向所有接口转发此帧,而是先检查此帧的目的MAC地址,然后再确定将该帧转发到哪一个接口,或者是把它丢弃(过滤) 1107 | 1108 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/wq.png) 1109 | 1110 | #### 网段 1111 | 1112 | 一般指一个计算机网络使用同一物理层设备(传输介质、中继器、集线器等)能够直接通讯的那一部分。 1113 | 1114 | #### 优点 1115 | 1116 | 1. 过滤通信量,增大吞吐量(AB通信时,CF,EF也能通信) 1117 | 2. 扩大了物理范围 1118 | 3. 提高了可靠性,一个网段出差错不会影响其他网段 1119 | 4. 可互连不同物理层、不同MAC子层和不同速率的以太网 1120 | 1121 | #### 透明网桥 1122 | 1123 | “透明”指以太网上的站点并不知道所发送的帧将经过哪几个网桥,是一种即插即用设备---自学习。本质就是书上的逆向学习法。![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/zfb.png) 1124 | 1125 | #### 源路由网桥 1126 | 1127 | 在发送帧时,把详细的最佳路由信息(路由最少/时间最短)放在帧的首部中。**方法:**源站以广播方式向欲通信的目的站发送一个*发现帧*。 1128 | 1129 | #### 网桥生成树算法(重点) :star: 1130 | 1131 | **选取根桥** 1132 | 1133 | 选择`BID`最小的网桥 1134 | 1135 | **确定根端口** 1136 | 1137 | 每个网桥可了解到根桥方向的路径花费:等于路径上经过的那些连接到另外一个网桥的端口花费之和 1138 | 1139 | - 根路径:网桥到根桥具有最少路径花费的路径 1140 | - 注意:局域网到网桥的边的花费为0 1141 | - **根端口**:根路径上第一个跳段所使用的端口 1142 | - 如果有多条最少花费路径时,具有更低端口号的端口为根端口 1143 | - 根桥没有根端口 1144 | 1145 | **确定选取端口** 1146 | 1147 | 每个**局域网**上**到根桥**的根路径花费最少(最靠近根桥)的那个**网桥**为**选取桥**。 1148 | 1149 | - 如果有多个可选的网桥时,BID最低的为**选取桥** 1150 | - 选取桥连接到该局域网上的端口为**选取端口** 1151 | - 如果有多个端口连接到同一个局域网上,端口号最低的端口为选取端口 1152 | 1153 | > 最后只有根端口和选取端口为转发状态 1154 | 1155 | **更好的`BPDU`消息** 1156 | 1157 | - 收到的BPDU标识一个具有**更小BID的根桥**。 1158 | - 收到的BPDU标识**同一个根桥**,但具有**更小的根路径花费**。 1159 | - 收到的BPDU的根桥BID和路径花费相同,但**发送**该BPDU的桥**BID更小**。 1160 | - 收到的BPDU的根桥BID、路径花费和发送消息的桥BID相同,但**端口号**更小。 1161 | 1162 | 1163 | 1164 | ### 以太网交换机 1165 | 1166 | 独占带宽:与交换机连接的主机或者集线器可以独占交换机的最大带宽。 1167 | 1168 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/jhj.png) 1169 | 1170 | #### 直通式交换机 1171 | 1172 | 查完目的地址(6B)就立刻转发。*延迟小*,可靠性低,无法支持具有不同速率的端口的交换。(可能会考6B) 1173 | 1174 | #### 存储转发式交换机 1175 | 1176 | 把帧放入高速缓存,并检查是否正确,正确则转发,错误则丢弃。延迟大,*可靠性高,可以支持具有不同速率的端口的交换*。(常用) 1177 | 1178 | #### 无残帧 1179 | 1180 | 和直通类似,以太网交换机在**收到64个字节**的数据后才开始转发 1181 | 1182 | 依据:大多数错误和冲突(所有正常的冲突)出现在帧的前面64个字节 1183 | 1184 | 1185 | 1186 | ### 冲突域和广播域 1187 | 1188 | #### 冲突域 1189 | 1190 | 在同一个冲突域中的每一个节点都能收到所有被发送的帧。简单地说就是同一时间内只能有一台设备发送信息的范围。 1191 | 1192 | #### 广播域 1193 | 1194 | 网络中能接收任一设备发出的广播帧的所有设备的集合。简单地说如果站点发出一个广播信号,所有能接收收到这个信号的设备范围称为一个广播域。 1195 | 1196 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/sgy.png) 1197 | 1198 | #### 总结 1199 | 1200 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/d_sum.png) 1201 | 1202 | ## 链路层总结 1203 | 1204 | ![](https://cdn.jsdelivr.net/gh/ekonwang/images@master/img/3sum.png) 1205 | 1206 | 1207 | 1208 | --------------------------------------------------------------------------------