计算机网络(湖科大教书匠)
本文档为教学视频【计算机网络微课堂(有字幕无背景音乐版)_哔哩哔哩_bilibili】的摘录
目录
- 计算机网络(湖科大教书匠)
- 一、绪论
- 1.2 因特网概述
- 1.2.1 网络、互连网(互联网)和因特网
- 1.2.2 因特网发展的三个阶段
- 1.2.3 因特网的标准化工作
- 1.2.4 因特网的组成
- 1.3 三种交换方式
- 1.3.1 电路交换(Circuit Switching)
- 1.3.2 分组交换(Packet Switching)
- 1.3.X 报文交换(Message Switching)
- 1.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 停止等待协议SW(Stop-and-Wait)
- 3.4.3 回退N帧协议GBN(Go-Back-N)
- 3.4.4 选择重传协议SR(Selective Request)
- 3.5 点对点协议PPP
- 3.6 媒体接入控制MAC
- 3.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 以太网交换机的生成树协议STP
- 3.10.Extra 【番外篇】生成树算法STA
- 3.11 虚拟局域网VLAN
- 3.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 网际控制报文协议ICMP
- 4.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 动态主机配置协议DHCP
- 6.4 域名系统DNS(Domain Name System)
- 6.5 文件传送协议FTP
- 6.6 电子邮件
- 6.7 万维网WWW
- 6.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 因特网发展的三个阶段
因特网服务提供者ISP(Internet 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)
- 单位换算:1Byte=8bit1Byte = 8bit1Byte=8bit,1KB=210B1KB = 2^{10}B1KB=210B,1MB=220B1MB = 2^{20}B1MB=220B,1GB=230B1GB = 2^{30}B1GB=230B,1TB=240B1TB = 2^{40}B1TB=240B
-
速率:连接在计算机网络上的主机在数字信道上传送比特的速率,也称为比特率或数据率
- 常用数据率单位:比特每秒(bit/s、b/s、bps)
- 单位换算:1kb/s=103b/s1kb/s = 10^{3}b/s1kb/s=103b/s,1Mb/s=106b/s1Mb/s = 10^{6}b/s1Mb/s=106b/s,1Gb/s=109b/s1Gb/s = 10^{9}b/s1Gb/s=109b/s,1Tb/s=1012b/s1Tb/s = 10^{12}b/s1Tb/s=1012b/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 往返时间
- 多数情况下,因特网上的信息不仅仅是单方向传输,而是双向交互
- 因此,**往返时间RTT(Round-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Ω)
模拟传输,目前主要用于有线电视
同轴电缆价格较贵且布线不够灵活和方便,随着集线器的出现,在局域网领域基本上都是采用双绞线作为传输媒体
- 基带同轴电缆(50Ω)
集线器:
集线器的英文称为“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个比特的对应关系采用格雷码(任意两个相邻码元只有一个比特不同)
- QAM - 16
-
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进行剔除
- 零比特填充法
-
传输效率
- 为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些
- 考虑到差错控制等多种因素,每种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)
3.3 差错检测
- 实际的通信链路都不是理想的,比特在传输的过程中可能会产生差错:1可能变为0,而0也可能变为1,这称为比特差错
- 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)
- 使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
-
FCS(Frame Check Sequence):帧校验序列
-
奇偶校验
- 在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中**“1”的个数**为奇数(奇校验)或偶数(偶校验)
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
-
循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个生成多项式G(x)G(x)G(x)
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输
- 接收方通过生成多项式来计算收到的数据是否产生了误码
- 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误
- 想要纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用
- 循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但是非常易于用硬件实现,因此被广泛应用于数据链路层
- 在计算机网络中通常采用检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务
3.4 可靠传输
3.4.1 可靠传输的基本概念
- 数据链路层向上层提供的服务类型
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
- 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么
- 一般情况下,有线链路的误码率较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
- 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
- 比特差错只是传输差错中的一种
- 从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复(这些传输差错一般出现在数据链路层的上层)
- 可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输
- 可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求
3.4.2 停止等待协议SW(Stop-and-Wait)
- 发送方向接收方发送数据
- 接收方通过差错检测若无误码则接收并向发送方发送确认分组(ACK)
- 发送方接收到确认分组后便可删除上条数据的缓存并发送下一组数据
- 若出现了误码,接收方丢弃该数据并向发送方发送否认分组(NAK)
- 发送方收到否认分组后重新传送上一条数据
现在实用的可靠传输协议都不使用这种否认报文了,虽然“否认报文”能够让发送方尽早知道出现了差错,但这样处理会使协议复杂化
-
当发送的数据中途丢失时,此时接收方未接收到数据便无法响应发送确认或否认分组,而发送方也一直等待接收方的反馈分组,此时陷入一种类似“死锁”的状态
为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫超时重传
一般可将重传时间设置为略大于“从发送方到接收方的平均往返时间”
-
若接收方发送的确认分组中途丢失,这时超过重传时间后发送方又将上条数据重发,此时接收方便接收到了两条同样的数据,应当丢弃第二次重发的数据
为避免分组重复这种传输错误,必须给每个分组带上序号。接收方通过编号便可判断是否是重复的数据,对于重复的数据丢弃即可
对于停止-等待协议,由于每发送一个数据就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了
-
若接收方发送的确认分组迟到,并且在迟到期间发送方重发了上条数据A,确认分组到达后又紧接着发送了下一条数据B,接收方收到重复的数据将其丢弃并发送确认分组,这时发送方接收到确认分组后会误以为是数据B的确认信号则会立即发送下条数据
这里应当忽略重复的确认分组,而是等到真正的数据B确认分组传达后再发送下条数据,因此同样的还需给确认分组编号,遇到重复的确认分组将其忽略
对于数据链路层的点对点信道,往返时间比较固定,不会出现确认迟到的情况,因此若只是在数据链路层实现停止-等待协议,可以不用给确认分组编号
-
停止-等待协议的信道利用率:
- 当往返时延RTT远大于数据帧发送时延时(例如使用卫星链路),信道利用率非常低
- 若出现重传,则对于传送有效的数据信息来说,信道利用率更低
- 为克服停止-等待协议信道利用率很低的缺点,便产生另外两种协议(后退N帧协议GBN 和 选择重传协议SR)
3.4.3 回退N帧协议GBN(Go-Back-N)
- 采用3个比特给分组遍序号,即序号0 - 7
- 发送窗口的尺寸WTW_TWT的取值:1<WT≤23−11<W_T\le2^3-11<WT≤23−1,本例取WTW_TWT=5
- 接收窗口的尺寸WRW_RWR的取值:WRW_RWR=1
- 发送方先连续发送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 选择重传协议SR(Selective Request)
- 回退N帧协议的接收窗口尺寸**WRW_RWR只能等于1**,因此接收方只能按序接收正确到达的数据分组
- 一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这时对通信资源的极大浪费
- 为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸**WRW_RWR不应再等于1(而应大于1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组**,等到所缺分组收齐后再一并送交上层。这就是选择重传协议
选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认
- 采用3个比特给分组编序号,即序号0 - 7
- 发送窗口的尺寸WTW_TWT的取值:1<WT≤23−11<W_T\le2^{3-1}1<WT≤23−1,本例取WTW_TWT=4
- 接收窗口的尺寸WRW_RWR的取值:WR=WT=4W_R=W_T=4WR=WT=4
- 发送方依次发送0 - 3序号四个数据分组
- 其中2号数据分组出现误码,接收方将其丢弃,接收窗口只有按序接收时才可滑动,因此0、1序号数据使窗口向右滑动2位,由于2号数据分组的缺失,窗口需在此停驻
- 接收方将正确接收到的数据分组向发送方反馈确认分组,同样的发送窗口也是只有按序接收的确认分组才可滑动,同样的向右滑动2位
- 发送方接着发送4、5号数据分组,接收方正确接收后返回响应的确认分组
- 此时2号分组的重传计时器超时重传,接收方正确接收,由于接收窗口中的数据分组均已按序接收,于是窗口可向右滑动4位(同样的发送方的发送窗口中的确认分组也均按序接收到后也会向右滑动4位)
- 窗口尺寸问题
- 发送窗口尺寸WTW_TWT必须满足:1<WT≤2n−11<W_T\le2^{n-1}1<WT≤2n−1(n是构成分组序号的比特数量)
- WT=1W_T=1WT=1:与停止-等待协议相同
- WT>2n−1W_T\gt2^{n-1}WT>2n−1:造成接收方无法分辨新、旧数据分组的问题
- 接收窗口尺寸WRW_RWR必须满足:1<WR≤WT1<W_R\le W_T1<WR≤WT
- WR=1W_R=1WR=1:与回退N帧协议相同
- WR>WTW_R\gt W_TWR>WT:无意义
- 发送窗口尺寸WTW_TWT必须满足:1<WT≤2n−11<W_T\le2^{n-1}1<WT≤2n−1(n是构成分组序号的比特数量)
3.5 点对点协议PPP
-
点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议
-
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP,用于建立、配置以及测试数据链路的连接
- 一套网络控制协议NCPs,其中的每一个协议支持不同的网络层协议
-
帧格式
- 标志(Flag)字段:PPP帧的界定符,取值为0x7E
- 地址(Address)字段: 取值为0xFF,预留(目前没有什么作用)
- 控制(Control)字段:取值为0x03,预留(目前没有什么作用)
- 协议(Protocol)字段:指明帧的数据部分送交哪个协议处理
- 0x0021:IP数据报
- 0xC021:LCP分组
- 0x8021:NCP分组
- 帧检验序列(Fram Check Sequence)字段:CRC计算出的校验位
-
透明传输
-
面向字节的异步链路采用插入转义字符的字节填充法
- 出现的每个
7E
(PPP帧的定界符)字节转变成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 媒体接入控制的基本概念
- 共享信道要考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)
随着奇数的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已经完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术
3.6.1 媒体接入控制 —— 静态划分信道
-
信道复用
- 复用(Multiplexing)是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号
- 当网络中的传输媒体的传输容量大于多条单一信道传输的总通信量时,可以利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽
-
频分复用FDM
频分复用的所有用户同时占用不同的频带资源并行通信 -
时分复用TDM
时分复用的所有用户在不同的时间占用同样的频带宽度 -
波分复用(WDM)
-
码分复用(CDM)
-
码分复用CDM是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA(Code Division Multiple Access)
-
同理,频分复用FDM和时分复用TDM同样可用于多址接入,相应的名词时频分多址FDMA(Frequency Division Multiple Access)和时分多址TDMA(Time 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字节的帧都是由于碰撞而异常中止的无效帧
- 以太网规定最小帧长为64字节,即512比特(512比特时间即为争用期)
-
最大帧长
-
截断二进制指数退避算法
- 退避时间 = 基本退避时间 × 随机数r
- 基本退避时间为争用期2τ2\tau2τ
- 随机数r从离散的整数集合{0,1,...,2k−1}\{0,1,...,2^k-1\}{0,1,...,2k−1}中随机选出一个数,其中k=min(重传次数,10)k=min(重传次数, 10)k=min(重传次数,10)
- 若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定
- 当重传达16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告
- 退避时间 = 基本退避时间 × 随机数r
-
信道利用率
- 因此为提高信道利用率,应使以太网帧的长度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层标准定义了两种不同的媒体接入控制方式:
- 分布式协调功能DCF(Distributed Coordination Function)。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式
- 点协调功能PCF(Point Coordination Function)。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中较少使用
-
802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS(InterFrame Space)
-
帧间间隔的长短取决于该站点要发送的帧的类型:
- 高优先级帧需要等待的时间较短,因此可优先获得发送权
- 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会
-
常用的两种帧间间隔如下:
- 短帧间间隔SIFS(28μs),是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧、CTS帧、由过长的MAC帧分片后的数据帧、以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧
- DCF帧间间隔DIFS(128μs),它比短帧间间隔SIFS要长得多,在DCF方式中用来发送数据帧和管理帧
-
CSMA/CA协议的工作原理
源站为什么在检测到信道空闲后还要再等待一段时间DIFS?
考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧。在这段时间内,一个站点应当能够从发送方式切换到接收方式信道由忙转为空闲且经过DIFS时间后,还要退避一段随机时间才能使用信道?
防止多个站点同时发送数据而产生碰撞- 当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法
- 以下情况必须使用退避算法:
- 在发送数据帧之前检测到信道处于忙状态时
- 在每一次重传一个数据帧时
- 在每一次成功发送后要连续发送下一个帧时(这时为了避免一个站点长时间占用信道)
-
CSMA/CA协议的退避算法
- 在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
- 当退避计时器的时间减小到零时,就开始发送数据
- 当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器
- 在进行第iii次退避时,退避时间在时隙编号{0,1,...,22+i−1}\{0,1,...,2^{2+i}-1\}{0,1,...,22+i−1}中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应于第6次退避)就不再增加了
- 在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
-
CSMA/CA协议信道预约和虚拟载波监听
- 为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约
- 源站在发送数据帧之前先发送一个短的控制帧,称为请求发送RTS(Request To Send),它包括源地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间
- 若目的站正确收到源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,称为允许发送CTS(Clear 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地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此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
- 添加冗余链路可以提高以太网的可靠性
- 但是,冗余链路也会带来负面效应——形成网络环路
其带来以下问题:- 广播风暴
大量消耗网络资源,使得网络无法正常转发其他数据帧 - 主机收到重复的广播帧
大量消耗主机资源 - 交换机的帧交换表震荡(漂移)
- 广播风暴
- 以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题
- 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路)
- 最终生成的树型逻辑拓扑要确保连通整个网络
- 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算
3.10.Extra 【番外篇】生成树算法STA
https://www.bilibili.com/video/BV1St411d7uD
- 选举根交换机
- 根交换机的选举条件:网桥ID(BID)最小者当选
- 网桥ID由以下两部分构成
- 优先级
- 范围:0 - 61440
- 步长:4096
- 默认值:32768
- 交换机的基本MAC地址
- 优先级
- 网桥ID的比较方法:
- 优先级取值越小,则网桥ID就越小
- 若优先级相同,则比较MAC地址,从MAC地址的左侧开始依次比较,数值小的,则网桥ID就越小
- 选举根端口
- 在每个非根交换机上选出一个根端口RP(Root Port),并且只能是一个
- 根端口用于接收根交换机发来的BPDU,也用来转发普通流量
- 根端口RP的选举条件:
- BPDU接收端口到根交换机的路径成本最小
- 若成本相同,则选择对端(指预选根端口的另一端的端口)的网桥ID最小
- 若对端均指向同一交换机,则选择对端的端口ID(PID)最小(比较规则与网桥ID类似)
- 优先级
- 范围:0 - 240
- 步长:16
- 默认值:128
- 端口号
- 优先级
- BPDU接收端口到根交换机的路径成本最小
- 选举指定端口并阻塞备用端口
- 在每个网段上选出一个指定端口DP(Designated Port),并且只能是一个
- 指定端口用于转发根交换机发来的BPDU,也用来转发普通流量
- 指定端口的选举条件:
- 根交换机的所有端口都是指定端口
- 根端口的对端端口一定是指定端口
- BPDU转发端口到根交换机的路径成本最小
- 若成本相同,则选择本端的网桥ID最小
- 剩余端口成为备用端口AP(Alternate Port),将它们阻塞
3.11 虚拟局域网VLAN
3.11.1 虚拟局域网VLAN概述
-
以太网交换机工作在数据链路层(也包括物理层)
-
使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域
-
随着交换式以太网规模的扩大,广播域相应扩大,其带来的弊端有:
- 广播风暴
会浪费网络资源和各主机的CPU资源 - 难以管理和维护
- 潜在的安全问题
- 广播风暴
-
网络中会频繁出现广播信息
- TCP/IP协议栈中的很多协议都会使用广播:
- 地址解析协议ARP(已知IP地址,找出其相应的MAC地址)
- 路由信息协议RIP(一种小型的内部路由协议)
- 动态主机配置协议DHCP(用于自动配置IP地址)
- NetBEUI:Widnows下使用的广播型协议
- IPX/SPX:Novel网络的协议栈
- Apple Talk:Apple公司的网络协议栈
- TCP/IP协议栈中的很多协议都会使用广播:
-
分割广播域的方法
- 使用路由器可以隔离广播域
由于路由器默认情况下不对广播数据包进行转发,因此路由器很自然地就可以隔离广播域。然而路由器的成本较高,局域网内部全部使用路由器来隔离广播域是不现实的
- 使用路由器可以隔离广播域
-
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求
只有同一个VLAN才收得到广播消息
3.11.2 虚拟局域网VLAN的实现机制
-
IEEE 802.1Q帧(也称Dot One Q帧)对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记
-
VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN
- VID的取值范围是0 ~ 4095(000 ~ 212−12^{12}-1212−1)
- 0和4095都不用来表示VLAN,因此用于表示VLAN的VID的有效取值范围是1 ~ 4094
-
802.1Q帧是由交换机来处理的,而不是用户主机来处理的
- 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧,简称“打标签”
- 当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称“去标签”
-
交换机的端口类型有以下三种:
- Access
- Trunk
- Hybrid
-
交换机各端口的缺省VLAN ID
- 在思科交换机上称为Native VLAN,即本征VLAN
- 在华为交换机上称为Port VLAN ID,即端口VLAN ID,简记为PVID
-
Access端口
- Access端口一般用于连接用户计算机
- Access端口只能属于一个VLAN
- Access端口的PVID值与端口所属VLAN的ID相同(默认为1)
- Access端口接收处理方法:
一般只接受“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等 - Access端口发送处理方法:
若帧中的VID与端口的PVID相等,则“去标签”并转发该帧;否则不转发
-
Trunk端口
- Trunk端口一般用于交换机之间或交换机与路由器之间的互连
- Trunk端口可以属于多个VLAN
- 用户可以设置Trunk端口的PVID值。默认情况下,Trunk端口的PVID值为1
- Trunk端口发送处理方法:
- 对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−2=1262^{8-1}-2=12628−1−2=126(减2的原因是除去最小网络号0和最大网络号127)
- 每个网络中可分配的IP地址数量为224−2=167772142^{24}-2=16777214224−2=16777214(减2的原因是除去主机号为全0的网络地址和全1的广播地址)
注意:有些教材中指出128.0是保留网络号,B类第一个可指派的网络号为128.1
但根据2002年9月发表的RFC 3330文档,128.0网络号已经可以分配了。有兴趣的同学可以自行查询以128.0开头的IP地址,看看它们属于那些国家
- 可指派的网络数量为216−2=163842^{16-2}=16384216−2=16384
- 每个网络中可分配的IP地址数量为216−2=655342^{16}-2=65534216−2=65534(减2的原因是除去主机号为全0的网络地址和全1的广播地址)
- 可指派的网络数量为224−3=20971522^{24-3}=2097152224−3=2097152
- 每个网络中可分配的IP地址数量为28−2=2542^{8}-2=25428−2=254(减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地址的应用规划
-
定长的子网掩码FLSM(Fixed Length Subnet Mask)
- 使用同一个子网掩码来划分子网
- 每个子网所分配的IP地址数量相同,造成IP地址的浪费
应用需求:将C类网络218.75.230.0划分成5个子网,每个子网上可分配的IP地址数量不得少于各自的需求
注意:每个子网还需要一个额外的路由器接口地址
图中的网络5只需要4个IP地址,但是不得不分配32个IP地址,从而造成了严重的浪费
-
变长的子网掩码VLSM(Variable 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数据报首部是否出错:
-
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协议
- 路由信息协议RIP
- 外部网关协议EGP
- 边界网关协议BGP
- 内部网关协议IGP
-
路由器的基本结构
- 信号从某个输入端口进入路由器,物理层将信号转换为比特流,并交付数据链路层处理
- 数据链路层从比特流中识别出帧,去掉帧头和帧尾后,交付网络层处理
- 若交付网络层的分组是普通待转发的数据分组,则根据分组首部中的目的地址进行查表转发
- 若找不到匹配的转发条目,则丢弃该分组
- 否则按照匹配条目中所指示的端口进行转发
- 网络层更新数据分组首部中某些字段的值(例如,将数据分组的生存时间减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网络- “坏消息传播得慢”又称为路由环路或距离无穷计数问题,这是距离向量算法的一个固有问题。可以采取多种措施减少出现该问题的概率或减小该问题带来的危害
- 限制最大路径距离为15(16表示不可达)
- 当路由表发生变化时就立即发送更新报文(即“触发更新”),而不仅是周期性发送
- 让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“水平分割”)
- “坏消息传播得慢”又称为路由环路或距离无穷计数问题,这是距离向量算法的一个固有问题。可以采取多种措施减少出现该问题的概率或减小该问题带来的危害
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分组,则认为该邻居路由器不可达
- Hello分组封装在IP数据报中,发往组播地址224.0.0.5
-
使用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)分组
这是对链路状态更新分组的确认分组
- 类型1,问候(Hello)分组
-
OSPF的基本工作过程
- 相邻路由器之间周期性发送问候分组,以便建立和维护邻居关系
- 给邻居路由器发送数据库描述分组,即将自己的链路状态数据库中的所有链路状态项目的摘要信息,发送给邻居路由器
- R1收到R2发送的数据库描述分组后,发现自己缺少其中的某些链路状态项目,于是给R2发送链路状态请求分组
- R2收到后,将R1所缺少的链路状态项目的详细信息封装在链路状态更新分组中发送给R1
- R1收到后,将这些所缺少的链路状态项目的详细信息添加到自己的链路状态数据库中,并给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数据报的数据部分是何种协议数据单元
常用的一些协议和相应的协议字段值如下协议名称 协议字段值 ICMP 1 IGMP 2 TCP 6 UDP 17 IPv6 41 OSPF 89 -
首部检验和
占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应用举例
-
分组网间探测PING(Packet InterNet Groper)
- 用来测试主机或路由器间的连通性
- 应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
- 使用ICMP回送请求和回答报文
-
跟踪路由traceroute
- 用来测试IP数据报从源主机到达目的主机要经过哪些路由器
- Windows版本
- tracert命令
- 应用层直接使用网际层ICMP
- 使用了ICMP回送请求和回答报文以及差错报告报文
- Unix版本
- traceroute命令
- 在运输层使用UDP协议
- 仅使用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~1023,IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如:FTP使用21/20,HTTP使用80,DNS使用53
- 登记端口号:1024~49151,为没有熟知端口号的应用程序使用。使用这类端口号必须在IANA按照规定的手续登记,以防止重复。例如:Microsoft RDP微软远程桌面使用的端口是3389
- 短暂端口号:49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用
- 端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同端口号是没有联系的
- 端口号使用16比特表示,取值范围0 ~ 65535
-
发送方的复用和接收方的分用
(听麻了……) -
TCP/IP体系的应用层常用协议所使用的运输层熟知端口号
-
【举例】运输层端口号
计算机网络微课堂(有字幕无背景音乐版)_哔哩哔哩_bilibili - p58
自己看,从6:00开始全是
5.3 UDP和TCP的对比
- 用户数据报协议UDP(User Datagram Protocol)
传输控制协议TCP(Transmission 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字节)
- 全0(1字节)
- IP首部中的协议字段值(1字节)
- UDP用户数据报的长度(2字节)
与首部的长度字段是一致的,为何这样冗余设计?
这是书上UDP校验和计算和校验的例子
书上这里的**“按二进制反码运算求和”**,即在一般加法求和运算的基础上将最高位的进位又加到了最低为上
但经网络资料查阅,二进制反码求和貌似与书上的运算有出入。其大概可解释为以下两种运算方式:
- 将各参与计算的二进制数求和,且最高位产生的进位需再加到最低位,最后将求和结果取反
- 将各参与计算的二进制数先取反,再求和,同样地“循环进位”,求和结果即为最终结果
当然也可能是我理解错了,大概是在书上的基础上加了取反的一步。以下验证按照书上的运算解释
校验实现步骤:
- 发送前将UDP的伪首部、首部、数据部分看作整体后,以16位(2字节)字分割,若数据部分长度为奇数字节,则在末尾填充1字节的全0(与伪首部一样也是临时添加),计算之前首部的校验和也为全0
- 将分割后的全部16位字按二进制反码运算求和,并将求和结果取反写入首部的检验和
- 当接收到该UDP报文,可以按上述方法进行二进制反码求和,若结果全为1(FFFFH),说明无差错,否则有差错
证明:
-
将检验和除外的其他数据二进制反码和记为SSS,发送前计算出的检验和结果为XXX,步骤2的计算可表示为:
X=S+0‾=S‾X=\overline{S+0} =\overline{S} X=S+0=S
其中000表示检验和初始值为全0 -
证明步骤3的检验依据,即证明:S+X=FFFFHS+X=\mathrm{FFFFH}S+X=FFFFH
S+X=S+S‾=FFFFHS+X=S+\overline{S}=\mathrm{FFFFH} S+X=S+S=FFFFH
还就内个证毕,怎么说
这种简单的差错检验方法的检错能力并不强,但它的好处是简单,处理起来较快
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值再增大一些,即等于新的ssthresh+3
- 既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络
- 这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中
- 可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些
5.6 TCP超时重传时间的选择
-
不能直接使用某次测量得到的RTT样本来计算超时重传时间RTO
-
利用每次测量得到的RTTRTTRTT样本,计算加权平均往返时间RTTSRTT_SRTTS(又称为平滑的往返时间)
RTTS1=RTT1RTTSn=(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} RTTS1=RTT1RTTSn=(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:
RTO=RTTS+4×RTTDRTO=RTT_S+4\times RTT_D RTO=RTTS+4×RTTD
其中RTTDRTT_DRTTD为RTTRTTRTT偏差的加权平均,具体计算如下:
RTTD1=RTT1÷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} RTTD1=RTT1÷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的标准规定,SYN=1的报文段不能携带数据,但要消耗掉一个序号;普通的确认报文段如果不携带数据,则不消耗序号第三次“握手”发送针对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连接
当RST=1时,表明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
- 电子邮件
- 文件传送协议FTP
- P2P文件共享
- 多媒体网络应用
6.2 客户/服务器方式(C/S方式)和对等方式(P2P方式)
-
网络应用程序运行在处于网络边缘的不同的端系统上,通过彼此间的通信来共同完成某项任务
-
开发一种新的网络应用首先要考虑的问题就是网络应用程序在各种端系统上的组织方式和它们之间的关系。目前流行的主要有以下两种:
- 客户/服务器(Client/Server,C/S)方式
- 对等(Peer-to-Peer,P2P)方式
-
客户/服务器(Client/Server,C/S)方式
- 客户和服务器是指通信中所涉及的两个应用进程
- 客户/服务器方式所描述的是进程之间服务和被服务的关系
- 客户是服务请求方,服务器是服务提供方
- 服务器总是处于运行状态,并等待客户的服务请求。服务器具有固定端口号(例如HTTP服务器的默认端口号为80),而运行服务器的主机也具有固定的IP地址
-
C/S方式是因特网上传统的、同时也是最成熟的方式,很多我们熟悉的网络应用采用的都是C/S方式。包括万维网WWW、电子邮件、文件传输FTP等
-
基于C/S方式的应用服务通常是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上
- 由于一台服务器计算机要为多个客户机提供服务,在C/S应用中,常会出现服务器计算机跟不上众多客户机请求的情况
- 为此,在C/S应用中,常用计算机群集(或服务器场)构建一个强大的虚拟服务器
-
对等(Peer-to-Peer,P2P)方式
- 在P2P方式中,没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者
-
目前,在因特网上流行的P2P应用主要包括P2P文件共享、即时通信、P2P流媒体、分布式存储等
-
基于P2P的应用是服务分散型的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中,这些计算机并不为服务提供商所有,而是为个人控制的桌面计算机和笔记本电脑,它们通常位于住宅、校园和办公室中
-
P2P方式的最突出特性之一就是它的可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因规模的增大而降低
-
P2P方式具有成本上的优势,因为它通常不需要庞大的服务器设施和服务器带宽。为了降低成本,服务提供商对于将P2P方式用于应用的兴趣越来越大
6.3 动态主机配置协议DHCP
-
动态主机配置协议DHCP(Dynamic Host Configuration Protocol)提供了一种机制,称为即插即用连网。这种机制允许一台计算机加入新网络时可自动获取IP地址等网络配置信息而不用手工参与
-
DHCP主要使用以下报文来实现其功能:
- DHCP DISCOVER:DHCP发现报文
- DHCP OFFER:DHCP提供报文
- DHCP REQUEST:DHCP请求报文
- DHCP ACK:DHCP确认报文
- DHCP NACK:DHCP否认报文
- DHCP RELEASE:DHCP释放报文
-
DHCP报文在运输层使用UDP协议封装
- DHCP客户使用的UDP端口号为68
- DHCP服务器使用的UDP端口号为67
-
DHCP客户在未获取到IP地址时使用地址0.0.0.0
-
在每一个网络上都设置一个DHCP服务器会使DHCP服务器的数量太多。因此现在是使每一个网络至少有一个DHCP中继代理(通常是一台路由器),它配置了DHCP服务器的IP地址信息,作为各网络中计算机与DHCP服务器的桥梁
-
DHCP的工作过程
- DHCP中继代理
6.4 域名系统DNS(Domain 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)和邮件读取协议(例如POP3,IMAP)
- 简单邮件传送协议SMTP(Simple 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使用熟知端口110,IMAP4使用熟知端口143
- 邮局协议POP(Post Office Protocol),POP3是其第三个版本,是因特网正式标准。
-
基于万维网的电子邮件
- 通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器
- 邮件服务器网站通常都提供非常强大和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理
6.7 万维网WWW
- 万维网WWW(World 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没有任何关系,
难蚌)
控制网页的行为
- 超文本标记语言HTML(HyperText Markup Language)
-
超文本传输协议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 Server)
- Web缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去因特网访问该资源
完结撒花!
就像在本地操控一样,因此IMAP是一个联机协议
-
POP3和IMAP4都采用基于TCP连接的客户/服务器方式。POP3使用熟知端口110,IMAP4使用熟知端口143
-
基于万维网的电子邮件
- 通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器
- 邮件服务器网站通常都提供非常强大和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理
[外链图片转存中…(img-HvZbecfO-1639975589147)]
6.7 万维网WWW
- 万维网WWW(World 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没有任何关系,
难蚌)
控制网页的行为
- 超文本标记语言HTML(HyperText Markup Language)
-
超文本传输协议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 Server)
- Web缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去因特网访问该资源
[外链图片转存中…(img-PXI7voQz-1639975589152)]
完结撒花!
最后感谢湖科大教书匠以及本教学视频制作团队