537 views
# 计算机网络 >作业20%+阶段40%(第7周,1,2,3章)+期末40% ## 1 概述 >概念:计算机网络,定义,组成,功能,分类,标准化 >体系结构参考模型:ISO/OSI,TCP/IP,接口,协议,服务 >性能指标(通常涉及计算),分组交换(报文交换,电路交换) ### 1.1 计算机网络的定义及其特点 #### 1.1.1 计算机网络的定义 计算机网络是**通信技术**与**计算机技术**紧密结合的产物 通信模型:信源$\rightarrow$发送设备$\xrightarrow[\quad噪声\quad]{\quad信道\quad}$接受设备$\rightarrow$宿源 **较为准确的定义**:计算机网络就是**互联的**,**自治的**计算机集合 自治:无主从关系 互联:互联互通(事实上通过通信链路实现,并非夸张的完全图) 交换网络的主要设备:交换机(switcher),路由器(router) **Internet** 1. 组成:全球最大的互联网络 ISP(Internet service provider)网络互连的"网络之网络"(核心网) 2. 服务:通信基础设施(为网络应用提供通信服务) #### 1.1.2 计算机网络的特点 1. 互通 2. 共享 ### 1.2 互联网概述 #### 1.2.1 网络的网络 互连网:多个网络通过一些路由器相互连接起来,构成了一个覆盖范围更大的计算机网络,即"网络的网络" <table class="part" data-startline="44" data-endline="51"> <thead> <tr> <th style="text-align:center">互联网(Internet)</th> <th style="text-align:center">互连网(internet)</th> </tr> </thead> <tbody> <tr> <td style="text-align:center" colspan="2">相似之处</td> </tr> <tr> <td style="text-align:center">网络的网络</td> <td style="text-align:center">网络的网络</td> </tr> <tr> <td style="text-align:center" colspan="2">不同之处</td> </tr> <tr> <td style="text-align:center">特指遵循 TCP/IP 标准、利用路由器将各种计算机网络互连起来而形成的、一个覆盖全球的、特定的互连网</td> <td style="text-align:center">泛指由多个不同类型计算机网络互连而成的网络</td> </tr> <tr> <td style="text-align:center">使用 TCP/IP</td> <td style="text-align:center">除 TCP/IP 外,还可以使用其他协议</td> </tr> <tr> <td style="text-align:center">是一个专用名词</td> <td style="text-align:center">是一个通用名词</td> </tr> </tbody> </table> #### 1.2.2 互联网基础结构发展的三个阶段 * 第一阶段:从单个网络ARPANET向互连网发展的过程(1969-1990)(其诞生基于分组转发被证明可行) * 1983年TCP/IP成为ARPANET上的标准协议 * 通常将1983年作为互联网的诞生时间 * 1990年,ARPANET宣布关闭 * 第二阶段:由美国国家科学基金会(NSF)牵头建成了具有**三级结构**的互联网(1985-1993) * 建成了具有主干网,地区网,校园网三级结构的网络 * 1991年为扩大规模,主干网交由公司管理 * 1992年中国加入了互联网 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-54-49-ada890bd33ef772730365dd7b5954a73-20211210095448-6ba414.png) * 第三阶段:形成了全球范围的多层次ISP结构的互联网(1995-至今) * 出现了ISP,收取一定的费用并提供接入互联网的服务 * 出现了多层次的ISP结构,分为主干,地区和本地ISP * 出现了互联网交换点 IXP (Internet eXchange Point):允许两个网络直接相连并快速交换分组 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-55-09-58a1bc74e0e42e83353d6a3ad04adcdd-20211210095509-3d86ef.png) #### 1.2.3 互联网的标准化工作 现阶段,互联网的标准RFC由IETF负责制定发布 互联网标准都以RFC的形式在互联网上发表 在2011年10月之前其需经过三个阶段: 1. 互联网草案(Internet Draft) 2. 建议标准(Proposed Standard) 从这个阶段开始就成为 RFC 文档 3. 互联网标准(Internet Standard) 达到正式标准后,每个标准就分配到一个编号 STD xxxx。 一个标准可以和多个 RFC 文档关联 2012年之后取消了草案环节,直接进入建议标准 ### 1.3 互联网的组成 * 物理组成: 1. 硬件:主机,通信线路,交换设备 2. 软件:能实现资源共享的软件和方便用户使用的各种工具软件 3. 协议:数据在链路上传输必须遵循的规则 * 功能组成: 1. 资源子网:有主机,终端及各种软件资源,信息资源组成,负责全网的数据处理业务,向网络用户提供各种资源和服务 2. 通信子网:由各种传输介质、通信设备和相应的网络协议组成,为网络提供数据传输、交换和控制能力,实现联网计算机之间的数据通信 * 工作方式 1. 边缘部分:由所有链接在互联网上的主机(端系统)组成,这部分是用户直接使用的,用来进行通信和资源共享 2. 核心部分:由大量网络和连接这些网络的路由器组成,这部分是为边缘部分提供服务的(提供连通性和交换服务) ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-55-24-558ee9f9afefe53a9e4649019abc4315-20211210095524-2dc037.png) #### 1.3.1 互联网的边缘部分 * 端系统之间的通信 *主机A和主机B进行通信*实际上是指:运行在主机A上的**某个程序**和运行在主机B上的**另一个程序**进行通信 * 端系统之间的两种通信方式 1. 客户-服务器方式(Client/Server方式)及浏览器-服务器方式(Browser/Server方式) 客户是服务的**请求方**,服务器是服务的**提供方** 客户端软件在被用户调用后运行,在打算通信时**主动**向远端服务器发起通信(请求服务)。因此,**客户程序必须知道服务器程序的地址** 服务端系统启动后即自动调用并一直**不断地运行**着,被动地等待并接受来自各地的客户的通信请求。因此,**服务器程序不需要知道客户程序的地址** 2. 对等方式(P2P方式) 两个主机在通信时并**不区分**哪一个是服务请求方还是服务提供方,只要两个主机都运行了对等连接软件,它们就可以进行**平等的**、**对等连接通信** #### 1.3.2 互联网的核心部分 * 数据交换技术 数据交换技术是数据能够通过网络核心从源主机到达目的主机的前提 1. 电路交换 * 电路交换是**面向连接**的 * 需要经过如下三个步骤才能交换数据:建立链接$\rightarrow$ 传输数据 $\rightarrow$ 断开连接 * 线路的传输效率较低 2. 报文交换 * 现今已较少使用,实质上也是基于存储转发技术 3. 分组交换 * 分组交换采用**存储转发**技术(即接受一整个包以后再把一整个包转发给下一个目的地) * 报文:发送的**整块数据**称为报文 * 在发送端,先将较长的报文划分成较短的,固定长度的数据端 * 在每一个数据段的前面添加上首部构成分组(packet) * 首部中包含的目的地址、源地址等重要控制信息,是转发过程必不可少的内容 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-55-36-e6ba342bca58aaa9e1b73cbbb5cf0ea0-20211210095536-b43ce3.png) * **数据交换技术的比较** * 若要连续传送大量的数据,且其传送时间远大于连接建立时间,则电路交换的传输速率较快 * 报文交换和分组交换不需要预先分配传输带宽,在传送突发数据时可提高整个网络的信道利用率 * 由于一个分组的长度往往远小于整个报文的长度,因此分组交换比报文交换的时延小,同时也具有更好的灵活性 * 电路交换方式的优点是传输时延小、通信实时性强,适用于交互式会话类通信;但其缺点是对突发性通信不适应,系统效率低,不具备存储数据的能力,不能平滑网络通信量,不具备差错控制的能力,无法纠正传输过程中发生的数据差错 * 报文交换和分组交换都采用存储转发,传送的数据都要经过中间结点的若干存储、转发才能到达目的地,因此传输时延较大。报文交换传送数据长度不固定且较长,分组交换中,要将传送的长报文分割为多个固定有限长度的分组,因此传输时延较报文交换要小 ### 1.4 计算机网络在我国的发展(ack) * 规模最大的五个共用计算机网络 1. 中国电信互联网 CHINANET(也就是原来的中国公用计算机互联网) 2. 中国联通互联网 UNINET 3. 中国移动互联网 CMNET 4. 中国教育和科研计算机网 CERNET 5. 中国科学技术网 CSTNET ### 1.5 计算机互联网的类别 1. 按照网络的作用范WAN进行分类 1. 广域网 WAN 2. 城域网 MAN 3. 局域网 LAN 4. 个人区域网 PAN 2. 按照网络的使用者 1. 公用网 按规定交纳费用的人都可以使用的网络。因此也可称为公众网 2. 专用网 为特殊业务工作的需要而建造的网络(不公开对外提供服务) 3. 按照拓扑结构分类 1. 总线型 2. 星型 3. 环型 4. 网状型 4. 按照传输技术分类 1. 广播网 2. 点对点网络 5. 按照信息交换方式 1. 电路交换 2. 报文交换 3. 分组交换 ### 1.6 计算机网络的性能(imp) 1. 速率 * 最重要的性能指标 * 指的是数据的传送速率,也称为数据率或比特率 * 单位:bit/s=$10^{-3}$kbit/s=$10^{-6}$Mbit/s=$10^{-9}$Gbit/s 值得注意的是,在计算机内部,数据比特的单位换算按$2^x$转换 2. 带宽 * 频域角度:某个信号具有的频带宽度,单位为赫兹(Hz) * 时域角度:网络中某通道传送数据的能力,表示在单位时间内网络中的某信道所能通过的**最高数据率**,单位为bit/s 3. 吞吐量 * 吞吐量表示在单位时间内通过某个网络的实际数据量 * 该数值取决于链路中的瓶颈速率 4. 时延 1. 发送时延 发送时延是主机或路由器发送数据帧所需要的时间 由于链路的实际握手速率有限,实际上计算机不可能按照硬件速率上限发送数据 $发送时延=\frac{数据帧长度bit}{发送速率bit/s}$ 2. 传播时延 传播时延是电磁波在信道中传播一定的距离需要花费的时间 $传播时延=\frac{信道长度m}{电磁波在信道上的传播速率m/s}$ $光速=3.0 \times 10^5m/s$ $铜线=2.3 \times 10^5m/s$ $光纤=2.0 \times 10^5m/s$ 3. 处理时延 处理时延是主机或路由器在收到分组时需要花费一定的时间进行处理转发而产生的时延 4. 排队时延 排队时延是分组在路由器输入输出队列中排队等待处理和转发所经历的时延 **总时延=发送时延+传播时延+处理时延+排队时延** 对于高速网络链路,我们提高的是数据的**发送速率**而不是比特在链路上的**传播速率**,因此提高链路带宽可以减小数据的**发送时延**(一般来说,很少能够提升链路上的传播速率) 5. 时延带宽积 * 在一定时间内,在链路上传播的比特数 * 时延带宽积=**传播**时延$\times$带宽 * 只有在代表链路的管道都充满比特是,链路才得到最充分的利用,但并**不是**意味着时延带宽积越大越好 6. 往返时间RTT * 表示从**发送方发送完数据开始**,到**发送方收到来自接受方的确认**总共经历的时间,由于接收端的处理排队时延以及发送确认数据的发送时延相比传输时延极小,通常我们认为往返时间RTT=2$\times$传输时延 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-55-48-9bf7fed5e2a8a9fe7380457982cfd496-20211210095548-47b858.png =350x) * 一般来说,可靠的传输需要发送方需要收到来自接收方的确认信息后才会传输之后的数据,因此实际发送过程中需要考虑额外的确认时延,即有效数据率 * $有效数据率=\frac{数据长度}{发送时延+RTT}$ 7. 利用率 * 信道利用率 信道被利用的时间百分比 * 网络利用率 全网络的信道利用率的加权平均值 * 时延与网络利用率的关系 根据排队论,根据排队论,当某信道的利用率增大时,时延会呈指数级迅速增加 $D=\frac{D_0}{1-U}$,$D_0$:网络空闲时的时延,$D$:网络当前的时延,$U$:网络当前的利用率 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-56-03-da1f1918ca04039f1019afd25454e79a-20211210095603-a98b1f.png =350x) 因此事实上,实际的网络信道容量一般是实际使用量的两倍,一旦使用量增加到超过1/2,就要考虑对网络进行扩容,否则网络时延将会过大到无法接受 ### 1.7 计算机网络的体系结构(imp) > 协议是水平的 服务是垂直的 * 使用分层的思想从功能上描述计算机网络结构 * 每一层完成特定的功能,通过层内动作完成相应功能 * 分层:将庞大而复杂的问题,转化成若干较小的局部问题 * 每层遵循某个/些网络协议完成本层功能 * 计算机网络体系结构是计算机网络**各层**及其**协议**的集合 #### 1.7.1 计算机网络体系结构的形成 * 最初的ARPANET设计时提出了分层的设计方法,但其后一些其他公司都纷纷提出了自己的网络协议标准,给全球实现兼容互联互通造成了极大不便 * 1977年ISO提出了OSI/RM,使得各种计算机在世界范围内互连成网的标准框架,但因为各种原因,这一标准未得到推行,是一个失败的标准 * 最终TCP/IP因为设计合理,成为了事实上的互联网标准 #### 1.7.2 协议与划分层次 * 计算机网络中的数据交换必须要遵守一定的规则 * 网络协议,简称为协议,是为*进行网路中的数据交换*而建立的**规则**(包括数据的**格式**及有关的**同步**问题)、*标准或约定*。 * 三个组成要素 * 语法:数据与控制信息的结构或格式 * 语义:需要发出何种控制信息,完成何种动作以及做出何种响应 * 同步:事件实现顺序的详细说明(速度匹配) * 分层的优点和缺点 * 各层之间是独立的 * 灵活性 * 结构上可分割开 * 易于实现和维护 * 能促进标准化工作 * 有些功能会重复出现因而产生额外开销 * 各层完成的主要功能 * 差错控制 * 流量控制 * 分段和重装 * 复用和分用 * 连接建立和释放 #### 1.7.3 具有五层协议的体系结构 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-56-18-703722be8f9a4e5b4016379897769b5b-20211210095617-7a1b09.png) 1. 应用层 * 任务:通过应用进程间的交互来完成特定网络的应用 * 协议:定义的是**应用进程间**通信和交互的规则 * 把应用层交互的数据单元称为**报文** * 常见的应用协议有:DNS,HTTP,SMTP 2. 运输层 * 任务:负责向两台**主机**中**进程之间**的**通信**提供**通用**的数据传输服务 * 具有复用和分用的功能 * 常见是两种协议: * 传输控制协议TCP(可靠的协议) * 提供面向连接的,可靠的数据传输服务 * 数据传输的单位是报文段 * 用户数据报协议UDP * 提供无连接的数据传输服务 * 数据传输的单位是用户数据报 3. 网络层 * 为分组交换网上的不同主机提供通信服务 * 两个具体任务: * 路由选择:通过一定的算法,在互联网中的每一个路由器上,生成一个用来转发分组的转发表 * 转发:每一个路由器在接收到一个分组后,要根据转发表中指明的路径把分组转发到下一个路由器 * 协议 * 互联网使用的网络层协议是无连接的网际协议IP和许多种路由选择协议 * IP协议分组也称为IP数据报 4. 数据链路层 * 任务:实现两个**相邻节点**之间的**可靠通信** * 在两个相邻节点之间的链路上传送帧 5. 物理层 * 任务:实现比特0,1的传输 * 确定连接电缆的插头应当有多少根引脚,以及各引脚该如何传输 * 注意:传递信息所利用的一些物理媒体,如双绞线、同轴电缆、光缆、无线信道等,**并不在物理层协议之内,而是在物理层协议的下面** 对等层与协议数据单元 OSI参考模型把对等层次之间传输的数据单位称为该层的协议数据单元PDU(Protocol Data Unit) **各层协议实际上就是在各个对等层之间传输数据时的各项规定** #### 1.7.4 实体、协议、服务和服务访问点 * 实体:表示任何可发送或接收信息的硬件或软件进程 * 协议与服务 * 协议:控制两个对等实体进行通信的规则的集合 * 在协议的控制下,两个对等实体间的通信使得**本层能够向上一层提供服务** * 要实现**本层协议**还需要使用**下层所提供的服务** * | 协议 | 服务 | | ------------------------------------ | ------------------------------------------ | | 通过其实现保证了能够向上一层提供服务 | 上层使用服务基于下层所提供的服务 | | 对上面的服务用户是透明的 | 上层的用户只能看见服务而无法看见下层的协议 | | 是水平的 | 是垂直的 | * 下层服务$\xrightarrow{基于}$本层协议$\xrightarrow{进一步}$上层服务 * 即每一层实现了**服务$\rightarrow$服务**的过程,而隐藏了内部的具体协议,只保留应用的接口 * 服务访问点SAP * 在同一系统中相邻两层的实体进行交互的地方,通常称为SAP * SAP是一个抽象概念,实质上是**逻辑接口** * OSI把相邻两层之间交换数据的单元称为服务数据单元SDU(注意与对等同层的PDU区分) #### 1.7.5 TCP/IP 的体系结构 ## 2 物理层 ### 2.1 物理层的基本概念 * 物理层考虑的是传输**数据比特流** * 物理层的作用是尽可能**屏蔽**掉不同的传输媒体和通信手段的差异(通用性) * 用于规范物理层的协议通常称为规程(procedure) * 物理层的主要任务是确定与传输媒体的接口的一些特性 * 机械特性(指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等![]) * 电气特性(指明在接口电缆的各条线上出现的电压的范围) * 功能特性(指明某条线上出现的某一电平的电压的意义) * 过程特性(指明对于不同功能的各种可能事件的出现顺序) ### 2.2 数据通信的基础知识 #### 2.2.1 通信系统的模型 一个数据通信系统包括三大部分:源系统(信源),传输系统和目的系统(信宿) 以公用电话网为例 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-56-31-0a401d5d620404abc42d7e52ada93be9-20211210095630-899e95.png) #### 2.2.2 有关信道的几个基本概念 ##### 2.2.1.1 常用术语 * 信号:数据的电气或电磁的表现 * 模拟信号:代表信息的取值连续 * 数字型号:代表信息的取值离散 * 码元:在使用时间域的波形表示数字信号时,代表的不同离散数值的基本波形(简单的说就是不同的数字信号波形对应的不同信息取值) * 信道:一般用来表示向某一个方向传输信息的媒体 * 单工通信:即只能有一个方向的通信,没有反方向的交互 * 半双工通信:允许进行双向的通信,但二者不可以同时进行 * 全双工通信:通行的双方可以同时发送和接收信息 * 基带信号:基本频带信号,即直接由信源发出的没有经过任何调制处理的0-1数字信号 * 调制 * 基带调制:仅对基带信号的波形进行变换,把数字信号转换成另一种形式的数字信号,这个过程称作**编码(encoding)** * 带通调制:使用载波(carrier)进行调制,把基带信号的频率范围迁移到较高的频段,并转换成**模拟信号** ##### 2.2.1.2 常用基带调制编码方式(参见图表) * 不归零制:正电平代表1,负电平代表0 * 归零制:正脉冲代表1,负脉冲代表0 * 曼彻斯特:位周期中心的向上跳变代表0,位周期中心的向下跳变代表1。但也可反过来定义 * 差分曼彻斯特:在每一位的中心处始终都有跳变。若为1,则前半码元与上一位的后半码元相同,即位开头不发生跳变,反之则不同,即位开头发生跳变。 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-56-47-c0346edd879fb7589d05c04c3262b966-20211210095646-87902b.png) * 曼彻斯特编码所占的频带宽度是原始基带宽度的两倍(以太网使用) * (差分)曼彻斯特编码产生的信号频率比不归零制更高 * (差分)曼彻斯特编码具有从信号波形本身中提取信号始终频率的特性,称之为具有自同步能力 ##### 2.2.1.3 常用带通调制编码方式(参见图表) * 调幅:载波的振幅随基带数字信号而变化 * 调频:载波的频率随基带数字信号而变化 * 调相:载波的初始相位随基带数字信号而变化 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-56-57-2b79451cc8f36b70d9adb5a773544426-20211210095656-a1d5f2.png) * 正交振幅调制(QAM) 使用多元制的振幅相位混合调制方法 即采用(振幅,相位)二元组判定码元的组合种类,可以大大提高数据传输率 但码元也不是越多越好,过多的比特数会给接收端的解调工作带来巨大的困难,增加传输出错率 #### 2.2.3 信道的极限容量 > 任何实际的信道都不是理想的,会存在各种失真和干扰 > 码元传输的**速率越高**,或信号传输的**距离越远**,或传输媒体**质量越差**,在信道的输出端的波形的**失真就越严重** * 限制码元在信道上的传输速率的两个因素: * 信道能够通过的频率范围 具体的信道所能通过的频率范围是有限的,信号中的许多高频分量往往不能通过信道 * 信噪比 信噪比时信号的平均功率与噪声的平均功率之比,记作$S/N$,并用分贝(dB)作为度量单位 信噪比$\begin{align}dB=10log_{10}\frac{S}{N}\end{align}$ * 奈奎斯特准则 * 奈氏准则:在带宽为$W$(Hz)的低通信道中,若不考虑噪声影响,则码元传输的**最高速率**(波特率)为$2W$(码元/秒) * 码元传输速率的单位是波特率,单位是(码元/秒),记作Baud * 波特率$B$与数据传输率$C$的关系:$C=Blog_2N=2Wlog_2N$,$N$表示码元表示的离散值个数 对于奈氏准则我们可以得到以下结论 1. 在任何信道中,码元传输速率是有上限的,若传输速率超过此上限就会出现严重的码间串扰问题 2. 信道的频带越宽$W\uparrow$,就可以用更高的速率进行码元的传输 3. 要想提高数据传输速率就必须要使用多元制的调制方式从而设法使每个码元携带更多的信息量,(对应QAM中:$N$=振幅个数$\times$相位个数) * 香农定理 * 香农用信息论的理论推导出了带宽受限且有高斯白噪声干扰的信道的极限,无差错的信息传输速率,即香农公式 $\begin{align}C=Wlog_2(1+\frac{S}{N})\end{align}$ 对于香农定理我们可以得到以下结论 1. 信道的带宽或信道中的信噪比越大,信息的极限传输速率越高 2. 对一定的传输带宽和一定的信噪比,信息传输速率的上限是确定的 3. 只要信息传输速率低于信道的极限传输速率,就能找到某种方法来实现无差错的传输 4. 香农定理得出的是极限信息传输速率,实际信道能达到的传输速率要比它低不少 * 典型例题 二进制信号在信噪比为127:1的4kHz信道上传输,最大数据传输速率为? 本题计算过程极易出错,**事实上,计算最大数据传输速率需要同时使用奈奎斯特准则与香农定理** 如果题目中只涉及到无噪声信道,那只需要使用奈氏准则即可,但如果是有噪声信道,我们不仅需要使用香农定理得到一个极限传输速率,同时也需要使用奈氏准则得到一个极限传输速率,**二者取最小值**才可以得到结果 $ans=min(4000\times log_2({1+\frac{127}{1}),2\times 4000\times log_2{2})}=8000b/s$ * 提高信道传输效率 * 可以使用编码的方式让每一个码元能够携带更多比特的信息量 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-57-06-ab33211758cc4b14f2a78cbcef9b3bc1-20211210095705-85d608.png =500x) ### 2.3 物理层下面的传输媒体 * 导引型 1. 双绞线 2. 同轴电缆 3. 光纤 * 非导引型 1. 微波 2. 红外线 3. 蓝牙 4. 无线通讯 ### 2.4 信道复用技术 * 复用是通信技术中的基本概念,他允许用户使用一个共享信道进行通信 #### 2.4.1 频分复用,时分复用和统计时分复用 * 频分复用 * 将整个带宽分成多份,每个用户占有一个固定的频带 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-57-21-4ff735c369f290b42d3f1482a5421a82-20211210095721-b2b6a7.png =300x) * 存在带宽闲置的问题 * 时分复用(TDM) * 将时间划分成多段等长的时分复用帧 * 每一个用户所占用的时隙时周期性出现的 * 时分复用的所有用户在不同的时间占用同样的频带宽度 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-57-34-22d5c1c8483db30bf726e1e19f965cd2-20211210095733-d7f3eb.png) * 存在时分复用帧限制的问题 * 统计时分复用(STDM) * 按需动态地给不同用户分配时隙,通过特定的统计算法以提高线路的利用率 #### 2.4.2 波分复用(WDM) 波分复用就是光的频分复用,使用一根光纤来同时传输多个光载波信号 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-58-00-3a5c11ce04bbf36f9ca480296543b620-20211210095759-98ccc3.png) #### 2.4.3 码分复用(CDMA) * 每一个用户都可以在**同样的时间**使用**同样的频带**进行通信 * 每一个用户都使用独特码型,以避免干扰 * 当码分复用信道为多个用户所共享式,就称为码分多址CDMA * 工作原理 * 为每一个比特时间划分为m个短的间隔,称为码片(chip) * 每一个站点都有唯一的m bit码片序列 * 发送比特1,则发送m bit码片序列 * 发送比特0,则发送其码片序列的二进制反码 * 故此,如果需要发送的原始信息的数据率为b bit/s,则在CDMA工况下的实际需要发送的数据率为mb bit/s * 重要特点 * 每个站点分配的码片序列必须互相正交 * 正交:向量$S$和$T$的规格化内积为0 \begin{align}S\cdot T=\frac{1}{m}\sum _{i=1}^mS_iT_i=0\end{align} * 任一码片向量与自身的规格化内积为1 \begin{align*}S\cdot S=\frac{1}{m}\sum_{i=1}^mS_iS_i=\frac{1}{m}\sum_{i=1}^mS_i^2=\frac{1}{m}\sum_{i=1}^m(\pm 1)^2=1\end{align*} * 一个码片向量与其反码的向量的规格化内积为-1 \begin{align}S\cdot \overline S =-\frac{1}{m}\sum_{i=1}^mS_iS_i=\frac{1}{m}\sum_{i=1}^mS_i^2=-\frac{1}{m}\sum_{i=1}^m(\pm 1)^2=-1\end{align} * 工作方式 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-58-12-0e3a5d6b63de09c181536c1cd0d52b53-20211210095812-263f4d.png) 假设有码片序列$S_1,S_2,S_3,...,S_n$ 则实际发送的序列为$S_{x_1},S_{x_2},S_{x_3},...,S_{x_n}\\=D_i==1?1:-1\cdot S_1,S_2,S_3,...,S_n$ 实际发送的信号为各信号叠加$T=\sum_{i=1}^n S_{x_i}$ 我们考虑此时的接受方$i$,其所分配的码片序列为$S_i$,在接收到信号$T$后,其与$S_i$作规格化内积得到$S_{res}=S_i\cdot T=S_i\cdot \sum_{i=1}^n S_{x_i}$,由于我们已知$\sum_{k=1}^n S_i\cdot S_k=1$,因此$S_{res}=\pm S_i$,该用户只会得到归属于自己的信息结果 ### 2.5 数字传输系统 [待补] ### 2.6 宽带接入技术 [待补] 1. ADSL技术 利用数字技术对现有的模拟用户电话线改造,使得其能够承载宽带业务 将300-3400KHz的频段作以下拆封使用 1. 300-304 传统电话 2. 340-438 上行 3. 438-1400 下行 2. 光纤同轴混合网 3. FTTx技术 ## 3 数据链路层 >完成了两个相邻节点之间的透明的可靠的传输 ### 3.1 使用点对点信道的数据链路层 #### 3.1.1 数据链路和帧 * 链路(link)是一条无源的点到点的物理线路段,两个节点中间没有其他任何的交换节点 **一条链路只是一条通路的组成部分** * 数据链路是物理线路与通信协议的结合体,在物理线路的基础上将实现这些通信协议的软硬件加入到链路上就构成了数据链路 通常**适配器**就可以实现软硬件(通信传输与协议实现)的功能 * 帧,即数据链路层的PDU,在IP数据报的基础上叠加报头与报尾 #### 3.1.2 数据链路层的三个基本问题 1. 封装成帧 封装成帧是指在一段数据(网络层来的IP数据报)的前后分别叠加首部与尾部就构成了帧 叠加首部与尾部的一个重要作用就是为了帧定界 首部的开始字符为``SOH``,表示帧的开始,尾部的末尾字符为``EOT``,表示帧的结束 $SOH........EOT$ 2. 透明传输 然而一旦出现数据段内容与``SOH``或``EOT``相同,就会导致传输过程中出现差错,因此必须对数据段内容进行处理,以避免错误情况 一种有效的解决方案是:字节填充,即在数据段中的``SOH``或``EOT``前面插入转义字符``ESC``,而当数据段中出现``ESC``时也在其前面插入``ESC``,如此约定,在接收段再对数据段进行处理便可以实现透明传输 3. 差错控制 在一段时间内,传输错误的比特占总传输比特的比率称为误码率 通常使用循环冗余检测CRC进行检错 * **循环冗余检测CRC** * 在发送段先把数据划分为多组,每组为$k$比特 * 在每组M后面再添加供差错检测用的n位冗余码,然后一起发送出去 * 冗余码的计算 * 用二进制的模2运算进行$2^n$乘$M$的运算,这相当于在$M$后面添加$n$个$0$ * 得到的$k+n$位的数除以事先选定好的长度为$n+1$位的除数$P$,得出商是$Q$而余数是$R$,余数$R$比除数$P$少一位即$R$是$n$位 * 将余数$R$作为帧检验序列FCS(Frame Check Sequence)拼接在数据$M$后面,一起发送出去 * CRC举例 设$k=6$,$M=101001$ 设$n=3$,除数$P=1101$ 被除数是$2^nM=101001000$ * 模2运算规则 * 商的每一位来源取决于每一轮除数的首位 * 各位执行异或XOR而非减法,也没有借位的机制 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-58-23-cfe72d0d19a02e8fc326b85926dc8bc9-20211210095822-5380ff.png) 模2运算的结果是:商$Q=110101$,余数是$R=001$ 把余数$R$作为冗余码添加在数据$M$的后面发送出去,即发送的数据是$2^nM+R$,即$101001001$,共$k+n$位 * **需要注意** * 仅使用CRC技术只能做到**无差错接受**,即"凡是接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错" * **"无比特差错"** 与 **"无传输差错"** 是两个不同的概念,事实上,"无差错传输"还需要加上确认与重传机制 * 注意:**目前所学习的数据链路层协议都不是可靠传输的协议**,事实上,那些可靠传输的协议因为效率过低而在发展过程当中被舍弃,转而把这个要求放在了网络层当中去实现 ### 3.2 点对点协议PPP * 在线路质量较差的早期,数据链路层使用可靠传输协议,高级数据链路控制HDLC(我们只学习核心部分) * 对于点对点的链路,目前使用最广泛的数据链路层协议是点对点协议PPP(Point-to-Point Protocol) #### 3.2.1 PPP协议的特点 * PPP协议应当满足的需求 1. 简单 这是PPP协议诞生的初衷,事实上在PPP协议当中只使用CRC 2. 封装成帧 必须规定特殊的字符作为帧定界符 3. 透明性 必须保证数据传输的透明性 4. 支持多种网络协议 能够在同一条物理链路上支持多种网络层协议(IP,IPX) 5. 支持多种类型链路 能够在多种类型的链路上运行(串行,并行,高低,光电...) 6. 差错检测 能够对接收端收到的帧进行检测,如有差错则立即丢弃,事实上在PPP协议当中只使用CRC 7. 检测连接状态 能够及时自动检测出链路是否处于正常工作状态 8. 最大传输单元MTU 必须对每一种类型的点对点链路设置最大传输单元MTU(MTU是帧内的数据部分(来自网络层的部分)的最大长度,而不是帧的总长度(我们约定其为1500字节),帧的前后还有首部与尾部) 9. 网络层地址协商 提供一种机制可以是相互通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址(MAC) 10. 数据压缩协商 提供一种方法来协商使用数据压缩算法 * PPP协议不需要考虑的需求 * 因为不需要实现可靠传输,因此不需要考虑: * 纠错 * 流量控制 * 序号 * 因为是点对点的传输,因此不需要考虑: * 多点线路 * 因为需要物理层支持全双工(PPP协议要求**必须**运行在全双工链路上),因此不需要考虑: * 半双工或单工链路 * PPP协议有**3个组成部分** 1. 一个将IP数据报封装到串行链路的方法 2. 链路控制协议LCP(Link Control Protocol),用来建立,配置和测试数据链路连接的 3. 一套网络控制协议NCP(Network Control Protocol),其中的包含多种协议来支持不同的网络层 #### 3.2.2 PPP协议的帧格式 * PPP协议的帧格式 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-58-34-971154a9679ef62568d8d86ea37b74b6-20211210095834-64ef88.png) * PPP帧的首部和尾部分别有4个字段和2个字段 * 帧头标志字段F=0x7E * 地址字段A至今未做实际使用,置为0xFF * 控制字段C至今未做实际使用,置为0x03 * 协议字段用来标识信息部分的种类 | 协议字段 | 信息字段 | | -------- | --------------- | | 0x0021 | IP数据报 | | 0x8021 | 网络控制数据 | | 0xC021 | PPP链路控制数据 | | 0xC023 | 鉴别数据 | * 帧校验序列FCS(基于CRC) 2字节 * 帧尾标志字段F=0x7E 1字节 * 透明传输 * 在PPP使用异步传输时,使用一种**特殊的字符填充法** 异步传输不要求收发时钟一致,是**面向字符**的 * 在PPP使用同步传输时,协议规定采用硬件来完成**比特填充** 同步传输要求首收发时钟一致,是**面向比特**的 * 字符填充法 * 出现0x7E字节,转变为0x7D,0x5E * 出现0x7D字节,转变为0x7D,0x5D * 出现ASCII的控制字符,即数值小于0x20的字符,在其前面添加0x7D,并将该字符更改为某一约定值(一般是+20) ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-58-41-46ed9476942d21576cc1975b6dc70761-20211210095841-d55b25.png) * 比特填充法 * 在发送端只要发现有5个连续1(0x7E),则立即填入一个0 * 在接收端发现只要有5个连续1,则将其后的0删除 #### 3.2.3 PPP协议的工作状态 * PPP链路的初始化过程 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-58-56-c3dfb7a75a2fc785670e33ee926a064a-20211210095856-2456fb.png) ### 3.3 使用广播信道的数据链路层(imp) #### 3.3.1 局域网的数据链路层 * 局域网最主要的特点是 1. 网络为**一个单位**所拥有 2. 地理位置和站点数目均**有限** * 局域网具有以下优点 1. 具有**广播功能**,可以方便的访问全网 2. 便于系统的扩展和演变,各设备的位置可灵活调整改变 3. 提高了系统的可靠性,可用性和生存性 * 局域网的拓扑结构 星型,环形,总线型 * 信道共享可能带来的问题 在数据同时发送时产生彼此的干扰,进而导致发送失败 * 解决方式 * 静态划分信道 * 复用技术,但代价高 * 动态媒体接入控制 * 随机接入 需要有解决碰撞的协议 * 受控接入 在令牌环或多点线路探寻的控制下服从性地发送信息 * 传统以太网 * 拓扑结构:总线型 * 运行速度在3-10Mbps不等 * 每一个节点必须获取电缆或者信道才能传送信息 * 每一个节点有全球唯一的48位MAC地址 * 以太网卡直接集成进计算机主板 * 适配器(网卡)的功能: * 进行串/并转换 * 对数据进行缓存 * 在计算机的操作系统安装设备驱动程序 * 实现以太网协议 #### 3.3.2 CSMA/CD协议 > 最初的以太网是将许多计算机都连接到一根总线上,易于实现广播通信。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。为了实现一对一通信,只需要将接收站的硬件地址写入帧首部的目的地址字段中,只有当其与接受适配器的硬件地址一致时才接收。但这样的连接方式存在一个问题,即,当多个站点同时发送数据时,会产生碰撞和冲突而导致发送失败。这里我们将试图解决这一问题 为了通信的简便,以太网采取了两个措施 1. 采用较为灵活的无连接的工作方式 * 不必先建立连接就可以直接发送数据 * 对发送的数据帧不进行编号,也不要求对方发回确认 2. 以太网发送的数据都使用曼彻斯特编码,即中心向下跳变表示1,向上跳变表示0 * 目的:使接收端可以提取比特同步信号(时钟自同步) * 缺点:其所占的频带宽度比原始的基带信号增加了一倍 * 载波监听多点接入/碰撞检测,CSMA/CD(Carrier Sense Multiple Access with Collision Detection) * 多点接入:多台计算机连接在同一根总线上 * 载波监听:每一个站点在发送数据前都要检查一下总线上是否有其他计算机在发送数据,如有则暂时停止发送,这一过程通常通过电工电子技术实现 * 碰撞检测:计算机边发送数据边检查信道上的信号电压大小 * 多个站点同时发送数据时会导致总线上的信号电压摆动值增大(信号叠加) * 当检测到信号电压摆动值超过一定的门限时,即认为发生了碰撞,此时暂停发送 * 一旦监测到总线碰撞,就要立即停止数据发送,避免继续占用浪费网络资源(碰撞发生时,所有的数据都会产生失真,此时链路上的数据均不可用),需要等待一段随机时间后再次发送 * CSMA/CD工作流程 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-59-05-fd7c75f2baa91a703798ef6053de4eb0-20211210095905-d73b50.png =400x) ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/09-59-58-2a5db6dddc2f1118d14a4d6c7dc4faf6-upload_e423d42f917749becd275b178993f94b-fbe26e.png ) 1. Is a frame ready for transmission? If not, wait for a frame. 2. Is medium idle? If not, wait until it becomes ready.(Must wait a continuous time period of 96bit) 3. Start transmitting and monitor for collision during transmission. 4. Did a collision occur? If so, go to collision detected procedure. 5. Reset retransmission counters and complete frame transmission. * 适配器每发送一个新的帧,都要执行一次CSMA/CD算法 * **帧间的间隔最小值为9.6$\mu s$**,目的是考虑到接收站的处理所需的时间 * 链路争用与解决 * 争用期 * 最先发送数据帧的站,在发送数据帧以后至多经过时间$2\tau$($\tau$是单程的端到端传播时延),就可以知道发送的数据帧是否早到了碰撞 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-00-14-da65b68b405838ec2ce87324acd8fac2-20211210100013-8ec491.png) * 以太网的端到端往返时延为$2\tau$,称为争用期,或碰撞窗口 * 经过争用期的这段时间内未检测到碰撞,才能肯定这次发送不会发生碰撞 * 二进制指数类型退避算法 1. 基本退避时间取为争用期时长$2\tau$ 2. 从整数集合$\{0,1,2,...,2^k-1\}$中随机的选出一个数,记为$r$,重传所需要的时延就是$r$倍的基本退避时间$r\cdot 2\tau$ 3. 参数$k$按下面公式计算 $k_{init}=1$ $k=min($重传次数,10$)$ 4. 当$k\leq 10$时,参数k等于重传次数 5. 当重传达16次仍不能成功时即丢弃该帧,并汇报给上一层(网络层) * 最短有效帧长 * 以太网规定了最短有效帧长为64字节即512比特 * 早期以太网的速度普遍为10Mbit/s,因此得到一个发送时延为**51.2$\mu s$,这个值也就是规定的争用期时长** * 如果在整个争用期内都没有检测到碰撞(即完整发送了512比特数据),那么后续发送的数据也就一定不会有干扰(这个推断来自于25.6$\mu s$的时间足够让数据从以太网的一端到另一端,一旦另一侧接受到了数据也就不会再发送了)。换句话说,如果有发送的数据小于64字节,即被中途截断,也就说明发生了碰撞 * 以太网最大传输距离$=v\cdot t=\tau \cdot V_{carrier}=25.6\times 10^{-6}\times 2.0\times 10^8=5012m$ * 人为干扰信号(强化碰撞,32或48比特的人为干扰信号) * 当发送数据的站一旦发现发生碰撞时,除了要立即停止发送数据,还要额外发送一个32或64比特的人为干扰信号,以便让所有用户都知道总线上发生了碰撞 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-00-25-0f209d1258587ee1095e943768b581a2-20211210100024-b5724b.png) * 总线被占用的时间即$T_B+T_J+\tau$,$T_B<51.2\mu s$ * CSMA/CD协议的重要特性 1. 使用 CSMA/CD 协议的以太网不能进行全双工通信而**只能进行双向交替通信(半双工通信)** 2. 每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性 3. 这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率 4. 帧间最小间隔为9.6$\mu s$ ,为使刚刚收到数据帧的站的接收缓存来得及清理 * CSMA/CD协议的要点 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-00-32-f78fce9cb94f5bb409709db648a880dd-20211210100032-b75473.png) #### 3.3.3 使用集线器的星型拓扑 * 采用双绞线的局域网采用星型拓扑,在星型的中心添加一个集线器 * 双绞线以太网总是和集线器配合使用 * 集线器的一些特点 * 集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍然像一个传统的以太网那样运行。 使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是 CSMA/CD 协议,并共享逻辑上的总线 * 集线器工作在**物理层**,不进行碰撞检测(相当于臭接线的) * 10BASE-T #### 3.3.4 以太网的信道利用率 * 由于存在碰撞等诸多原因,信道资源存在被浪费的现象。以太网总的信道利用率并不能达到100% * 一般情况下,发送一个数据帧所需要的的时间为$N\cdot 2\tau +T_0+\tau$ 其中$T_0$是发送数据帧所需要的的发送时延,$\tau$为其在链路上所需要的最长传输时延 * 定义参数$a$表示以太网单程端到端时延$\tau$与帧的发送时间$T_0$之比 $a=\frac{\tau}{T_0}$ * $a$越小,意味着可以在相对更短的时间内检测出碰撞并及时停止发送,此时信道的利用率较高 反之则意味着需要更多的时间才可以检测出碰撞并停止传送,有较多的信道资源被浪费,此时信道利用率较低 * 在理想情况下,各站发送数据均不会产生碰撞,此时的极限信道利用率为 $S_{max}=\frac{T_0}{T_0+\tau}=\frac{a}{1+a}$ * 据此我们得出以下以太网优化方法 * 当数据率一定时,以太网的连线的长度受到限制,否则$\tau$的数值会太大。 * 以太网的帧长不能太短,否则$T_0$的值会太小,使$a$值太大 #### 3.3.5 以太网的MAC层 * MAC层的硬件地址 * 在局域网中,硬件地址又称为物理地址,或MAC地址 * 更准确地说,MAC地址事实上是对某一接口的唯一标识符 * MAC地址(48位)字段的高3字节(24位)是制造商唯一标识符,低3字节(24位)为扩展唯一标识符 * MAC帧的格式 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-00-40-7f2fe8ca10fe1b5ea6c29fb233be613c-20211210100040-2b9591.png) * **MAC帧最短为64字节**,因此其是数据部分上限取决于MTU=1500字节,下限取决于64-8-6-6-2-4=46字节 有效的MAC帧长度应介于64与1518字节之间 * 当数据字段的长度小于46字节时,需要在数据字段的后面加入整数字节的填充字段 * 为了达到**比特同步**,需要在MAC前添加额外**8个字节的同步信息**,包括7字节的前同步码和1字节的帧开始定界符 * 需要注意的是,与PPP协议近似,一旦MAC帧传输过程中出现差错那么**链路会直接简单地将帧丢弃**,而非重传 ### 3.4 扩展的以太网 * 碰撞域: * 碰撞域(collision domain)又称为冲突域,是指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络 #### 3.4.1 在物理层扩展以太网 * 使用集线器扩展:将多个以太网段形成更大的,多级星型结构的以太网 * 优点: * 使原来属于不同碰撞域的以太网的计算机能够进行跨碰撞域的通信 * 扩大了以太网覆盖的地理范围 * 缺点: * 碰撞域增大了,但总的吞吐量(事实上依然通过总线型连接)并未提高 * 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将他们连接起来 #### 3.4.2 在数据链路层扩展以太网 * 使用交换机扩展,是更为常用的扩展以太网的方式 * 网桥与以太网交换机 * 网桥工作在**数据链路层** * 他根据MAC帧内的目的地址对收到的帧进行转发和过滤 * 当网桥收到一个帧时,他并不会向所有的接口转发此帧而是先检查此帧的目的MAC地址,然后再确定此帧转发至哪个接口,如果不存在该MAC地址,则将该数据帧丢弃(事实上,现在的主流网络结构都是一个主机直接连接交换机,不存在网络碰撞的问题) * 以太网交换机的特点 * 一般工作在**全双工模式** * 以太网交换机具有**并行性** 能够同时联通多对接口,多个主机同时通信 * 相互通信的主机都是独占传输媒体,无碰撞的传输数据 通过交换机扩展的以太网**扩大了广播域**但并**不会扩大碰撞域** * 接口有缓存设备,硬件提供了专用交换结构芯片,实现了高速传输 * 帧交换表(路由地址表)是通过**自学习算法**自动建立起来的 * 地址表自学习算法 * 交换表格式如下 | MAC地址 | 接口 | 有效时间 | | ------- | ---- | -------- | | | | | * 会首先将以太网帧的源地址提取出来,绑定记录源地址与接口,写入交换表 * 交换机试图在交换表中查找目的地址,如果找到了,就直接向该接口发送,如果没有找到,就会向所有接口广播该帧,如果有接口接受,则完成传输。如果没有接口接受,则该帧被丢弃 * 不断维护这个交换表,之后的传输过程就可以直接转发至目的接口。 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-00-51-c15517a4e13f9cdb34aabf131d9ad0bd-20211210100050-6afdd0.png) * 从总线以太网到星型以太网 * 总线以太网:集线器,半双工,CSMA/CD * 星型以太网:交换机,全双工,PPP #### 3.4.3 虚拟局域网(VLAN) ### 3.5 高速以太网 * 100BASE-T * 仍可以使用CSMA/CD协议工作在半双工模式下 * 可以工作在全双工模式下,但不可使用CSMA/CD * MAC帧格式不变 * 最短帧长仍维持64字节不变,但最大电缆长度缩短至100m,因此的$\tau$大幅缩小,信道利用率得到提升 * 帧间时间间隔缩小10倍,变为0.96$\mu s$ ## 4 网络层 ### 4.1 网络层提供的两种服务 1. 面向连接的服务 * 虚电路(逻辑连接) * 可靠传输的网络协议 2. 无连接的服务 * 尽最大努力交付 * 不预先建立连接 * 不提供服务质量的承诺 * 可靠交付由运输层承担 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-01-08-57ab63932c9c7545b549c4e6ab1bdd6e-upload_8c5b103538526ab9d0deffd6fc0bde00-fa0112.png) ### 4.2 网际协议IP * 网际协议IP是TCP/IP体系中两个最主要的协议之一 * 与其配套使用的还有 * 地址解析协议ARP * 网际控制报文协议ICMP * 网际组管理协议IGMP * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-01-20-89c3fab5a155d1fc4558b2c896c525ed-20211210100119-715184.png =250x) #### 4.2.1 虚拟互连网络 * 为了将网络互连并能够互相通信,需要解决很多问题,并使用一些中间设备 1. 物理层中继系统:转发器(repeater)或集线器(hub) 2. 数据链路层中继系统:桥接器(bridge)或交换机(switcher) 3. 网络层中继系统:路由器(router) * 一般来说,不使用路由器的话,网络仅仅是实现了扩大,但依然是一个局域网络,因此我们指网络互连都是指用**路由器**进行网络互连和路由选择 * 虚拟互连网络是一个逻辑互连网络,是一种天然异构的系统,我们使用**IP协议**,将性能各异的网络从用户看起来好像是一个统一的网络 * 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就**好像在一个网络上通信**一样,而看不见互连的各具体的网络异构细节 * 如果在这种覆盖全球的IP网的**上层使用TCP协议,那么就是现在的互联网 (Internet)** #### 4.2.2 分类的IP地址 * IP地址是给每个连接在互联网上的主机分配一个在全世界范围是唯一的32位标识符 * IP地址的编址方式 * 分类的IP地址 * 每一类地址都由两个固定长的字段组成,第一个字段为网络号net-id,第二个字段为主机号host-id ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-01-31-9542ad6f4bb708891e7e43b019139389-20211210100131-2e15d6.png) * 划分子网 * 基本思路: * 划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络 * 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位 * 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器 * 然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网 * 最后就将 IP 数据报直接交付目的主机 影响:在减少了IP地址浪费的同时,使得网络的组织更加灵活,同时保证了这种采用子网划分对外部是透明的 * 子网掩码: * 问题:从一个IP数据报的首部并无法判断源主机和目的主机所连接的网络是否进行了网络划分,即是否在同一个子网下 * 解决:使用子网掩码可以找出IP地址中的子网部分 * 即将网络号和子网号的对应位都设置为1,主机号的对应位设置为0 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-01-44-fe1dea7f9e619d78008ff1394ad72536-20211210100143-4c1a09.png) * 通过将IP地址与子网掩码进行按位与即可得到对应的网络号(net-id) * CIDR * 虽然划分子网的引入在一定程度上缓解了互联网在发展中遇到的困难,但是依然需要采取更加激进的策略进行解决 * 网络前缀 CIDR使用各种长度的网络前缀来代替分类地址中的网络号和子网号,具有相同连续网络前缀的IP地址组成了CIDR地址快 CIDR采用斜线记法,即用斜线/后面写上网络前缀所占的位数(实质上这个对应于子网掩码中1的个数)(可以理解成将子网划分策略推广到了整个互联网) * CIDR地址块 CIDR把网络前缀都相同的连续IP地址组成CIDR地址块 如:``128.14.32.0/20`` 其地址块的最小地址``128.14.32.0`` 其地址块的最大地址``128.14.47.255`` 只需要知道块中的任何一个地址,就可以知道这个地址块的起始地址和最大地址 * 路由聚合(route aggregation) 一个CIDR地址块可以表示很多地址,这种地址的聚合常称为路由聚合,他使得路由表中的一个项目可以表示很多个原来传统分类地址的路由 路由聚合也可以成为构成超网(supernetting) * CIDR分配应用举例 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-01-57-c76aab784486fb7156b23f0c8149ba5a-20211210100157-d92ec8.png) #### 4.2.3 IP地址与硬件地址 * IP地址与硬件地址是不同的地址 * 从层次角度看: 1. 硬件地址是数据链路层或物理层所使用的地址 2. IP地址是网络层及以上的层次使用的地址 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-02-06-df75d2114f4aa984fd76381d5dc7de36-20211210100206-33ca57.png) * 对于路由器而言是通过IP数据报中的目的站的IP地址的网络号进行数据选择的 #### 4.2.4 地址解析协议ARP * 解析:IP地址$\leftrightarrow$MAC地址 * ARP高速缓存 | IP | MAC | TTL | | ---- | ---- | ---- | | Text | Text | Text | * 几点说明 * 当没有对应主机的ARP记录时会向本局域网**广播**发送一个ARP请求分组,等待对应设备响应 * ARP高速缓存 * 本地ARP请求,其解决的事同一个局域网内的主机与路由器的IP地址和硬件地址的映射关系 * 地址映射都设置生存时间TTL #### 4.2.5 IP数据报的格式 * 一个IP数据包由首部和数据两部分组成,其中首部的前一部分为固定长度20字节,后部是一些可选字段,长度是可变的,最长不超过60字节 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-02-13-1ef4aae6dccb828d05907ef75a7ba0be-20211210100213-9db17c.png) * IP数据报首部的各个字段 1. 版本,IPv4/IPv6 2. 首部长度,可表示0-15的单位值,一个单位对应4字节 3. 区分服务,未实际使用 4. 总长度,表示**首部+数据**的总长度,单位为字节 5. 标识,用来产生IP数据报的标识(分片) 6. 标志,如果最低位(MF)为1表示其后还有分片,为0则表示为最后一个分片。其中只有当中间位(DF)为0时才允许分片 7. 片偏移,指较长的分组在分片后某片在原分组中的相对位置,以长度单位表示,一个单位为8个字节 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-02-24-459fcf11587dbce6f00f85456f758069-20211210100223-7f2e1f.png) 8. 生存时间,表示数据报在网络中可通过的最大路由器数 9. 协议,指出该数据报携带的数据使用的协议 10. 首部检验和 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-02-31-6193e2cc4351b185bde3cef5399fcd10-20211210100230-f8606b.png) 11. 可变部分,各种选项字段的字段区域,实际上这些选项很少被使用 ### 4.3 IP层转发分组的流程 #### 4.3.1 基于终点的转发 * 问题:直接在庞大的网络上根据目的IP地址查找下一跳的路由器过于慢,不具有可实现性 * 解决:不直接查找目的主机,而是现查找目的网络(即net-id,而暂时不考虑host-id)。在找到目的网络以后再在这个网络上寻找目的主机,这样就可以大大压缩转发表的大小 * 需要注意的问题 IP数据报的首部中没有地方可以用来指明下一跳路由器的IP地址 当路由器收到待转发的数据报,不是将下一跳路由器的 IP地址填入IP数据报,而是送交下层的网络接口软件 网络接口软件使用ARP负责将下一跳路由器的IP地址转换成硬件地址,并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器 #### 4.3.2 最长前缀匹配 * 在使用CIDR时,路由表中的每个项目由**网络前缀**和**下一跳地址**组成,在查找路由由表时可能会得到不止一个匹配结果,因此应当从匹配结果中选择具有**最长网络前缀**的路由 * 网络前缀越长(即/num num$\uparrow$),其地址块越小,路由越具体,更加精准地转发 * 最长前缀匹配举例 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-02-40-6b018e897e453637f9aa293e1b0c823f-20211210100239-c31a13.png =500x) ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-02-53-17afabf609f35d8558c24fc265038486-20211210100252-e3fdd9.png =500x) * 实际的转发表还可能增加两种特殊的路由 * 主机路由 * 虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由 * 采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。 * 默认路由 * 路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间 * 这种转发方式在一个网络只有很少的对外连接时是很有用的 ### 4.4 网际控制报文协议ICMP #### 4.4.1 ICMP报文的种类 ICMP的种类有两种,即ICMP差错报告报文和ICMP询问报文 1. 差错报告报文分类 * 终点不可达,时间超过,参数问题,重定向 2. 询问报文分类 * 回送请求和回答 测试是否可达 * 时间戳请求和回答 测试端到端时延 #### 4.4.2 ICMP的应用举例 1. ping 2. tracert/traceroute ### 4.5 互联网的路由选择协议 #### 4.5.1 有关路由选择协议的几个基本概念 * 从路由算法的自适应性考虑 * 静态路由选择策略 简单,开销小,但不能及时适应网络状态的变化 * 动态路由选择策略 能及时适应网络状态的变化,但实现较为复杂,开销也大 * 分层次的路由选择协议 * 自治系统AS 在单一的技术管理下的一组路由器,而这些路由器使用一种AS内部的路由选择协议和共同的度量以确定分组在该AS内的路由 * 内部网关协议IGP * 在一个自治系统内部使用的路由选择协议 * 自治系统内部的路由选择叫做域内路由选择 * 外部网关协议EGP * 自治系统与自治系统之间完成路由选择所使用协议 * 自治系统之间的路由选择叫做域间路由选择 #### 4.5.2 内部网关协议RIP * 路由信息协议RIP * 路由信息协议RIP是IGP中最先得到广泛使用的协议 * RIP是一种**分布式**的,基于**距离向量**的路由选择协议 * RIP协议要求网络中的每一个路由器都要**维护从它自己到其他每一个目的网络的距离记录** * 工作准则 * RIP认为一个好的路由路径就是他通过的路由器的数目少 * RIP允许一个路径最多只能包含15个路由器(包含自己是16个) * 如果路径上超过了15个路由器,则RIP认为其不可达,因此其只适用于小型互联网 * RIP不能在两个网络之间同时使用多条路由,即会始终选择路由跳数最小的一条 * 工作特点 * 仅和**相邻路由器**交换信息 * 交换的信息是**当前本路由器所知道的全部信息,即一整个路由表** * 按固定的时间间隔交换路由信息 * 路由表更新规则 1. 没有新消息,不变 2. 一条新路由,增加 3. 相同的下一跳,替换 4. 不同的下一跳,新跳数小,替换 5. 不同的下一跳,跳数相同,不变 6. 不同的下一跳,新跳数大,不变 * 优缺点 * 实现简单,开销较小 * 跳数为15,限制了网络的规模 * 交换信息是完整路由表,后期维护开销较大 * "坏消息传播得慢",更新收敛时间较长 #### 4.5.3 内部网关协议OSPF * 开放最短路径优先OSPF * 采用了Dijkstra最短路径算法 * 采用了分布式的链路状态协议 * 工作特点 * 洪泛法 向本AS内的所有路由器发送信息使用洪泛法 * 发送的信息是与**本路由器相邻的所有路由器的链路状态信息**,并不是全部信息 链路状态是指链路的各种度量指标 * 只有当链路状态发生变化时,才会使用洪泛法向所有路由器发送信息 * 链路状态数据库(Link-state Database) * 数据库实质上是全网(自治系统内)的拓扑结构图,全网范围内是保持一致的 * OSPF最终会形成一个以自己为根结点的最短路径,形成去其他网络的最短路由 * OSPF的更新过程收敛较快 ### 4.6 虚拟专用网与网络地址转换 #### 4.6.1 虚拟专用网VPN * 由于IP地址的紧缺性,互联网的开放性(不安全性)因此通常来说,机构并不会将所有设备全部接入互联网,而由本使用机构自行分配本地IP地址 * 本地地址与全球地址 本地地址,指仅在机构内部使用,且不会分配到全球公网的IP地址:10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 * 通过隧道技术,就可以使得分散在各地的设备具有同一个网段下的地址,进而可以访问一些内部的服务器 #### 4.6.2 网络地址转换NAT * 网络地址转换可以解决IP地址紧缺的问题。(多数用户侧的设备都是单向的,并没有提供服务的需求,也就意味着他们并不需要拥有一个全球IP地址) * 需要在专用网连接到互联网的路由器上安装NAT软件 * 装有NAT软件的路由器叫做NAT路由器,它(可能是一个路由器组),其最终出口至少有一个有效的外部全球IP地址 * 所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和互联网连接 * 通过NAT 路由器的通信必须由专用网内的主机发起,因此,专用网内部的主机不能充当服务器用 * 基于地址转换的NAT * 当NAT路由器具有n个全球IP地址时,专用网内最多可以同时有n台主机接入到互联网,形成<地址>-><地址>的映射 * 基于端口的的NAPT * 充分复用端口(1-65535),形成<地址,端口>-><地址,端口>的映射 ## 5 运输层 ### 5.1 运输层协议概述 #### 5.1.1 进程间通信 * 运输层向它上面的应用层提供通信服务,它属于**面向通信部分的最高层**,同时也是**用户功能中的最低层** * 基于端口的分用与复用 * 多个进程通过运输层同时使用网络层的服务,并且形成数据报 * TCP复用——TCP报文段 * UDP复用——UDP用户数据报 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-03-05-476298f85e55a95eb8d4d531d8a8dd3e-20211210100305-fc9ccb.png) * 运输层可以提供进程间的逻辑通信,向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道 * 仅有主机的协议栈才有运输层,路由器/三层交换机只用到下三层的功能 * 通信协议 逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别 * TCP 全双工的可靠信道 * UDP 不可靠信道(效率高) #### 5.1.2 运输层的两个主要协议 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-03-12-a10d6ae37cdf78f7b22abfc2d1681e09-20211210100311-b4aaf0.png) #### 5.1.3 运输层的端口 * 运行在计算机中的进程是用进程标识符来标志的,但运行在应用层的各种应用进程却不应当让计算机操作系统指派它的进程标识符 * 于是用统一的方法对 TCP/IP 体系的应用进程进行标志(协议端口号) * 端口用一个 16 位端口号进行标志,允许有65535个不同的端口号 * 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在互联网中,不同计算机的相同端口号是没有联系的 * 两大类端口号 1. 服务器端使用的端口号 1. 熟知端口,数值一般为0-1023(0000H-03FFH) 2. 登记端口号,数值为1024-49151(4000H-BFFFH),为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在IANA登记以防止重复 2. 客户端使用的端口号 1. 又称为短暂端口号,数值为49152-65535(C000H-FFFFH),留给客户进程选择暂时使用 2. 当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用 #### 5.2.1 UDP概述 * UDP的主要特点 * UDP是无连接的,发送数据之前**不需要建立连接**,因此减少了开销和发送数据之前的时延。 * UDP使用尽最大努力交付,即**不保证可靠交付**,因此主机不需要维持复杂的连接状态表。 * UDP是**面向报文**的(TCP是面向连接的,注意区分)。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。**UDP一次交付一个完整的报文** * UDP没有拥塞控制,不会因为网络阻塞改变源主机的发送速率 * UDP支持一对一,一对多,多对一和多对多的交互通信 * UDP的**首部开销小**,只有8字节(TCP的首部长达20字节) * UDP是面向报文的 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-03-19-3653e80e133faf88f0a204755f46ffc9-20211210100319-819884.png) #### 5.2.2 UDP的首部格式 * 用户数据报 UDP 有两个字段:数据字段和首部字段。 * 首部字段有 8 个字节,由 4 个字段组成,每个字段都是 2 个字节。 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-03-26-0d79d0b9f018db90fa6653dcc7ffa226-20211210100326-d415b4.png =400x) * UDP 基于端口的分用 当运输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交给最后的终点——应用进程 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-03-40-2de1154d7f81a24c6ef8f313ceefdb9b-20211210100339-cb8964.png =400x) * 伪首部 UDP报文还有一个12字节的伪首部,该首部不会被真实发送出去,他只被用于计算校验和(事实上,IP信息会在网络层被添加进入IP数据报中) ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-03-53-1f8b9d277661ee2eca00cfbc5b7f8add-20211210100352-0243bc.png =450x) * 计算UDP检验和的例子 求和+取反(如果最高位溢出,则最低位+1,循环相加) ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-04-02-c549282c68d374b2dd515bf4c1f25202-20211210100401-3cd431.png) ### 5.3 传输控制协议TCP概述 #### 5.3.1 TCP概述 * TCP最主要的特点 * TCP 是**面向连接**的运输层协议。**在无连接的、不可靠的 IP 网络服务基础之上提供可靠交付的服务** * 每一条 TCP 连接只能有两个端点 (endpoint),**每一条TCP连接只能是点对点的**(一对一) * TCP 提供可靠交付的服务(**无差错、不重复、不丢失、按序**) * TCP 提供全双工通信(TCP缓存) * TCP是**面向字节流**的 * TCP中的**流**是指:流入或流出进程的字节序列 * **面向字节流**指TCP把应用程序交付下来的数据仅仅视作一连串无结构的字节流 * TCP不保证具有对应大小的关系(即各窗口(块)大小可以不同) * 接受方应用程序收到的字节流必须和发送方发出的字节流**完全一样**(窗口机制) * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-04-10-b0dbbe054ca01c6f2115e8b1e7f3a2f0-20211210100410-26b12e.png) #### 5.3.2 TCP的连接 * TCP的连接是一条**虚连接**而不是一条真正的链接 * TCP对应用进程一次把多长的报文发送到TCP的缓存中是不关心的 * TCP根据对方给出的**窗口值**和**当前网络拥塞的程度**来确定一个报文段应包含多少个字节(可以有效避免因为网络拥塞而导致的丢包现象,对比UDP,其发送的报文长度是由应用给出的) * TCP可把太长的数据块划分短一点再传送 * TCP也可以等到累计足够多的字节后再构成报文段发送出去 * TCP把连接作为最基本的抽象,每一条TCP连接都有两个端点 * TCP连接的端点叫做套接字(socket)或插口 * 端口号拼接上IP地址即构成了套接字<IP\:port> * 每个TCP连接由被通信两端的两个套接字所确定{<IP1\:port1>,<IP2\:port2>} * 一个IP地址可以建立多个TCP连接 ### 5.4 可靠传输的工作原理 事实上,不管是网络层还是数据链路层,随着时代的发展都开始使用不可靠的传输协议,因此,保证网络传输的可靠性的任务由运输层实现 理想的传输条件有以下两个特点: * 传输信道不产生差错。 * 不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。 可靠传输协议: 1. 停止等待协议 2. 连续ARQ协议 #### 5.4.1 停止等待协议 * 停止等待 * "停止等待"就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。 * 全双工通信的双方既是发送方也是接收方 * 无差错情况 * 停止等待就体现在发送方发送与确认是间隔进行的 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-04-18-e5b76d8f4098edd4f70b12a800baf206-20211210100418-c0991e.png =300x) * 出现差错 * 超时重传 * 如果出现差错,可能有两种情形 * B接收M1时检测出了差错,就丢弃M1,其他什么也不做(不通知A收到有差错的分组) * M1在传输过程中丢失了,这时B当然什么都不知道,也什么都不做 * 即只要没有正确接收,B都不会发送任何信息。对于A来说,其发送每一个数据之后都会等待一个超时时间(Set Timeout Timer),一旦时限内没有收到来自B的ack信息,A都会发起重传 * 编号机制 * 虽然通过超时重传机制,保证了B能够完整无误地接受到所有数据,但是可能出现这样一种情况:由于网络拥塞或各种情形,导致A没有在时限内正确接收到来自B的ack信息(其实B已经发送了),那么A又会发起重传,那么B就会重复接受一个数据帧 * 引入编号机制 * A为每一个发送的分组都进行编号。若B收到了编号相同的分组,则认为收到了重复分组,丢弃重复的分组,并回送确认(避免重复接受) * B为发送的确认也进行编号,指示该确认是对哪一个分组的确认。A根据确认及其编号,可以确定它是对哪一个分组的确认,避免重发发送。若为重复的确认,则将其丢弃(避免重复发送) * 注意事项 * 在发送完一个分组后,必须暂时保留已发送的分组的副本,以备重发 * 分组和确认分组**都**必须进行编号 * 超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些 * 确认丢失和确认迟到 * B收到重传的分组可能有以下两种情况 * B本身没正确接收到该分组,其缓存中也就没有对应编号的分组,于是接收,并发送ack * B正确接受到了该分组,但因为其他原因导致A没有接收到其ack信息,B的缓存中已有了对应编号的分组,于是直接丢弃,并**也需要发送ack**(因为在A看来,B是没有正确接受该分组的) * 信道利用率 * 停止等待协议的实现虽然简单,但其信道利用率太低 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-04-31-53062c63c9e026e20488bfa7d4ac18a7-20211210100431-7c1b6c.png) * $U=\frac{T_{D}}{T_{D}+{RTT}+T_{A}}$ * 例题:鉴定1200km的信道的往返时间RTT=20ms,分组长度是1200bit,发送速率是1Mbit/s。若忽略处理时间和TA,求信道利用率?若把发送速率提高到10Mbit/s,信道利用率是多少 $\begin{align} U=\frac{T_D}{T_D+RTT+T_A}=\frac{1200/(1\times 10^6)}{1200/(1\times 10^6)+20\times 10^{-3}}=5.66\% \end{align}$ * 流水线传输 * 为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输。 * 流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不间断地传送 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-04-38-2bc7a1ffba0e09bc2cdde0b37f90b928-20211210100438-0e1fb5.png) * 停止等待协议的要点 * **停止等待** 发送方每次只发送一个分组。在收到确认后再发送下一个分组 * **编号** 对发送的每个分组和确认都进行编号 * **自动重传请求** 发送方为每个发送的分组设置一个超时计时器。若超时计时器超时,发送方会自动重传分组。 * **简单,但信道利用率太低** #### 5.4.2 连续ARQ协议 连续ARQ协议在停止等待协议的基础上做了优化与改造 * 发送窗口 发送方维持一个发送窗口,位于发送窗口内的分组都可被连续发送出去,而不需要等待对方的确认。 * 发送窗口滑动 发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。 * 累积确认 接收方对按序到达的最后一个分组发送确认,表示∶到这个分组为止的所有分组都已正确收到了。 * 实现过程 发送方维持一个发送窗口,接受方对一次连续有序的发送只返回一个确认信号,发送方接收到确认信号以后,右移发送窗口,开始下一轮发送 举例: 发送方发送1,2,3,4,5 接收方接受到了1,2,3,4,5 此时发送ack信号,发送方从分组6开始继续发送 接收方接受到了1,2,4,5 此时对于分组2发送ack信号,发送方从分组3开始继续发送 * 优点 容易实现 * 缺点 不能向发送方反映出接收方已经正确收到的所有分组的信息 如例中,因为分组3丢失了,就要重传分组3以后的所有分组,而事实上,接收方正确接受了4,5分组。这就产生了一定程度的数据冗余 * 基本思想与要点 1. 发送方一次可以发出多个分组 2. 使用滑动窗口协议控制发送方和接收方所能发送和接收的分组的数量和编号 3. 每收到一个确认,发送方就把发送窗口向前滑动 4. 接收方一般采用累积确认的方式 5. 采用回退N(Go-Back-N)方法进行重传 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-04-47-68a0977116c9caac5b915f467ffa8b4a-20211210100446-8371a5.png) ### 5.5 TCP报文段的首部格式 * TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段 * 一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它首部中各字段的作用 * TCP报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项(n是整数)。因此**TCP首部的最小长度是20字节** ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-04-53-25557293e933971772f1094beef98e84-20211210100453-843c35.png) * 序号 序号最长为32位,可以表示$2^32$个**字节**,即为4GB * 数据偏移 它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,其有4位,可表示到15\*4=60字节,这也是TCP报文段首部的最长长度 * SYN,FIN与ACK ACK表示这是一个确认报文 SYN表示同步信号,通常是一个建立连接时使用的。 SYN=1,ACK=0表示这是一个连接请求报文。SYN=1,ACK=1,表示一个连接接受响应报文 FIN表示结束信号,通常是一个结束连接时使用的。 FIN=1,ACK=0表示这是一个连接释放报文。FIN=1,ACK=1,表示一个连接释放响应报文 * 校验和 与UDP类似,同样需要添加伪首部 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-05-03-bac2dfe5288106f229592ab0723c1fc4-20211210100503-b50724.png) 加和,取反 * 最大报文段长度(Maximum Segment Size MSS) 通常是告知发送方,接收方的缓存所能接受的报文段的**数据字段**最大长度为MSS个字节 数据字段是TCP报文段总长度-首部长度 TCP报文段整体落入IP数据报的MTU部分,其最大为1500字节,再减去TCP首部的20字节,可以得到TCP数据字段的最长长度为1480字节 MSS过小,报文段中的有效数据过少,网络利用率降低 MSS过大,可能需要拆分成多个短IP数据报片,再在目标装配,中途有一个出错还要全部重传,因此开销增大 MSS应尽可能大些,但不能过大,实际最佳MSS是很难确定的 ### 5.6 TCP可靠传输的实现 #### 5.6.1 以字节为单位的滑动窗口 * TCP使用流水线传输和滑动窗口协议实现高效、可靠的传输 * TCP的滑动窗口是以字节为单位的。 * 发送方A和接收方B分别维持一个发送窗口和一个接收窗口 * 发送窗口表示:在没有收到确认的情况下,可以连续把窗口内的数据全部发送出去,**凡是已发送出去的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用** * 发送窗口与发送缓存的关系 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-05-10-81e58d7688b2eaa8c7a008810dced007-20211210100509-bf71b5.png =350x) * 接收窗口表示:只允许接收落入窗口内的数据 * 接受窗口与接受缓存的关系 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-05-21-606f0d50f4980c7a12c04f3a92508d8e-20211210100521-3f5cd9.png =350x) * 如果应用程序来不及读取收到的数据,接收缓存就会被填满,使接收窗口减小到0,反之,接收窗口变大,但不能超过接收缓存的大小 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-05-35-242d5705c48baa10fef873ec071418b3-20211210100535-752606.png =450x) 注意点: * A的发送窗口并不**总是**和B的接收窗口一样大(因为有一定的时间滞后,但他们预期应该是一样大的) * TCP标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程 * TCP要求接收方**必须有累计确认**的功能,这样可以减小传输开销 * 捎带确认:接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上 #### 5.6.2 TCP超时时间重传的选择 * 要求:如果把超时重传时间设置得太短,就会引起很多报文段的不必要的重传,使网络负荷增大;但若把超时重传时间设置得过长,则又使网络的空闲时间增大,降低了传输效率 * 加权平均往返时间$RTT_S$ * 因此TCP采用了一种**自适应算法**,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT * 第一次测量到RTT样本时,$RTT_S$值就取为所测量到的RTT样本值,每次获取到一个RTT时,都根据下式,更新加权平均往返时间$RTT_S$ * $RTT_{S_{new}}=(1-\alpha)\cdot RTT_{S_{old}}+\alpha \cdot RTT_{sample}$ * $\alpha$通常为0.125 * 超时重传时间$RTO$ * $RTO=RTT_S+4RTT_D$ * $RTT_D$是$RTT$的偏差的加权平均值,第一次测量到RTT样本时,$RTT_D$值就取为所测量到的RTT样本值的一半,每次获取到一个RTT时,都根据下式,更新超时重传时间$RTO$ * $RTT_{D_{new}}=(1-\beta)\cdot RTT_{D_{old}}+\beta \cdot |RTT_S-RTT_{sample}|$ * $\beta$通常为0.25 * 测量RTT可能遇到的问题 * TCP 报文段 1 没有收到确认。重传(即报文段 2)后,收到了确认报文段 ACK。那么如何判定此确认报文段是对原来的报文段 1 的确认,还是对重传的报文段 2 的确认? * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-05-47-cd586a89922751c0f413ae292e9b0ffb-20211210100547-c33a55.png =500x) * Karn算法 * 在计算平均往返时间RTT时,只要报文段重传了,就不采用其往返时间样本,这样得出的加权平均平均往返时间$RTT_S$和超时重传时间RTO就较准确 * 报文段每重传一次,就把RTO增大一些 * $RTO_{new}=\gamma \cdot RTO_{old}$ * $\gamma$通常为2 ### 5.7 TCP的流量控制 #### 5.7.1 利用滑动窗口实现流量控制 * 流量控制 (flow control) 就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞 * 发送窗口(send windows swnd) * 接收窗口(receive window rwnd) * 拥塞窗口(congest windows cwnd) * 利用滑动窗口实现流量控制 * 利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制 * 举例如![](https://pic-static.yilantingfeng.site/imgs/2021/12/06/21-17-18-722b61d96ef6d7433617755c912fbcd3-20211206211717-44f4ad.png) * 死锁 * 上述这种策略可能会导致死锁的产生,即假设,接收方向发送方发送了零窗口的报文段后不久,接收方的接收缓存又有了一些存储空间。于是接收方向发送方发送了rwnd=400的报文段。但此时,这个报文段在传输过程中**丢失了**。于是,发送方就一直等待收到接收方发送的零窗口的通知,而接收方也一直在等待发送方的数据, * 为此,TCP为每一个连接设有一个**持续计数器** * 持续计数器 * **只要TCP连接的一方收到对方的零窗口通知,就启动该持续计时器** * 若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值 * 若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器 * 若窗口不是零,则死锁的僵局就可以打破了 #### 5.7.2 TCP的传输效率 * 可以用不同的机制来控制TCP报文段的发送时间 1. TCP维持一个变量,它等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去(按长) 2. 发送方的应用进程指明要求发送报文段,即TCP支持的推送 (push) 操作(按需) 3. 发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过 MSS)发送出去(按时) * 发送糊涂窗口综合征 * 如果发送的数据过少,如1字节,其有效数据率将会过低,另一方面,接收方也需要回送确认信号,链路上面流过了40(确认数据包)+41(IP数据包)的数据,却实际上是有一个字节的有效数据 * 解决方法 * 接收方推迟发送确认报文,尽量捎带 * Nagle方法 1. 若应用进程把要发送的数据逐个字节送到TCP的缓存,则发送方就把第一个数据字节先发出去。后面缓存 2. 当发送方收到对第一个数据字符的确认后,把缓存的所有字符组成报文段发送出去,同时对继续到达的数据进行缓存 3. 收到对前一个报文段的确认后,才继续发下一个 4. 额外规定:到达数据达到发窗口大小的一半或达到报文段的最大长度,就立即发送 5. Nagle方法可以有效降低因为链路故障而导致的重传损耗,以及发送数据过少导致的低利用现象 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-06-05-2c1218847400c8f94c488a8026e0305b-20211210100604-a7fb8f.png) * 接受糊涂窗口综合征 * 如果接收方的应用进程读取速度过慢,会导致接收方频繁地在发送更新接收窗口的确认信号上,发送方的发送效率也并不高 * 解决方法 * 接收方进行等待,直到接收缓存已**有足够空间容纳一个最长的报文段**,或者等到**接收缓存已有一半空闲的空间**,才向接收方发送确认报文,并通知当前的窗口 ### 5.8 TCP的拥塞控制 #### 5.8.1 拥塞控制的一般原理 * 拥塞:在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种现象称为拥塞 (congestion) ![](https://pic-static.yilantingfeng.site/imgs/2021/12/05/21-24-12-5c9dd18b07b97200ea4a2cde662d8327-20211205212411-346acd.png =300x) * 拥塞控制与流量控制的区别于联系 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/05/21-24-35-a88a806c2903c2d3c2a72f87241881b2-20211205212434-1e3a95.png =550x) #### 5.8.2 TCP的拥塞控制方法 * 感知网络拥塞 * 收到三个重复的ACK:预示网络可能会出现拥塞(实际可能还未发生拥塞) * 重传定时器超时:网络已经发生了拥塞 * 限制发送速率 * TCP采用基于窗口的方法进行拥塞控制。该方法属于闭环(在发生拥塞后,采取措施进行控制,消除拥塞)控制方法。 * TCP发送方维持一个拥塞窗口cwnd (Congestion Window) * 发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量。发送窗口大小不仅取决于接收方窗口,还取决于网络的拥塞状况,动态变化。所以真正的**swnd=Min(rwnd,cwnd)** * 合理调整发送速率 * 只要网络没有出现拥塞,拥塞窗口cwnd就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率 * 只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口cwnd减小一些,以减少注入到网络中的分组数,以便缓解网络出现的拥塞 * TCP拥塞控制算法 * 慢开始 * 从小到大逐渐增大拥塞窗口数值,以**确定网络的负载能力或拥塞程度** * $\delta$cwnd=min(N,SMSS) * N是刚被确认的字节数 * SMSS是发送方的最大报文段 * 事实上,如果网络容量充足,每一轮次后cwmd是翻倍增加的,可以很快的达到一个比较大的数值,实际效率并不低。 * 反而可能会在后期因为cwnd增长过大导致网络拥塞,因此需要设置一个慢开始门限ssthreh * 当cwnd<ssthresh时,使用慢开始 * 当cwnd>ssthresh是,使用拥塞避免算法 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/05/21-44-19-a623d9108fea570ccf286dd2f16c4d8d-20211205214418-047ed7.png =550x) * 拥塞避免 * 让cwnd缓慢增大,避免出现拥塞 * **与慢开始的指数增长不同,拥塞避免每经过一个传输轮次,只cwnd++,cwnd是成线性规律缓慢增长** * 慢开始与拥塞避免的联合应用 * 无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(重传定时器超时) * ssthresh=max(cwnd/2,2) * cwnd = 1 * 再次开始执行慢开始算法 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/05/21-48-00-6afbb936fc6d77a7ade7a7d0bd3e42e1-20211205214800-33e93f.png) * 快重传 * 发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传,这样就不会出现超时,发送方也不就会误认为出现了网络拥塞 * 快重传**并非是取消重传计时器**,而是在某些情况下可以适当更快的重传丢失的报文段 * 快恢复 * 当发送端收到连续三个重复的确认时,由于发送方现在认为网络很可能没有发生拥塞(只是丢包了),执行快恢复算法 * 慢开始门限ssthresh=cwnd/2 * cwnd=ssthresh * 开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大 * TCP拥塞控制流程图及要点 * ![](https://pic-static.yilantingfeng.site/imgs/2021/12/05/21-58-07-5176637b132c797d50e845738868e266-20211205215807-c0676e.png) * 加法增大(+=1);乘法减小(/=2);AIMD算法 ### 5.9 TCP的运输连接管理 * 建立连接(三次握手) ![](https://pic-static.yilantingfeng.site/imgs/2021/12/05/22-01-41-3be3de34919cb9f6569a9bf43776352e-20211205220140-fd4e8b.png =450x) ![](https://pic-static.yilantingfeng.site/imgs/2021/12/05/22-03-40-9543c68c124910cfe3090285c1f61241-upload_1d2eb04d77b119c0e625fd8d9120c521-c60342.gif =300x) * 释放连接(四次挥手) * 为了保证 A 发送的最后一个 ACK 报文段能够到达B;以及防止失效的连接请求报文段,因此设置2MSL即最长报文寿命时间,经过此时间后,发送方才正式关闭连接 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/05/22-02-09-c54fa3e61956333a13ef40534ed6c211-20211205220209-0c87c8.png =450x) ![](https://pic-static.yilantingfeng.site/imgs/2021/12/05/22-04-14-94b4ef1cddb597eded056ef06e77ce7b-upload_9064ca7d29d48feb01634ea4c3bef8f1-c0d656.gif =300x) * TCP有限状态自动机 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/06/15-58-45-e58edd066bc4fe233aa9cba943491ee9-20211206155843-8ebb31.png ) ## 6 应用层 * 应用层的许多协议都是基于客户服务器方式。客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。客户服务器方式所描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。 ### 6.1 域名解析 DNS #### 6.1.1 域名系统概述 * 记忆IP地址太过繁琐,也不便于灵活的服务部署,因此引入域名系统(Domainn Name System DNS),用来实现将域名转换为IP地址的转换 * DNS解析是应用层的服务,通常DNS采取UDP通信,但现在也出现了DOH与DOT的新产物 * 域名解析是分层次的,多层命名服务器构成的分布式数据库,每一级域名服务器都会维持一个高速缓存,对每一条解析记录设定一个超时时间(TTL),用来避免对头部解析服务器的过量压力 * DNS服务 * 域名向IP的转换(A记录或AAAA记录) * 主机别名(CNAME) * 邮件服务器别名(MX) * ... #### 6.1.2 互联网域名结构 * 互联网采用了层次树状结构的命名方法。任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。 * 域名的结构由标号序列组成,各标号之间用点隔开: ... .三级域名.二级域名.顶级域名 * 各标号分别代表不同级别的域名 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-06-20-bf7ebc52db7f2b782ea32b6dd91fc01c-20211210100620-1b4c9b.png =400x) #### 6.1.3 域名解析服务器 * 实现域名系统使用分布在各地的域名服务器(DNS 服务器)。 * 一个服务器所负责管辖的(或有权限的)范围叫做**区(Zone)**。各单位根据具体情况来划分自己管辖范围的区。但**在一个区中的所有节点必须是能够连通**的。 * 每一个区设置相应的权限(Authority)域名服务器,用来保存该区中的所有主机的域名到IP地址的映射 * 分区管理可以有效地平衡域名服务器数量以及单台服务器上记录数的矛盾 * 域名解析服务器的分层结构 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-06-32-eac8ffff55c9690f567883eca780afdf-20211210100632-5ed7a6.png) * 根域名服务器(Root DNS) * 根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的IP地址。 * 根域名服务器也是最重要的域名服务器,不管是哪个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器。 * 需要注意的是,根域名服务器用来管辖顶级域,通常它并不直接把待查询的域名直接转换成IP地址,而是告诉本地域名服务器下一步应当找哪个顶级域名服务器进行查询 * 顶级域名服务器(Top-Level DNS) * 这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名 * 收到DNS查询请求时,就给出相应的回答 * 权限域名服务器 * 每台主机都必须在授权域名服务器处登记。为了更加可靠地工作,一台主机最好至少有两个授权域名服务器 * 实际上,许多域名服务器都同时充当本地域名服务器和授权域名服务器 * 授权域名服务器总能将其管辖的主机名转换为该主机的IP地址 * 本地域名服务器(Local DNS) * 当一台主机发出DNS查询请求时,这个查询请求报文就发送给该主机的本地域名服务器,如果无法解析,就一级一级向上递归查询 * 域名解析过程 * 递归查询 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-06-40-0ac5503a693d7a6de2a7bb9d4d55a708-20211210100639-8830cc.png =400x) * 迭代查询 ![](https://pic-static.yilantingfeng.site/imgs/2021/12/10/10-06-50-bbc0acba6743ce6e854f83b62570fd7d-20211210100650-ae7aa5.png =400x) * 通常设备向本地域名服务器查询时使用递归方法,只需要记录一个查询入口,而本地域名服务器完成的查询过程则采取去迭代查询 * 每一级域名服务器都会维持一个高速缓存,对每一条解析记录设定一个超时时间(TTL),每次从权限服务器接收到回答时则更新计时器。如此操作可以平衡解析更新的需要以及高速解析的需要。 ### 6.2 文件传送协议FTP * 文件传送协议FTP (File Transfer Protocol) * 是互联网上使用得最广泛的文件传送协议,早期占互联网通信量的1/3 * FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限 * FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件 * 特点:复制整个文件。修改副本,上传回原节点。由操作系统提供对远地共享文件的访问 ### 6.3 万维网WWW和HTTP协议 #### 6.3.1 万维网概述 #### 6.3.2 统一资源定位符URL **URL对大小写不敏感** 一般形式: <协议>://<主机>:<端口>/<路径> 如: ftp://192.168.1.14/shareFolder https://www.yilantingfeng.site #### 6.3.3 超文本传送协议HTTP * HTTP协议定义了浏览器怎样向万维网服务器请求万维网文档以及服务器怎样把文档传回给服务器 * HTTP是面向事务的(Transaction-Oriented) * 事务是一系列的信息交换,是一个不可分割的整体 * 所有信息的交换要么都完成,要么一次交换都不进行(Done or Dump) * 万维网的工作过程 * 建立TCP连接 * HTTP请求 * HTTP响应 * 释放TCP链接 * HTTP 默认端口为80 * HTTPS 默认端口为443 * HTTP的主要特点 * HTTP使用了面向链接的TCP作为运输层协议,保证了数据的可靠传输 * HTTP本身是无连接的,虽然他使用了面向连接的TCP向上提供的服务 * HTTP/1.0是无状态的(stateles) * HTTP/1.1允许持续连接(携带参数keep-alive) * 持续连接是指服务器在发送相应后仍然在一段时间内保持这条连接而不释放,后续的连接可以不用重复建立TCP连接,而复用这一条通道 * 持续连接:非流水线,客户在收到前一个响应之后才能发出 * 持续连接:流水线,允许连续发送请求,而不必等待响应 * HTTP的报文结构 * 请求报文 * 响应报文 * HTTP是面向文本的,各个字段都是一些ASCII串,各个字段的长度都是不确定的 ### 6.4 电子邮件的传送过程(SMTP、POP3) ### 6.5 动态主机配置协议DHCP ## 计网复习 1. IP数据报片偏移(offset)单位为8字节(8B/Byte) 2. IP数据报中与分片和重组有关的字段为标识,标志(MF/DF)和片偏移 3. IP数据报中首部长度字段的单位为4字节(4B/Byte) 4. IP数据报中总长度字段的单位为字节(1B/Byte) 5. RIP是应用层协议,它使用UDP传送数据,OSPF是网络层协议,它使用IP传送数据 6. UDP\TCP首部的长度字段包括首部+数据长度,校验和也是首部和数据一同计算,都有12字节的伪首部 7. 携带有SYN和FIN的TCP段不可以携带信息,而第三次握手可以携带信息(实际上通常不携带),如果不携带,则其下一次SEQ号不累加。二者本质等同。 8. FTP中数据连接的服务器的端口20,控制连接在服务器的端口是21,客户端通常也默认使用对应的端口进行连接。但并不绝对。文件目录等数据也通过数据连接端口发送 10. 吞吐量(有效数据量/占用信道的总时间) 11. 信道利用率(吞吐量/带宽) 12. 有效数据率(有效数据/实际数据)