一蓝网站建设,使用织梦系统建设网站教程,菏泽网站制作,网站排名不稳定怎么办计算机网络#xff08;湖科大教书匠#xff09; 本文档为教学视频【计算机网络微课堂#xff08;有字幕无背景音乐版#xff09;_哔哩哔哩_bilibili】的摘录 目录计算机网络#xff08;湖科大教书匠#xff09;一、绪论1.2 因特网概述1.2.1 网络、互连网#xff08;互联…计算机网络湖科大教书匠 本文档为教学视频【计算机网络微课堂有字幕无背景音乐版_哔哩哔哩_bilibili】的摘录 目录计算机网络湖科大教书匠一、绪论1.2 因特网概述1.2.1 网络、互连网互联网和因特网1.2.2 因特网发展的三个阶段1.2.3 因特网的标准化工作1.2.4 因特网的组成1.3 三种交换方式1.3.1 电路交换Circuit Switching1.3.2 分组交换Packet Switching1.3.X 报文交换Message Switching1.3.3 三种交换方式对比1.4 计算机网络的定义与分类1.4.1 计算机网络的定义1.4.2 计算机网络的分类1.5 计算机网络的性能指标1.5.1 速率1.5.2 带宽1.5.3 吞吐量1.5.4 时延1.5.5 时延带宽积1.5.6 往返时间1.5.7 利用率1.5.8 丢包率1.6 计算机网络体系结构1.6.1 常见的计算机网络体系结构1.6.2 计算机网络体系结构分层的必要性1.6.3 计算机网络体系结构分层思想举例1.6.4 计算机网络体系结构专用术语1.7 习题1.7.1 体系结构相关习题1.7.2 时延相关习题传输中间带有路由转发的时延计算二、物理层2.1 物理层的基本概念2.2 物理层下面的传输媒体2.3 传输方式2.4 编码与调制2.5 信道的极限容量三、数据链路层3.1 数据链路层概述3.2 封装成帧3.3 差错检测3.4 可靠传输3.4.1 可靠传输的基本概念3.4.2 停止等待协议SWStop-and-Wait3.4.3 回退N帧协议GBNGo-Back-N3.4.4 选择重传协议SRSelective Request3.5 点对点协议PPP3.6 媒体接入控制MAC3.6.1 媒体接入控制的基本概念3.6.1 媒体接入控制 —— 静态划分信道3.6.3 随机接入 —— CSMA/CD协议3.6.4 随机接入 —— CSMA/CA协议3.7 MAC地址、IP地址以及ARP协议3.7.1 MAC地址3.7.2 IP地址3.7.3 ARP协议3.8 集线器与交换机的区别3.9 以太网交换机自学习和转发帧的流程3.10 以太网交换机的生成树协议STP3.10.Extra 【番外篇】生成树算法STA3.11 虚拟局域网VLAN3.11.1 虚拟局域网VLAN概述3.11.2 虚拟局域网VLAN的实现机制四、网络层4.1 网络层概述4.2 网络层提供的两种服务4.3 IPv4地址4.3.1 IPv4地址概述4.3.2 分类编址的IPv4地址4.3.3 划分子网的IPv4地址4.3.4 无分类编址的IPv4地址4.3.5 IPv4地址的应用规划4.4 IP数据报的发送和转发过程4.5 静态路由配置及其可能产生的路由环路问题4.6 路由选择协议4.6.1 路由选择协议概述4.6.2 路由信息协议RIP的基本工作原理4.6.3开放最短路径优先OSPF的基本工作原理4.6.Extra Dijkstra最短路径算法4.6.4 边界网关协议BGP的基本工作原理4.7 IPv4数据报的首部格式4.8 网际控制报文协议ICMP4.9 虚拟专用网VPN与网络地址转换NAT五、运输层5.1 运输层概述5.2 运输层端口号、复用与分用的概念5.3 UDP和TCP的对比5.3.A UDP校验5.4 TCP的流量控制5.5 TCP的拥塞控制5.6 TCP超时重传时间的选择5.7 TCP可靠传输的实现5.8 TCP的运输连接管理5.8.1 TCP的连接建立5.8.2 TCP的连接释放5.9 TCP报文段的首部格式六、应用层6.1 应用层概述6.2 客户/服务器方式C/S方式和对等方式P2P方式6.3 动态主机配置协议DHCP6.4 域名系统DNSDomain Name System6.5 文件传送协议FTP6.6 电子邮件6.7 万维网WWW6.7 万维网WWW一、绪论
1.2 因特网概述
1.2.1 网络、互连网互联网和因特网
**网络Network由若干结点Node和连接这些结点的链路Link**组成多个网络还可通过路由器Router互连起来便构成了一个覆盖范围更大的网络即互联网互连网。因此互联网是**“网络的网络Network of Networks”****因特网Internet**是世界最大的互连网络用户数以亿计互连的网络数以百万计 internet 与 Internet 的区别 internet互联网或互连网是通用名称泛指由多个计算机网络互连而成的网络。在这些网络之间的通信协议可以是任意的Internet因特网是专用名词指全球最大的、开放的、由众多网络相互连接而成的特定计算机网络采用TCP/IP协议簇作为通信的规则其前身是美国的ARPANET 1.2.2 因特网发展的三个阶段 因特网服务提供者ISPInternet Service Provider 基于ISP的三层结构的因特网 1.2.3 因特网的标准化工作 1.2.4 因特网的组成
边缘部分由所有连接在因特网上的主机组成。这部分是用户直接使用的用来进行通信传送数据、音频、视频和资源共享核心部分由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的提供连通性和交换 1.3 三种交换方式
1.3.1 电路交换Circuit Switching 电话之间两两相接不借助交换机的情况下nnn部电话则需要连接$C_{n}^{2} $条电路 电话交换机接通电话线的方式称为电路交换从通信资源的分配角度来看交换Switching就是按照某种方式动态地分配传输线路的资源电路交换的三个步骤 建立连接分配通信资源通话一直占用通信资源释放连接归还通信资源 思考若使用电路交换来传送计算机数据效果如何 由于计算机数据的传送具有一定的突发性用户之间建立连接后一般只有少部分时间用于数据传送但期间却一直占用着该条连接因此利用率较低。计算机网络通常采用分组交换 1.3.2 分组交换Packet Switching 发送方构造分组、发送分组路由器分组交换机缓存分组、转发分组接收方接收分组、还原报文
1.3.X 报文交换Message Switching
1.3.3 三种交换方式对比 电路交换
优点
通信时延小有序传输没有冲突适用范围广实时性强控制简单
缺点
建立连接时间长线路独占、使用效率低灵活性差难以规格化
报文交换
优点
无需建立连接动态分配线路提高线路可靠性提高线路利用率提供多目标服务
缺点
引起了转发时延需要较大存储缓存空间需要传输额外的信息量
分组交换
优点
无需建立连接线路利用率高简化了存储管理加速传输减少出错概率和重发数据量
缺点
引起了转发时延需要传输额外的信息量对于数据报服务存在失序、丢失或重复分组的问题对于虚电路服务存在呼叫建立、数据传输和虚电路释放三个过程
1.4 计算机网络的定义与分类
1.4.1 计算机网络的定义 计算机网络的精确定义并未统一 计算机网络的最简单的定义是一些互相连接的、自治的计算机的集合 互连是指计算机之间可以通过有线或无线的方式进行数据通信自治是指独立的计算机它有自己的硬件和软件可以单独运行使用集合是指至少需要两台计算机 计算机网络的较好的定义是计算机网络主要是由一些通用的、可编程的硬件互连而成的而这些硬件并非专门用来实现某一特定目的例如传送数据或视频信号。这些可编程的硬件能够用来传送多种不同类型的数据并能支持广泛的和日益增长的应用 计算机网络所连接的硬件并不限于一般的计算机而是包括了智能手机等智能硬件计算机网络并非专门用来传送数据而是能够支持很多种的应用包括今后可能出现的各种应用
1.4.2 计算机网络的分类
按交换技术分类 电路交换网络报文交换网络分组交换网络 按使用者分类 公用网专用网 按传输介质分类 有线网络无线网络 按覆盖范围分类 广域网WAN城域网MAN局域网LAN个域网PAN 按拓扑结构分类 总线型网络 星型网络 环形网络 网状型网络
1.5 计算机网络的性能指标
1.5.1 速率 比特bitbitbit计算机中数据量的单位也是信息论中信息量的单位。一个比特即为二进制数字中的一个1或0 常用数据量单位字节ByteByteByte单位换算1Byte8bit1Byte 8bit1Byte8bit1KB210B1KB 2^{10}B1KB210B1MB220B1MB 2^{20}B1MB220B1GB230B1GB 2^{30}B1GB230B1TB240B1TB 2^{40}B1TB240B 速率连接在计算机网络上的主机在数字信道上传送比特的速率也称为比特率或数据率 常用数据率单位比特每秒bit/s、b/s、bps单位换算1kb/s103b/s1kb/s 10^{3}b/s1kb/s103b/s1Mb/s106b/s1Mb/s 10^{6}b/s1Mb/s106b/s1Gb/s109b/s1Gb/s 10^{9}b/s1Gb/s109b/s1Tb/s1012b/s1Tb/s 10^{12}b/s1Tb/s1012b/s 数据量中的单位有时为了简化计算被视为和速率单位一致以10次幂为基准需要依据具体题目说明而定 1.5.2 带宽
带宽在模拟信号系统中的意义 信号所包含的各种不同频率成分所占据的频率范围单位Hz、kHz、MHz、GHz 带宽在计算机网络中的意义 用来表示网络的通信线路所能传送数据的能力因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的“最高数据率”单位与上述速率单位一致 其实带宽的这两种表述之间有着密切的联系。一条通信线路的“频带宽度”越宽其所传输数据的“最高数据率”也越高 1.5.3 吞吐量
吞吐量表示在单位时间内通过某个网络或信道、接口的数据量吞吐量被经常用于对现实世界中的网络的一种测量以便知道实际上有多少数据量能够通过网络吞吐量受网络的带宽或额定速率的限制
1.5.4 时延 发送时延 计算实际的发送速率由三部分决定并且符合木桶效应 传播时延 计算电磁波在不同空间的传播速率 自由空间约为 3⋅108m/s3\cdot10^{8} m/s3⋅108m/s铜线约为 2.3⋅108m/s2.3\cdot10^{8}m/s2.3⋅108m/s光纤约为 2.0⋅108m/s2.0\cdot10^{8}m/s2.0⋅108m/s 处理时延一般不方便计算 1.5.5 时延带宽积
计算传播时延×带宽传播时延\times带宽传播时延×带宽若发送端连续发送数据则在所发送的第一个比特即将到达终点时发送端就已经发送了时延带宽积个比特链路的时延带宽积又称为以比特为单位的链路长度
1.5.6 往返时间
多数情况下因特网上的信息不仅仅是单方向传输而是双向交互因此**往返时间RTTRound-Trip Time**是一个重要指标时间为发送端发送分组开始到接收到接收端传回的确认信息为止 由于卫星链路的距离较长因此往返时间中该段路程占主导时间
1.5.7 利用率 信道利用率某信道有百分之几的时间是被利用的有数据通过 网络利用率全网络的信道利用率的加权平均值 信道利用率并非越高越好通信存在排队利用率高也意味着排队产生的时延久 网络当前时延DDD网络空闲时延D0D_{0}D0和利用率UUU三者关系 当网络的利用率达到50%时时延便要加倍当网络的利用率超过50%时时延急剧增大当网络的利用率接近100%时时延趋于无穷大因此一些拥有较大主干网的ISP通常会控制它们的信道利用率不超过50%。若超过了就准备扩容增大线路的带宽 也不能使信道利用率太低否则将浪费宝贵的通信资源应该使用一些机制可以根据情况动态调整输入到网络中的通信量使网络利用率保持在一个合理的范围内
1.5.8 丢包率
丢包率即分组丢失率指在一定的时间范围内传输过程中丢失的分组数量与总分组数量的比率丢包率具体可分为接口丢包率、结点丢包率、链路丢包率、路径丢包率、网络丢包率等丢包率使网络运维人员非常关心的一个网络性能指标但对于普通用户来说通常意识不到网络丢包分组丢失主要的两种情况 分组在传输过程中出现误码被结点丢弃在通信量较大时可能造成网络拥塞分组到达一台队列已满的分组交换机时被丢弃 丢包率反映了网络的拥塞情况 无拥塞时路径丢包率为 0轻度拥塞时路径丢包率为 1% - 4%严重拥塞时路径丢包率为 5% - 15%
1.6 计算机网络体系结构
1.6.1 常见的计算机网络体系结构 1.6.2 计算机网络体系结构分层的必要性 计算机网络是个非常复杂的系统。早在最初的ARPANET设计时就提出了分层的设计理念 “分层”可将庞大而复杂的问题转化为若干较小的局部问题而这些较小的局部问题就比较易于研究和处理 物理层 实际上传输媒体不属于物理层解决使用何种信号来传输比特的问题 数据链路层 解决分组在一个网络或一段链路上传输的问题 网络层 解决分组在多个网络上传输路由的问题 运输层 解决进程之间基于网络的通信问题 应用层 解决通过应用进程的交互来实现特定网络应用的问题
1.6.3 计算机网络体系结构分层思想举例
各层对数据进行加码
物理层会将帧看作比特流并加上前导码
各层加码的具体内容与作用 HTTP请求报文内容 TCP报文段首部格式 作用区分应用进程、实现可靠传输 IP数据报首部格式 作用使IP数据报可以在互联网上传输即被路由器转发 帧首部格式 作用使帧能在一个网络或一段链路上传输能够被响应的主机接收 帧尾部格式 作用让目的主机检查所接收到的帧是否有误码 比特流前导码格式 作用为了让目的主机做好接收帧的准备 1.6.4 计算机网络体系结构专用术语 实体任何可发送或接收消息的硬件或软件进程 对等实体收发双方相同层次中的实体 协议控制两个对等实体进行逻辑通信的规则的集合 协议三要素 语法定义所交换信息的格式语义定义收发双方所要完成的操作同步定义收发双方的时序关系 服务 在协议的控制下两个对等实体间的逻辑通信使得本层能够向上一层提供服务要实现本层协议还需要使用下面一层所提供的服务协议是”水平的“服务是”垂直的“实体看得见相邻下层所提供的服务但并不知道实现该服务的具体协议。也就是说下面的协议对上面的实体是”透明的“服务访问点在同一系统中相邻两层的实体交换信息的逻辑接口用于区分不同的服务类型 数据链路层的服务访问点帧的类型字段网络层的服务访问点IP数据报首部中的协议字段运输层的服务访问点端口号 服务原语上层使用下层所提供的服务必须通过与下层交换一些命令这些命令称为服务原语协议数据单元PDU对等层次之间传送的数据包称为该层的协议数据单元服务数据单元SDU同一系统内层与层之间交换的数据包称为服务数据单元多个SDU可以合成为一个PDU一个SDU也可划分为几个PDU
1.7 习题
1.7.1 体系结构相关习题 1.7.2 时延相关习题 连续发送多个比特分组的总时延为多个比特分组的发送时延 该链路所需的传播时延传播一个比特所需的时间 链路上的传播时延是固定的由电磁波的传播速率以及链路的长度决定。 数据发送是连续的总时延可理解为数据流末端发送至接收端的时间加上从发送数据流首端到发送数据流末端的时间显然前者即为链路上的传播时延而后者即整个数据流的发送时延 传输中间带有路由转发的时延计算 假设分组等长、各链路长度相同、带宽也相同忽略路由器的处理时延 若n个分组m段链路总时延为n个分组的发送时延 单个分组的发送时延 × (m-1) 一段链路的传播时延 × m 第一个分组比第二个分组早一个发送时延发送因此将比第二个分组早一个发送时延抵达路由此时路由紧接着发送第一个分组消耗一个发送时延后此时第二个分组恰好抵达路由由于第一个分组已被发送便可接着发送第二个分组因此前后两个分组之间并不存在路由处排队的现象 于是我们计算总时延时只需专注观察最后一个分组即结果为最后一个分组从发送到抵达接收端的时间加上开始时前面多个分组所消耗的发送时延前者便为单个分组的发送时延 一段链路的传播时延× m后者即为 n-1个分组的发送时延 电路交换的时延电路建立时间 发送时延 传播时延 分组长度分组数据部分长度 分组首部长度 分组数量报文长度 / 分组数据部分长度 发送时延分组长度 / 带宽 报文交换中的转发路由只有接收完全部报文数据后才可转发发送 二、物理层
2.1 物理层的基本概念
物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流物理层数据链路层屏蔽了各种传输媒体的差异使数据链路层只需要考虑如何完成本层的协议和服务而不必考虑网络具体的传输媒体是什么 传输媒体 引导型双绞线、同轴电缆、光纤非引导性微波通信2 ~ 40GHz 物理层协议的主要任务 机械特性指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装置电气特性指明在接口电缆的各条线上出现的电压的范围功能特性指明某条线上出现的某一电平的电压表示何种意义过程特性指明对于不同功能的各种可能事件的出现顺序
2.2 物理层下面的传输媒体 导引型传输媒体 同轴电缆 基带同轴电缆50Ω 数字传输过去用于局域网宽带同轴电缆75Ω 模拟传输目前主要用于有线电视 同轴电缆价格较贵且布线不够灵活和方便随着集线器的出现在局域网领域基本上都是采用双绞线作为传输媒体 集线器 集线器的英文称为“Hub”。“Hub”是“中心”的意思集线器的主要功能是对接收到的信号进行再生整形放大以扩大网络的传输距离同时把所有节点集中在以它为中心的节点上。它工作于OSI(开放系统互联参考模型)参考模型第一层即“物理层”。集线器与网卡、网线等传输介质一样属于局域网中的基础设备采用CSMA/CD即带冲突检测的载波监听多路访问技术)介质访问控制机制。集线器每个接口简单的收发比特收到1就转发1收到0就转发0不进行碰撞检测。集线器hub属于纯硬件网络底层设备基本上不具有类似于交换机的智能记忆能力和学习能力。它也不具备交换机所具有的MAC地址表所以它发送数据时都是没有针对性的而是采用广播方式发送。也就是说当它要向某节点发送数据时不是直接把数据发送到目的节点而是把数据包发送到与集线器相连的所有节点如图所示简单明了。HUB是一个多端口的转发器当以HUB为中心设备时网络中某条线路产生了故障并不影响其它线路的工作。所以HUB在局域网中得到了广泛的应用。大多数的时候它用在星型与树型网络拓扑结构中以RJ45接口与各主机相连也有BNC接口HUB按照不同的说法有很多种类。—— 百度百科 双绞线 光纤 纤芯直径 多模光纤50微米、62.5微米单模光纤9微米 包层直径125微米工作波长 0.85微米衰减较大1.30微米衰减较小1.55微米衰减较小 光纤的优点 通信容量大25000 - 30000GHz的带宽传输损耗小远距离传输时更加经济抗雷电和电磁干扰性能好这在大电流脉冲干扰的环境下尤为重要无串音干扰保密性好不易被窃听体积小重量轻 光纤的缺点 割接需要专用设备光电接口价格较贵 光纤内部结构 多模光纤 由于色散模式、材料、波导色散光在多模光纤中传输一定距离后必然产生信号失真脉冲展宽因此多模光纤只适合近距离传输建筑物内发送光源发光二极管接收检测光电二极管 单模光纤 没有模式色散在1.31微米波长附近材料色散和波导色散大小相等符号相反两者正好抵消适合长距离传输且衰减程度小但其制造成本高对光源要求高发送光源激光发射器接收检测激光检波器 电力线 非导引型传输媒体 电信领域使用的电磁波的频谱 无线电波 LF和MF频段 主要利用地面波进行传输 HF和VHF频段 主要靠电离层的反射 微波 由于微波会穿透电离层而进入宇宙空间因此不能经过电离层的反射传播到地面上很远的地方。两种主要的微波通信方式 地面微波接力通信 卫星通信 红外线 点对点无线传输直线传输中间不能有障碍物传输距离短传输速率低4Mb/s - 16Mb/s 可见光 LIFI
2.3 传输方式 串行和并行传输 远距离传输如计算机网络通常采用串行传输计算机内部通常采用并行传输 同步和异步传输 单向单工/双向交替半双工/双向同时全双工通信
2.4 编码与调制 常用编码 不归零编码 需要额外一根传输线来传输时钟信号使发送方和接收方同步由于存在同步问题计算机网络传输不采用该类编码 归零编码 每个码元传输结束后信号都要“归零”所以接收方只需要在信号归零后进行采样即可不需要单独的时钟信号实际上归零编码相当于把时钟信号用“归零”方式编码在了数据之内这称为“自同步”信号但是归零编码中大部分的数据带宽都用来传输“归零”而浪费掉了编码效率低 曼彻斯特编码 码元中间时刻的跳变既表示时钟又表示数据 差分曼彻斯特编码 跳变仅表示时钟码元开始处电平是否发生变化表示数据比曼彻斯特编码变化少更适合较高的传输速率 常用调制 基本调制方法 使用基本调制方法1个码元只能包含1个比特信息 混合调制举例——正交振幅调制QAM QAM - 16 12 种相位每种相位有1或2种振幅可选可以调制出16种码元波形每种码元可以对应表示4个比特码元与4个比特的对应关系采用格雷码任意两个相邻码元只有一个比特不同
2.5 信道的极限容量 失真 失真因素 码元传输速率信号传输速率噪声干扰传输媒体质量 奈奎斯特准则 只要采用更好的调制方法让码元可以携带更多的比特岂不是可以无限制地提高信息的传输速率 答案是否定的。因为信道的极限信息传输速率还要受限于实际的信号在信道中传输时的信噪比 香农公式 在信道带宽一定的情况下根据奈氏准则和香农公式要想提高信息的传输速率就必须采用多元制更好的调制方法和努力提高信道中的信噪比自从香农公式发表后各种新的信号处理和调制方法就不断出现其目的都是为了尽可能接近香农公式给出的传输速率极限
三、数据链路层
3.1 数据链路层概述
链路Link就是从一个结点到相邻结点的一段物理线路而中间没有任何其他的交换结点数据链路Data Link是指把实现通信协议的硬件和软件加到链路上就构成了数据链路数据链路层以帧为单位传输和处理数据数据链路层的三个重要问题 封装成帧 差错检测 发送方发送前基于待发送的数据和检错算法计算出检错码并将其封装在帧尾 可靠传输 接收端收到有误码的帧后不会接收而是将其丢弃尽管误码是不能完全避免的但若能实现发送方发送什么接收方就能收到什么便称为可靠传输 使用广播信道的数据链路层 目的地址 通过在帧头中编址便可指定发送的目的地址 碰撞问题 当多台主机同时向总线上发送数据便会产生碰撞以太网采用CSMA/CD协议解决碰撞问题 交换式局域网、无线局域网
3.2 封装成帧 封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧 帧头和帧尾中包含有重要的控制信息 帧头和帧尾的作用之一就是帧定界 PPP帧中帧头尾均有1字节的标志位用于界定帧 以太网版本2的MAC帧在交付给物理层时会在帧前附加8字节前导码 前7个字节为前同步码作用使接收方的时钟同步最后1字节为帧开始界定符表明后面紧跟着的便是MAC帧此外以太网V2还规定了帧间间隔时间为96比特发送时间因此不需要帧结束界定符 透明传输 指数据链路层对上层交付的传输数据没有任何限制就好像数据链路层不存在一样 当上层数据中包含帧标志符时会造成接收方的误判 可以在数据中与标识符相同的字段前加上转义字符接收方遇到转义字符便知道其后跟着的数据而非真正的标识符并且接收方需将该转义字符剔除掉 但如果数据中还含有和转义字符相同的字段这时便又会引起接收方的误判将本为数据的转义字符剔除此时将数据中的转义字符前再加上一个转义字符这样一来接收方每次遇到转义字符时便知道其后紧跟的是数据并剔除该一个转义字符即可 面向字节的物理链路使用字节填充或称字符填充的方法实现透明传输 面向比特的物理链路使用比特填充的方法实现透明传输 零比特填充法 帧标志位为01111110连续6个1对于数据部分出现的同标志位的字段在每连续5个1后添加1个0无论其是否构成和帧标志相同都一律按该规则添0保证了数据部分不再与标志位相同接收方接收时将每连续的5个1后的一个0进行剔除 传输效率 为了提高帧的传输效率应当使帧的数据部分的长度尽可能大些考虑到差错控制等多种因素每种数据链路层协议都规定了帧的数据部分的长度上限即最大传送单元MTUMaximum Transfer Unit
3.3 差错检测
实际的通信链路都不是理想的比特在传输的过程中可能会产生差错1可能变为0而0也可能变为1这称为比特差错在一段时间内传输错误的比特占所传输比特总数的比率称为误码率BERBit Error Rate使用差错检测码来检测数据在传输过程中是否产生了比特差错是数据链路层所要解决的重要问题之一 FCSFrame Check Sequence帧校验序列 奇偶校验 在待发送的数据后面添加1位奇偶校验位使整个数据包括所添加的校验位在内中**“1”的个数**为奇数奇校验或偶数偶校验如果有奇数个位发生误码则奇偶性发生变化可以检查出误码如果有偶数个位发生误码则奇偶性不发生变化不能检查出误码漏检 循环冗余校验CRCCyclic Redundancy Check 收发双方约定好一个生成多项式G(x)G(x)G(x)发送方基于待发送的数据和生成多项式计算出差错检测码冗余码将其添加到待传输数据的后面一起传输接收方通过生成多项式来计算收到的数据是否产生了误码 检错码只能检测出帧在传输过程中出现了差错但并不能定位错误因此无法纠正错误想要纠正传输中的差错可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大在计算机网络中较少使用循环冗余校验CRC有很好的检错能力漏检率非常低虽然计算比较复杂但是非常易于用硬件实现因此被广泛应用于数据链路层在计算机网络中通常采用检错重传方式来纠正传输中的差错或者仅仅是丢弃检测到差错的帧这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务
3.4 可靠传输
3.4.1 可靠传输的基本概念
数据链路层向上层提供的服务类型 不可靠传输服务仅仅丢弃有误码的帧其他什么也不做可靠传输服务想办法实现发送端发送什么接收端就收到什么 一般情况下有线链路的误码率较低为了减小开销并不要求数据链路层向上提供可靠传输服务。即使出现了误码可靠传输的问题由其上层处理无线链路易受干扰误码率比较高因此要求数据链路层必须向上层提供可靠传输服务比特差错只是传输差错中的一种从整个计算机网络体系结构来看传输差错还包括分组丢失、分组失序以及分组重复这些传输差错一般出现在数据链路层的上层可靠传输服务并不仅局限于数据链路层其他各层均可选择实现可靠传输 可靠传输的实现比较复杂开销也比较大是否使用可靠传输取决于应用需求
3.4.2 停止等待协议SWStop-and-Wait
发送方向接收方发送数据接收方通过差错检测若无误码则接收并向发送方发送确认分组ACK发送方接收到确认分组后便可删除上条数据的缓存并发送下一组数据若出现了误码接收方丢弃该数据并向发送方发送否认分组NAK发送方收到否认分组后重新传送上一条数据 现在实用的可靠传输协议都不使用这种否认报文了虽然“否认报文”能够让发送方尽早知道出现了差错但这样处理会使协议复杂化 当发送的数据中途丢失时此时接收方未接收到数据便无法响应发送确认或否认分组而发送方也一直等待接收方的反馈分组此时陷入一种类似“死锁”的状态 为解决该问题可以在发送方发送完一个数据分组时启动一个超时计时器。若到了计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK则重传原来的数据分组这就叫超时重传 一般可将重传时间设置为略大于“从发送方到接收方的平均往返时间” 若接收方发送的确认分组中途丢失这时超过重传时间后发送方又将上条数据重发此时接收方便接收到了两条同样的数据应当丢弃第二次重发的数据 为避免分组重复这种传输错误必须给每个分组带上序号。接收方通过编号便可判断是否是重复的数据对于重复的数据丢弃即可 对于停止-等待协议由于每发送一个数据就停止等待只要保证每发送一个新的数据分组其发送序号与上次发送的数据分组的序号不同就可以了因此用一个比特来编号就够了 若接收方发送的确认分组迟到并且在迟到期间发送方重发了上条数据A确认分组到达后又紧接着发送了下一条数据B接收方收到重复的数据将其丢弃并发送确认分组这时发送方接收到确认分组后会误以为是数据B的确认信号则会立即发送下条数据 这里应当忽略重复的确认分组而是等到真正的数据B确认分组传达后再发送下条数据因此同样的还需给确认分组编号遇到重复的确认分组将其忽略 对于数据链路层的点对点信道往返时间比较固定不会出现确认迟到的情况因此若只是在数据链路层实现停止-等待协议可以不用给确认分组编号 停止-等待协议的信道利用率 当往返时延RTT远大于数据帧发送时延时例如使用卫星链路信道利用率非常低若出现重传则对于传送有效的数据信息来说信道利用率更低为克服停止-等待协议信道利用率很低的缺点便产生另外两种协议后退N帧协议GBN 和 选择重传协议SR
3.4.3 回退N帧协议GBNGo-Back-N
采用3个比特给分组遍序号即序号0 - 7发送窗口的尺寸WTW_TWT的取值1WT≤23−11W_T\le2^3-11WT≤23−1本例取WTW_TWT5接收窗口的尺寸WRW_RWR的取值WRW_RWR1
发送方先连续发送5个数据帧接收方逐个接收到数据帧并返回每个数据帧的确认分组发送方每接收到一个确认分组便移动一位发送窗口再执行步骤1 累积确认 接收方不一定要对收到的数据分组逐个发送确认而是可以在收到几个数据分组后由具体实现决定对按序到达的最后一个数据分组发送确认。ACKnACK_nACKn表示序号为nnn及以前的所有数据分组都已正确接收 这里接收方产生了两个确认分组ACK1ACK_1ACK1和ACK4ACK_4ACK4若途中ACK1ACK_1ACK1丢失发送方收到ACK4ACK_4ACK4后也可知道序号4及以前的数据分组均已正确接收 优点 即使确认分组丢失发送方也可能不必重传减少接收方开销、减少对网络资源占用 缺点 不能向发送方及时反映接收方已经确认接收的数据分组信息 此时5号数据出现误码被丢弃而其余的数据分组与接收窗口的序号不匹配也会被丢弃。接着接收方会对之前按序接收的最后一个分组进行确认每丢弃一个数据分组就发送一个确认分组ACK4ACK_4ACK4 发送方收到重复的确认便知道之前所发送的数据分组出现了差错于是可以不等超时计时器超时就立刻重传至于收到几个重复确认就立刻重传由具体实现决定 本例中尽管序号为6、7、0、1的数据分组正确到达接收方但由于5号数据分组误码不被接受它们也受到牵连而不被接受发送方还需重传这些数据分组这便是所谓的Go-Back-N 可见当通信线路质量不好时回退N帧协议的信道利用率并不比停止-等待协议高 若WTW_TWT超过取值范围 这里一次性发送8个数据分组第一遍的确认分组丢失于是发送方超时重传这8个分组此时重复分组的序号和接收窗口的序号是匹配的接收方无法分辨新旧数据 总结
3.4.4 选择重传协议SRSelective Request
回退N帧协议的接收窗口尺寸**WRW_RWR只能等于1**因此接收方只能按序接收正确到达的数据分组一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃尽管它们无乱序和误码。这必然会造成发送方对这些数据分组的超时重传显然这时对通信资源的极大浪费为了进一步提高性能可设法只重传出现误码的数据分组。因此接收窗口的尺寸**WRW_RWR不应再等于1而应大于1以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组**等到所缺分组收齐后再一并送交上层。这就是选择重传协议 选择重传协议为了使发送方仅重传出现差错的分组接收方不能再采用累积确认而需要对每个正确接收到的数据分组进行逐一确认 采用3个比特给分组编序号即序号0 - 7发送窗口的尺寸WTW_TWT的取值1WT≤23−11W_T\le2^{3-1}1WT≤23−1本例取WTW_TWT4接收窗口的尺寸WRW_RWR的取值WRWT4W_RW_T4WRWT4 发送方依次发送0 - 3序号四个数据分组其中2号数据分组出现误码接收方将其丢弃接收窗口只有按序接收时才可滑动因此0、1序号数据使窗口向右滑动2位由于2号数据分组的缺失窗口需在此停驻接收方将正确接收到的数据分组向发送方反馈确认分组同样的发送窗口也是只有按序接收的确认分组才可滑动同样的向右滑动2位 发送方接着发送4、5号数据分组接收方正确接收后返回响应的确认分组此时2号分组的重传计时器超时重传接收方正确接收由于接收窗口中的数据分组均已按序接收于是窗口可向右滑动4位同样的发送方的发送窗口中的确认分组也均按序接收到后也会向右滑动4位
窗口尺寸问题 发送窗口尺寸WTW_TWT必须满足1WT≤2n−11W_T\le2^{n-1}1WT≤2n−1n是构成分组序号的比特数量 WT1W_T1WT1与停止-等待协议相同WT2n−1W_T\gt2^{n-1}WT2n−1造成接收方无法分辨新、旧数据分组的问题 接收窗口尺寸WRW_RWR必须满足1WR≤WT1W_R\le W_T1WR≤WT WR1W_R1WR1与回退N帧协议相同WRWTW_R\gt W_TWRWT无意义
3.5 点对点协议PPP 点对点协议PPPPoint-to-Point Protocol是目前使用最广泛的点对点数据链路层协议 PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法主要由以下三部分构成 对各种协议数据报的封装方法封装成帧链路控制协议LCP用于建立、配置以及测试数据链路的连接一套网络控制协议NCPs其中的每一个协议支持不同的网络层协议 帧格式 标志Flag字段PPP帧的界定符取值为0x7E地址Address字段 取值为0xFF预留目前没有什么作用控制Control字段取值为0x03预留目前没有什么作用协议Protocol字段指明帧的数据部分送交哪个协议处理 0x0021IP数据报0xC021LCP分组0x8021NCP分组 帧检验序列Fram Check Sequence字段CRC计算出的校验位 透明传输 面向字节的异步链路采用插入转义字符的字节填充法 出现的每个7EPPP帧的定界符字节转变成2字节序列7D5E出现的每个7D转义字符字节转变成2字节序列7D5D出现的每个ASCII码控制字符数值小于0x20的字符则在该字符前插入一个7D字节同时将该字符的编码加上0x20接收方进行反变换即可恢复出原来的帧的数据部分 面向比特的同步链路采用插入比特0的比特填充法 发送方对帧的数据部分进行扫描一般由硬件实现只要发现5个连续的比特1则立即填充1个比特0接收方对帧的数据部分进行扫描一般由硬件实现只要发现5个连续的比特1就把其后的1个比特0删除 差错检测 接收方每收到一个PPP帧就进行CRC检验。若CRC检验正确就收下该帧反之就丢弃该帧。使用PPP的数据链路层向上提供的是不可靠传输服务 工作状态
3.6 媒体接入控制MAC
3.6.1 媒体接入控制的基本概念
共享信道要考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用即媒体接入控制MACMedium Access Control 随着奇数的发展交换技术的成熟和成本的降低具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已经完全取代了共享式局域网但由于无线信道的广播天性无线局域网仍然使用的是共享媒体技术 3.6.1 媒体接入控制 —— 静态划分信道 信道复用 复用Multiplexing是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号当网络中的传输媒体的传输容量大于多条单一信道传输的总通信量时可以利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽 频分复用FDM 频分复用的所有用户同时占用不同的频带资源并行通信 时分复用TDM 时分复用的所有用户在不同的时间占用同样的频带宽度 波分复用WDM 码分复用CDM 码分复用CDM是另一种共享信道的方法。实际上由于该技术主要用于多址接入人们更常用的名词是码分多址CDMACode Division Multiple Access 同理频分复用FDM和时分复用TDM同样可用于多址接入相应的名词时频分多址FDMAFrequency Division Multiple Access和时分多址TDMATime Division Multiple Access 复用和多址概念可简单理解如下 复用是将单一媒体的频带资源划分成很多子信道这些子信道之间相互独立互不干扰。从媒体的整体频带资源上看每个子信道只占用该媒体频带资源的一部分多址更确切地应该称为多点接入处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的而所有的移动通信系统基本上都属于这种情况。相反在信道永久性地分配给用户的应用中多址是不需要的对于无线广播或电视广播站就是这样某种程度上FDMA、TDMA、CDMA可以分别看成是FDM、TDM、CDM的应用 与FDM和TDM不同CDM的每个用户可以在同样的时间使用同样的频带进行通信 由于各用户使用经过特殊挑选的不同码型因此各用户之间不会造成干扰 CDM最初是用于军事通信的因为这种系统所发送的信号有很强的抗干扰能力其频谱类似于白噪声不易被敌人发现 随着技术的进步CDMA设备的价格和体积都大幅度下降因而现在已广泛用于民用的移动通信中 在CDMA中每一个比特时间再划分为m个短的间隔称为码片Chip。通常m的值是64或128。为了简单期间后续的举例中假设m为8 使用CDMA的每个站被指派一个唯一的m bit码片序列Chip Sequence 一个站若要发送比特1则发送它自己的m bit码片序列一个站若要发送比特0则发送它自己的m bit码片序列的二进制反码 码片序列的挑选原则如下 分配给每个站的码片序列必须各不相同实际常采用伪随机码序列 分配给每个站的码片序列必须相互正交规格化内积为0 令向量S表示站S的码片序列令向量T表示其他任何站的码片序列。两个不同站的码片序列正交就是向量S和T的规格化内积为0 每个站码片序列跟本站的规格化内积为1跟其他站的反码规格化内积也为0跟本站的反码规格化内积为-1 妙啊
3.6.3 随机接入 —— CSMA/CD协议
载波监听多址接入/碰撞检测 CSMA/CD Carrier Sense Multiple Access/Collision Detection 多址接入MA 多个站连接在一条总线上竞争使用总线 载波监听CS 每个站在发送帧之前先要检测一下总线上是否有其他站点在发送帧先听后说 若检测到总线空闲96比特时间则发送该帧若检测到总线忙则继续检测并等待总线转为空闲96比特时间然后发送该帧 96比特时间是指发送96bit所耗费的时间也称为帧间最小间隔。其作用是使接收方可以检测出一个帧的结束同时也使得所有其他站点都能有机会平等竞争信道并发送帧 碰撞检测CD 每个正在发送帧的站边发送边检测碰撞边听边说 一旦发现总线上出现碰撞则立即停止发送退避一段随机时间后再次发送“一旦冲突立即停说等待时机重新再说” 以太网还采取了一种叫做强化碰撞的措施。这就是当发送帧的站点一旦检测到碰撞除了立即停止发送帧外还要再继续发送32bit或48bit的人为干扰信号Jamming Signal以便有足够多的碰撞信号使所有站点都能检测出碰撞 争用期 主机最多经过2τ2\tau2τ即δ→0\delta\to 0δ→0的时长就可以检测到本次发送是否遭受了碰撞 因此以太网端到端往返传播时延2τ2\tau2τ称为争用期或碰撞窗口 经过争用期这段时间还没有检测到碰撞才能肯定这次发送不会发生碰撞 每个主机在自己发送帧之后的一小段时间内存在着遭遇碰撞的可能性。这小段时间是不确定的它取决于另一个发送帧的主机到本主机的距离但不会超过总线的端到端往返传播时延即一个争用期时间 显然在以太网中发送帧的主机越多端到端往返传播时延越大发送碰撞的概率就越大。因此共享式以太网不能连接太多的主机使用的总线也不能太长 10Mb/s以太网把争用期定为512比特发送时间即51.2微秒因此其总线长度不能超过5120m但考虑到其他一些因素如信号衰减等以太网规定总线长度不能超过2500m 最小帧长 以太网规定最小帧长为64字节即512比特512比特时间即为争用期 如果要发送的数据非常少那么必须加入一些填充字节是帧长不小于64字节 以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞 如果在争用期共发送64字节没有检测到碰撞那么后续发送的数据就一定不会发送碰撞如果在争用期内检测到碰撞就立即中止发送这时已经发送出去的数据一定小于64字节因此凡长度小于64字节的帧都是由于碰撞而异常中止的无效帧 最大帧长 截断二进制指数退避算法 退避时间 基本退避时间 × 随机数r 基本退避时间为争用期2τ2\tau2τ随机数r从离散的整数集合{0,1,...,2k−1}\{0,1,...,2^k-1\}{0,1,...,2k−1}中随机选出一个数其中kmin(重传次数,10)kmin(重传次数, 10)kmin(重传次数,10) 若连续多次发生碰撞就表明可能有较多的主机参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大这也称为动态退避因而减小发生碰撞的概率有利于整个系统的稳定当重传达16次仍不能成功时表明同时打算发送帧的主机太多以至于连续发生碰撞则丢弃该帧并向高层报告 信道利用率 因此为提高信道利用率应使以太网帧的长度T0T_0T0尽量长些端到端的距离τ\tauτ受到限制 帧发送流程图 帧接收流程图 CSMA/CD协议曾经用于各种总线结构以太网和双绞线以太网的早期版本中 现在的以太网基于交换机和全双工连接不会有碰撞因此没有必要使用CSMA/CD协议 3.6.4 随机接入 —— CSMA/CA协议
载波监听多址接入/碰撞避免 CSMA/CA Carrier Sense Multiple Access/Collision Avoidance 在无线局域网中不能使用碰撞检测CD原因如下 由于无线信道的传输条件特殊其信号强度的动态范围非常大无线网卡上接收到的信号强度往往会远远小于发送信号的强度可能相差百万倍。如果要在无线网卡上实现碰撞检测CD对硬件的要求非常高即使能够在硬件上实现无线局域网的碰撞检测功能但由于无线电波传播的特殊性存在隐蔽站问题进行碰撞检测的意义也不大 隐蔽站问题 802.11无线局域网使用CSMA/CA协议在CSMA的基础上增加了一个碰撞避免CA功能而不再实现碰撞检测功能 由于不可能避免所有的碰撞并且无线信道误码率较高802.11标准还使用了**数据链路层确认机制停止-等待协议**来保证数据被正确接收 802.11的MAC层标准定义了两种不同的媒体接入控制方式 分布式协调功能DCFDistributed Coordination Function。在DCF方式下没有中心控制站点每个站点使用CSMA/CA协议通过争用信道来获取发送权这是802.11定义的默认方式点协调功能PCFPoint Coordination Function。PCF方式使用集中控制的接入算法一般在接入点AP实现集中控制是802.11定义的可选方式在实际中较少使用 802.11标准规定所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧这段时间称为帧间间隔IFSInterFrame Space 帧间间隔的长短取决于该站点要发送的帧的类型 高优先级帧需要等待的时间较短因此可优先获得发送权低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送而其他站的高优先级帧已发送到信道上则信道变为忙态因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会 常用的两种帧间间隔如下 短帧间间隔SIFS28μs是最短的帧间间隔用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧、CTS帧、由过长的MAC帧分片后的数据帧、以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧DCF帧间间隔DIFS128μs它比短帧间间隔SIFS要长得多在DCF方式中用来发送数据帧和管理帧 CSMA/CA协议的工作原理 源站为什么在检测到信道空闲后还要再等待一段时间DIFS 考虑到可能有其他的站有高优先级的帧要发送。若有就要让高优先级帧先发送 目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧 SIFS是最短的帧间间隔用来分隔开属于一次对话的各帧。在这段时间内一个站点应当能够从发送方式切换到接收方式 信道由忙转为空闲且经过DIFS时间后还要退避一段随机时间才能使用信道 防止多个站点同时发送数据而产生碰撞 当站点检测到信道是空闲的并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧则不使用退避算法以下情况必须使用退避算法 在发送数据帧之前检测到信道处于忙状态时在每一次重传一个数据帧时在每一次成功发送后要连续发送下一个帧时这时为了避免一个站点长时间占用信道 CSMA/CA协议的退避算法 在执行退避算法时站点为退避计时器设置一个随机的退避时间 当退避计时器的时间减小到零时就开始发送数据当退避计时器的时间还未减小到零时而信道又转变为忙状态这时就冻结退避计时器的数值重新等待信道变为空闲再经过时间DIFS后继续启动退避计时器 在进行第iii次退避时退避时间在时隙编号{0,1,...,22i−1}\{0,1,...,2^{2i}-1\}{0,1,...,22i−1}中随机选择一个然后乘以基本退避时间也就是一个时隙的长度就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时对应于第6次退避就不再增加了 CSMA/CA协议信道预约和虚拟载波监听 为了尽可能减少碰撞的概率和降低碰撞的影响802.11标准允许要发送数据的站点对信道进行预约 源站在发送数据帧之前先发送一个短的控制帧称为请求发送RTSRequest To Send它包括源地址、目的地址以及这次通信包括相应的确认帧所需的持续时间若目的站正确收到源站发来的RTS帧且媒体空闲就发送一个响应控制帧称为允许发送CTSClear To Send它也包括这次通信所需的持续时间从RTS帧中将此持续时间复制到CTS帧中源站收到CTS帧后再等待一段时间SIFS后就可发送其数据帧若目的站正确收到了源站发来的数据帧在等待时间SIFS后就向源站发送确认帧ACK 除源站和目的站以外的其他各站在收到CTS帧或数据帧后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会受到其他站的干扰 如果RTS帧发生碰撞源站就收不到CTS帧需执行退避算法重传RTS帧由于RTS帧和CTS帧很短发送碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧其发送时延往往大于传播时延因为是局域网碰撞的概率很大且一旦发生碰撞而导致数据帧重发则浪费的时间就很多因此用很小的代价对信道进行预约往往是值得的。802.11标准规定了3种情况供用户选择 使用RTS帧和CTS帧不使用RTS帧和CTS帧只有当数据帧的长度超过某一数值时才使用RTS帧和CTS帧 除RTS帧和CTS帧会携带通信需要持续的时间数据帧也能携带通信需要持续的时间这称为802.11的虚拟载波监听机制由于利用虚拟载波监听机制站点只要监听到RTS帧、CTS帧或数据帧中的任何一个就能知道信道被占用的持续时间而不需要真正监听到信道上的信号因此虚拟载波监听机制能减少隐蔽带来的碰撞问题
3.7 MAC地址、IP地址以及ARP协议
3.7.1 MAC地址
当多个主机连接在同一个广播信道上要想实现两个主机之间的通信则每个主机都必须有一个唯一的标识即一个数据链路层地址 在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control)因此这类地址被称为MAC地址 MAC地址一般被固化在网卡网络适配器的电可擦可编程只读存储器EEPROM中因此MAC地址也被称为硬件地址 MAC地址有时也被称为物理地址。请注意这并不意味着MAC地址属于网络体系结构中的物理层 一般情况下用户主机会包含两个网络适配器有线局域网适配器有线网卡和无线局域网适配器无线网卡。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口所以会拥有更多的MAC地址。综上所述严格来说MAC地址是对网络上各接口的唯一标识而不是对网络上各设备的唯一标识 IEEE 802局域网的MAC地址格式 单播MAC地址举例 广播MAC地址举例 多播MAC地址举例 由于多播地址的第一字节的b0为1故可通过判断十六进制的低位数是否可被2整除快速判断是否为多播地址 给主机配置多播组列表进行私用应用时不得使用公有的标准多播地址具体可以在以下网址查询 http://standards.ieee.org/develop/regauth/grpmac/public.html
3.7.2 IP地址 注意IP地址属于网络层的内容 IP地址是因特网上的主机和路由器所使用的地址用于标识两部分信息 网络编号标识因特网上数以百万计的网络主机编号标识同一网络上不同主机或路由器各接口 显然之前介绍的MAC地址不具备区分不同网络的功能 如果只是一个单独的网络不接入因特网可以只是用MAC地址这不是一般用户的应用方式如果主机所在的网络需要接入因特网则IP地址和MAC地址都需要使用 从网络体系结构看IP地址与MAC地址 数据包转发过程中IP地址与MAC地址的变化情况 数据包转发过程中源IP地址和目的IP地址保持不变数据包转发过程中源MAC地址和目的MAC地址逐个链路或逐个网络改变 目前发送站知道应该将数据包转给具体哪个路由或主机发送站知道其目的站的IP地址但不知道其对应的MAC地址是什么将在后续的ARP协议中解释
3.7.3 ARP协议 主机B打算给C发送数据包。目前B知道C的IP地址但不知道MAC地址因此B的数据链路层封装MAC帧时无法填写目的MAC地址 实际上每台主机都会有一个ARP高速缓存表。表中记录有IP地址和MAC地址的对应关系于是主机B在表中试图查找主机C的IP地址 由于未找到则主机B需要发送ARP请求报文广播获取主机C的MAC地址 主机C收到广播后首先将B的IP地址与MAC地址记录到自己的ARP高速缓存表中再给B发送ARP响应单播以告知自己的MAC地址 主机B收到主机C发送的ARP响应后将对应信息添加在自己的ARP高速缓存中 其中每条记录的类型分为动态dynamic和静态static两种 动态自动获取生命周期默认为2min静态手工设置不同的操作系统下的生命周期不同例如系统重启后不存在或系统重启后依然有效
ARP协议只能在一段链路或一个网络上使用而不能跨网络使用ARP协议的使用是逐段链路进行的
3.8 集线器与交换机的区别 早期的总线型以太网 使用双绞线和集线器HUB的星型以太网 使用集线器的以太网在逻辑上仍是一个总线网各站共享总线资源使用的还是CSMA/CD协议集线器只工作在物理层它的每个接口仅简单地转发比特不进行碰撞检测由各站的网卡检测集线器一般都有少量的容错能力和网络管理功能。例如若网络中某个网卡出了故障不停地发送帧。此时集线器可以检测到这个问题在内部断开与出故障网卡的连线使整个以太网仍然能正常工作 使用集线器HUB在物理层扩展以太网 以太网交换机 以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式以太网交换机具有并行性能同时连通多对接口使多对主机能同时通信无碰撞不使用CSMA/CD协议以太网交换机一般都具有多种速率的接口例如10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合以太网交换机工作在数据链路层也包括物理层,它收到帧后在帧交换表中查找帧的目的MAC地址所对应的接口号然后通过该接口转发帧以太网交换机是一种即插即用设备其内部的帧交换表是通过自学习算法自动地逐渐建立起来的帧的两种转发方式 存储转发直通交换采用基于硬件的交叉矩阵交换时延非常小但不检查帧是否有差错 以下对比交换机中忽略ARP过程并且假设交换机的帧交换表已学习好了 单播对比 广播对比 多台主机同时给另一台主机发送单播帧对比 产生碰撞 缓存并逐个发送未产生碰撞 扩展对比 小结
3.9 以太网交换机自学习和转发帧的流程
主机A给主机B发送数据 交换机1记录A的MAC地址及对应的接口号交换机1在帧交换表中未找到主机B的MAC地址信息于是盲目转发交换机2收到数据后进行与交换机1相同的步骤 主机B给主机A发送数据 交换机1记录B的MAC地址及对应的接口号交换机1在帧交换表中找到了A的MAC地址对应的接口号于是只需通过该接口转发给主机A 主机E给主机A发送数据 交换机2记录E的MAC地址及对应的接口号交换机2在帧交换表中找到了A的MAC地址对应的接口号于是只需通过该接口转发给交换机1交换机1记录E的MAC地址及对应的接口号交换机1在帧交换表中找到了A的MAC地址对应的接口号于是只需通过该接口转发给主机A 主机G给主机A发送数据丢弃帧的情况 主机A不借助交换机可直接收到主机G的数据但数据依旧会传到交换机1中交换机1记录G的MAC地址和接口号交换机1找到了A的接口号但发现与G的接口号是一致的于是丢弃不再转发该帧 帧交换表中每条记录都有自己的有效时间到期自动删除。这是因为MAC地址和交换机接口的对应关系并不是永久性的 交换机的接口改接了另一台主机主机更换了网卡 以太网交换机自学习和转发帧的流程 收到帧后进行登记。登记的内容为帧的源MAC地址及进入交换机的接口号根据帧的目的MAC地址和交换机的帧交换表对帧进行转发有以下三种情况 明确转发交换机知道应当从哪个或哪些接口转发该帧单播多播广播盲目转发交换机不知道应当从哪个端口转发帧只能将其通过除进入交换机的接口外的其他所有接口转发也称为泛洪明确丢弃交换机知道不应该转发该帧将其丢弃
3.10 以太网交换机的生成树协议STP 添加冗余链路可以提高以太网的可靠性但是冗余链路也会带来负面效应——形成网络环路 其带来以下问题 广播风暴 大量消耗网络资源使得网络无法正常转发其他数据帧主机收到重复的广播帧 大量消耗主机资源交换机的帧交换表震荡漂移 以太网交换机使用生成树协议STPSpanning Tree Protocol可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题 不论交换机之间采用怎样的物理连接交换机都能够自动计算并构建一个逻辑上没有环路的网络其逻辑拓扑结构必须是树型的无逻辑环路最终生成的树型逻辑拓扑要确保连通整个网络当首次连接交换机或网络物理拓扑发生变化时有可能是人为改变或故障,交换机都将进行生成树的重新计算
3.10.Extra 【番外篇】生成树算法STA https://www.bilibili.com/video/BV1St411d7uD 选举根交换机 根交换机的选举条件网桥IDBID最小者当选网桥ID由以下两部分构成 优先级 范围0 - 61440步长4096默认值32768 交换机的基本MAC地址 网桥ID的比较方法 优先级取值越小则网桥ID就越小若优先级相同则比较MAC地址从MAC地址的左侧开始依次比较数值小的则网桥ID就越小 选举根端口 在每个非根交换机上选出一个根端口RPRoot Port并且只能是一个根端口用于接收根交换机发来的BPDU也用来转发普通流量根端口RP的选举条件 BPDU接收端口到根交换机的路径成本最小 若成本相同则选择对端指预选根端口的另一端的端口的网桥ID最小若对端均指向同一交换机则选择对端的端口IDPID最小比较规则与网桥ID类似 优先级 范围0 - 240步长16默认值128 端口号 选举指定端口并阻塞备用端口 在每个网段上选出一个指定端口DPDesignated Port并且只能是一个指定端口用于转发根交换机发来的BPDU也用来转发普通流量指定端口的选举条件 根交换机的所有端口都是指定端口根端口的对端端口一定是指定端口BPDU转发端口到根交换机的路径成本最小若成本相同则选择本端的网桥ID最小 剩余端口成为备用端口APAlternate Port将它们阻塞
3.11 虚拟局域网VLAN
3.11.1 虚拟局域网VLAN概述 以太网交换机工作在数据链路层也包括物理层 使用一个或多个以太网交换机互连起来的交换式以太网其所有站点都属于同一个广播域 随着交换式以太网规模的扩大广播域相应扩大其带来的弊端有 广播风暴 会浪费网络资源和各主机的CPU资源难以管理和维护潜在的安全问题 网络中会频繁出现广播信息 TCP/IP协议栈中的很多协议都会使用广播 地址解析协议ARP已知IP地址找出其相应的MAC地址路由信息协议RIP一种小型的内部路由协议动态主机配置协议DHCP用于自动配置IP地址 NetBEUIWidnows下使用的广播型协议IPX/SPXNovel网络的协议栈Apple TalkApple公司的网络协议栈 分割广播域的方法 使用路由器可以隔离广播域 由于路由器默认情况下不对广播数据包进行转发因此路由器很自然地就可以隔离广播域。然而路由器的成本较高局域网内部全部使用路由器来隔离广播域是不现实的 虚拟局域网VLANVirtual Local Area Network是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术这些逻辑组具有某些共同的需求 只有同一个VLAN才收得到广播消息
3.11.2 虚拟局域网VLAN的实现机制 IEEE 802.1Q帧也称Dot One Q帧对以太网的MAC帧格式进行了扩展插入了4字节的VLAN标记 VLAN标记的最后12比特称为VLAN标识符VID它唯一地标志了以太网帧属于哪一个VLAN VID的取值范围是0 ~ 4095000 ~ 212−12^{12}-1212−10和4095都不用来表示VLAN因此用于表示VLAN的VID的有效取值范围是1 ~ 4094 802.1Q帧是由交换机来处理的而不是用户主机来处理的 当交换机收到普通的以太网帧时会将其插入4字节的VLAN标记转变为802.1Q帧简称“打标签”当交换机转发802.1Q帧时可能会删除其4字节VLAN标记转变为普通以太网帧简称“去标签” 交换机的端口类型有以下三种 AccessTrunkHybrid 交换机各端口的缺省VLAN ID 在思科交换机上称为Native VLAN即本征VLAN在华为交换机上称为Port VLAN ID即端口VLAN ID简记为PVID Access端口 Access端口一般用于连接用户计算机Access端口只能属于一个VLANAccess端口的PVID值与端口所属VLAN的ID相同默认为1Access端口接收处理方法 一般只接受“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧“打标签”即插入4字节VLAN标记字段字段中的VID取值与端口的PVID取值相等Access端口发送处理方法 若帧中的VID与端口的PVID相等则“去标签”并转发该帧否则不转发 Trunk端口 Trunk端口一般用于交换机之间或交换机与路由器之间的互连Trunk端口可以属于多个VLAN用户可以设置Trunk端口的PVID值。默认情况下Trunk端口的PVID值为1Trunk端口发送处理方法 对VID等于PVID的帧“去标签”再转发对VID不等于PVID的帧直接转发 Trunk端口接收处理方法 接收“未打标签”的帧根据接收帧的端口的PVID给帧“打标签”即插入4字节VLAN标记字段字段中的VID取值与端口的PVID取值相等接收“已打标签的帧” 为何trunk端口不都直接不去标签直接转发和接收呢 Hybrid端口 Hybrid端口既可用于交换机之间或交换机与路由器之间的互连同Trunk端口也可用于交换机与用户计算机之间的互连同Access端口Hybrid端口可以属于多个VLAN同Trunk端口用户可以设置Hybrid端口的PVID值。默认情况下Hybrid端口的PVID值为1同Trunk端口Hybrid端口发送处理方法与Trunk端口不同 查看帧的VID是否在端口的“去标签”列表中 若存在则“去标签”后再转发若不存在则直接转发 Hybrid端口接收处理方法同Trunk端口 接收“未打标签”的帧根据接收帧的端口的PVID给帧“打标签”即插入4字节VLAN标记字段字段中的VID取值与端口的PVID取值相等接收“已打标签的帧”
四、网络层
4.1 网络层概述
网络层的主要任务是实现网络互连进而实现数据包在各网络之间的传输要实现网络层任务需要解决以下主要问题 网络层向运输层提供怎样的服务“可靠传输”还是“不可靠传输”网络层寻址问题路由选择问题 因特网Internet是目前全世界用户数量最多的互联网它使用TCP/IP协议栈由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议因此在TCP/IP协议栈中网络层常称为网际层综上所述我们通过学习TCP/IP协议栈的网际层来学习网络层的理论知识和实践技术 4.2 网络层提供的两种服务 面向连接的虚电路服务 可靠通信由网络来保证 必须建立网络层的连接——虚电路VC(Virtual Circuit) 通信双方沿着已建立的虚电路发送分组 目的主机的地址仅在连接建立阶段使用之后每个分组的首部只需携带一条虚电路的编号构成虚电路的每一段链路都有一个虚电路编号 这种通信方式如果再使用可靠传输的网络协议就可使所发送的分组最终正确到达接收方无差错按序到达、不丢失、不重复 通信结束后需要释放之前所建立的虚电路 很多广域分组交换网都使用面向连接的虚电路服务。例如曾经的X.25和逐渐过时的帧中继FR、异步传输模式ATM等 无连接的数据报服务 可靠通信应当由用户主机来保证不需要建立网络层连接每个分组可走不同的路径每个分组的首部必须携带目的主机的完整地址 这种通信方式所传送的分组可能误码、丢失、重复和失序由于网络本身不提供端到端的可靠传输服务这就使网络中的路由器可以做得比较简单而且价格低廉与电信网的交换机相比较因特网采用了这种设计思想也就是将复杂的网络处理功能置于因特网的边缘用户主机和其内部的运输层而将相对简单的尽最大努力的分组交付功能置于因特网核心 小结 由于TCP/IP体系结构的因特网的网际层提供的是最简单灵活、无连接的、尽最大努力交付的数据报服务因此本章主要围绕网际层如何传送IP数据报这个主题进行讨论 4.3 IPv4地址
4.3.1 IPv4地址概述 在TCP/IP体系中IP地址是一个最基本的概念我们必须把它弄清楚 IPv4地址就是给因特网Internet上的每一台主机或路由器的每一个接口分配一个在全世界范围内是唯一的32比特的标识符 IP地址由因特网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配 我国用户可向亚太网络信息中心APNIC(Asia Pacific Network Information Center)申请IP地址需要缴费2011年2月3日互联网号码分配管理局IANA(由ICANN行使职能宣布IPv4地址已经分配完毕我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址。同时全面开展商用部署IPv6 IPv4地址的编址方法经历了如下三个历史阶段 32比特的IPv4地址不方便阅读、记录以及输入等因此IPv4地址采用点分十进制表示方法以方便用户使用
4.3.2 分类编址的IPv4地址 只有A类、B类和C类地址可分配给网络中的主机或路由器的各接口**主机号为“全0”**的地址是网络地址不能分配给主机或路由器的各接口**主机号为“全1”**的地址是广播地址不能分配给主机或路由器的各接口 这里的1.0.0.0地址貌似是不能指派的因为主机号全0了
可指派的网络数量为28−1−21262^{8-1}-212628−1−2126减2的原因是除去最小网络号0和最大网络号127每个网络中可分配的IP地址数量为224−2167772142^{24}-216777214224−216777214减2的原因是除去主机号为全0的网络地址和全1的广播地址 注意有些教材中指出128.0是保留网络号B类第一个可指派的网络号为128.1 但根据2002年9月发表的RFC 3330文档128.0网络号已经可以分配了。有兴趣的同学可以自行查询以128.0开头的IP地址看看它们属于那些国家 可指派的网络数量为216−2163842^{16-2}16384216−216384每个网络中可分配的IP地址数量为216−2655342^{16}-265534216−265534减2的原因是除去主机号为全0的网络地址和全1的广播地址 可指派的网络数量为224−320971522^{24-3}2097152224−32097152每个网络中可分配的IP地址数量为28−22542^{8}-225428−2254减2的原因是除去主机号为全0的网络地址和全1的广播地址 注意有些教材中指出192.0.0是保留网络号C类第一个可指派的网络号为192.0.1 但根据2002年9月发表的RFC 3330文档192.0.0网络号已经可以分配了。只不过目前还没有分配出去 4.3.3 划分子网的IPv4地址 为新增网络申请新的网络号会带来以下弊端 需要等待时间和花费更多的费用会增加其他路由器中路由表记录的数量浪费原有网络中剩余的大量IP地址 从主机号部分借用一部分作为子网号 如果未在图中标记子网号部分那么我们和计算机又如何知道分类地址中主机号有多少比特被用作子网号了呢 32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号 子网掩码使用连续的比特1来对应网络号和子网号子网掩码使用连续的比特0来对应主机号将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址 例题 默认子网掩码是指在未划分子网的情况下使用的子网掩码
4.3.4 无分类编址的IPv4地址 划分子网在一定程度上缓解了因特网在发展中遇到的困难但是数量巨大的C类网因为其地址空间太小并没有得到充分使用而因特网的IP地址仍在加速消耗整个IPv4地址空间面临全部耗尽的威胁 为此因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题同时还专门成立IPv6工作组负责研究新版本IP以彻底解决IP地址耗尽问题 1993年IETF发布了无分类域间路由选择CIDR(Classless Inter-Domain Routing)的RFC文档RFC 1517~1519和1520 CIDR消除了传统的A类、B类和C类地址以及划分子网的概念CIDR可以更加有效地分配IPv4的地址空间并且可以在新的IPv6使用之前允许因特网的规模继续增长 CIDR使用“斜线记法”或称CIDR记法。即在IPv4地址后面加上斜线“/”在斜线后面写上网络前缀所占的比特数量 CIDR实际上是将网络前缀都相同的连续的IP地址组成一个“CIDR地址块” 我们只要知道CIDR地址块中的任何一个地址就可以知道该地址块的全部细节 地址块的最小地址地址块的最大地址地址块中的地址数量地址块聚合某类网络A类、B类或C类的数量地址掩码也可继续称为子网掩码 路由聚合构造超网 网络前缀越长地址块越小路由越具体 若路由器查表转发分组时发现有多条路由可选则选择网络前缀最长的那条这称为最长前缀匹配因为这样的路由更具体
4.3.5 IPv4地址的应用规划 定长的子网掩码FLSMFixed Length Subnet Mask 使用同一个子网掩码来划分子网每个子网所分配的IP地址数量相同造成IP地址的浪费 应用需求将C类网络218.75.230.0划分成5个子网每个子网上可分配的IP地址数量不得少于各自的需求 注意每个子网还需要一个额外的路由器接口地址 图中的网络5只需要4个IP地址但是不得不分配32个IP地址从而造成了严重的浪费 变长的子网掩码VLSMVariable Length Subnet Mask 使用不同的子网掩码来划分子网每个子网所分配的IP地址数量可以不同尽可能减少对IP地址的浪费 应用需求从地址块218.75.230.0/24中取出5个地址块1个“/27”、3个“/28”、1个“/30”按序分配给其中的5个网络 分配原则每个子块的起点位置不能随意选取只能选取块大小整数倍的地址作为起点保证同一个地址块中的IP的网络号及子网号的组合前缀是一致的建议先给大的子块分配
4.4 IP数据报的发送和转发过程 为了将重点放在TCP/IP协议栈的网际层发送和转发IP数据报的过程上在之后的举例中我们忽略使用ARP协议来获取目的主机或路由器接口的MAC地址的过程以及以太网交换机自学习和转发帧的过程。 IP数据报的发送和转发过程包含以下两部分 主机发送IP数据报路由器转发IP数据报
举例 同一个网络中的主机之间可以直接通信属于直接交付不同网络之间主键需要通过路由器中转属于间接交付 源主机如何知道目的主机是否与自己在同一个网络中 将源主机IP与源主机子网掩码相与得到本机网络地址再将目的主机IP与源主机子网掩码相与得到目的网络地址再比对网络地址即可相同则说明在同一网络中 主机C需要通过路由器转发来向主机F通信 主机C如何知道该由哪个路由器转发呢 实际上用户为了让本网络的主机能和其他网络中的主机进行通信就必须给其指定本网络中的一个路由器由该路由器帮忙进行转发。所指定的路由器也被称为默认网关 对于本例可将路由器接口0的IP地址指定给该接口所直连网络中的各个主机作为默认网关右边的网络也是同理 主机A进行间接交付给主机D其数据报通过默认网关发送给路由器 路由器收到IP数据报后如何转发 检测IP数据报首部是否出错 若出错则直接丢弃该IP数据报并通告源主机若没有出错则进行转发 根据IP数据报的目的地址在路由表中查找匹配的条目 若找到匹配的条目则转发给条目中指示的下一跳若找不到则丢弃该IP数据报并通告源主机 IP数据报首部未出错路由器将首部中的目的地址与路由表中地址掩码相与再比对是否匹配若匹配则向其下一跳发送 广播通信
4.5 静态路由配置及其可能产生的路由环路问题 静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表 这种人工配置方式简单、开销小。但不能及时适应网络状态流量、拓扑等的变化一般只在小规模网络中采用 使用静态路由配置可能出现以下导致产生路由环路的错误 配置错误聚合了不存在的网络网络故障 【举例】静态路由配置 【举例】默认路由 本例中配置了默认路由后甚至可删除它的上一条路由 【举例】特定主机路由 特定主机路由在路由表中的掩码为全1即255.255.255.255 【举例】静态路由配置错误导致路由环路 为了防止IP数据报在路由环路中永久兜圈在IP数据报首部设有生存时间TTL字段 IP数据报进入路由器后TTL字段的值减1。若TTL的值不等于0则被路由器转发否则被丢弃 【举例】聚合了不存在的网络而导致路由环路 对于该情况可以在路由表中为聚合路由中不存在的网络添加黑洞路由其作为下一跳相当于丢弃了该数据报 【举例】网络故障而导致路由环路 发送故障时路由器会自动删除路由表中与故障地址相关的条目从而引起环路 同样地采用黑洞路由的方法为故障的目的网络添加黑洞路由条目 该黑洞路由条目在该网络故障时自动生效而故障恢复后由于路由器自动得出了正确的路由条目此时黑洞路由处于失效状态 路由条目的类型 直连网络静态路由人工配置动态路由路由选择协议 特殊的静态路由条目 默认路由目的网络为0.0.0.0地址掩码为0.0.0.0特定主机路由目的网络为特定主机的IP地址地址掩码为255.255.255.255黑洞路由下一跳为null0
4.6 路由选择协议
4.6.1 路由选择协议概述
静态路由选择动态路由选择由人工配置的网络路由、默认路由、特定主机路由、黑洞路由等都属于静态路由路由器通过路由选择协议自动获取路由信息这种人工配置方式简单、开销小。但不能及时适应网络状态流量、拓扑等的变化比较复杂、开销比较大。能较好地适应网络状态的变化一般只在小规模网络中采用适用于大规模网络
因特网所采用的路由选择协议的主要特点 自适应动态路由选择能较好地适应网络状态的变化分布式路由器之间交换路由信息分层次将整个因特网划分为许多较小的自治系统AS(Autonomous System) 域间路由选择采用外部网关协议EGP现也称外部路由协议ERP域内路由选择采用内部网关协议IGP现也称内部路由协议IRP 路由选择协议 内部网关协议IGP 路由信息协议RIP 基于距离向量在因特网上最早使用内部网关路由协议IGRP 基于距离向量思科早期私有的协议现在已被EGIRP取代增强型内部网关路由协议EIGRP 思科私有协议用来取代IGRP的混合型路由协议结合距离向量和链路状态开放式最短路径优先OSPF 基于链路状态在各种网络中广泛使用中间系统到中间系统IS-IS 基于链路状态集成化IS-IS时ISP骨干网上最常用的IGP协议 外部网关协议EGP 边界网关协议BGP 路由器的基本结构 信号从某个输入端口进入路由器物理层将信号转换为比特流并交付数据链路层处理数据链路层从比特流中识别出帧去掉帧头和帧尾后交付网络层处理若交付网络层的分组是普通待转发的数据分组则根据分组首部中的目的地址进行查表转发 若找不到匹配的转发条目则丢弃该分组否则按照匹配条目中所指示的端口进行转发 网络层更新数据分组首部中某些字段的值例如将数据分组的生存时间减1然后交付数据链路层进行封装数据链路层将数据分组封装成帧交付网络层处理物理层将帧看作比特流将其变换成相应的电信号进行发送 步骤3中若交付网络层的分组是路由器之间交换路由信息的路由报文则把该分组送交路由选择处理机路由选择处理机根据分组的内容来更新自己的路由表 路由表一般仅包含从目的网络到下一跳的映射路由表需要对网络拓扑变化的计算最优化转发表是从路由表得出的转发表的结构应当使查找过程最优化 在之前的静态路由配置的相关课程中并未严格区分路由器中的路由表和转发表有助于简化问题的分析 路由选择处理机除了处理收到的路由报文外还会周期性的给其他路由器发送自己所知道的路由信息路由器的各端口还应具有输入缓冲区和输出缓冲区输入缓冲区用来暂存新进入路由器但还来不及处理的分组输出缓冲区用来暂存已经处理完毕但还来不及发送的分组路由器的端口一般都同时具有输入和输出的功能图中分给出输入和输出目的在于更好地演示路由器的基本工作过程过程在视频里这里是没有滴
4.6.2 路由信息协议RIP的基本工作原理 路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议之一其相关标准文档为RFC 1058 RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离称为“距离向量D-V(Distance-Vector) RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离 路由器到直连网络的距离定义为1路由器到非直连网络的距离定义为所经过的路由器数加1允许一条路径最多只能包含15个路由器。“距离”等于16时相当于不可达。因此RIP只适用于小型互联网 需要说明的是有些路由器厂商并未严格按照RIP标准文档的规定来实现RIP。例如思科路由器中的RIP将路由器到直连网络的距离定义为0但这并不影响RIP的正常运行 RIP认为好的路由就是“距离短”的路由也就是所通过路由器数量最少的路由 这里RIP认为R1到R5的好路由是R1→R4→R5尽管这条路由上各段链路的带宽都非常小 当到达同一目的网络有多条“距离相等”的路由时可以进行等价负载均衡即将通信量均衡地分布到多条等价的路由上 RIP包含以下三个要点 和谁交换信息 仅和相邻路由器交换信息 交换什么信息 自己的路由表何时交换信息 周期性交换例如每30秒 【举例】RIP的基本工作过程 路由器刚开始工作时只知道自己到直连网络的距离为1每个路由器仅和相邻路由器周期性地交换并更新路由信息若干次交换和更新后每个路由器都知道到达本AS内各网络的最短距离和下一跳地址称为收敛 【举例】RIP的路由条目的更新规则 其中C路由表中下一跳的问号表示路由器D不必关心该信息 路由器D收到C的路由表并将其如下改造 下一跳均设为C因为是D转发数据经过C再抵达这些网络距离在C路由表的基础上加1因为比C额外经过了C路由器对于原路由表条目【N2 2 C】 由于新的改造后的C路由表中【N2 5 C】说明C到N2的拓扑发生变化应将其更新为【N2 5 C】 “到达目的网络相同下一跳最新消息更新”由于原路由表没有N3相关的条目 于是将【N3 9 C】添加到路由表中 “发现了新的网络添加”对于原路由表条目【N6 8 F】 由于【N6 5 C】同属于到达N6网络并且距离更短因此将其更新为【N6 5 C】 “到达目的网络不同下一跳新路由优势应当更新”对于原路由表条目【N8 4 E】 由于与【N8 4 C】距离相同且属于不同下一跳因此可将其添加到原表中进行等价负载均衡 “到达目的网络不同下一跳等价负载均衡”对于原路由表条目【N9 4 F】 由于表中【N9 6 C】距离比其长因此不做更新 “到达目的网络不同下一跳新路由劣势不更新” RIP存在“坏消息传播得慢”的问题 R1直连的网络N1发生故障R1监测到后将其条目中距离改为16表示不可达等待RIP更新周期到时后发送路由信息给R2。假设R2的更新周期先到时于是【N1 2 R1】信息先到达R1于是R1被谣言误导将条目改为【N1 3 R2】并在更新周期到时后发送给R2于是R2也被谣言误导条目改为【N1 4 R1】接着来回往复传递谣言最终距离抵达16才明白不可到达N1网络 “坏消息传播得慢”又称为路由环路或距离无穷计数问题这是距离向量算法的一个固有问题。可以采取多种措施减少出现该问题的概率或减小该问题带来的危害 限制最大路径距离为1516表示不可达当路由表发生变化时就立即发送更新报文即“触发更新”而不仅是周期性发送让路由器记录收到某特定路由信息的接口而不让同一路由信息再通过此接口向反方向传送即“水平分割”
4.6.3开放最短路径优先OSPF的基本工作原理 开放最短路径优先OSPF(Open Shortest Path First)是为克服RIP的缺点在1989年开发出来的 “开放”表明OSPF协议不是受某一家厂商控制而是公开发表的“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF OSPF是基于链路状态的而不像RIP那样是基于距离向量的 OSPF采用SPF算法计算路由从算法上保证了不会产生路由环路 OSPF不限制网络规模更新效率高收敛速度快 链路状态是指本路由器都和哪些路由器相邻以及相应链路的“代价”cost “代价”用来表示费用、距离、时延、带宽等等。这些都由网络管理人员来决定 【举例】思科路由器中OSPF计算代价的方法100Mbps/链路带宽计算结果小于1的值仍记为1大于1且有小数的舍去小数 OSPF相邻路由器之间通过交互问候Hello分组建立和维护邻居关系 Hello分组封装在IP数据报中发往组播地址224.0.0.5 发送周期为10秒40秒未收到来自邻居路由器的Hello分组则认为该邻居路由器不可达 使用OSPF的每个路由器都会产生链路状态通告LSA(Link State Advertisement)。LSA中包含以下内容 直连网络的链路状态信息邻居路由器的链路状态信息 LSA被封装在链路状态更新分组LSU中采用洪泛法发送 使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA 通过各路由器洪泛发送封装有自己LSA的LSU分组各路由器的LSDB最终将达到一致 使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算构建出各自到达其他各路由器的最短路径即构建各自的路由表 OSPF有以下五种分组类型类型 类型1问候Hello分组 用来发现和维护邻居路由器的可达性类型2数据库描述Database Description分组 向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息类型3链路状态请求Link State Request分组 向邻居路由器请求发送某些链路状态项目的详细信息类型4链路状态更新Link State Update分组 路由器使用这种分组将其链路状态进行洪泛发送即用洪泛法对全网更新链路状态类型5链路状态确认Link State Acknowledgment分组 这是对链路状态更新分组的确认分组 OSPF的基本工作过程 相邻路由器之间周期性发送问候分组以便建立和维护邻居关系给邻居路由器发送数据库描述分组即将自己的链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器R1收到R2发送的数据库描述分组后发现自己缺少其中的某些链路状态项目于是给R2发送链路状态请求分组R2收到后将R1所缺少的链路状态项目的详细信息封装在链路状态更新分组中发送给R1R1收到后将这些所缺少的链路状态项目的详细信息添加到自己的链路状态数据库中并给R2发送链路状态确认分组最终R1和R2的链路状态数据库将达到一致即链路状态数据库同步每30分组或链路状态发送变化时路由器都会发送链路状态更新分组收到该分组的其他路由器将洪泛转发该分组并给该路由器发回链路状态确认分组这又称为新情况下的链路状态数据库同步 OSPF在多点接入网络中路由器邻居关系的建立 若不采用其他机制将会产生大量的多播分组 选举指定路由器DR(designated router)和备用的指定路由器BDR(backup designated router)所有的非DR/BDR只与DR/BDR建立邻居关系非DR/BDR之间通过DR/BDR交换信息 若DR出现问题则由BDR顶替DR 为了使OSPF能够用于规模很大的网络OSPF把一个自治系统再划分为若干个更小的范围叫做区域Area
4.6.Extra Dijkstra最短路径算法
算法执行大致步骤
首先选择一个点作为根结点将根结点相邻的结点记录在表中表中记录每个点到根结点的最短距离以及其前驱结点初始时表中的距离可视作无穷大此时以根结点作为出发点的过程已完毕做上标记于是再以表中距离较小且为做完毕标记的结点为出发点计算途经该出发点到它的邻接点的距离根到出发点距离 出发点到邻接点距离若计算出的距离小于表中原有距离则更新表同时更新距离和前驱结点前驱即为该出发点于是循环步骤3、4操作直到所有的点都做上标记说明路径已全部计算完毕
4.6.4 边界网关协议BGP的基本工作原理 外部网关协议EGP例如边界网关协议BGP 在不同自治系统内度量路由的“代价”距离带宽费用等可能不同。因此对于自治系统之间的路由选择使用“代价”作为度量来寻找最佳路由是不行的 自治系统之间的路由选择必须考虑相关策略政治经济安全等 BGP只能是力求寻找一条能够到达目的网络且比较好的路由不能兜圈子而并非要寻找一条最佳路由在配置BGP时每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”不同自治系统的BGP发言人要交换路由信息首先必须建立TCP连接端口号为179 在此TCP连接上交换BGP报文以建立BGP会话利用BGP会话交换路由信息例如增加新的路由或撤销过时的路由以及报告出错的情况等使用TCP连接交换路由信息的两个BGP发言人彼此称为对方的邻站neighbor或对等站peer BGP发言人除了运行BGP外还必须运行自己所在自治系统所使用的内部网关协议IGP例如OSPF或RIP BGP发言人交换网络可达性的信息要到达某个网络所要经过的一系列自治系统 当BGP发言人互相交换了网络可达性的信息后各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图 BGP适用于多级结构的因特网 BGP-4有以下四种报文 OPEN打开报文用来与相邻的另一个BGP发言人建立关系使通信初始化UPDATE更新报文用来通告某一路由的信息以及列出要撤销的多条路由KEEPALIVE保活报文用来周期性地证实邻站的连通性NOTIFICATION通知报文用来发送检测到的差错
4.7 IPv4数据报的首部格式 版本 占4比特表示IP协议的版本 通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4即IPv4 首部长度 占4比特表示IP数据报首部的长度。该字段的取值以4字节为单位 最小十进制取值为5表示IP数据报首部只有20字节固定部分 最大十进制取值为15表示IP数据报首部包含20字节固定部分和最大40字节可变部分 可选字段 长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施 可选字段增加了IP数据报的功能但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用 填充字段 确保首部长度为4字节的整数倍。使用全0进行填充 区分服务 占8比特用来获得更好的服务 该字段在旧标准中叫作服务类型但实际上一直没有被使用过 1998年因特网工程任务组IETF把这个字段改名为区分服务 利用该字段的不同数值可提供不同等级的服务质量 只有在使用区分服务时该字段才起作用。一般情况下都不使用该字段 总长度 占16比特表示IP数据报的总长度首部数据载荷 最大取值为十进制65535以字节为单位 标识、标志、片偏移三个字段共同用于IP数据报分片 由于数据链路层的帧的数据载荷长度受限于最大传输单元MTU例如以太网规定MTU值为1500字节因此当IP数据报长度超过MTU时无法封装需要进行分片 标识 占16比特属于同一个数据报的各分片数据报应该具有相同的标识 IP软件维护一个计数器每产生一个数据报计数器值加1并将此值赋给标识字段标志 占3比特各比特含义如下 DF位1表示不允许分片0表示允许分片MF位1表示“后面还有分片”0表示“这是最后一个分片”保留位必须为0 片偏移 占13比特指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位 片偏移以8个字节为单位 【举例】对IPv4数据报进行分片 假定分片2的IP数据报经过某个网络时还需要再进行分片 生存时间TTL 占8比特最初以秒为单位最大生存周期为255秒路由器转发IP数据报时将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间若不为0就转发否则就丢弃 现在以“跳数”为单位路由器转发IP数据报时将IP数据报首部中的该字段的值减1若不为0就转发否则就丢弃 【举例】生存时间TTL字段的作用——防止IP数据报在网络中永久兜圈 协议 占8比特指明IPv4数据报的数据部分是何种协议数据单元 常用的一些协议和相应的协议字段值如下 协议名称协议字段值ICMP1IGMP2TCP6UDP17IPv641OSPF89 首部检验和 占16比特用来检测首部在传输过程中是否出现差错。比CRC检验码简单称为因特网检验和 IP数据报每经过一个路由器路由器都要重新计算首部检验和因为某些字段生存时间、标志、片偏移等的取值可能发生变化 由于IP层本身并不提供可靠传输的服务并且计算首部校验和是一项耗时的操作因此在IPv6中路由器不再计算首部校验和从而更快转发IP数据报 源IP地址和目的IP地址 各占32比特用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址
4.8 网际控制报文协议ICMP 为了更有效地转发IP数据报和提高交付成功的机会在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol) 主机或路由器使用ICMP来发送差错报告报文和询问报文 ICMP报文被封装在IP数据报中发送 ICMP差错报告报文共有以下五种 终点不可达 当路由器或主机不能交付数据报时就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误 源点抑制 当路由器或主机由于拥塞而丢弃数据报时就向源点发送源点抑制报文使源点知道应当把数据报的发送速率放慢 时间超过 当路由器收到一个目的IP地址不是自己的IP数据报会将其生存时间TTL字段的值减1。若结果不为0则将该IP数据报转发出去若结果为0除丢弃该IP数据报外还要向源点发送时间超过报文 另外当终点在预先规定的时间内不能收到一个数据报的全部数据报片时就把已收到的数据报片都丢弃也会向源点发送时间超过报文 参数问题 当路由器或目的主机收到IP数据报后根据其首部中的检验和字段发现首部在传输过程中出现了误码就丢弃该数据报并向源点发送参数问题报文 改变路由重定向 路由器把改变路由报文发送给主机让主机知道下次应将数据报发送给另外的路由器可通过更好的路由 以下情况不应发送ICMP差错报告报文 对ICMP差错报告报文不再发送ICMP差错报告报文对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文对具有多播地址的数据报都不发送ICMP差错报告报文对具有特殊地址如127.0.0.0或0.0.0.0的数据报不发送ICMP差错报告报文 常用的ICMP询问报文有以下两种 回送请求和回答 ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。 收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。 这种询问报文用来测试目的站是否可达及了解其有关状态。时间戳请求和回答 ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。 在ICMP时间戳回答报文中有一个32位的字段其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。 这种询问报文用来进行时钟同步和测量时间 ICMP应用举例 分组网间探测PINGPacket InterNet Groper 用来测试主机或路由器间的连通性应用层直接使用网际层的ICMP没有通过运输层的TCP或UDP使用ICMP回送请求和回答报文 跟踪路由traceroute 用来测试IP数据报从源主机到达目的主机要经过哪些路由器Windows版本 tracert命令应用层直接使用网际层ICMP使用了ICMP回送请求和回答报文以及差错报告报文 Unix版本 traceroute命令在运输层使用UDP协议仅使用ICMP差错报告报文  不断从1开始增加数据报的生存时间TTL借助ICMP差错报告中的时间超过来获取沿途的路由器信息直至收到目的主机返回的回答报文
4.9 虚拟专用网VPN与网络地址转换NAT 虚拟专用网VPN(Virtual Private Network) 利用公用的因特网作为本机构各专用网之间的通信载体这样的专用网又称为虚拟专用网。由于IPv4地址的紧缺一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。因此虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址而不是需要申请的、在因特网上使用的公有地址 如下图所示同一机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN 有时一个机构的VPN需要有某些外部机构通常就是合作伙伴参加进来。这样的VPN就称为外联网VPN 在外地工作的员工需要访问公司内部的专用网络时只要在任何地点接入到因特网运行驻留在员工PC中的VPN软件在员工的PC和公司的主机之间建立VPN隧道即可访问专用网络中的资源。这种VPN称为远程接入VPN 网络地址转换NAT(Network Address Translation) 虽然因特网采用了无分类编址方式来减缓IPv4地址空间耗尽的速度但由于因特网用户数目的激增特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加IPv4地址空间即将面临耗尽的危险仍然没有被解除 1994年提出了一种网络地址转换NAT的方法再次缓解了IPv4地址空间即将耗尽的问题 NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源 该转换方法存在一个问题如果NAT路由器具有N个全球IP地址那么至多只能有N个内网主机能够同时和因特网上的主机通信。 由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据因此可以利用运输层的端口号和IP地址一起进行转换 这样用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和IP地址一起进行转换的技术叫作网络地址与端口号转换NAPT(Network Address and Port Translation) 外网主机是否可以首先发起通信 不可以若由外网主机首先发起当NAPT路由器收到来自外网的IP数据报后在NAPT转换表中找不到相应的记录也就无法把数据报转发给内网的主机。因此使用私有地址的主机不能直接充当因特网服务器 对于一些P2P网络应用需要外网主机主动与内网主机进行通信在通过NAT时会遇到问题需要网络应用自己使用一些特殊的NAT穿越技术来解决问题 另外由于NAT对外网屏蔽了内网主机的网络地址能为内网的主机提供一定的安全保护
五、运输层
5.1 运输层概述
之前课程所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题实现了主机到主机的通信但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务运输层协议又称为端到端协议 运输层向高层用户屏蔽了下面网络核心的细节如网络拓扑、所采用的路由选择协议等,它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道根据应用需求的不同因特网的运输层为应用层提供了两种不同的运输协议即面向连接的TCP和无连接的UDP这两种协议就是本章要讨论的主要内容
5.2 运输层端口号、复用与分用的概念 运行在计算机上的进程使用进程标识符PID来标志 因特网上的计算机并不是使用统一的操作系统不同的操作系统Windows、Linux、Mac OS又使用不同格式的进程标识符 为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信就必须使用统一的方法对TCP/IP体系的应用进程进行标识 TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程 端口号使用16比特表示取值范围0 ~ 65535 熟知端口号0~1023IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议例如FTP使用21/20HTTP使用80DNS使用53登记端口号1024~49151为没有熟知端口号的应用程序使用。使用这类端口号必须在IANA按照规定的手续登记以防止重复。例如Microsoft RDP微软远程桌面使用的端口是3389短暂端口号49152~65535留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时就知道了客户进程所使用的动态端口号。通信结束后这个端口号可供其他客户进程以后使用 端口号只具有本地意义即端口号只是为了标识本计算机应用层中的各进程在因特网中不同计算机中的相同端口号是没有联系的 发送方的复用和接收方的分用 听麻了…… TCP/IP体系的应用层常用协议所使用的运输层熟知端口号 【举例】运输层端口号 计算机网络微课堂有字幕无背景音乐版_哔哩哔哩_bilibili - p58 自己看从6:00开始全是
5.3 UDP和TCP的对比
用户数据报协议UDPUser Datagram Protocol 传输控制协议TCPTransmission Control Protocol 无连接的UDP可随时发送数据 面向连接的TCP在数据通信之前必须通过**“三报文握手”建立TCP连接**建立成功后才能进行数据传输数据传输结束后必须通过**“四报文挥手”释放连接**这里所谓的连接是指逻辑连接关系而非物理连接 UDP支持单播、多播以及广播TCP仅支持单播 UDP是面向应用报文的UDP对应用进程交下来的报文既不合并也不拆分而是保留这些报文的边界 TCP是面向字节流的这正是TCP实现可靠传输、流量控制、以及拥塞控制的基础 UDP向上层提供无连接不可靠传输服务对于误码报文仅丢弃中途丢失的报文不做任何处理。适用于IP电话、视频会议等实时应用 TCP向上层提供面向连接的可靠传输服务基于TCP连接的可靠信道不会出现传输差错误码、丢失、乱序、重复。适用于要求可靠传输的应用例如文件传输 UDP用户数据报首部仅8字节 TCP报文段首部最小20字节最大60字节
5.3.A UDP校验
伪首部 在计算检验和时要在UDP用户数据报之前增加12个字节的伪首部。伪首部只是临时添加的其既不向下传送也不向上递交而仅仅为了计算检验和。其如图依次由以下5部分组成 源IP地址4字节目的IP地址4字节全01字节IP首部中的协议字段值1字节UDP用户数据报的长度2字节 与首部的长度字段是一致的为何这样冗余设计 这是书上UDP校验和计算和校验的例子
书上这里的**“按二进制反码运算求和”**即在一般加法求和运算的基础上将最高位的进位又加到了最低为上 但经网络资料查阅二进制反码求和貌似与书上的运算有出入。其大概可解释为以下两种运算方式 将各参与计算的二进制数求和且最高位产生的进位需再加到最低位最后将求和结果取反将各参与计算的二进制数先取反再求和同样地“循环进位”求和结果即为最终结果 当然也可能是我理解错了大概是在书上的基础上加了取反的一步。以下验证按照书上的运算解释 校验实现步骤
发送前将UDP的伪首部、首部、数据部分看作整体后以16位2字节字分割若数据部分长度为奇数字节则在末尾填充1字节的全0与伪首部一样也是临时添加计算之前首部的校验和也为全0将分割后的全部16位字按二进制反码运算求和并将求和结果取反写入首部的检验和当接收到该UDP报文可以按上述方法进行二进制反码求和若结果全为1(FFFFH)说明无差错否则有差错
证明 将检验和除外的其他数据二进制反码和记为SSS发送前计算出的检验和结果为XXX步骤2的计算可表示为 XS0‾S‾X\overline{S0} \overline{S} XS0S 其中000表示检验和初始值为全0 证明步骤3的检验依据即证明SXFFFFHSX\mathrm{FFFFH}SXFFFFH SXSS‾FFFFHSXS\overline{S}\mathrm{FFFFH} SXSSFFFFH 还就内个证毕怎么说 这种简单的差错检验方法的检错能力并不强但它的好处是简单处理起来较快 5.4 TCP的流量控制
一般来说我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快接收方就可能来不及接收这就会造成数据的丢失所谓流量控制flow control就是让发送方的发送速率不要太快要让接收方来得及接收利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制 TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小TCP发送方收到接收方的零窗口通知后应启动持续计时器。持续计时器超时后向接收方发送零窗口探测报文 【举例】
5.5 TCP的拥塞控制
在某段时间若对网络中某一资源的需求超过了该资源所能提供的可用部分网络性能就要变坏。这种情况就叫做拥塞congestion 在计算机网络中的链路容量即带宽、交换结点中的缓存和处理机等都是网络的资源 若出现拥塞而不进行控制整个网络的吞吐量将随输入负荷的增大而下降 拥塞控制的四种算法 慢开始slow-start拥塞避免congestion avoidance快重传fast retransmit快恢复fast recovery 下面介绍这四种拥塞控制算法的基本原理假定如下条件 数据是单方向传送而另一个方向只传送确认接收方总是有足够大的缓存空间因而发送方发送窗口的大小由网络的拥塞程度来决定以最大报文段MSS的个数为讨论问题的单位而不是以字节为单位 发送方维护一个叫做拥塞窗口cwnd的状态变量其值取决于网络的拥塞程度并且动态变化 拥塞窗口cwnd的维护原则只要网络没有出现拥塞拥塞窗口就再增大一些但只要网络出现拥塞拥塞窗口就减少一些判断出现网络拥塞的依据没有按时收到应当到达的确认报文即发生超时重传 发送方将拥塞窗口作为发送窗口swnd即swnd cwnd维护一个慢开始门限ssthresh状态变量 当cwnd ssthresh时使用慢开始算法当cwnd ssthresh时停止使用慢开始算法而改用拥塞避免算法当cwnd ssthresh时既可使用慢开始算法也可使用拥塞避免算法 “慢开始”是指一开始向网络注入的报文段少并不是指拥塞窗口cwnd增长速度慢 “拥塞避免”并非指完全能够避免拥塞而是指在拥塞避免阶段将拥塞窗口控制为按线性规律长使网络比较不容易出现拥塞 慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法TCP Tahoe版本 1990年又增加了两个新的拥塞控制算法改进TCP的性能这就是快重传和快恢复TCP Reno版本 有时个别报文段会在网络中丢失但实际上网络并未发生拥塞 这将导致发送方超时重传并误认为网络发生了拥塞发送方把拥塞窗口cwnd又设置为最小值1并错误地启动慢开始算法因而降低了传输效率 采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失 所谓快重传就是使发送方尽快进行重传而不是等超时重传计时器超时再重传 要求接收方不要等待自己发送数据时才进行捎带确认而是要立即发送确认即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认发送方一旦收到3个连续的重复确认就将相应的报文段立即重传而不是等该报文段的超时重传计时器超时再重传对于个别丢失的报文段发送方不会出现超时重传也就不会误认为出现了拥塞进而降低拥塞窗口cwnd为1。使用快重传可以使整个网络的吞吐量提高约20% 发送方一旦收到3个重复确认就知道现在只是丢失了个别的报文段。于是不启动慢开始算法而执行快恢复算法 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半开始执行拥塞避免算法也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些即等于新的ssthresh3 既然发送方收到3个重复的确认就表明有3个数据报文段已经离开了网络这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些 5.6 TCP超时重传时间的选择 不能直接使用某次测量得到的RTT样本来计算超时重传时间RTO 利用每次测量得到的RTTRTTRTT样本计算加权平均往返时间RTTSRTT_SRTTS又称为平滑的往返时间 RTTS1RTT1RTTSn(1−α)×RTTSn−1α×RTTn\begin{array}{l} RTT_{S_1}RTT_1 \\ RTT_{S_n}(1-\alpha )\times RTT_{S_{n-1}}\alpha \times RTT_n \end{array} RTTS1RTT1RTTSn(1−α)×RTTSn−1α×RTTn 在上式中0≤α10\le \alpha 10≤α1 若α\alphaα很接近于0则新RTTRTTRTT样本对RTTSRTT_SRTTS的影响不大若α\alphaα很接近于1则新RTTRTTRTT样本对RTTSRTT_SRTTS的影响较大 已成为建议标准的RFC6298推荐的α\alphaα的值为0.125 用这种方法得出的加权平均往返时间RTTSRTT_SRTTS就比测量出的RTTRTTRTT值更加平滑 显然超时重传时间RTORTORTO应略大于加权平均往返时间RTTRTTRTT RFC6298建议使用下式计算超时重传时间RTORTORTO RTORTTS4×RTTDRTORTT_S4\times RTT_D RTORTTS4×RTTD 其中RTTDRTT_DRTTD为RTTRTTRTT偏差的加权平均具体计算如下 RTTD1RTT1÷2RTTDn(1−β)×RTTDn−1β×∣RTTSn−RTTn∣0≤β1\begin{array}{l} RTT_{D_1}RTT_1\div 2 \\ RTT_{D_n}(1-\beta )\times RTT_{D_{n-1}}\beta \times |RTT_{S_n}-RTT_n|0\le \beta 1 \end{array} RTTD1RTT1÷2RTTDn(1−β)×RTTDn−1β×∣RTTSn−RTTn∣0≤β1 RFC6298推荐β\betaβ值为0.25 往返时间RTT的测量比较复杂 源主机若误将确认当作是对原报文段的确认所计算出的RTTSRTT_SRTTS和RTORTORTO就会偏大降低了传输效率 源主机若误将确认当作是对重传报文段的确认所计算出的RTTSRTT_SRTTS和RTORTORTO就会偏小导致报文段没必要的重传增大网络负荷 针对出现超时重传时无法测准往返时间RTT的问题Karn提出了一个算法在计算加权平均往返时间RTTs时只要报文段重传了就不采用其往返时间RTT样本。也就是出现重传时不重新计算RTTs进而超时重传时间RTO也不会重新计算 这又引起了新的问题。设想出现这样的情况报文段的时延突然增大了很多并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内不会收到确认报文段。于是就重传报文段。但根据Karn算法不考虑重传的报文段的往返时间样本。这样超时重传时间就无法更新。这会导致报文段反复被重传 因此要对Karn算法进行修正。方法是报文段每重传一次就把超时重传时间RTO增大一些。典型的做法是将新RTO的值取为旧RTO值的2倍 5.7 TCP可靠传输的实现
TCP基于以字节为单位的滑动窗口来实现可靠传输 这里建议看视频我开摆了 计算机网络微课堂有字幕无背景音乐版_哔哩哔哩_bilibili - p63 虽然发送方的发送窗口是根据接收方的接收窗口设置的但在同一时刻发送方的发送窗口并不总是和接方的接收窗口一样大 网络传送窗口值需要经历一定的时间滞后并且这个时间还是不确定的发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸 对于不按序到达的数据应如何处理TCP并无明确规定 如果接收方把不按序到达的数据一律丢弃那么接收窗口的管理将会比较简单但这样做对网络资源的利用不利因为发送方会重复传送较多的数据TCP通常对不按序到达的数据是先临时存放在接收窗口中等到字节流中所缺少的字节收到后再按序交付上层的应用进程 TCP要求接收方必须有累积确认和捎带确认机制这样可以减小传输开销。接收方可以在合适的时候发送确认也可以在自己有数据要发送时把确认信息顺便捎带上 接收方不应过分推迟发送确认否则会导致发送方不必要的超时重传这反而浪费了网络的资源 TCP标准规定确认推迟的时间不应超过0.5秒。若收到一连串具有最大长度的报文段则必须每隔一个报文段就发送一个确认[RFC 1122]捎带确认实际上并不经常发生因为大多数应用程序很少同时在两个方向上发送数据 TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时一定要弄清楚是哪一方的窗口
5.8 TCP的运输连接管理 TCP是面向连接的协议它基于运输连接来传送TCP报文段 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程 TCP运输连接有以下三个阶段 建立TCP连接数据传送释放TCP连接 TCP的运输连接管理就是使运输连接的建立和释放都能正常地进行
5.8.1 TCP的连接建立 TCP的连接建立要解决以下三个问题 使TCP双方能够确知对方的存在使TCP双方能够协商一些参数如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等使TCP双方能够对运输实体资源如缓存大小、连接表中的项目等进行分配 TCP使用“三报文握手”建立连接 注意TCP的标准规定SYN1的报文段不能携带数据但要消耗掉一个序号普通的确认报文段如果不携带数据则不消耗序号 第三次“握手”发送针对TCP连接请求的确认的确认是否多余是否可改为仅通过“两次握手”实现建立连接 不多余。这是为了防止已失效的连接请求报文段突然又传送到了TCP服务器因而导致错误
5.8.2 TCP的连接释放 TCP通过”四报文挥手“来释放连接 最后的TCP客户端时间等待是否有必要 有必要。 保活计时器 TCP服务器进程每收到一次TCP客户进程的数据就重新设置并启动保活计时器2小时定时若保活计时器定时周期内未收到TCP客户进程发来的数据则当保活计时器到时后TCP服务器进程就向TCP客户进程发送一个探测报文段以后则每隔75秒钟发送一次。若一连发送10个探测报文段后仍无TCP客户进程的响应TCP服务器进程就认为TCP客户进程所在主机出了故障接着就关闭这个连接
5.9 TCP报文段的首部格式 为了实现可靠传输TCP采用了面向字节流的方式但TCP在发送数据时是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送 一个TCP报文段由首部和数据载荷两部分构成TCP的全部功能都体现在它首部中各字段的作用 源端口占16比特写入源端口号用来标识发送该TCP报文段的应用进程目的端口占16比特写入目的端口号用来标识接收该TCP报文段的应用进程 序号占32比特取值范围[0,232−1][0,2^{32}-1][0,232−1]序号增加到最后一个后下一个序号就又回到0 指出本TCP报文段数据载荷的第一个字节的序号 确认号占32比特取值范围[0,232−1][0,2^{32}-1][0,232−1]确认号增加到最后一个后下一个确认号就又回到0 指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号同时也是对之前收到的所有数据的确认 若确认号n则表明到序号n-1为止的所有数据都已正确接收期望接收序号为n的数据 确认标志位ACK取值为1时确认号字段才有效取值为0时确认号字段无效 TCP规定在连接建立后所有传送的TCP报文段都必须把ACK置1 数据偏移占4比特并以4字节为单位。 用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远 这个字段实际上是指出了TCP报文段的首部长度。 首部固定长度为20字节因此数据偏移字段的最小值为(0101)2(0101)_2(0101)2 首部最大长度为60字节因此数据偏移字段的最大值为(1111)2(1111)_2(1111)2 保留占6比特保留为今后使用但目前应置为0 窗口占16比特以字节为单位。指出发送本报文段的一方的接收窗口 窗口值作为接收方让发送方设置其发送窗口的依据。 这是以接收方的接收能力来控制发送方的发送能力称为流量控制。 发送窗口的大小还取决于拥塞窗口的大小也就是应该从接收窗口和拥塞窗口中取小者 校验和占16比特检查范围包括TCP报文段的首部和数据载荷两部分 在计算校验和时要在TCP报文段的前面加上12字节的伪首部 同步标志位SYN在TCP连接建立时用来同步序号 终止标志位FIN用来释放TCP连接 复位标志位RST用来复位TCP连接 当RST1时表明TCP连接出现了异常必须释放连接然后再重新建立连接。 RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。 推送标志位PSH接收方的TCP收到该标志位为1的报文段会尽快上交应用进程而不必等到接收缓存都填满后再向上交付 紧急标志位URG取值为1时紧急指针字段有效取值为0时紧急指针字段无效 紧急指针占16比特以字节为单位用来指明紧急数据的长度 当发送方有紧急数据时可将紧急数据插队到发送缓存的最前面并立刻封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据紧急数据之后是普通数据。 选项 最大报文段长度MSS选项TCP报文段数据载荷部分的最大长度窗口扩大选项为了扩大窗口提高吞吐率时间戳选项 用来计算往返时间RTT用于处理序号超范围的情况又称为防止序号绕回PAWS 选择确认选项 填充由于选项的长度可变因此使用填充来确保报文段首部能被4整除因为数据偏移字段也就是首部长度字段是以4字节为单位的
六、应用层
6.1 应用层概述
应用层是计算机网络体系结构的最顶层是设计和建立计算机网络的最终目的也是计算机网络中发展最快的部分 早期基于文本的应用电子邮件、远程登录、文件传输、新闻组20世纪90年代将因特网带入干家万户的万维网WWW当今流行的即时通信、P2P文件共享及各种音视频应用计算设备的小型化和“无处不在”宽带住宅接入和无线接入的日益普及和迅速发展为未来更多的新型应用提供了广阔的舞台 在本章中我们以一些经典的网络应用为例来学习有关网络应用的原理、协议和实现方面的知识 万维网WWW域名系统DNS动态主机配置协议DHCP电子邮件文件传送协议FTPP2P文件共享多媒体网络应用
6.2 客户/服务器方式C/S方式和对等方式P2P方式 网络应用程序运行在处于网络边缘的不同的端系统上通过彼此间的通信来共同完成某项任务 开发一种新的网络应用首先要考虑的问题就是网络应用程序在各种端系统上的组织方式和它们之间的关系。目前流行的主要有以下两种 客户/服务器Client/ServerC/S方式对等Peer-to-PeerP2P方式 客户/服务器Client/ServerC/S方式 客户和服务器是指通信中所涉及的两个应用进程客户/服务器方式所描述的是进程之间服务和被服务的关系客户是服务请求方服务器是服务提供方服务器总是处于运行状态并等待客户的服务请求。服务器具有固定端口号例如HTTP服务器的默认端口号为80)而运行服务器的主机也具有固定的IP地址 C/S方式是因特网上传统的、同时也是最成熟的方式很多我们熟悉的网络应用采用的都是C/S方式。包括万维网WWW、电子邮件、文件传输FTP等 基于C/S方式的应用服务通常是服务集中型的即应用服务集中在网络中比客户计算机少得多的服务器计算机上 由于一台服务器计算机要为多个客户机提供服务在C/S应用中常会出现服务器计算机跟不上众多客户机请求的情况为此在C/S应用中常用计算机群集或服务器场构建一个强大的虚拟服务器 对等Peer-to-PeerP2P方式 在P2P方式中没有固定的服务请求者和服务提供者分布在网络边缘各端系统中的应用进程是对等的被称为对等方。对等方相互之间直接通信每个对等方既是服务的请求者又是服务的提供者 目前在因特网上流行的P2P应用主要包括P2P文件共享、即时通信、P2P流媒体、分布式存储等 基于P2P的应用是服务分散型的因为服务不是集中在少数几个服务器计算机中而是分散在大量对等计算机中这些计算机并不为服务提供商所有而是为个人控制的桌面计算机和笔记本电脑它们通常位于住宅、校园和办公室中 P2P方式的最突出特性之一就是它的可扩展性。因为系统每增加一个对等方不仅增加的是服务的请求者同时也增加了服务的提供者系统性能不会因规模的增大而降低 P2P方式具有成本上的优势因为它通常不需要庞大的服务器设施和服务器带宽。为了降低成本服务提供商对于将P2P方式用于应用的兴趣越来越大
6.3 动态主机配置协议DHCP 动态主机配置协议DHCP(Dynamic Host Configuration Protocol)提供了一种机制称为即插即用连网。这种机制允许一台计算机加入新网络时可自动获取IP地址等网络配置信息而不用手工参与 DHCP主要使用以下报文来实现其功能 DHCP DISCOVERDHCP发现报文DHCP OFFERDHCP提供报文DHCP REQUESTDHCP请求报文DHCP ACKDHCP确认报文DHCP NACKDHCP否认报文DHCP RELEASEDHCP释放报文 DHCP报文在运输层使用UDP协议封装 DHCP客户使用的UDP端口号为68DHCP服务器使用的UDP端口号为67 DHCP客户在未获取到IP地址时使用地址0.0.0.0 在每一个网络上都设置一个DHCP服务器会使DHCP服务器的数量太多。因此现在是使每一个网络至少有一个DHCP中继代理通常是一台路由器它配置了DHCP服务器的IP地址信息作为各网络中计算机与DHCP服务器的桥梁 DHCP的工作过程 DHCP中继代理 6.4 域名系统DNSDomain Name System
因特网采用层次树状结构的域名结构域名的结构由若干个分量组成各分量之间用“点”隔开分别代表不同级别的域名 每一级的域名都由英文字母和数字组成不超过63个字符不区分大小写字母级别最低的域名写在最左边而级别最高的顶级域名写在最右边完整的域名不超过255个字符 域名系统既不规定一个域名需要包含多少个下级域名也不规定每一级的域名代表什么意思各级域名由其上一级的域名管理机构管理而最高的顶级域名则由因特网名称与数字地址分配机构ICANN进行管理
【举例】湖南科技大学网络信息中心的域名
顶级域名TLD(Top Level Domain)分为以下三类 国家顶级域名nTLD采用ISO3166的规定。如cn表示中国us表示美国uk表示英国、等等通用顶级域名gTLD最常见的通用顶级域名有七个即com(公司企业、net(网络服务机构、org(非营利性组织、int(国际组织、edu(美国教育结构、gov(美国政府部门、mil(美国军事部门反向域arpa用于反向域名解析即IP地址反向解析为域名 在国家顶级域名下注册的二级域名均由该国家自行确定。例如顶级域名为jp的日本将其教育和企业机构的二级域名定为ac和co而不用edu和com我国则将二级域名划分为以下两类 类别域名共七个ac(科研机构、com(工、商、金融等企业、edu(教育机构、gov(政府部门、net(提供网络服务的机构、mil(军事机构和org(非营利性组织行政区域名共34个适用于我国的各省、自治区、直辖市。例如bj为北京市、sh为上海市、js为江苏省等等
【举例】因特网的域名空间 懂不懂湖科大的含金量啊后仰 这种按等级管理的命名方法便于维护名字的唯一性并且也容易设计出一种高效的域名查询机制。需要注意的是域名只是个逻辑概念并不代表计算机所在的物理地点 域名和IP地址的映射关系必须保存在域名服务器中供所有其他应用查询。显然不能将所有信息都储存在一台域名服务器中。DNS使用分布在各地的域名服务器来实现域名到IP地址的转换 域名服务器可以划分为以下四种不同的类型 根域名服务器 根域名服务器是最高层次的域名服务器。每个根域名服务器都知道所有的顶级域名服务器的域名及其IP地址。因特网上共有13个不同IP地址的根域名服务器。尽管我们将这13个根域名服务器中的每一个都视为单个的服务器但“每台服务器”实际上是由许多分布在世界各地的计算机构成的服务器群集。当本地域名服务器向根域名服务器发出查询请求时路由器就把查询请求报文转发到离这个DNS客户最近的一个根域名服务器。这就加快了DNS的查询过程同时也更合理地利用了因特网的资源。根域名服务器通常并不直接对域名进行解析而是返回该域名所属顶级域名的顶级域名服务器的IP地址顶级域名服务器 这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时就给出相应的回答可能是最后的结果也可能是下一级权限域名服务器的IP地址权限域名服务器 这些域名服务器负责管理某个区的域名。每一个主机的域名都必须在某个权限域名服务器处注册登记。因此权限域名服务器知道其管辖的域名与IP地址的映射关系。另外权限域名服务器还知道其下级域名服务器的地址本地域名服务器 本地域名服务器不属于上述的域名服务器的等级结构。当一个主机发出DNS请求报文时这个报文就首先被送往该主机的本地域名服务器。本地域名服务器起着代理的作用会将该报文转发到上述的域名服务器的等级结构中。每一个因特网服务提供者ISP一个大学甚至一个大学里的学院都可以拥有一个本地域名服务器它有时也称为默认域名服务器。本地域名服务器离用户较近一般不超过几个路由器的距离也有可能就在同一个局域网中。本地域名服务器的IP地址需要直接配置在需要域名解析的主机中 域名解析的过程 递归查询 迭代查询 由于递归查询对于被查询的域名服务器负担太大通常采用以下模式从请求主机到本地域名服务器的查询是递归查询而其余的查询是迭代查询。 为了提高DNS的查询效率并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。 由于域名到IP地址的映射关系并不是永久不变为保持高速缓存中的内容正确域名服务器应为每项内容设置计时器并删除超过合理时间的项例如每个项目只存放两天 不但在本地域名服务器中需要高速缓存在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库维护存放自己最近使用的域名的高速缓存并且只在从缓存中找不到域名时才向域名服务器查询。同理主机也需要保持高速缓存中内容的正确性 DNS报文使用运输层的UDP协议进行封装运输层端口号为53
6.5 文件传送协议FTP 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中是一项基本的网络应用即文件传送 文件传送协议FTP(File Transfer Protocol)是因特网上使用得最广泛的文件传送协议 FTP提供交互式的访问允许客户指明文件的类型与格式如指明是否使用ASCII码并允许文件具有存取权限如访问文件的用户必须经过授权并输入有效的口令FTP屏蔽了各计算机系统的细节因而适合于在异构网络中任意计算机之间传送文件 在因特网发展的早期阶段用FTP传送文件约占整个因特网的通信量的三分之一而由电子邮件和域名系统所产生的通信量还要小于FTP所产生的通信量。只是到了1995年万维网WWW的通信量才首次超过了FTP FTP的基本工作模式
6.6 电子邮件 电子邮件E-mail是因特网上最早流行的一种应用并且仍然是当今因特网上最重要、最实用的应用之一 传统的电话通信属于实时通信存在以下两个缺点 电话通信的主叫和被叫双方必须同时在场一些不是十分紧迫的电话也常常不必要地打断人们的工作或休息 而电子邮件与邮政系统的寄信相似 发件人将邮件发送到自己使用的邮件服务器发件人的邮件服务器将收到的邮件按其目的地址转发到收件人邮件服务器中的收件人邮箱收件人在方便的时候访问收件人邮件服务器中自己的邮箱获取收到的电子邮件 电子邮件使用方便、传递迅速而且费用低廉。它不仅可以传送文字信息而且还可附上声音和图像 由于电子邮件的广泛使用现在许多国家已经正式取消了电报业务。在我国电信局的电报业务也因电子邮件的普及而濒临消失 电子邮件系统采用客户/服务器方式 电子邮件系统的三个主要组成构件用户代理邮件服务器以及电子邮件所需的协议 用户代理是用户与电子邮件系统的接口又称为电子邮件客户端软件邮件服务器是电子邮件系统的基础设施。因特网上所有的ISP都有邮件服务器其功能是发送和接收邮件同时还要负责维护用户的邮箱协议包括邮件发送协议例如SMTP和邮件读取协议例如POP3IMAP 简单邮件传送协议SMTPSimple Mail Transfer Protocol的基本工作原理 电子邮件的信息格式并不是由SMTP定义的而是在RFC 822中单独定义的。这个RFC文档已在2008年更新为RFC 5322。一个电子邮件有信封和内容两部分。而内容又由首部和主体两部分构成。 SMTP协议只能传送ASCII码文本数据不能传送可执行文件或其他的二进制对象SMTP不能满足传送多媒体邮件例如带有图片、音频或视频数据的需要。并且许多其他非英语国家的文字例如中文、俄文、甚至带有重音符号的法文或德文也无法用SMTP传送为解决SMTP传送非ASCII码文本的问题提出了多用途因特网邮件扩展MIME(Multipurpose Internet Mail Extensions) 增加了5个新的邮件首部字段这些字段提供了有关邮件主体的信息定义了许多邮件内容的格式对多媒体电子邮件的表示方法进行了标准化定义了传送编码可对任何内容格式进行转换而不会被邮件系统改变 实际上MIME不仅仅用于SMTP也用于后来的同样面向ASCII字符的HTTP 常用的邮件读取协议有以下两个 邮局协议POP(Post Office Protocol)POP3是其第三个版本是因特网正式标准。 非常简单、功能有限的邮件读取协议。用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。不允许用户在邮件服务器上管理自己的邮件。例如创建文件夹对邮件进行分类管理等因特网邮件访问协议IMAP(Internet Message Access Protocol)IMAP4是其第四个版本目前还只是因特网建议标准。 功能比POP3强大的邮件读取协议。用户在自己的计算机上就可以操控邮件服务器中的邮箱就像在本地操控一样因此IMAP是一个联机协议POP3和IMAP4都采用基于TCP连接的客户/服务器方式。POP3使用熟知端口110IMAP4使用熟知端口143 基于万维网的电子邮件 通过浏览器登录提供用户名和口令邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与IMAP很类似不同的是用户计算机无需安装专门的用户代理程序只需要使用通用的万维网浏览器邮件服务器网站通常都提供非常强大和方便的邮件管理功能用户可以在邮件服务器网站上管理和处理自己的邮件而不需要将邮件下载到本地进行管理 6.7 万维网WWW
万维网WWWWorld Wide Web并非某种特殊的计算机网络。它是一个大规模的、联机式的信息储藏所是运行在因特网上的一个分布式应用万维网利用网页之间的超链接将不同网站的网页链接成一张逻辑上的信息网万维网是欧洲粒子物理实验室的Tim Berners-Lee最初于1989年3月提出的 1993年2月第一个图形界面的浏览器Mosaic 1995年著名的Netscape Navigator浏览器上市 目前比较流行的浏览器如下 IE基本上快被淘汰了取而代之的是微软的edge浏览器 浏览器最重要的部分是渲染引擎也就是浏览器内核。负责对网页内容进行解析和显示 不同的浏览器内核对网页内容的解析也有不同因此同一网页在不同内核的浏览器里的显示效果可能不同网页编写者需要在不同内核的浏览器中测试网页显示效果 为了方便地访问在世界范围的文档万维网使用统一资源定位符URL来指明因特网上任何种类“资源”的位置 URL的一般形式由以下四个部分组成 万维网的文档 超文本标记语言HTML(HyperText Markup Language) 使用多种“标签”来描述网页的结构和内容层叠样式表CSS(Cascading Style Sheets) 从审美的角度来描述网页的样式JavaScript脚本语言和Java没有任何关系难蚌 控制网页的行为 超文本传输协议HTTP(HyperText Transfer Protocol) HTTP定义了浏览器即万维网客户进程怎样向万维网服务器请求万维网文档以及万维网服务器怎样把万维网文档传送给浏览器 HTTP/1.0采用非持续连接方式。在该方式下每次浏览器要请求一个文件都要与服务器建立TCP连接当收到响应后就立即关闭连接 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引用对象例如图片等那么请求每一个对象都需要花费2RTT的时间为了减小时延浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是这会大量占用万维网服务器的资源特别是万维网服务器往往要同时服务于大量客户的请求这会使其负担很重 HTTP/1.1采用持续连接方式。在该方式下万维网服务器在发送响应后仍然保持这条连接使同一个客户浏览器和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象而是只要这些文档都在同一个服务器上就行。 为了进一步提高效率HTTP/1.1的持续连接还可以使用流水线方式工作即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间使TCP连接中的空闲时间减少提高了下载文档的效率 HTTP的报文格式 HTTP是面向文本的其报文中的每一个字段都是一些ASCII码串并且每个字段的长度都是不确定的。 使用Cookie在服务器上记录用户信息 早期的万维网应用非常简单仅仅是用户查看存放在不同服务器上的各种静态的文档。因此HTTP被设计为一种无状态的协议。这样可以简化服务器的设计现在用户可以通过万维网实现各种复杂的应用如网上购物、电子商务等。这些应用往往需要万维网服务器能够识别用户Cookie提供了一种机制使得万维网服务器能够“记住”用户而无需用户主动提供用户标识信息。也就是说Cookie是一种对无状态的HTTP进行状态化的技术 万维网缓存与代理服务器 在万维网中还可以使用缓存机制以提高万维网的效率万维网缓存又称为Web缓存Web Cache可位于客户机也可位于中间系统上位于中间系统上的Web缓存又称为代理服务器Proxy ServerWeb缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时若发现这个请求与暂时存放的请求相同就返回暂存的响应而不需要按URL的地址再次去因特网访问该资源 完结撒花 就像在本地操控一样因此IMAP是一个联机协议 POP3和IMAP4都采用基于TCP连接的客户/服务器方式。POP3使用熟知端口110IMAP4使用熟知端口143 基于万维网的电子邮件 通过浏览器登录提供用户名和口令邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与IMAP很类似不同的是用户计算机无需安装专门的用户代理程序只需要使用通用的万维网浏览器邮件服务器网站通常都提供非常强大和方便的邮件管理功能用户可以在邮件服务器网站上管理和处理自己的邮件而不需要将邮件下载到本地进行管理
[外链图片转存中…(img-HvZbecfO-1639975589147)]
6.7 万维网WWW
万维网WWWWorld Wide Web并非某种特殊的计算机网络。它是一个大规模的、联机式的信息储藏所是运行在因特网上的一个分布式应用万维网利用网页之间的超链接将不同网站的网页链接成一张逻辑上的信息网万维网是欧洲粒子物理实验室的Tim Berners-Lee最初于1989年3月提出的
[外链图片转存中…(img-IsGAzJpC-1639975589147)] 1993年2月第一个图形界面的浏览器Mosaic [外链图片转存中…(img-usDPcPO4-1639975589147)] 1995年著名的Netscape Navigator浏览器上市 [外链图片转存中…(img-09Ikn61s-1639975589148)] 目前比较流行的浏览器如下 [外链图片转存中…(img-MHtTvigU-1639975589148)] IE基本上快被淘汰了取而代之的是微软的edge浏览器 浏览器最重要的部分是渲染引擎也就是浏览器内核。负责对网页内容进行解析和显示 不同的浏览器内核对网页内容的解析也有不同因此同一网页在不同内核的浏览器里的显示效果可能不同网页编写者需要在不同内核的浏览器中测试网页显示效果 为了方便地访问在世界范围的文档万维网使用统一资源定位符URL来指明因特网上任何种类“资源”的位置 URL的一般形式由以下四个部分组成 [外链图片转存中…(img-VakGeJxH-1639975589149)] [外链图片转存中…(img-Rjep9CGY-1639975589149)] [外链图片转存中…(img-K1je8MHA-1639975589150)] 万维网的文档 超文本标记语言HTML(HyperText Markup Language) 使用多种“标签”来描述网页的结构和内容层叠样式表CSS(Cascading Style Sheets) 从审美的角度来描述网页的样式JavaScript脚本语言和Java没有任何关系难蚌 控制网页的行为 超文本传输协议HTTP(HyperText Transfer Protocol) HTTP定义了浏览器即万维网客户进程怎样向万维网服务器请求万维网文档以及万维网服务器怎样把万维网文档传送给浏览器
[外链图片转存中…(img-Nyc75REm-1639975589150)] HTTP/1.0采用非持续连接方式。在该方式下每次浏览器要请求一个文件都要与服务器建立TCP连接当收到响应后就立即关闭连接 [外链图片转存中…(img-uWHSqYaC-1639975589150)] 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引用对象例如图片等那么请求每一个对象都需要花费2RTT的时间为了减小时延浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是这会大量占用万维网服务器的资源特别是万维网服务器往往要同时服务于大量客户的请求这会使其负担很重 HTTP/1.1采用持续连接方式。在该方式下万维网服务器在发送响应后仍然保持这条连接使同一个客户浏览器和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象而是只要这些文档都在同一个服务器上就行。 为了进一步提高效率HTTP/1.1的持续连接还可以使用流水线方式工作即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间使TCP连接中的空闲时间减少提高了下载文档的效率 HTTP的报文格式 HTTP是面向文本的其报文中的每一个字段都是一些ASCII码串并且每个字段的长度都是不确定的。
[外链图片转存中…(img-FIexWwaS-1639975589151)]
[外链图片转存中…(img-Nmm5jsrq-1639975589151)]
[外链图片转存中…(img-LFjeTEvu-1639975589151)]
使用Cookie在服务器上记录用户信息 早期的万维网应用非常简单仅仅是用户查看存放在不同服务器上的各种静态的文档。因此HTTP被设计为一种无状态的协议。这样可以简化服务器的设计现在用户可以通过万维网实现各种复杂的应用如网上购物、电子商务等。这些应用往往需要万维网服务器能够识别用户Cookie提供了一种机制使得万维网服务器能够“记住”用户而无需用户主动提供用户标识信息。也就是说Cookie是一种对无状态的HTTP进行状态化的技术
[外链图片转存中…(img-1flOtPZl-1639975589152)]
万维网缓存与代理服务器 在万维网中还可以使用缓存机制以提高万维网的效率万维网缓存又称为Web缓存Web Cache可位于客户机也可位于中间系统上位于中间系统上的Web缓存又称为代理服务器Proxy ServerWeb缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时若发现这个请求与暂时存放的请求相同就返回暂存的响应而不需要按URL的地址再次去因特网访问该资源
[外链图片转存中…(img-PXI7voQz-1639975589152)] 完结撒花 最后感谢湖科大教书匠以及本教学视频制作团队