计算机网络
【这里的笔记非常混乱:课上的逻辑较难接受,因此之前看的是 MOOC 上哈工大的 这门课,讲得非常清楚,但是内容偏少;而是考前预习了原本的教材的 PPT,发现其实内容非常扎实。
网课的逻辑清楚,比如说 TCP 的拥塞控制部分用的是「自顶向下」那本书的过程;而老师自编的那本教材和 PPT 就非常硬/干,当然容量上也更大。
下面首先罗列了考试要求和各章要点,然后主题部分是看哈工大 MOOC 的笔记,在每一章的最后又附上了 PPT 内容整理。哈工大版多了网络安全部分,而教材有物理层,数据链路层、媒体访问控制的介绍也更为详细。
另外,计算机网络习题 这一篇放了一些章节概要和习题。】
- 考试题型与概要
- 概述
- 应用层
- 传输层
-
网络层
- 4.1 网络层服务
- 4.2 虚电路网络与数据报网络
- 4.3 IPv4 协议
- 4.4 CIDR 与路由聚合
- 4.5 DHCP 协议
- 4.6 网络地址转换(NAT)
- 4.7 ICMP 协议
- 4.8 IPv6 简介
- 4.9 路由算法
- 4.10 Internet 路由
- 交换和路由(5.1)
- 网桥(5.2)
-
Internet网络层(5.3)
- IP 协议
- IP 分组格式
- IP 分段和重组
- IP 选项
- IP 地址
- CIDR(Classless Inter-Domain Routing)
- 最长前缀匹配
- ARP(Address Resolution Protocol)
- ARP Spoofing Attack(Man-in-the-Middle)
- Reverse(反向)ARP
- ICMP(Internet Control Message Protocol)
- ICMP 差错报告
- DHCP(Dynamic Host Configuration Protocol)
- NAT(Network Address Translation)
- IP隧道(Tunneling)
- 路由协议(5.4)
- IP 组播(5.5)
- 移动节点的路由(5.6)
- IPv6(5.8)
- 数据链路层
- 局域网
- 网络安全
- 网络安全协议
- 物理层
- 媒体访问控制
考试题型与概要
- 填空题
- 判断对错题(True/False)
- IGMP协议在所有组播成员之间运行以维护组播组的成员关系
- Ad-hoc无线网络拓扑需要基站(或AP)才能正常工作
- 简答题(可能包括简单计算)
- 下列描述分别对应着OSI模型的层次中的哪一层或者哪几层的功能?
- a. 进程间的可靠数据递交
- b. 路由选择
- c. 协议数据单元被称为帧
- d. 提供电子邮件、文件传输等服务
- 请问什么是隐藏终端问题,IEEE 802.11是怎么样解决这个问题的?
- 为了能够更快地转发分组,IPv6相比IPv4作了哪些改变?
- 下列描述分别对应着OSI模型的层次中的哪一层或者哪几层的功能?
- 计算题
- 考虑一个设想的5BaseX以太网,每个网段500米,最多允许3个网段通过2个转发器连接以覆盖1500米的范围。信号传播速度为每秒米;转发器的转发延迟为0.5微秒;最小帧长为20字节,支持的数据速率为5Mbps。请问这个以太网的设计有没有问题?请解释。
- 假设一个TCP消息包括2048字节的用户数据和20字节的TCP头部,该TCP消息交给IP模块通过一个物理网络发送到目的地。该网络采用14字节的数据链路层头部,MTU为1024字节。不使用IP选项,即IP头部为20字节。给出到目的站点的每个IP分段的大小。
第一章 概述
- 网络应用模型:C/S、B/S和P2P
- 什么是资源子网和通信子网?
- 计算机网络的分类:拓扑结构/传输媒体/地理范围等
- 计算机网络的度量
- 分组交换、报文交换和电路交换
- 为什么要采用层次模型?
- OSI 7层模型,每层大概的功能
- Internet的4层模型,与OSI模型的对应
- 计算机网络标准化组织
第二章 物理层
- 传输媒体:各种媒体的基本特性,无线电波的传播方式,多径传输等
- 香农定理和那奎斯特定理的应用、波特率和数据速率
- 什么是NRZ、NRZI、曼彻斯特和差分曼彻斯特编码、4B5B、MLT-3?怎么编码?
- 什么是模拟传输和数字传输?
- 数字调制的3种基本方法:频率、幅度、相位
- 多路复用技术:FDM、TDM、WDM、SDM、CDM
- 接入网技术:HFC、ADSL、FTTH(PON)、移动网络(1G-4G)
- PCM基本原理,量化的变种
第三章 数据链路层
- 帧同步
- 总共有哪些同步机制
- 比特填充机制
- CRC
- 比特串与多项式的对应
- 如何进行编码
- 如何判断出错
- 差错多项式
- CRC计算
- 海明码
- 需要添加多少个冗余位
- 如何构造监督关系式
- 海明距离与检错和纠错能力之间的关系
- 3.2.3卷积码、3.2.4RS码不考
- 差错控制怎样处理帧的丢失、失序等
- 停等协议:性能分析方法
- 滑动窗口协议
- GBN和选择重传有什么区别
- 窗口大小的取值
- 顺序号字段需要多少比特
- 数据链路层协议举例(并入帧同步)
第四章 媒体访问控制
- CDMA基本原理
- ALOHA协议
- 标准和分槽Aloha协议的吞吐率(信道的最大利用率)
- G和S的概念,冲突危险区的概念,无限用户和固定用户吞吐率公式的推导方法
- CSMA协议
- 以太网
- 体系结构:LLC、MAC、物理层
- SNAP扩展
- LAN地址:单播、组播和广播地址
- IEEE地址格式:最低位在前
- OUI+地址
- 以太网的两种帧格式,能否同时使用这两种帧格式?
- CSMA/CD机制,帧间间隔IFG的作用
- 最小帧长
- 二进制指数退避算法
- 千兆以太网的CSMA/CD扩展:载波扩展、帧突发
- CSMA/CD协议的性能分析方法
- 什么是全双工以太网?与CSMA/CD的区别,流量控制机制
- 4.2.5 以太网媒体选项不考
- 无线局域网
- WLAN体系结构:BSS、ESS、AP、无线站点、分发系统、portal
- 无线局域网为什么采用CSMA/CA
- 为什么引入IFS?
- 什么时候进行随机后退?
- 什么是暴露节点问题,什么是隐藏节点问题?如何解决该问题
- MAC帧格式
- 4.4 RFID不考
第五章 网络互联
- 交换和路由
- 网络互连设备,数据平面和控制平面
- 虚电路和数据报
- 逐跳路由和源路由:扩散法和逆向学习法
- 网桥
- 什么是冲突域和广播域?
- 网桥是如何工作的?
- 生成树算法
- VLAN支持哪3种划分VLAN的方法
- VLAN帧相比传统的以太网帧有什么不同
- 局域网交换机支持哪三种帧转发技术?【存储转发、直通、无残帧(以太网交换机 64 字节,因为大多数错误和冲突出现在帧的前 64 字节)】
- Internet的设计原则:命运共享(无状态)、软状态、端到端
- IP提供的服务,IP分组格式和各字段的作用
- 分段和重组
- IP地址
- 子网分配方案,包括变长子网掩码
- CIDR:如何进行汇集
- IP转发
- ARP的基本操作过程
- ICMP
- ICMP差错报告
- Ping/traceroute/path MTU Discovery如何实现?
- DHCP的基本工作过程
- NAT和NAPT的工作原理
- IP隧道的基本思想
- 自治系统的概念
- 链路状态路由
- Dijkstra算法
- 链路状态分组LSP:顺序号、链路状态扩散
- OSPF
- 支持点到点链路、广播链路等
- 选取路由器
- 区域的概念:5种LSA
- 距离向量路由
- Bellman-Ford算法
- 无穷计数问题
- 水平分割以及反向抑制的水平分割
- RIP
- 5.4.3 边界网关协议不考
- IP组播
- 任意源组播服务模型和单一源组播服务
- IGMP协议的基本工作方式:软状态、反馈抑制和离开组播组
- 移动节点的路由:Mobile IP
- 怎么样支持主机的移动?
- 什么是三角路由?路由优化和平滑切换机制
- 5.7 移动自组网的路由不考
- IPv6
- IPv6分组格式,相比IPv4的改进
- 128比特的地址空间,如何压缩IPv6地址
- IPv6的过渡方法:隧道方式
第六章 端到端的运输协议
- TCP提供的服务:面向字节流
- TCP报文格式和各字段的作用
- 三次握手的连接建立过程:连接释放的TIME-WAIT状态
- TCP可靠传输和流量控制:可变窗口的滑动窗口协议
- TCP拥塞控制:慢启动和拥塞避免,拥塞控制的改进
- TCP计时器
- 基于RTT和标准偏差的估计
- 重传TCP段的超时如何处理?
- 特殊环境下的TCP
- UDP
- 6.3.2 RTP不考
第七章 网络应用
- DNS
- 如何维护域名树:NS资源记录、域名和区域的概念
- 域名解析过程:递归和迭代查找过程以及缓冲
- 电子邮件
- FTP:主动和被动模式数据传输
- WWW
- HTTP的无状态特征
- 持续连接和非持续连接
- 7.3多媒体应用和7.4内容递交不考
概述
1.1 计算机网络基本概念
- 什么是计算机网络?
- 计算机网络 = 通信技术+计算机技术
- 定义:计算机网络就是互连的、自治的计算机集合。
- 自治-无主从关系
- 互连-互联互通
- 通过交换网络互连主机
- 什么是Internet?- 组成细节角度
- 全球最大的互联网络
- ISP(Internet Service Provider)网 络互连的“网络之网络”
- 数以百万计的互连的计算设备集合
- 主机(hosts) = 端系统(end systems)
- 运行各种网络应用
- 通信链路:光纤, 铜缆, 无线电, 卫星……
- 分组交换: 转发分组 (数据包)。路由器(routers) 和 交换机(switches)
- 什么是Internet?- 服务角度
- 为网络应用提供通信服务的通信基础设施:Web, VoIP, email, 网络游戏, 电子商务, 社交网络, …
- 为网络应用提供应用编程接口(API):支持应用程序“连接” Internet,发送/接收数据;提供类似于邮政系统的数据传输服务
- 什么是网络协议?
- 协议是计算机网络有序运行的重要保证
- 硬件(主机、路由器、通信链路等)是计算机网络的基础
- 计算机网络中的数据交换必须遵守事先约定好的规则
- 网络协议(network protocol),简称,是为进行网络中的数据交换而建立的规 则、标准或约定
- 协议规定了通信实体之间所交换的消息的 格式、意义、顺序以及针对收到信息或发生的事件所采取的“动作”(actions)
- 协议三要素
- 语法 Syntax 数据与控制信息的结构或格式;信号电平
- 语义 Semantics 需要发出何种控制信息;完成何种动作以及做出何种响应;差错控制
- 时序 Timing 时间顺序;速度匹配
- Internet协议标准
- RFC: Request for Comments
- IETF:互联网工程任务组(Internet Engineering Task Force)
1.2 计算机网络结构
- 计算机网络结构
- 网络边缘:主机;网络应用;
- 接入网络,物理介质:有线或无线通信链路
- 网络核心(核心网络):互联网的路由器(或分组转发设备);网络之网络
- 接入网络
- 住宅(家庭)接入网络
- 机构接入网络 (学校,企业等)
- 移动接入网络
- 接入网络: 数字用户线路 (DSL)
- 【用户家里有 DSL 调制解调器 modem,再通过分离器实现和电话共用一条线路】【典型的是 ADSL,A 即上下行不对称】
- 利用已有的电话线连接中心局的 DSLAM【DSL 接入多路复用器】
- 数据通信通过DSL电话线接入Internet
- 语音(电话)通过DSL电话线接入电话网
- < 2.5 Mbps上行传输速率 (典型速率 < 1 Mbps)
- < 24 Mbps下行传输速率 (典型速率 < 10)
- FDM: 频分复用
- 50 kHz - 1 MHz用于下行
- 4 kHz - 50 kHz用于上行
- 0 kHz - 4 kHz用于传统电话
- 接入网络: 电缆网络
- 【家里有电缆调制解调器 cable modem,再用分离器和电视信号分离】
- 频分多路复用: 在不同频带(载波)上传输不同频道【调频道就是调载频?】
- HFC: 混合光纤同轴电缆(hybrid fiber coax)
- 非对称: 下行高达30Mbps传输速率,上行为 2 Mbps传输速率
- 各家庭(设备)通过电缆网络→光纤接入ISP路由器
- 各家庭共享家庭至电缆头端的接入网络
- 不同于DSL的独占至中心局的接入【因此实际速率可能达不到带宽?】
- 机构(企业)接入网络 (Ethernet)
- 【以太网交换机 直接连接 ISP 的机构接入链路的路由器】
- 主要用于公司、高校、企业等组织机构
- 典型传输速率:10 Mbps, 100Mbps, 1Gbps, 10Gbps
- 目前,端系统通常直接连接以太网交换机(switch)
- 无线接入网络
- 通过共享的无线接入网络连接端系统与路由器
- 通过基站(base station)或称为“接入点”(access point)
- 无线局域网(LANs):
- 同一建筑物内 (30m)
- 802.11b/g (WiFi): 11Mbps、 54Mbps传输速率
- 广域无线接入:
- 通过电信运营商 (蜂窝网) ,接入 范围在几十公里~
- 带宽:1 Mbps、10 Mbps、 100Mbps
- 3G、 4G: LTE
- 通过共享的无线接入网络连接端系统与路由器
1.3 网络核心
- 网络核心
- 互联的路由器网络
- 网络核心的关键功能:路由 routing + 转发 forwarding
- 网络核心解决的基本问题
- 如何使主机通过网络核心送达目的主机?
- 数据交换
- Internet结构
- Internet结构: 网络之网络
- 端系统通过接入ISP(access ISPs)连接到 Internet。家庭、公司和大学ISPs
- 接入ISP必须进一步互连。这样任意两个主机才可以互相发送分组
- 构成复杂的网络互连的网络。经济和国家政策是网络演进的主要驱动力
- 当前Internet结构?无人能给出精确描述
- 方案
- 不能每个接入 ISP 直接互联(连接数量太大了)
- 可选方案: 将每个接入ISP连接到一个国家或全球ISP (Global ISP)?
- 但是从商业角度,必定有竞争者…
- 这些(核心)ISP网络必须互连,它们之间有对等链路(peering link)
- 还有 Internet exchange point IXP
- 可能出现区域网络(regional networks)连接接入ISP和 运营商ISP
- 内容提供商网络(content provider networks,如: Google, Microsoft等) 可能运行其自己的网络,并就近为端用户提供服务、内容
- 在网络中心: 少数互连的大型网络
- “一级”(tier-1)商业ISPs(如:网通、电信、Sprint、 AT&T),提供国家或国际范围的覆盖
- 内容提供商网络(content provider network, 如:Google):私有网络, 连接其数据中心与Internet,通常绕过一级ISP和区域ISPs
- 数据交换-电路交换
- 为什么需要数据交换?直接互联的成本太高动态转接
- 交换?
- 动态转接(将一个端口的数据转移到另一个端口)
- 动态分配传输资源
- 类型:
- 电路交换
- 报文交换
- 分组交换
- 电路交换的特点
- 最典型电路交换网络:电话网络
- 电路交换的三个阶段:建立连接(呼叫/电路建立);通信;释放连接(拆除电路)
- 独占资源
- 电路交换网络的链路共享?
- 电路交换网络如何共享中继线?— 多路复用(Multiplexing)
- 多路复用
- 多路复用(multiplexing),简称复用,是通信技术中的基本概念
- 链路/网络资源(如带宽)划分为“资源片”
- 将资源片分配给各路“呼叫”(calls)
- 每路呼叫独占分配到的资源片进行通信
- 资源片可能“闲置”(idle) (无共享)
- 典型多路复用方法:
- 频分多路复用(frequency division multiplexing-FDM)
- 时分多路复用(time division multiplexing-TDM)
- 波分多路复用(Wavelength division multiplexing-WDM)
- 码分多路复用(Code division multiplexing-CDM)
- 频分多路复用FDM
- 频分多路复用的各用户占用不同的带宽资源(请注意,这里的“带宽 ”是频率带宽(单位:Hz)而不是数据的发送速率)
- 用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带
- 时分多路复用TDM
- 时分复用则是将时间划分为一段段等长的时分复用帧(TDM 帧),每个用户在每个 TDM 帧中占用固定序号的时隙
- 每用户所占用的时隙是周期性出现(其周期就是 TDM 帧的长度)
- 时分复用的所有用户是在不同的时间占用相同的频带宽度
- 波分多路复用WDM
- 波分复用就是光的频分复用
- 码分多路复用CDM
- 广泛应用于无线链路共享 (如蜂窝网,卫星通信等)
- 每个用户分配一个唯一的 m bit 码片序列(chipping sequence),其中“0”用“-1”表示、“1”用“+1”表示,例如:S 站的码片序列:(–1 –1 –1 +1 +1 –1 +1 +1)
- 各用户使用相同频率载波,利用各自码片序列编码数据
- 编码信号 = (原始数据) × (码片序列)
- 各用户码片序列相互正交(orthogonal)
- 解码: 码片序列与编码信号的内积
- 数据交换 — 报文、分组交换
- 报文交换(message switching)
- 报文:源(应用)发送信息整体;比如一个文件。【起源于电报】
- 分组交换(package switching)
- 分组:报文分拆出来的一系列相对较小的数据包
- 分组交换需要报文的拆分与重组;产生额外开销。
- 分组交换: 统计多路复用 (Statistical Multiplexing)
- A & B分组序列不确定,按需共享链路 —— statistical multiplexing.
- 存储-转发(store-and-forward)
- 报文交换与分组交换均采用存储-转发交换方式
- 这里用传输延迟作为指标比较了报文交换和分组交换
- 传输延迟即为报文长度/传输速率;忽略传播和其他的延迟
- 报文交换:每个路由器都需要存储之后转发——串行;
- 分组交换:每个路由器存储转发一个很小的分组,因此可「并行」处理,降低传输延迟;
- 分组交换 vs 电路交换?
- (分组交换)适用于突发数据传输网络
- 资源充分共享
- 简单、无需呼叫建立
- 可能产生拥塞(congestion): 分组延迟和丢失
- 需要协议处理可靠数据传输和拥塞控制
- (分组交换)适用于突发数据传输网络
【虚电路指的是在分组交换的基础上实现的类似电路交换的服务。需要建立连接,另外在头部就不需要源和目的地址而仅需要虚电路号,一定程度上节省了头部开销。】
1.4 计算机网络性能
- 速率【往往是标称速率】
- 速率即数据率(data rate)或称数据传输速率或比特率(bit rate)【注意,网络中的 k 指的是 1000】
- 速率往往是指额定速率或标称速率
- 带宽
- “带宽”(bandwidth)原本指信号具有的频带宽度,即最高频率与最低频率之差,单位是赫兹(Hz)
- 网络的“带宽”通常是数字信道所能传送的“最高数据率”,单位:b/s (bps)
- 延迟/时延(delay或latency)
- 四种分组延迟
- \(d_{proc}\) : 结点处理延迟 (nodal processing delay)。差错检测;确定输出链路;通常 < ms
- \(d_{queue}\) : 排队延迟 (queueing delay)。等待输出链路可用;取决于路由器拥塞程度;
- \(d_{trans}\) : 传输延迟 (transmission delay)。等于分组长度 L / 链路带宽 R
- \(d_{prop}\) : 传播延迟(propagation delay)。等于物理链路长度 d / 信号传播速度 s
- 四种分组延迟
- 时延带宽积
- 时延带宽积 = 传播时延 * 带宽
- 链路的时延带宽积又称为以比特为单位的链路长度
- 分组丢失(丢包)
- 队列缓存容量有限
- 分组到达已满队列将被丢弃 (即丢包)
- 丢弃分组可能由前序结点或源重发(也可能不重发)
- 吞吐量/率(Throughput)
- 吞吐量:表示在发送端与接收端之间传送数据速率 (b/s)
- 即时吞吐量: 给定时刻的速率
- 平均吞吐量: 一段时间的平均速率
- 瓶颈链路(bottleneck link):端到端路径上,限制端到端吞吐量的链路。
1.5 计算机网络体系结构
- 计算机网络体系结构
- 复杂系统的分层结构
- 类比:航空旅行
- 每层完成一种(类)特定服务/功能
- 每层依赖底层提供的服务,通过层内动作完成相应功能
- 计算机网络的体系结构?
- 网络体系结构是从功能上(而非物理上)描述计算机网络结构
- 计算机网络体系结构简称网络体系结构 (network architecture) 是分层结构
- 每层遵循某个/些网络协议完成本层功能
- 计算机网络体系结构 是计算机网络的各层及其协议的集合
- 体系结构是一个计算机网络的功能层次及其关系的定义
- 体系结构是抽象的
- 为什么采用分层结构?
- 结构清晰,有利于识别复杂系统的部件及 其关系
- 分层的 参考模型(reference model)
- 模块化的分层易于系统更新、维护【模块化的思想,对外提供接口,内部的实现在外部感受不到,即透明】
- 任何一层服务实现的改变对于系统其它层都是透明的
- 例如,登机过程的改变并不影响航空系统的其它部分(层)
- 有利于标准化
- 结构清晰,有利于识别复杂系统的部件及 其关系
- 分层网络体系结构基本概念
- 实体(entity) 表示任何可发送或接收信息的硬件或软件进程。
- 协议是控制两个对等实体进行通信的规则的集合,协议是“水平的” 。
- 任一层实体需要使用下层服务,遵循本层协议,实现本层功能,向上层提供服务,服务是“垂直的”。
- 下层协议的实现对上层的服务用户是透明的。
- 同系统的相邻层实体间通过接口进行交互,通过服务访问点 SAP (Service Access Point),交换 原语,指定请求的特定服务。
- OSI参考模型
- 开放系统互连 (OSI) 参考模型 是由国际标准化组织 (ISO) 于 1984 年提出的分层网络体系结构模型
- 目的是支持异构网络系统的互联互通
- 异构网络系统互连的国际标准
- 理解网络通信的最佳学习工具 (理论模型)
- 理论成功,市场失败
- 7 层 (功能), 每层完成特定的网络功能。
- 物理层 Physical,数据链路层 Data link,网络层 Network,传输层 Transport,会话层 Session,表示层 Presentation,应用层 Application。
- 上面的四个层称为 端到端层。
- 为什么需要数据封装?【增加头部】
- 增加控制信息
- 构造协议数据单元
- 控制信息主要包括:
- 地址(Address): 标识发送端/接收端
- 差错检测编码(Error-detecting code): 用于差错检测或纠正
- 协议控制(Protocol control): 实现协议功能的附加信息,如: 优先级(priority)、服务质量(QoS)、 和安全控制等
- 增加控制信息
- 物理层功能
- 接口特性:
- 机械特性(插口形状)、电气特性(多大的电平,多大的电压)、功能特性(引脚的功能)、规程特性(工作过程的规则,也叫过程特性)
- 比特编码(如何表示 0-1)
- 数据率
- 比特同步:时钟同步
- 传输模式
- 单工(Simplex) 半双工(half-duplex) 全双工(full-duplex)【一般全双工用独立的两个信道】
- 接口特性:
- 数据链路层功能
- 负责结点-结点(node-to-node)数据传输 (两个相邻节点之间的传输)
- 组帧(Framing) 【加头加尾,头加地址信息,尾部加差错检测等;主要目的是接收端能从物理层接收到的比特流能够切分出数据帧,当然进一步直到那些是头部尾部信息】
- 物理寻址(Physical addressing)【注意物理层是无法寻址的(只有比特流)】
- 在帧头中增加发送端和/或接收端的物理地址标识数据帧的发送端和/或接收端
- 流量控制(Flow control):避免淹没接收端
- 差错控制(Error control):检测并重传损坏或丢失帧,并避免重复帧
- 访问(接入)控制(Access control):在任一给定时刻决定哪个设备拥有链路(物理介质)控制使用权
- 网络层功能
- 负责源主机到目的主机数据分组(packet)交付
- 可能穿越多个网络【因此数据链路层的物理寻址就不能用了,必须全局唯一】
- 逻辑寻址(Logical addressing)
- 全局唯一逻辑地址,确保数据分组被送达目的主机,如 IP 地址
- 路由(Routing)
- 路由器(或网关)互连网络,并路由分组至最终目的主机
- 路径选择
- 分组转发
- 负责源主机到目的主机数据分组(packet)交付
- 传输层功能
- 负责源-目的(端-端)(进程间)完整报文传输
- 分段与重组
- SAP寻址:确保将完整报文提交给正确进程,如端口号
- 连接控制
- 流量控制
- 差错控制
- 会话层功能
- 对话控制(dialog controlling):建立、维护
- 同步(synchronization):在数据流中插入“同步点”【当会话在其中一点中断,只需在这里恢复即可】
- 最“薄”的一层
- 表示层功能
- 处理两个系统间交换信息的语法与语义(syntax and semantics)问题
- 数据表示转化:转换为主机独立的编码
- 加密/解密
- 压缩/解压缩
- 应用层功能
- 支持用户通过用户代理(如浏览器)或网络接口使用网络(服务)
- 典型应用层服务:
- 文件传输(FTP) 电子邮件(SMTP) Web(HTTP)
- TCP/IP参考模型
- IP over Everything
- IP 可应用到各式各样的网络上【底层网络没有限制】
- 四层:网络接口层、网际层、运输层、应用层
- 5层参考模型
- 综合 OSI 和 TCP/IP 的优点【TCP/IP 将网络接口层隐藏了】
- 应用层: 支持各种网络应用
- FTP, SMTP, HTTP
- 传输层: 进程-进程的数据传输
- TCP UDP
- 网络层: 源主机到目的主机的数据分 组路由与转发
- IP协议、路由协议等
- 链路层: 相邻网络元素(主机、交换 机、路由器等)的数据传输
- 以太网(Ethernet)、802.11 (WiFi)、 PPP
- 物理层:比特传输
- 计算机网络与Internet发展历史【略】
- 1961-1972: 早期分组交换原理的提出与应用
- 1972-1980: 网络互连,大量新型、私有网络的涌现
- 1980-1990: 新型网络协议与网络的激增
- 1990, 2000’s: 商业化, Web, 新应用
- 2005-今【两千年初互联网泡沫】
总结 OSI 模型
- 物理层:在物理媒体上传输原始的数据比特流信号。
- 数据链路层:数据检错与纠错以及数据链路的维护。(数据块传输)
- 网络层:决定通信子网中或通信子网间分组传递的路径。(网际互连)
- 运输层:负责数据正确有效地从一端(进程)运输到另一端。(端到端服务)
- 会话层:建立、维持、协调会话。
- 表示层:处理数据表示形式或代码的转换。
- 应用层:为应用程序在不同计算机的网络应用服务之间传递信息。
各层传输单位
- 物理层PDU:比特(bit)
- 数据链路层PDU:数据帧(frame)
- 网络层PDU:IP分组(packet)
- 运输层PDU:TCP报文段(segment)或UDP数据报(datagram)
- 应用层PDU:报文(message)
应用层
2.1 网络应用层内容概述
- 网络应用体系结构
- C/S
- P2P
- 混合结构
- 网络应用的服务需求
- 可靠性
- 带宽
- 时延
- Internet 传输层服务模型
- TCP,UDP
- 特定网络应用及其协议
- HTTP
- SMTP POP IMAP
- DNS
- P2P
- Socket 编程
2.2 网络应用的基本原理
- 网络应用的体系结构
- 客户机/服务器结构 C/S
- 点对点结构 Peer-to-peer, P2P
- 混合结构 Hybrid
- 客户机/服务器结构
- 服务器
- 7*24 小时提供服务;永久性访问地址/域名;利用大量服务器实现可拓展性;
- 客户机
- 与服务器通信,使用服务器提供的服务;间歇性接入网络;可能使用动态 IP 地址;不会与其他客户机直接通信;
- 服务器
- 纯 P2P 结构
- 没有永久在线的服务器;任意端系统/节点之间可以直接通讯;节点间接性接入网络
- 优点:高度可伸缩;
- 缺点:难于管理;
- 混合结构
- Napster:文件传输使用 P2P 结构;文件的搜索采用 C/S 结构——集中式(每个节点向中央服务器登记自己的内容;每个节点向中央故武器提交查询请求,查找感兴趣的内容。)
- 网络应用进程通信
- 套接字 Socket
- 进程间通信利用 socket 发送/接收消息实现
- 传输基础设施向进程提供 API(传输协议的选择;参数的设置)
- 如何寻址进程
- 不同主机上的进程通信,每个进程必须拥有标识符;
- 如何寻址主机?IP 地址
- 端口号
- 进程的标识符:IP 地址+端口号
- 应用层协议
- 内容
- 消息的类型 type:请求;响应
- 消息的语法 syntax/格式:消息中有哪些字段 field;每个字段如何描述
- 字段的语义 semantics:字段中信息的含义
- 规则 rules:进程何时发送/响应消息;进程如何发送/响应消息
- 内容
- 网络应用的需求与传输层服务
- 数据丢失 data loss/可靠性 reliability
- 时间 timing/延迟 delay(网络电话、网络游戏)
- 带宽 bandwidth(网络视频)
- Internet 提供的传输服务
- TCP:面向连接;可靠的传输;流量控制;拥塞控制;不提供时间/延迟保障;不提供最小带宽保障;
- UDP:无连接;不可靠数据传输;
2.3 Web 应用
- WWW: Tim Berners-Lee
- 网页;网页相互链接
- 网页 Web Pages 包含多个对象 objects
- 对象:HTML 文件、JPEG 图片、视频、动态脚本等
- 基本 HTML 文件:包含对其他对象引用的连接
- 对象的寻址 addressing
- URL Uniform Resource Locator 统一资源定位器 RFC1738
- HTTP 协议概述
- HyperText Transfer Protocol 超文本传输协议
- C/S 结构:
- 客户——Browser 请求、接收、展示 Web 对象
- 服务器——Web Server 相应客户的请求
- 1.0 为 RFC1945,1.1 为 RFC2068
- 无状态 stateless:服务器不维护任何有关客户端过去所发请求的消息。
- 有状态的协议更复杂:1. 需维护状态(历史信息);2. 如果客户或服务器失效,会产生状态不一致,解决的代价高;
- HTTP 连接的两种类型
- 非持久性连接 Nonpersistent HTTP
- 每个 TCP (每次)连接最多允许传输一个对象【服务器发送一个对象之后直接关闭连接】
- HTTP 1.0
- 持久性连接 Persistent HTTP
- 每个 TCP 连接允许传输多个对象
- HTTP1.1 默认使用持久性连接
- 响应时间分析与建模
- (对于非持久性连接)发起、建立 TCP 连接:1 个 RTT;
- 发送 HTTP 请求消息到 HTTP 响应消息的前几个字节到达:1 个 RTT;
- 因此,每获取一个 HTTP 对象,至少需要 2 个 RTT。
- 例子,请求一个 HTML 对象,引用了 10 张小图。
- 非持久性连接
- 若一次发送请求,则需要 22 个 RTT;
- 对于 HTML 中引用的图片对象,可并行发送请求,需要 4 个 RTT;
- 持久性连接
- 无流水线 pipelining 的持久性连接(客户端只有收到前一个响应之后才发送新的请求)。此时每一个被引用的对象耗时一个 RTT,因此需要 2+10=12 个 RTT;
- 带有流水线机制的持久性连接(HTTP1.1 的默认选项;客户端只要遇到一个引用对象就尽快发出请求)。此时 10 张图片只需要 1 个 RTT,因此总用时 3 个 RTT;
- 非持久性连接
- 非持久性连接 Nonpersistent HTTP
HTTP 消息格式
- 包括 请求消息 request;响应消息 response
HTTP 请求消息
- request line (GET, POST, HEAD commands)
- header lines
- Carriage return, line feed indicates end of message 【空行表示结束】
GRT /somedir/page.html HTTP/1.1 Host: www.someschool.edu
User-agent: Mozilla/4.0
Connection: close
Accept-language: fr请求消息格式【略】
上传输入的方法
- POST 方法
- 网页经常需要填写表格 form;
- 在请求消息的消息体 entity body 中上传客户端的输入
- URL 方法(还是用 GET 方法)
- 输入信息通过 request 行的 URL 字段上传,例如
www.somesite.com/animalsearch?monkeys&banana
- 输入信息通过 request 行的 URL 字段上传,例如
- POST 方法
方法的类型
- HTTP/1.0
- GET POST HEAD
- 其中 HEAD 方法,请服务器不要将所请求的对象放入响应消息中
- HTTP/1.1
- 新加了 PUT 和 DELETE 方法
- PUT 方法将消息体中的文件上传到 URP 字段所指定的路径;
- DELETE 删除 URL 字段所指定的文件;
- HTTP/1.0
HTTP 响应消息
- 最后多了 data 字段,例如是所请求的 HTML 文件
HTTP/1.1 200 OK Connection: close Date: Thu, 06 Aug 1998 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 22 Jun 1998 …...
Content-Length: 6821
Content-Type: text/html响应状态代码
- 200 OK
- 301 Moved Permanently
- 400 Bad Request
- 404 Not Found
- 505 HTTP Version Not Supported
Telnet 访问网页【略 实践】
Cookie 技术
- HTTP 协议无状态,但很多应用需要服务器需要掌握客户端(如网上购物,购物车)
- Cookie 技术:某些网站为了辨别用户身份、进行 session 跟踪而存储在用户本地终端上的数据(通常经过加密)
- RFC6265
- Cookie 的组件
- HTTP 响应消息的 cookie 头部行,如
Set-cookie: 1678
- HTTP 请求消息的 cookie 头部行
- 保存在客户端主机上的 cookie 文件,由浏览器管理
- Web 服务器端的后台数据库
- HTTP 响应消息的 cookie 头部行,如
- Cookie 能够用于:身份认证、购物车、推荐、Web e-mail
- 问题:隐私问题(广告、推荐等)
Web缓存/代理服务器技术
- 功能:在不访问服务器的前提下满足客户端的 HTTP 请求
- 可以
- 缩短客户请求的响应时间
- 减少机构/组织的流量
- 在大范围内(Internet)实现有效的内容分发
- Web 缓存/代理服务器
- 用户设定浏览器通过缓存进行 Web 访问;
- 浏览器向缓存/代理服务器发送所有的 HTTP 请求
- 如果所请求对象在缓存中,缓存返回对象;
- 否则,缓存服务器向原始服务器发送 HTTP 请求,获取对象家,然后返回给客户并保存该对象;
- 缓存既充当客户端,也充当服务器;
- 一般由 ISP/组织架设
- 给了个例子,说明了:1. 一方面,缓存命中(如 0.4 左右)可以提升响应速度;2. 另一方面,机构不需要那么大的出口带宽,可以节省增加带宽的费用;
- 缓存可能的问题:所缓存的内容可能过时
- 条件 GET 方法
- 目标:若缓存有最新版本,则不需要发送请求对象
- 缓存:在 HTTP 请求消息中生命所持有版本的日期,格式为
If-modified-since: <date>
- 服务器:若缓存的版本是最新的,则响应消息中不包含对象;返回为
HTTP/1.0 304 Not Modified
;
2.4 Email 应用
- Email 应用构成
- 有点客户端 user agent;邮件服务器;SMTP 协议议(Simple Mail Transfer Protocol)
- SMTP协议: RFC 2821
- TCP
- 端口 25
- 传输过程三个阶段:握手、消息的传输、关闭
- 命令/响应交互模式
- 命令(command): ASCII文本
- 响应(response): 状态代码和语句
- Email消息只能包含7位ASCII码
- 总结:
- 使用持久性连接;要求消息必须由 7 位 ASCII 码构成;SMTP 服务器利用 CRLF.CRLF 确定消息的结束。
- 与 HTTP 对比:
- HTTP: 拉式(pull);SMTP: 推式(push)
- 都使用命令/响应交互模式;命令和状态代码都是ASCII 码
- HTTP: 每个对象封装在独立的响应消息中;SMTP: 多个对象在由多个部分构成的消息中发送
- 邮件访问协议(从服务器获取邮件)
- POP: Post Office Protocol [RFC 1939]
- 认证/授权和下载
- IMAP: Internet Mail Access Protocol [RFC 1730]
- 更多功能;更加复杂;能够操纵服务器上存储的消息
- HTTP:163, QQ Mail 等
- POP: Post Office Protocol [RFC 1939]
- POP 协议
- 「下载并删除」模式:用户如果换了客户端软件,无法重读该邮件
- 「下载并保存」模式:不同客户端都可以保留消息的拷贝
- POP3 是 无状态的
- IMAP 协议(有状态)
- 所有消息统一保存在一个地方:服务器
- 允许用户利用文件夹组织消息
- IMAP支持跨会话(Session)的用户状态:
- 文件夹的名字;
- 文件夹与消息 ID 之间的映射等;
2.5 DNS
- DNS:Domain Name System
- Internet 上主机/路由器的识别问题
- IP 地址
- 域名
- 问题:域名和IP地址之间如何映射?
- Internet 上主机/路由器的识别问题
- 域名解析系统DNS
- 多层命名服务器构成的分布式数据库
- 应用层协议:完成名字的解析
- Internet 核心功能,用应用层协议实现
- 网络边界复杂
- 不使用集中式 DNS
- 单点失败问题;流量问题;距离问题;维护性问题
- 分布式层次式数据库
- DNS 根域名服务器
- 本地域名解析服务器无法解析域名时,访问根域名服务器
- 全球 13 个
- 顶级域名服务器(TLD, top-level domain): 负责com, org, net, edu等 顶级域名和国家顶级域名,例如cn, uk, fr等
- Network Solutions 维护 com 顶级域名服务器
- Educause 维护edu顶级域名服务器
- 权威(Authoritative)域名服务器:组织的域名解析服务器,提供组织内部服务器的解析服务【管理 权威资源记录(Authoritative resource record)】
- 组织负责维护
- 服务提供商负责维护
- DNS 根域名服务器
- 本地域名解析服务器
- 不严格属于层级体系
- 每个 ISP 有一个本地域名服务器(默认的域名解析服务器)
- 当主机进行 DNS 查询时,查询被发送到本地域名服务器
- 作为代理(proxy),将查询转发给(层级式)域名解析服务器系统
- 迭代查询
- 递归查询
- DNS记录缓存和更新
- 只要域名解析服务器获得域名—IP映射,即缓存这一映射
- 一段时间过后,缓存条目失效(删除)
- 本地域名服务器一般会缓存顶级域名服务器的映射【因此根域名服务器不经常被访问】
- 记录的更新/通知机制
- RFC 2136
- Dynamic Updates in the Domain Name System (DNS UPDATE)
- DNS 记录
- 资源记录(RR, resource records)
- RR format: (name, value, type, ttl)
- Type=A:Name 为主机域名,Value 为 IP 地址
- Type=NS:Name 是域(例如 edu.cn),Value 是该域权威域名解析服务器的主机域名
- Type=CNAME:Name: 某一真实域名的别名,Value 为真实域名
- Type=MX:Value 为 Name 相对应的邮件服务器
- DNS协议与消息
- 查询 query 和回复 reply(消息格式相同)
- 如何注册域名?
- 在域名管理机构(如 Network Solutions)注册域名 networkutopia.com
- 向域名管理机构提供你的权威域名解析服务器的名字和IP地址
- 域名管理机构向com顶级域名解析服务器中插入两条记录(NS 和 A 类型)
- 在权威域名解析服务器中为 www.networkuptopia.com 加入 Type A 记录 ,为networkutopia.com 加入 Type MX 记录
- 在域名管理机构(如 Network Solutions)注册域名 networkutopia.com
2.6 P2P 应用
- P2P应用:文件分发
- 文件分发:BitTorrent
- tracker: 跟踪参与 torrent 的节点【用户向 tracker 查询】
- torrent: 交换同一个文件的文件块的节点组
- 文件划分为256KB的chunk
- 节点加入 torrent
- 没有chunk,但是会逐渐积累
- 向 tracker 注册以获得节点清单,与某些节点(“邻居”)建立连接
- 下载的同时,节点需要向其他节点上传 chunk
- 一旦节点获得完整的文件,它可能(自私地)离开或(无私地)留下
- 获取chunk
- 给定任一时刻,不同的节点持有文件的不同chunk集合
- 节点(Alice)定期查询每个邻居所持有的chunk列表
- 节点发送请求,请求获取缺失的chunk【稀缺优先】
- 发送chunk: tit-for-tat【以牙还牙,一报还一报】
- Alice向4个邻居发送chunk:正在向其发送Chunk,速率最快的4个。每10秒重新评估top 4
- 每30秒随机选择一个其他节点,向其发送chunk
- 新选择节点可能加入top 4
- “optimistically unchoke”
- P2P 应用:索引技术
- P2P: 搜索信息
- P2P系统的索引:信息到节点位置(IP地址+端口号)的映射
- 文件共享(电驴)
- 利用索引动态跟踪节点所共享的文件的位置
- 节点需要告诉索引它拥有哪些文件
- 节点搜索索引,从而获知能够得到哪些文件
- 即时消息(QQ)
- 索引负责将用户名映射到位置
- 当用户开启 IM 应用时,需要通知索引它的位置
- 节点检索索引,确定用户的 IP 地址
- 集中式索引
- Napster 最早采用这种设计
- 节点加入时,通知中央服务器:IP 地址;内容
- 问题:1. 单点失效问题;2. 性能瓶颈;3. 版权问题【Napster 因为版权问题被打击】
- Napster 最早采用这种设计
- 洪泛式查询: Query flooding
- 完全分布式架构
- Gnutella 采用这种架构
- 每个节点对它共享的文件进行索引,且只对它共享的文件进行索引
- 覆盖网络(overlay network): Graph
- TCP 连接的构成一个边,是虚拟链路
- 逻辑上的网络
- 节点一般邻居数少于10个
- 查询消息通过已有的 TCP 连接发送;节点转发查询消息;如果查询命中,则利用反向路径发回查询节点
- 缺点:1. flooding 带来网络负担;2. 节点加入时比较复杂
- 层次式覆盖网络
- 介于集中式索引和洪泛查询之间的方法
- 每个节点或者是一个超级节点,或者被分配一个超级节点
- 节点和超级节点间维持 TCP 连接
- 某些超级节点对之间维持 TCP 连接
- 超级节点负责跟踪子节点的内容
- P2P案例应用:Skype【私有应用层协议】
- 本质上是 P2P 的:用户/节点对之间直接通信
- 采用层次式覆盖网络架构
- 索引负责维护用户名与IP地址间的映射
- 索引分布在超级节点上
2.7 Socket 编程
- 网络程序设计接口
- 应用编程接口 API (Application Programming Interface)
- 应用进程之间需要进行通信;
- 但数据不能直接交互,需要网络的下层进行传输,一般由操作系统实现;
- 应用进程和底层的交互需要接口;
- 应用编程接口 API:就是应用进程的控制权和操作系统的控制 权进行转换的一个系统调用接口.
- 几种典型的应用编程接口
- Berkeley UNIX 操作系统定义了一种 API,称为 套接字接口(socket interface),简称套接字(socket)。
- 微软公司在其操作系统中采用了套接字接口 API ,形成了一个稍有不同的 API,并称之为 Windows Socket Interface,WINSOCK。
- AT&T 为其 UNIX 系统 V 定义了一种 API,简写 为 TLI (Transport Layer Interface)。
- Socket API
- 最初设计:面向BSD UNIX-Berkley;面向TCP/IP协议栈接口【但事实上支持其他的协议栈】
- 目前,是事实上的工业标准;绝大多数操作系统都支持;
- Internet网络应用最典 型的API接口
- 通信模型:C/S【可以抽象成插头 hhh】
- 应用进程间通信的抽象机制
- 标识通信端点(对外):IP地址+端口号
- 操作系统/进程如何管理套接字(对内)?
- 套接字描述符(socket descriptor)
- 小整数
- Socket 抽象
- 类似于文件的抽象
- 当应用进程创建套接字时,操作系统分配一个数据结构存 储该套接字相关信息
- 返回套接字描述符
地址结构
Socket API函数
【略】
【目录】
- 域名服务(7.1)
- 主机名和域名
- 域名注册和管理
- 域名解析服务
- Internet域名和URL
- 传统应用(7.2)
- FTP
- WWW
域名服务(7.1)
- DNS(Domain Name System/Domain Name Service)被称为域名系统或域名服务,是一种组织成域层次结构的网络设备命名服务系统。
- DNS命名用于TCP/IP网络(或Internet),用来通过用户友好的名字定位网络设备和服务(资源)。
- 当用户在应用程序中输入DNS 名字时,DNS服务可以将此名字转换(或称解析)为与此名字关联的数字地址信息(如IP地址)。
主机名和域名
- 主机名的不足
- 平面名字,命名空间不足。
- “静态”名字方法,大型网络主机名管理和维护复杂。
- 集中式管理和维护,有网络通信瓶颈和可靠性问题。
- 域名的优势
- 命名的方便性和表意性。
- 扩展性。
- 管理性和维护性。
- 分布式实现。
域名注册和管理
- 参照域名体系一样的结构,在域名结构树中除叶子节点(主机)以外的节点处设立相应的域名管理机构和DNS管理服务器(也可委托上级进行)。
- 对应域名树的各级管理机构负责其下层域(主机或子域)的管理。
- 所属的主机(叶子)和子域(非叶子)必须向该管理机构进行域名注册,以便将其域名纳入该管理机构的管理范畴。
- 确保相同父节点下的子节点不出现重名,从而确保整个域名树中完全合格的域名FQDN(Fully Qualified Domain Name)不会出现重名
- 如果下一级注册的是一个(子)域,则该注册记录下一级管理该子域的DNS服务器的IP地址。
- 如果下一级注册的是一个主机,则该注册记录主机的的IP地址。
- 通过DNS服务器对域名的管理和DNS服务器之间的关系,确保从根服务器开始能搜索(解析)到所有注册过的主机域名的IP地址。
权威资源记录
- 域名注册就是由管理机构在管理该域的DNS管理服务器的数据库(或文本格式的区域文件)中添加一条不重复的域名到IP地址的映射记录,该记录相对缓存记录而言,被称为权威资源记录(Authoritative resource record)。有5项基本信息:
- Domain_name Time_to_live Class Type Value
- Domain_name:域或主机的名字。
- Time_to_live(TTL):在域名解析服务器中被缓存时的生命期(秒),如:86400(1天)或为60(1分钟)。
- Class:通常是IN,表示与Internet相关。
- Type:指出记录的类型,最重要的类型包括:SOA、A、MX、NS、CNAME、PTR、HINFO、TXT等。
- Value:记录的值。
域名解析服务
- 域名解析:客户端应用程序通过其解析器(resolver),使用DNS协议向本地DNS服务器递交域名,本地服务器返回域名对应的IP地址。
- DNS服务器逻辑上有两种:DNS管理服务器 vs DNS解析服务器。
- 域名解析过程需要多个DNS服务器进行配合、使用递归或迭代查找过程、通过多层Client/Server(基于TCP连接或UDP无连接)分布式实现。
- 本地DNS服务器接受本地客户端解析器的域名解析请求。
- 本地DNS服务器缓存中不能命中时,使用递归或迭代查找方法请求其它DNS服务器进行查找。(实践中,仅支持迭代)
- 本地DNS服务器返回最终解析结果给客户端解析器。
- 整个域名解析服务逻辑上就会形成一个域名解析树(递归或迭代),这个树和域名管理树很类似,但并不重叠。
递归和迭代查找过程
- 递归查找
- 本地DNS服务器向父DNS服务器(有时直接就向根DNS服务器)提出该域名解析请求,如同解析器向它发出解析请求一样……如此逐级请求,直至根DNS服务器。根DNS服务器则根据该域名的子域情况,逐级向该域名的子域DNS服务器提出该域名解析请求……直至该域名的DNS管理服务器。成功解析或直至最后失败的信息则沿着请求的路径递归返回,直至本地DNS服务器,最终由本地DNS服务器返回给最初提出申请的客户端解析器。递归查找是一个多层C/S的请求-应答结果过程。
- 迭代查找
- 本地DNS服务器向父DNS服务器(通常直接向根DNS服务器)发出迭代查找请求,此时父(或根)DNS服务器如果不能解析则不再负责返回域名解析结果,而是返回更接近结果的DNS服务器的IP地址指引。本地DNS服务器再向这个DNS服务器发出解析请求……直至该域名的DNS管理服务器。成功解析或直至最后失败的信息则直接返回给本地DNS服务器,并最后提交给最初提出申请的客户端解析器。迭代查找总是二层C/S的请求-应答过程。
- 递归查找和迭代查找的差异:每次请求-应答过程中返回的是解析结果还是查找解析结果的指引。由于递归查找会带来大量开销,实践中通常只有本地DNS服务器才支持递归查找。
DNS 协议
- DNS协议很简单
- 包括查找和回答报文,报文具有相同的格式。
- 报文是明文。
- 基本基于UDP,端口号53。
DNS 缓存策略
- 解析服务器将它所探知(如递归返回过程中)的域名解析信息(域名到IP地址的映射关系)缓存起来。这样,当域名解析请求(递归或迭代)经过这个解析服务器时,将能直接命中解析结果,从而返回。
- 缓存的TTL。
- 缓存益处
- 域名解析的高效性。
- 域名解析处理的分布性。
- 域名解析的可靠性。
- DNS安全性
- DDoS攻击
- 攻击管理数据库
- 攻击DNS缓存(DNS污染)
域名管理和解析总结
- 两方面独立的功能(统称DNS服务器):
- 要实现DNS域名解析,网络系统中必须至少设置一台服务器作为DNS的解析服务器,同时让客户端的DNS域名解析都指向这台服务器。
- 要实现本域及下级子域的管理,网络系统中必须至少设置一台服务器作为DNS的管理服务器,同时让上级域名管理服务器有关这个域的管理都指向这台服务器。
- DNS其它说明
- 进行TCP/IP数据通信的节点(包括服务器、客户机等)必须有唯一的IP地址,但不必有域名。
- 域名定义的不是地理界限,而是组织和管理界限。
- 域名和IP地址的对应关系并不只是一对一的,而可以是多对多的关系。
- Web站点托管。
- 以DNS实现负载均衡。
Internet 域名和 URL
- Internet域名
- 全球唯一性
- 命名、注册、管理和解析等服务需要统一和协调一致。
- 稀缺,好的域名具有非常大的商业价值。
- 顶级域以2种方式来划分(通用和地域)
- 国际域名:.com、.edu、.gov、.mil、.net、.org、.int; 以及 .tv、.cc、.info、.firm、.name等;
- .cn(国内域名)、.jp、.au、.uk、.hk等。
- 多语言域名或实名服务。
- URL(Uniform Resource Locator,统一资源定位器,或称[超]链接)
protocol: // host [:port] [/path] [/filename]
。
- E-mail(Electronic mail,电子邮件)是最早期的TCP/IP应用之一,以致于早期人们认为Internet就是E-mail。
- 相对传统的mail,E-mail具有速度快、经济、方便、功能强等无可比拟的优势。
- E-mail地址格式:user@hostname/domain name/IP地址,具有全球唯一性。
- Email初期只能传递ASCII信息,现在还可以用来传递二进制信息,包括带特殊格式的文本、非英文信息、可执行程序、图片、图像等。
email 体系结构
- E-mail的运行与现实生活中的邮件传送非常类似,E-mail系统使用C/S模型,它有2个基本部件:
- 邮件服务器(消息传递代理,MTA)
- 传递和管理若干用户的E-mail。
- 负责E-mail的收发传递,类似于邮局。
- 概念上可分为:发送服务器和接收服务器。真正的MTA应该只是发送服务器,接收服务器只是为用户提供访问的服务。
- 如Sendmail、MS-Exchange Server、Notes Domino Server等。
- 用户端E-mail程序(用户代理,UA)
- 用户访问邮件服务器(用户对邮件服务器的E-mail进行收发)和处理E-mail(如编写、阅读、管理等)的工具软件。
- 如Netscape mail、MS Internet mail(Outlook Express)、Eudora、Foxmail、The bat!等。
- 发送服务器也称SMTP服务器,接收服务器(邮件访问服务器)也称POP3服务器。
- UA对MTA或MTA对MTA都使用C/S方法。
发送/传递邮件的协议:SMTP(Simple Mail Transfer Protocol,RFC821)
- UA向MTA发送邮件、MTA之间传递邮件时使用SMTP协议。
- SMTP使用C/S方式、基于TCP连接,服务器使用TCP端口号25。
- 利用SMTP发送Email时,接收方(即服务器)在TCP的25号端口等待发送方来的信息:发送方向接收方发出连接要求,一旦连接成功,即进行邮件信息的交换,邮件传递结束后释放连接。
- SMTP以ASCII字符的命令-应答来实现C/S交互(14条命令和21种应答,共5个阶段)。
接收/检索邮件和邮箱操作协议:POP3(Post Office Protocol Version 3,RFC1460)
- UA通过C/S方式从MTA取邮件时通常使用简单的POP3协议。
- 和SMTP相似, POP3也基于TCP连接,服务器使用TCP端口号110。
- 利用POP3读取Email时,客户机(UA)向服务器(MTA)发送命令,服务器作出响应。命令-应答亦基于ASCII字符(4个阶段)。
- 特点:只要用户从POP3服务器读取了邮件,POP3服务器就默认把该邮件删除。
IMAP4(Interactive Mail Access Protocol Version 4,RFC1203)
- 一种联机邮件检索和邮箱操作协议,也基于TCP连接和C/S方式访问邮件。仍然需要专用的UA。
- IMAP邮件和邮箱的管理是在服务器端,因此它可以实现比POP3本地管理更多和复杂的功能。
- 可以在不同的地方使用不同的主机随时上网联机阅读和处理自己的邮件,在移动终端环境下非常合适。
Web mail
- 功能和特点与IMAP方式类似,但基于WWW,不需要专用的UA,而是通用的浏览器。
邮件格式
- 基本的ASCII邮件格式标准:822格式(RFC822)
- 822格式的邮件实际上是一个ASCII可打印文本(7位编码,字节的最高位为0)文件,格式定义了邮件的头(如From:、To:、CC:、Reply-To:、Subject:等)和内容。
- 非ASCII邮件(中文、HTML格式、附件等)扩展标准:MIME(Multipurpose Internet Mail Extension,RFC2045~2049)
- 扩展了基本邮件头部,包含了MIME的关键字。
- 通过重新编码(base64),将8位代码编码为ASCII可打印文本,以利用822格式扩展定义非ASCII邮件。有3种方式:
- 7bit:不转换
- quoted-printable:用于只有少量的非ASCII字符的情况。把非ASCII可打印字符转换成”=”+字节的16进制大写英文ASCII字符(”=“转义编码为”=3D”)。(编码效率只有3/1)
- base64:多数情况下使用。先把3个字节排列成24比特,然后每6比特为一组变成4组。6比特对应的64个值依次用字符A~Z、a~z、0~9、+和/表示并使用该字符的ASCII编码。这样每3个字节就编码转换成了4个ASCII可打印字符。(编码效率只有4/3)
FTP
- FTP(File Transfer Protocol,文件传输)是TCP/IP上实现文件从一个计算机系统复制到另一个计算机系统(即使是异构的)的过程。
- FTP基于TCP采用C/S方式,用户端使用FTP客户程序和远程FTP服务器相连。下载过程:用户输入FTP命令,要求FTP服务器传送一个指定的文件,FTP服务器响应该命令,并传送这个文件;用户的FTP客户程序接收这个文件,并把它存入用户指定的目录中。上传过程相反。
- FTP有两种工作模式:主动模式和被动模式,这两种模式对应FTP中建立TCP连接的两种不同方式。
- 主动模式的 FTP 指服务器主动连接客户端的数据端口(常用),被动模式的 FTP 指服务器被动地等待客户端连接自己的数据端口(防火墙等内部网络的客户端)。
- 【在主动模式下,客户端用 1024 以上的一个端口 N 向服务器 21 号端口发送 FTP 连接请求,并指明其数据接收端口 PORT(一般为 N+1),客户端的 20 端口向该 PORT 发送 TCP 连接请求建立数据通道。而在被动模式下,客户机一般在防火墙内,一般防火墙设置不允许墙外的主机发起 TCP 连接,因此只能客户机主动向服务器发起连接;因此,客户机在用端口 N 向服务器的 21 端口发送 FTP 请求时指明模式为 PASV;此时服务器另外开放一个大于 1024 的端口 P 进行监听(并将该端口发信息发送给客户机);客户机收到用从 N+1 号端口向服务器的 P 端口发起 TCP 连接请求。】
- 会话期间,建立并使用唯一的控制连接。
- 文件传输时,使用不同的数据传输连接。
TFTP和匿名FTP
- 简单文件传输TFTP(RFC 1350)是FTP的简化版本,也使用C/S方式实现,但使用UDP。
- 需要有自己的差错改正机制。
- 不支持交互,没有庞大的命令集和目录列表功能,也不能对用户进行身份鉴别。
- 协议实现代码占用的空间较小,非常适合固化。对一些小型设备非常合适,比如这些小型设备软件升级时作为TFTP客户方下载升级文件,或者无盘工作站引导或安装操作系统时通过TFTP来获得操作系统映像。
- TFTP工作过程很像停等协议,数据传输的UDP数据报中是固定的512字节数据(当接收进程收到小于512字节数据的UDP数据报时,就知道文件传输结束了)。
- FTP中除了通常授权(有FTP帐户)用户外,一般也允许匿名(没有帐户)用户进行访问:其目的是实现开放、共享的文件传输服务,如提供共享文件给无限制的用户下载。
WWW
- 万维网WWW(World Wide Web,世界范围的蜘蛛网、全球信息网),或称Web,中文为“环球网”、“万维网”。
- 九十年代初从欧洲粒子物理研究中心(CERN)发展起来的一种Internet信息浏览技术(开发者Tim获2016年图灵奖),其最初的目的是使科研工作者能很容易地翻阅同行们的文章。
- WWW是一种功能强大、灵活、用户使用方便的应用层技术,是Internet应用最为广泛的信息浏览服务模式。
- WWW支持多媒体信息,它使Internet变得多姿多彩,应用、用户迅速扩大;使Internet得到了极其巨大的发展;曾经80%以上TCP/IP通信量是WWW应用。
- World Wide Wait? World Wide Worry? World Wide Waste?
- 从信息提供者(服务方)来说,WWW使信息的统一组织、管理变得极为容易:建立一个提供信息服务的Web服务器,按照各种恰当的方式组织、存储提供服务的信息,信息之间通过超链接(Hyperlink,即URL)关联起来(正是超链接构建了一个逻辑上的全球蜘蛛网)。
- 从信息使用者(访问方/用户)来说,WWW使信息的使用(查找、浏览、裁剪、复制等)变得极为方便:用户只要拥有一个标准的浏览器(Browser),就可以访问和使用各种提供WWW服务的Web服务器上的信息。
- WWW不仅提供超文本信息,还包括超媒体信息(如:声音、照片、动画、影像等)。
- WWW的信息使用(浏览器操作)极其简单,鼠标“一点即得”(Just click on it)。
- WWW 服务模型
- WWW的服务模型,即浏览器-服务器(Browser/Server,B/S)模型,也称为瘦客户机模型。本质上是Client/Server的工作方式:Client-Browser,Server-HTTPD。
- WWW实现了一个分布式、跨平台、超文本和超媒体、灵活且强有力的基本信息服务模型。
WWW 成功的三个标准
- URL(Uniform Resource Locator,统一资源定位器,即超链接Hyper Link)
- 浏览器通过URL定位资源(WWW服务器),并使用URL向服务器发出请求。
- HTTP(Hyper Text Transfer Protocol,超文本传输协议)
- WWW服务器和浏览器之间通过HTTP传递信息。
HTML(Hyper Text Markup Language,超文本标记语言)
- 信息以HTML编写,服务器以HTML编写的内容应答浏览器的请求,浏览器把HTML格式控制的信息显示在用户屏幕上。
WWW 服务器
- 也称Web服务器(Web Server),即俗称网站(Web Site)。
- 接受Browser的URL请求,返回HTML输出应答(使用HTTP协议)。
- 技术上也可叫HTTP服务器,因为它主要由监控HTTP服务端口(缺省号80)、处理HTTP协议的应用服务进程(HTTPD-HTTP Daemon)构成。
- 大型的网站通常需要面对大量的并发访问者,仅仅实现HTTP协议是远远不够的,还需要很多分布式、并行处理和负载均衡方法。著名的Web服务器软件如MS-IIS、Netscape-Enterprise Server、Apache Server等。
WWW 浏览器
- 浏览器(Browser):客户端(用户)获取信息的软件
- 发出URL请求,接受HTML返回(使用HTTP协议)。
- HTML的解释器(字体、表格、图像等)和内嵌代码执行容器。
- 浏览器极大地简化了WWW客户端的应用软件--瘦客户机。
- WWW的发展和浏览器的进步是紧密相关的:
- 1993年,NCSA(National Center for Supercomputing Applications)的Marc Andressen开发了第一个现代意义上的浏览器:Mosaic。(第一个初级浏览器是Tim开发的Nexus)
- 1993年,Jim Clark和Marc Andressen创建Mosaic通信公司 - 1994年,更名为Netscape通信公司(曾经非常成功) - 1998年,被AOL Time-Warner收购(但看中的是其NetCenter网站)。
- Mosaic Browser - Netscape Navigator - Netscape Communicator。
- 1996年,Microsoft发现了Internet和浏览器的价值,强力介入浏览器市场,推出免费IE(Internet Explorer)。
- 目前其它的浏览器如Opera、Chrome、Firefox、Safari、360等等(看中的是用户入口)。
浏览器和服务器拓展
- 为了满足各种新型应用(特别是一些交互应用),人们在浏览器端和服务器端进行了一些扩展。
- 浏览器端扩展相对比较标准,因为需要各种浏览器都支持这些扩展。这些扩展基本上以HTML内嵌浏览器端执行的解释型代码的形式,如Java applet、Javascript、Plug-in、Active-X等,一般浏览器有这些代码的执行环境,也就能实现这些扩展。
- 服务器端的扩展就很多样。因为从WWW模型只要求服务器能接收URL请求,返回HTML响应就可以了(基于HTTP协议的),对WWW服务器本身如何实现并没有多少要求。它并没有要求服务器上只能是静态的HTML页面文档,因此服务器就可以动态生成HTML输出作为页面来响应。
服务器拓展:三层 CS 结构
- WWW服务器是进行应用事务处理的胖服务器,意味着可以也需要进行大量的扩展。这些动态HTML输出扩展有很多方法和实现途径,且对用户来说是透明的。
- 早期的CGI(Common Gateway Interface)方法。
- 后来的ASP(Active Server Page,MS-IIS)、JSP(Java Server Page)。
- 现在针对业务应用开发所使用的应用/事务服务器,如IBM Websphere、MS Transaction Server等。
HTTP
- HTTP是用于WWW客户机和服务器之间进行信息传输的请求-应答类型应用层协议。HTTP本身是无连接的,它使用运输层有连接的TCP(端口号80)来保障传输可靠性。
- HTTP是无状态的,服务方不保留以前的请求或会话的历史记录。早期的HTTP(0.9和1.0)即使同一个页面中不同的请求使用不同的TCP连接,现在的HTTP(1.1)引入持续连接作为默认的行为,这时客户机和服务器保持已经建立的连接,多次交换请求-应答信息,直到有一方明确终止这个连接(即使有持续连接,HTTP仍然是无状态的协议,服务器在不同的请求之间不保留任何信息)。
HTTP非持续连接和持续连接
- 持续连接在一个页面中有许多内嵌链接对象时很有价值。
- 持续连接包括非流水线和流水线两种工作方式。
HTTP多重请求-响应链
- HTTP/1.1还支持双向连接、大块编码、字节范围操作、内容协商、摘要鉴别、高速缓存和代理服务等。
- 通过代理服务器(Proxy Server)的请求-响应链
HTTP 请求报文格式
- HTTP报文都是基于ASCII文本的。请求报文:
- 请求行
- 头部行
- 实体主体
HTTP 响应报文格式
- 响应报文:
- 状态行
- 头部行
- 实体主体
Web Service
- Web Service通过轻量级的、与厂商无关的通信协议从其它系统跨网络接受标准格式的远程调用请求来访问WWW服务并实现交互,以充分发挥B/S的优势。它是一种基于XML的分布式计算技术和中间件技术,是一种松散耦合的、面向服务的架构(SOA),是建立可互操作的分布式应用程序的平台方法。
传输层
3.1 传输层服务
- 理解传输层服务的基本理论和基本机制
- 复用/分用
- 可靠数据传输机制
- 流量控制机制
- 拥塞控制机制
- 掌握Internet的传输层协议
- UDP:无连接传输服务
- TCP:面向连接的传输服务
- 传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制
- 端系统运行传输层协议
- 发送方:将应用递交的消息分成一个或多个的Segment,并向下传给网络层。
- 接收方:将接收到的segment组装成消息,并向上交给应用层。
- 可靠、按序的交付服务(TCP)
- 拥塞控制
- 流量控制
- 连接建立
- 不可靠的交付服务(UDP)
- 基于“尽力而为(Best-effort)”的网络层 ,没有做(可靠性方面的)扩展
- 两种服务均不保证
- 延迟
- 带宽
3.2 多路复用和多路分用
3.3 UDP
- UDP: User Datagram Protocol [RFC 768]
- 常用于流媒体应用
- 容忍丢失
- 速率敏感
- 基于Internet IP协议
- 复用/分用
- 简单的错误校验【端到端的错误校验】
- UDP还用于
- DNS
- SNMP
- UDP 优势
- 无需建立连接,延迟小
- 实现简单,无需维护连接状态
- 头部简单(UDP 头部 8B,而 TCP 有 20B)
- 没有拥塞控制: 应用可更好控制发送时间和速率
- 在UDP上实现可靠数据传输?【应用层实现】
- 在应用层增加可靠性机制
- 应用特定的错误恢复机制
TCP 格式
UDP校验和(checksum)
- 目的:检测UDP段在传输中是否发生错误(如位翻转)
3.4 可靠数据传输 rdt
- 可靠数据传输原理
- 不错、不丢、不乱
- 可靠数据传输对应用层、传输层、链路层 都很重要
- 网络Top-10问题
- 信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性
【以下渐进地设计可靠数据传输协议的发送方和接收方。利用状态机(Finite State Machine, FSM)刻画传输协议。】
Rdt 1.0: 可靠信道上的可靠数据传输
- 底层信道完全可靠
- 不会发生错误(bit error)
- 不会丢弃分组
- 发送方和接收方的FSM独立
- 底层信道完全可靠
Rdt 2.0: 产生位错误的信道
- 底层信道可能翻转分组中的位(bit)
- 利用校验和检测位错误
- 如何从错误中恢复?
- 确认机制(Acknowledgements, ACK): 接收方显式地告知发送方分组已正确接收
- NAK:接收方显式地告知发送方分组有错误
- 发送方收到NAK后,重传分组
- 基于这种重传机制的 rdt 协议称为 ARQ(Automatic Repeat reQuest)协议
- Rdt 2.0 中引入的新机制
- 差错检测
- 接收方反馈控制消息: ACK/NAK
- 重传
- 【总结:采用的是停等机制,发送消息后等待确认。】
- 底层信道可能翻转分组中的位(bit)
- Rdt 2.0有什么缺陷?
- 如果ACK/NAK消息发生错误/被破坏(corrupted)会怎么样?
- 为ACK/NAK增加校验和,检错并纠错
- 发送方收到被破坏ACK/NAK时不知道接收方发生了什么,添加额外的控制消息 【注意到,不能简单添加额外的控制消息——因为控制消息也可能出错。】
- 如果ACK/NAK坏掉,发送方重传 【所以采用重传机制】
- 不能简单的重传:产生重复分组
如何解决重复分组问题?
- 序列号(Sequence number): 发送方给每个分组增加序列号
- 接收方丢弃重复分组
Rdt 2.1: 应对ACK/NAK破坏
- 发送方:
- 为每个分组增加了序列号
- 两个序列号(0, 1)就够用,为什么?【因为是停等协议,在接受到确认消息前不会发送下一个状态的消息。】
- 需校验ACK/NAK消息是否发生错误
- 状态数量翻倍
- 状态必须“记住”“当前”的分组序列号
- 接收方
- 需判断分组是否是重复
- 当前所处状态提供了期望收到分组的序列号
- 注意:接收方无法知道 ACK/NAK 是否被发送方正确收到
- 需判断分组是否是重复
- 发送方:
【下图中,引入了序列号,不过只用了 2 个序列号。(注意这一模型中只会出现数据出错而不会丢失。)】
对于发送方来说,若接受到 ACK,则从一个状态转换到另一个状态。若接受到 NAC 或者接受的 response 错误,则进行重传。
对于接收方来说,状态数也增多了(分别等待状态为 0 或 1 的分组)。
若成功接收消息(并且序列号正确),则发送 ACK,并转入另一个状态。
若接收消息出错,则发送 NAK 消息。
若接受消息正确,但序列号出错,注意到这里发送的 ACK 消息。因为这说明上一次发送的 ACK 消息出错,发送方进行了重传,因此接收方需要重新发送上一个状态的 ACK 消息。
- Rdt 2.2: 无 NAK 消息协议
- 我们真的需要两种确认消息(ACK + NAK)吗?
- 与rdt 2.1功能相同,但是只使用ACK
- 如何实现?
- 接收方通过ACK告知最后一个被正确接收的分组
- 在ACK消息中显式地加入被确认分组的序列号
- 发送方收到重复ACK之后,采取与收到NAK消息相同的动作
- 重传当前分组
【总结:NAK 的目的是为了让发送方知道发送出错;而当引入了状态之后,这一消息类型可以省略,因为只需对于上一状态进行确认,发送方就知道接收方并未正确接收。】
- Rdt 3.0
- 如果信道既可能发生错误,也可能丢失分组,怎么办?
- “校验和 + 序列号 + ACK + 重传” 够用吗?
- 方法:发送方等待“合理”时间
- 如果没收到ACK,重传
- 如果分组或ACK只是延迟而不是丢了
- 重传会产生重复,序列号机制能够处理
- 接收方需在ACK中显式告知所确认的分组
- 需要定时器
- 如果信道既可能发生错误,也可能丢失分组,怎么办?
【注意到,由于采用了「停等协议」,即使计时器设定过短,导致接收到的 ACK 序号错乱,这里的 rdt3.0 也是可以正常工作的:如下图中右上角所示,当发送方接收到一个序号出错的 ACK 消息时,说明是上一个状态重复接收到的消息,这时什么都不做。
(注意,这里考虑的似乎是下层传输通道可能出现 bit error 或者是丢包,但不考虑乱序的情况。而在乱序情况下仅设置两个状态好像是有可能出错的。)】
【然而,rdt3.0 还是有问题的:性能问题。由于采用「停等协议」,至少要等待一个 RTT 才能发送一个 packet。】
3.5 滑动窗口协议
- 流水线机制与滑动窗口协议
- 流水线机制:提高资源利用率
- 流水线协议
- 允许发送方在收到ACK之前连续发送多个分组更大的序列号范围
- 发送方和/或接收方需要更大的存储空间以缓存分组
- 滑动窗口协议: Sliding-window protocol【流水线协议需要使用滑动窗口协议】
- 窗口
- 允许使用的序列号范围
- 窗口尺寸为N:最多有N个等待确认的消息
- 滑动窗口
- 随着协议的运行,窗口在序列号空间内向前滑动
- 滑动窗口协议:GBN, SR
GBN 回退 N
- Go-Back-N 协议
- 分组头部包含k-bit序列号
- 窗口尺寸为N,最多允许 N 个分组未确认
- ACK(n): 确认到序列号n(包含n)的分组均已被正确接收
- 可能收到重复 ACK
- 为空中的分组设置计时器(timer)
- 超时 Timeout(n) 事件: 重传序列号大于等于n,还未收到ACK的所有分组
【看下面的上面那个状态:if 语句判断滑动窗口是否有空余,若滑动窗口已满则拒绝发送,否则发送 packet 并启动计时器。
若计时器到时,则重新发送已确认 packet 之后的所有 packet(右边的 base)。
若接收到正确的 packet,则对 base 进行更新,并重启计时器。】
- 接收方
- ACK机制: 发送拥有最高序列号的、已被正确接收的分组的ACK
- 可能产生重复 ACK
- 只需要记住唯一的 expectedseqnum
- 乱序到达的分组:
- 直接丢弃 - 接收方没有缓存
- 重新确认序列号最大的、按序到达的分组
- 【注意到,在 GBN 的接收方没有缓存机制,也就是说如果出现了乱序到达的分组会选择直接丢弃。 —— 因此,可能出现资源的浪费。】
- ACK机制: 发送拥有最高序列号的、已被正确接收的分组的ACK
SR 选择重传
- Selective Repeat 协议
- GBN有什么缺陷?
- 接收方对每个分组单独进行确认
- 设置缓存机制,缓存乱序到达的分组
- 发送方只重传那些没收到ACK的分组
- 为每个分组设置定时器【BTN 中简单只设置了一个计时器】
- 发送方窗口
- N个连续的序列号
- 限制已发送且未确认的分组
- 接收方对每个分组单独进行确认
【来看一个例子:注意在右侧接收方的最后一步中,之前已发送了 0 1 3 4 5 的 ACK 而 packet2 出现丢失,当其收到接收方重传的 packet2 时,发送 packet2 的 ACK 并向右移动滑动窗口。
左侧发送方的最后一个状态:其接收到了 0 1 3 4 5 的 ACK,但是尚未接收到 packet2 的 ACK,因此此时并不能发送包,要等到接收到 2 的 ACK 之后才能移动滑动窗口。】
【注意到,若序列号的数量过少,则循环序列号的过程中可能出现问题,例如上图中 a 和 b 两种情况下,接收方无法区分是第 1 个 packet 的重传还是发送的第 5 个 packet。
事实上,要避免这一问题,可以采用上面的那个不等式,也即序列号的空间要大于接收方和发送方的滑动窗口之和。】
3.6 TCP
- 概述
- 点对点
- 可靠、按序的字节流
- 流水线机制
- TCP 拥塞控制和流量控制
- 设置窗口尺寸
- 发送方接收方缓存
- 全双工
- 面向连接
- 流量控制机制
- TCP 段结构
- 序列号
- 注意序列号指的是segment中第一个字节的编号, 而不是segment的编号
- 建立TCP连接时,双方随机选择序列号
- ACK
- 希望接收到的下一个字节的序列号
- 累计确认:该序列号之前的所有字节均已被正确接收到【类似 GBN】
- Q: 接收方如何处理乱序到达的Segment?
- A: TCP规范中没有规定,由TCP的实现者做出决策
TCP 可靠传输
TCP 可靠传输
- 流水线机制
- 累计确认
- 使用单一重传定时器
- 触发重传的事件
- 超时
- 收到重复ACK
- 【这里暂不考虑重复 ACK,以及流量控制和拥塞控制】
如何设置定时器?
- RTT,所以需要估计 RTT
- SampleRTT: 测量从段发出去到收到ACK的时间(忽略重传)
- EstimatedRTT:测量多个SampleRTT,求平均值 ,形成RTT的估计值
- \(EstimatedRTT = (1- \alpha )*EstimatedRTT + \alpha *SampleRTT\)
- 指数加权移动平均
- 典型值:0.125
- 测量RTT的变化值: SampleRTT与EstimatedRTT的差值
- \(DevRTT = (1- \beta)*DevRTT +\beta *|SampleRTT-EstimatedRTT|\)
- 典型值:0.25
- 定时器超时时间的设置(考虑估计的 RTT 和其变化情况)
- \(TimeoutInterval = EstimatedRTT + 4*DevRTT\)
- RTT,所以需要估计 RTT
发送方
- 从应用层收到数据后,创建 Segment,序列号是 Segment 第一个字节的编号;开启计时器;设置超时时间 TimeOutInterval
- 超时:重传引起超时的Segment;重启定时器
- 收到 ACK:如果确认此前未确认的Segment,则更新 SendBase;如果窗口中还有未被确认的分组,则重新启动定时器。
快速重传机制
- TCP的实现中,如果发生超时,超时时间间隔将重新设置,即将超时时间间隔加倍,导致其很大。重发丢失的分组之前要等待很长时间
- 方案:通过重复ACK检测分组丢失
- 如果sender收到对同一数据的 3 个ACK,则假定该数据之后的段已经丢失
- 快速重传:在定时器超时之前即进行重传
TCP流量控制
- flow control【速度匹配机制】
- 发送方不会传输的太多 、太快以至于淹没接收方(buffer溢出)
- 上层应用可能处理 buffer中数据的速度较慢
- 【主要的思想就是,接收方维护一个 RcvWindow,反馈给接收方。】
- 【另外,下图中的问题,如果接收方收到 RcvWindow=0,不会完全停止发送,而是仍然可以发送一些小的包。】
TCP连接管理
- TCP sender和receiver在传输数据前需要建立连接
- 初始化
- Seq. #
- Buffer和流量控制信息
- Three way handshake 三次握手
- Step 1: client host sends TCP SYN segment to server
- specifies initial seq.#
- no data
- Step 2: server host receives SYN, replies with SYNACK segment
- server allocates buffers 注意需要分配 buffer 等资源
- specifies server initial seq.#
- Step 3: client receives SYNACK, replies with ACK segment, which may contain data
- Step 1: client host sends TCP SYN segment to server
- 初始化
- 关闭
【看这张图上客户端的关闭阶段:1. 发送 FIN,进入第一个等待阶段;2. 收到服务器的 ACK 和 FIN,说明服务器已收到 FIN 字段,客户端回一个 ACK 字段声明「我已经知道你收到了」;3. 在两个等待阶段之后(分别等待 ACK 和 FIN),还会等待一段的时间,防止接收方因未收到客户端最后的 ACK 而重复发送 FIN 段(若收到重复的 FIN 则会重新发送 ACK)。
再看服务端也是类似的,在收到 FIN 之后,服务端发送 ACK 之后会等待一段时间,以确认客户端已收到自己发送的 ACK FIN。然而,联系「将军问题」知道双方的等待是无止尽的,因此只需要等待一段时间即可。】
3.7 拥塞控制原理
- 拥塞(Congestion):非正式定义:“太多发送主机发送了太多数据或者发送速度太快 ,以至于网络无法处理”
- 表现为
- 分组丢失(路由器缓存溢出)
- 分组延迟过大(在路由器缓存中排队)
- 【不同的对于分组丢失的解决:在可靠数据传输中,我们解决的「私人利益」;而在拥塞控制中,要考虑「公共利益」,防止公路堵车。】
- 拥塞控制 vs. 流量控制 【两者是不同的,拥塞控制是不要让网络无法处理,而流量控制是不要让接收方来不及接收】
- A top-10 problem.
- 表现为
案例/场景
- 路由器无限 buffer
- 其处理分组是有最高额度的,当分组 input 越来越大时,分组延迟不断增加;
- 拥塞代价一:分组延迟
- 路由器 buffer 有限
- 情况a: Sender能够通过某种机制获知路由器buffer信息,有空闲才发。这是不会有重复的分组转发;
- 情况b: 丢失后才重发。这是有重复分组;
- 情况c:分组丢失和定时器超时后都重发。这是重复分组的概率更高;
- 拥塞代价二:重复分组,造成资源的浪费
- 上面是单个路由器,这里考虑多跳
- 拥塞代价三:当分组被drop时,任何用于该分组的“上游”传输能力全都被浪费掉(上游路由器对该分组的存储转发都无效了)
- 路由器无限 buffer
拥塞控制方法
- 端到端拥塞控制
- 网络层不需要显式的提供支持
- 端系统通过观察 loss,delay 等网络行为判断是否发生拥塞
- TCP 采用这一方式
- 网络辅助的拥塞控制:
- 路由器向发送方显式地反馈网络拥塞信息
- 简单的拥塞指示(1bit):SNA, DECbit, TCP/IP ECN, ATM)
- 指示发送方应该采取何种速率
- 端到端拥塞控制
案例:ATM ABR拥塞控制
- ABR:available bit rate
- 「弹性服务」
- 如果发送方路径 “underloaded”,则使用可用带宽
- 如果发送方路径拥塞,则将发送速率降到最低保障速率
- RM(resource management) cells
- 发送方发送【在 data cells 之间发送】
- 交换机设置RM cell位(网络辅助)
- NI bit: rate不许增长
- CI bit: 拥塞指示
- RM cell由接收方返回给发送方【RM cell 随着路由器发送到接收方,图中的路由器可修改 NI 和 CI bit,最终由接收方反馈给发送方】
- 【这是通过接收方发送控制信息给发送方,还有的机制是路由器直接发送给发送方。】
- ABR:available bit rate
3.8 TCP 拥塞控制
- 三个问题
- 如何控制发送速率?
- \(LastByteSent - LastByteAcked <= CongWin\)
- \(rate ≈ CongWin / RTT\)
- 【联系流量控制,设置一个拥塞窗口】
- 如何感知网络拥塞?
- Loss事件 = timeout或3个重复 ACK
- 发生loss事件后,发送方降低速率
- 【联系流量控制,通过观察是否出现丢包】
- 如何合理地调整发送速率?
- 加性增—乘性减: AIMD
- 慢启动: SS
- 如何控制发送速率?
加性增—乘性减: AIMD
- 原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss
- Additive Increase: 每个 RTT 将 CongWin 增大一个 MSS——拥塞避免
- Multiplicative Decrease: 发生 loss 后将 CongWin 减半
- 锯齿行为: 探测 可用带宽
TCP慢启动: SS
- TCP连接建立时, CongWin=1
- 例:MSS=500 byte, RTT=200msec;则此时 初始速率=20k bps
- 然而,可用带宽可能远远高于初始速率;因此,希望能快速增长
- 原理:当连接开始时,指数性增长
- 每个RTT将CongWin翻倍
- 收到每个ACK进行操作
初始速率很慢,但是快速攀升
Threshold变量
- Q: 何时应该指数性增长切换为线性增长(拥塞避免)?
- A: 当CongWin达到Loss事件前值的1/2时.【也就是说,变化的阈值 Threshold 要基于上一次出现拥塞时的拥塞窗口大小】
- 实现方法:
- 变量 Threshold
- Loss事件发生时, Threshold被设为Loss事件前 CongWin 值的1/2。
【如上图,TCP 不同的版本给出了两种策略:
在 Tahoe 中,直接将拥塞窗口减小为 1;在 Reno 中,将拥塞窗口减小为更新后的 Threshold(即发生拥塞时的拥塞窗口的一半)。】
Loss事件的处理(两种)
- 3个重复ACKs:
- CongWin切到一半
- 然后线性增长
- Timeout事件:
- CongWin直接设为1个 MSS
- 然后指数增长;达到threshold后, 再线性增长
- 原因:3个重复ACKs表示网络还能够传输一些 segments(因此采用 Reno 策略);timeout事件表明拥塞更为严重(因此直接采用 tahoe)
- 3个重复ACKs:
总结
- When CongWin is below Threshold, sender in slow-start phase, window grows exponentially.
- When CongWin is above Threshold, sender is in congestion-avoidance phase, window grows linearly.
- When a triple duplicate ACK occurs, Threshold set to CongWin/2 and CongWin set to Threshold.
- When timeout occurs, Threshold set to CongWin/2 and CongWin is set to 1 MSS.
TCP 性能
- TCP throughput: 吞吐率
- 给定拥塞窗口大小和RTT,TCP的平均吞吐率是多少?
- 假定发生超时时CongWin的大小为W,吞吐率是W/RTT
- 超时后,CongWin=W/2,吞吐率是W/2RTT
- 平均吞吐率为:0.75W/RTT
TCP的公平性
- 公平性?
- 如果K个TCP Session共享相同的瓶颈带宽R,那么每个Session的平均速率为R/K
- 因此,TCP 是公平的
- 公平性与UDP
- 多媒体应用通常不使用TCP,以免被拥塞控制机制限制速率
- 产生了不公平
- 研究:TCP friendly
- 公平性与并发TCP连接
- 某些应用会打开多个并发连接。例如Web浏览器
- 产生公平性问题
3.9 传输层总结
- 传输层服务的基本原理
- 复用分用(解复用)
- 可靠数据传输
- 流量控制
- 拥塞控制
【目录】
- 运输服务(6.1)
- 概述、服务质量、寻址和复用
- TCP(6.2)
- 协议格式、连接管理、可靠传输、流量控制、拥塞控制、计时器、其它探讨
- UDP和RTP(6.3)
- UDP
运输服务(6.1)
(端到端)运输服务
- 运输层承上启下,连接高层应用和低层传输网络,通过低层网络为高层应用提供端到端运输服务。
- 运输服务让用户应用独立于所使用的低层网络,从而使低层网络对端用户透明。
- 运输服务简单、统一、标准。通过服务让用户应用有了一个简单一致使用低层网络的途经。
- 运输服务可以比网络服务更可靠。屏蔽了网络服务质量的差异。
- 运输服务支持多个用户对网络服务的复用。
- 运输层提供两种类型的服务:可靠的面向连接和不可靠的无连接的运输服务。(根据应用要求选择)
- 运输层是第一个端对端(面向用户、应用),也就是主机(进程)到主机(进程)的层次。
运输层结构和功能
- 服务是通过运输实体来提供的
- 运输实体:运输服务提供者,用户进程:运输服务用户
- 通常用户使用运输服务原语(如Unix的Socket或Windows的Winsock)访问服务。
服务质量
- 运输层弥补了网络层的服务质量的缺陷,运输服务质量(QoS)衡量了运输层的总体性能。
QoS参数
- 连接建立延迟
- 连接建立失败概率
- 吞吐量
- 传输延迟
- 残留差错率
- 保护性
- 优先权
- 回弹率
服务质量协商
- 通过QoS协商,源端和目的端的运输用户间达成一致。
寻址和复用
- 寻址:运输服务访问点--TSAP
- 如TCP的端口和端口号。
- 多路复用:通过寻址区分,多个运输服务用户使用同一个运输协议和运输实体。
- 两种复用形式。
TCP(6.2)
TCP(Transmission Control Protocol)
【小结】
- 连接控制
- 可靠传输
- 以字节为单位的 滑动窗口【可以防止流量淹没接收方?】
- 选择重传:需要维护一个 重传计时器,和往返时间有关,还考虑了链路上 RTT 的变动情况,最终的 Timeout = EstimatedRTT + 4*Deviation
- 【另外,TCP 利用了选择确认机制 SACK 以避免重复传输,提高网络利用率】
- 流量控制:流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
- 滑动窗口本质上是描述接受方(本地)的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据。
- 可能出现两个问题:1. 发送方发送小数据;2. 接收方应用程序每次读取小数据后即发送窗口信息。小窗口问题和傻瓜窗口问题;解决的方案分别是 Nagle 算法和 Clark 解决方案。
- 拥塞控制 congestion
- 网络层也有拥塞控制 ICMP 消息。但是直接通过传输层控制发送速度会更好。
- 慢启动 slow-start 和 拥塞避免 Congestion avoidance 策略。
- 有一个 慢启动阈值 ssthresh,当拥塞窗口低于此阈值是为慢启动,大于时则为拥塞控制阶段。
- 当需要重传的时候(检测到拥塞),ssthresh 减半,congwindow 变出初始的 1MSS。
- 空闲一段时间后,congwindow 也重置为 1MSS。
其他计时器
- 除了之前提到的重传计时器,还有计时器
- 持续计时器:在流量控制中提到接收方可能发送接收窗口=0,之后再更新接收窗口>0的报文段,若该条报文段丢失则发送方不能发送——因此接收方在发送窗口=0 的报文段的时候启动这个计时器,超时重传
- 保活计时器:连接空闲一段时间后,防止对方可能崩溃了
传输控制协议(TCP)在不可靠的网络服务上为应用层提供面向连接的、端到端的可靠字节流服务。即TCP在不可靠的IP网络上构建一条端到端全双工的可靠逻辑传输信道。
- 面向连接
- 在进行数据传输时首先必须建立一条运输连接,数据传输完成之后把连接释放掉。
- TCP连接标识
- 套接字(Socket):主机的IP地址和一个16比特的端口号(Port)
- 255以下:assigned protocol numbers( public apps);
- 256~1023: well-known (saleable application)
- 一条TCP连接是由发送方套接字和接收方套接字来唯一标识的,即TCP连接用四元组
<源端IP地址、源端口号、目的IP地址、目的端口号>
来唯一标识。
- 端到端
- 连接是点到点的,不支持组播、广播。
- 面向字节流
- 从高层接收用户数据时不保留边界,看成一个一个的字节,每个字节都有一个顺序号。
- 其他特征
- 连接是全双工的
- 可以进行捎带确认;
- 可以关闭某个方向的连接。
- 支持数据缓冲和立即发送
- PUSH机制要求不缓冲,尽快地把数据递交给对方。
- 提供紧急数据功能
- 紧急数据比正常数据优先发送和递交。
- 连接是全双工的
- 面向连接
TCP格式
- TCP PDU称为TCP报文段/数据段(Segment),由一个20字节的基本头部、一个可选部分(最多40字节)、和一个用户数据部分组成。
- TCP格式字段
- 源端口号(Source Port,16比特)和目的端口号(Destination Port,16比特):分别表示发送方和接收方的端口号;
- 顺序号(Sequence Number,32比特):该TCP段中携带的用户数据中第一个字节的编号,编号是以字节为单位的;
- 确认号(Acknowledgment Number,32比特):对确认号之前的数据已可靠收到的确认,即下一个期望接收的字节的顺序号;
- 数据偏移(Data Offset,4比特):指示TCP数据开始的位置,也即TCP头部长度,以32比特为单位(4B)。
- 保留(Reserved,6比特)
- 控制标志(Control Bits,6比特)
- URG:紧急数据标志
- ACK:确认字段有效标志
- PSH:要求马上发送数据
- RST:对TCP连接进行复位
- SYN:建立TCP连接
- FIN:连接释放
- 窗口大小(Window Size,16比特):指示接收方滑动窗口的大小,用于实现TCP流量控制和差错恢复。
- 校验和(Checksum,16比特):实现对TCP报文段的校验。在计算校验和时包括TCP头部、用户数据以及一个TCP伪头部。
- 伪头部格式【注意其违反了协议分层独立性,因为利用了 IP 地址也就是网络层的地址】
- 校验和的计算:所有16位字以补码形式相加,然后对和取补。
- 紧急指针(Urgent Pointer,16比特):当URG位有效时,紧急指针指示紧急数据的位置。
- 选项(Options,变长:0~40字节):提供了相应的扩展机制,用于实现除TCP基本头部指定功能外的扩展功能。(P265图6.8错误)
- 填充(Padding,变长):总是以0作填充,可确保TCP头部以32比特边界结束。
- 数据(Data,变长):数据部分用于传送TCP用户数据。
- 由于IP分组长度的限制(最大64K),因此TCP最大有效数据载荷长度是65535-20-20=65495。【20B 的 IP 头和 20B 的 TCP 头部】
- 整个TCP段的长度限制
- IP包64K-1(65535)字节长度限制;
- 网络MTU(Maximum Transfer Unit,最大传送单位)限制;
- TCP 协议中用户数据大小受 MSS(Maximum Segment Size,最大分段大小)限制。
- TCP 连接管理状态图
TCP 流量控制
- 为了防止发送方的数据发送得过快,以致接收方来不及处理的情况。TCP采取滑动窗口机制来进行流量控制。
- 接收方维护一个可变的接收窗口,这是接收方向发送方指出的目前剩余接收缓冲区的大小(报文段中的窗口大小字段)。
- 接收窗口大小须满足:
- LastByteRcvd – LastByteRead ≤ RecvBuffer
- RecvWindow = RecvBuffer – (LastByteRcvd – LasteByteRead)
- 发送窗口大小须满足:
- SendWindow(LastByteSent – LastByteAcked) ≤ RecvWindow
- TCP滑动窗口机制能很好地实现流量控制,由于是以字节为单位,收发实体双方也有很好的自由度。但可能会带来性能方面的问题。
- “小窗口”问题
- 发送实体每次选择发送1个字节(如远程终端间隔性地敲击键盘),然后接收实体进行确认。这样发送窗口就表现为1个字节的“小窗口”,发送窗口和接收窗口也就1个字节1个字节地挪动。
- Nagle算法:当数据每次以很少量的方式进入到发送实体时,发送实体只是发送第一个到达的数据,然后将其余后面到达的数据缓冲起来,直到发送出去的那个报文段被确认;然后将所有缓冲的数据放在一个TCP报文段中发送出去,并且继续开始缓冲数据,直到下一个报文段被确认。(确实需要发送小数据的使用PUSH)
- “傻瓜窗口”问题
- 接收窗口为0后,发送实体被阻塞。接收方的应用进程每读取了1个字节,立刻发送1个字节的窗口更新给发送实体,发送实体立刻发送1个字节。
- Clark方案:禁止接收实体发送只有1个字节的窗口更新段。相反,它强制接收实体必须等待一段时间,直到有了一定数量的可用空间(1个MSS大小或半个接收缓冲区大小的较小值)之后再通知给发送实体。
TCP 拥塞控制
- 对于如何防止网络过载(拥塞),实践发现,网络层参与的网络拥塞控制(通过ICMP)可能得不偿失,而让通信的源端主动控制自己的发送速度,能起到更好的拥塞控制效果。
- TCP拥塞控制就是以端到端控制、在发送源端实现的网络拥塞控制方法,即通过发送实体主动探知网络的容量状况,控制发送速度,主动承担防止网络拥塞的责任。
- 基本的TCP拥塞控制有慢启动和拥塞避免两个阶段。
- TCP连接维护两个变量:
- 拥塞窗口CongWindow
- 反映了网络的容量,限制发送方向网络注入数据的速度。这样发送方发送的尚未得到确认的数据大小必须小于接收窗口和拥塞窗口,即:
- SendWindow ≤ min(CongWindow , RecvWindow)
- 慢启动阈值ssthresh
- 当拥塞窗口小于该阈值时处于慢启动阶段,而大于时进入拥塞避免阶段。
- 拥塞窗口CongWindow
- 慢启动
- TCP使用“慢启动”策略慢慢探测以决定网络的容量
- 初始时
- CongWindow设置为1个MSS(最大分段大小)。
- 慢启动阈值ssthresh设置为一个较高的值(比如接收窗口的大小)。
- 每收到一个确认ACK时,就把拥塞窗口大小加1个MSS大小:CongWindow+=MSS
- 实际结果一点也不慢:随时间拥塞窗口的增加是成指数增加的。
- 当拥塞窗口超过慢启动阈值ssthresh时,就进入拥塞避免阶段。
- 拥塞避免
- “慢启动”阶段结束后,进入拥塞避免阶段
- 不是每收到一个ACK,就把拥塞窗口增加一个MSS,而是每个往返传输时间RTT(Round-Trip Time)才把拥塞窗口增加一个MSS。
- RTT是动态变化的,在TCP的实现中通常采用一种变通的方法,每收到一个不重复的ACK时,拥塞窗口按照如下公式增加:
- CongWindow +=Max(MSS×MSS/CongWindow ,1)
- 这样拥塞窗口缓慢、线性地增加,直到出现拥塞。
- 拥塞或空闲后的处理
- 出现拥塞
- 不管那个阶段,如果发送方TCP段确认超时重传,则认为出现了拥塞。
- 这时,慢启动阈值ssthresh缩减为拥塞窗口的一半,并且拥塞窗口恢复到原来的初始窗口大小,然后进入慢启动过程,重新探测目前网络的状况。
- ssthresh = Max(CongWindow/2 , MSS)
- CongWindow = MSS
- 空闲后的拥塞窗口
- TCP连接空闲较长一段时间后,在重新开始传输数据时进入如同拥塞后的慢启动过程。
- 出现拥塞
TCP拥塞控制的改进和优化
- 基本的TCP拥塞控制方法有许多不足,因此后来做了不少的改进和优化,比较典型的版本包括如下5个。
- TCP Tahoe
- 实际的网络中,ACK超时可能并没有拥塞,而只是由于网络突然的传输错误,其中的某个TCP段偶然丢失了。
- 对非拥塞导致的某个TCP段丢失进行快速重传:收到快速重传阈值tcprexmtthresh(缺省是3)及以上个重复的ACK,不等超时,而是立即重传。然后进入慢启动过程。
- TCP Reno
- Tahoe依然进入慢启动过程,而网络可能并没有拥塞,这会导致过大地减小发送窗口尺寸,降低TCP连接的吞吐量。
- Reno在快速重传之后进入拥塞窗口快速恢复而不是慢启动过程。
- ssthresh = max(FlightSize/2 , 2×MSS) (FlightSize即SendWindow)
- CongWindow = ssthresh + n×MSS (n为重复ACK的个数)
- 之后进入拥塞避免阶段。
- TCP NewReno
- Reno在一个窗口中的多个TCP段同时丢失的情况下出现的不断执行快速重传和快速恢复,会使得发送端不断执行快速重传和快速恢复,而CongWindow和ssthresh亦会多次被减半,依然降低了TCP吞吐量。
- NewReno在“部分确认”的情况下并不退出快速恢复状态,而是:
- (1) 重传紧接着那个部分确认之后的TCP段,CongWindow -=部分确认的数据;
- (2) 对于新TCP段的ACK,CongWindow +=MSS;
- (3) 对第一个(也有建议是每一个)部分确认,复位重传计时器。
- TCP SACK
- 解决TCP Reno在一个窗口中的多个TCP段同时丢失时性能问题的另一种途径。
- 使用选择重传的方法重传丢失的TCP段。
- 性能优于NewReno,但需要修改TCP协议。
- TCP Vegas
- 一种新的TCP拥塞控制策略:通过观察TCP连接中RTT值改变感知网络是否发生拥塞,从而控制拥塞窗口大小。
TCP 计时器
- 重传计时器(Retransmission Timer)
- 一般情况下,一个TCP段发送后启动这个计时器,如果在计时器超时前收到这个TCP段的确认,则停止该计时器,否则,重新发送该TCP段。
- 超时应该多久呢?
- 太长:低效(延时长,带宽利用率低)
- 太短:造成不必要的重传(占用额外的带宽)
- TCP采用的是一种自适应的重传计时策略:基于RTT。
- 对于每一条TCP连接,TCP维护一个变量EstimatedRTT,用于存放所估计的到目的端的往返传输时间。
- 对每次成功的TCP段(即在超时前得到确认)采样SampleRTT,然后修正EstimatedRTT:
- EstimatedRTT = α × EstimatedRTT + (1 – α) × SampleRTT
- 其中α为修正因子,决定了以前估计的RTT的权重,一般取值为7/8。
- 重传计时器的改进
- 一个问题:如果TCP段超时并重传时怎么办?
- Karn方法:不对重传段进行采样,超时为原来增加一倍。
- 为了更好地跟踪网络状况的快速变化,Jacobson进一步改进,以适应RTT经常发生变化的情况。
- 使用平均偏差Deviation:
- Deviation = (1-x)× Deviation + x×|SampleRTT - EstimatedRTT |
- 其中为x修正因子,一般取值为1/4。
- 最后的超时间隔考虑到估计的往返传输时间和偏差的影响:
- Timeout = EstimatedRTT + 4×Deviation
- 使用平均偏差Deviation:
- 一个问题:如果TCP段超时并重传时怎么办?
- 持续计时器(Persistence Timer)
- 如果发送窗口大小为0的ACK后,该TCP接收进程发现可以继续接收对方的数据,这时需要发送窗口大小为一定值的ACK,但是这个ACK由于某种原因而被丢失,如果没有相应的措施,那么就会发生死锁。
- 解决的办法就是采用持续计时器,当发送实体收到接收窗口为0的ACK后,启动这个计时器,计时器超时后发送实体发送携带1个字节数据的探询消息,以便接收实体确认并带回接收窗口值。
- 保活计时器(Keepalive Timer)
- 当一个连接空闲了较长一段时间后,保活计时器可能超时,从而促使某一端查看另一端是否仍然还在。同样发送探询消息,如果另一端连续多次没有响应,则说明连接处于半连通状态,这样本端也应该释放连接。
新形势下的TCP
- 长距离(长延时)高速网络环境下TCP出现的问题
- TCP的32比特顺序号问题
- 高速网络下顺序号会快速回绕。
- 拥塞窗口和接收窗口大小的问题
- 拥塞窗口起点1个MSS太低;接收窗口太小,且发送方需等较长时间才得知。
- 纯GBN的问题
- 大量已成功传输的数据得重传。
- TCP的32比特顺序号问题
- 无线网络环境下TCP出现的问题
- 拥塞控制机制不适应
- 分组丢失(无ACK)主要是因为传输出错,而不是因为拥塞。
- 网络容量变化快、变化大
- 节点的移动或信道条件的变化而引起的信噪比的变化,链路容量的变化,有时会非常突然。
- 拥塞控制机制不适应
UDP和RTP(6.3)
UDP(User Datagram Protocol)
- 用户数据报UDP协议,是一种无连接方式的、不可靠的运输协议。
- 不需要连接建立和释放。
- 不支持流量控制、拥塞控制。
- 传输过程中可能会丢失,可能会失序,可能会延迟等。
- 支持广播和组播。
- UDP实际上是在IP层上附加了简单的多路复用功能,提供端到端的、统一用户接口的数据传输服务。(简单实现运输层封装)
- 简单、高效(用户承担可靠性),C/S、实时传输应用较合适。
- UDP数据报格式
- 【非常简单:源、目的端口号,长度,校验和,共 8B。】
- 源端口和目的端口:同TCP。
- 不需应答时,源端口可为0。
- 长度:包括了固定长度的UDP头部和携带的用户数据。
- 校验和:计算同TCP。
- 为0则不使用校验和。(此校验和0用全1来表示)。
网络层
4.1 网络层服务
- 网络层服务
4.2 虚电路网络与数据报网络
- 虚电路网络
- 数据报网络:Internet
4.3 IPv4 协议
- IP 协议
- IP 数据报:格式
- IP 分片:分片的策略
- IP 编址
- IP 地址分为网络号和主机号,子网的概念
- 「有类」编址:
- ABC 三类常用,D 类为「组播地址」,E 类保留
- 一些特殊的 IP 地址
- 私有 private IP 地址
- IP 子网划分和子网掩码
- 有类地址的划分很不灵活——地址浪费;因此进一步划分子网
- 因此,将 IP 地址划分为 网络号、子网号、主机号。
- 因此,有必要区分一个地址是否采用了子网划分——就需要 子网掩码
4.4 CIDR 与路由聚合
- 无类域间路由(CIDR: Classless InterDomain Routing)
- 和有类编址的概念;可以方便地表示子网
- 可以构建超网的概念(例如两个 C 网连起来);路由聚合
4.5 DHCP 协议
- DHCP 协议 Dynamic Host Configuration Protocol
- 即插即用,允许地址重用
4.6 网络地址转换(NAT)
- NAT穿透问题:1. 静态配置 NAT;2. 利用 UPnP (Universal Plug and Play);3. 中继(如Skype)
4.7 ICMP 协议
- ICMP 协议 互联网控制报文协议 ICMP (Internet Control Message Protocol)
- 差错/异常报告(目的不可达、源抑制、超时/超期、参数问题、重定向);网络探询(回声请求与应答报文、时间戳请求与应答报文)
4.8 IPv6 简介
- 改进了首部格式;固定了首部的长度为 40 字节(但后面可以有拓展首部);
- 版本号、优先级、流标签(网络对于不同类型的流提供不同类型的服务)、载荷长度、下一个首部(指向拓展首部或直接指向传输层首部如 TCP)、跳步限制(对应了 IPv4 中的 TTL)
- 注意 1. 检验和;2. 选项用拓展首部的形式进行了改进;3. ICMPv6(例如新增 Packet Too Big 的差错报告)
- IPv4 向 IPv6 的过渡
- 隧道技术 tunneling:为了穿越 IPv4 网络,将 IPv6 数据报作为 IPv4 数据报的载荷
4.9 路由算法
- 抽象成一张图,节点之间有费用——因此就是最小路径(最短路径)算法
- 静态路由(手工配置;路由更新慢;优先级高)与动态路由(更新快;及时响应链路费用或网络拓扑变化)
- 全局信息(所有路由器掌握完整的网络拓扑和链路费用信息;如链路状态 LS 路由算法)与分散 decentralized 信息(领居间信息交换、运算的迭代过程;如距离向量 DV 路由算法)
- 链路状态路由 LS 算法
- Dijkstra 算法。所有路由器掌握路由拓扑和链路费用(通过链路状态广播)。
- 距离向量 DV 路由算法
- Bellman-Ford 方程(动态规划)。思想是,其实在最短路径算法计算过程中,我们只需要知道邻居的信息即可进行更新。
- 因此,开始的时候先对于节点自身的距离向量做一个估计;迭代收敛到真实值。
- 特点:1. 异步迭代(可以原因是局部链路费用改变、来自邻居的 DV 更新);2. 分布式。
- 【链路费用变化】1. 好消息传播快,即某个链路的费用减少时,更新稳定比较快;2. 坏消息传播慢。若某一链路费用增加,当网路中存在环路的时候,可能出现无穷计数问题 count to infinity。
- 一个解决方案是毒性逆转 poisoned reverse,也即当一个节点到达某目的的最小费用路径是通过邻居时,则通知该邻居节点其到达该目的的距离为无穷大。
- 另一个策略是定义最大度量 maximum metric。
- 层次路由
- 当网络规模非常大时,直接计算是不可行的:有网络规模(1. 路由表无法存储;2. 路由计算过程的信息交换量巨大)和管理自治方面的问题(每个网络的管理可能都期望自主控制器其内的路由)。
- 聚合路由器为一个区域:自治系统 AS autonomous systems,同一个 AS 内的路由器运行相同的路由协议 "intra-AS" routing protocol;
- 网关路由器 gateway router。位于 AS 边缘,通过链路连接其他 AS 的网关路由器。
- 在一个 AS 内部的路由运行此系统上的路由协议即可。而对于跨 AS 的路由,需要解决:1. 哪些目的网路可由此 AS 的相邻的 AS 到达;2. 将这些网络可达性信息传播给此 AS 内部的路由器。
- 在多个 AS 间选择。热土豆路由。首先通过 AS 间路由协议学习到子网 x 可以通过多个网关到达;利用 AS 内路由协议获得到达每个网关的最小费用;选择费用更小的那个网关。
- Internet 采用层次路由,AS 内部路由协议也称为内部网络协议 IGP interior gateway protocols,常见的 AS 内部路由协议有:
- 路由信息协议 RIP Routing Information Protocol
- 开放最短路径优先 OSPF Open Shortest Path First
- 内部网关路由协议 IGPR interior gateway routing(是 Cisco 的私有协议)
4.10 Internet 路由
RIP 路由信息协议
- 距离向量路由算法,距离度量是跳步数(最大为 15 跳);每 30 秒邻居之间交换一次 DV,称为通告 advertisement。【基于通告可进行更新路由表】
- 如果 180 秒没有收到通告,则认为邻居/链路失效;重新计算路由,若发生改变则发送通告。
- 可能有无穷技术问题,但很大程度上被避免了:1. 定义了 16 条为无穷大;2. 毒性逆转技术用于预防 ping-pong 环路。
- 应用进程来实现(应用层),通过 UDP 数据报来发送。【还是网络层协议,因为协议的划分是基于协议所执行的功能。路由器上也实现了传输层、应用层的部分功能,但不是面向端用户的,因此还是划分到网络层,因为是为了网络层服务的。】
OSPF 开放最短路径优先
- 采用链路状态路由算法。构造链路状态分组,扩散;每个路由器收集成数据库,有整个网络的拓扑图,计算最短路径。OSPF 通告在整个 AS 范围泛洪,报文直接封装到 IP 数据报中(不经过网络层)。
- 与 ODPF 很相似的一个路由协议:IS-IS 路由协议。
- 优点:
- 安全:所有 OSPF 报文可以被认证,可以预防网络入侵;
- 允许使用多条相同费用的路径(而 RIP 只能选一条),在需要大量数据的时候可以进行负载均衡;
- 对于每条链路,可以针对不同的 TOS 设置多个不同的费用度量——实现不同类型的数据分组的分流;
- 集成单播路由与多播路由:多播 OSPF 协议(MOSPF)与 OSPF 利用相同的网络拓扑数据;
- OSPF 支持对大规模 AS 分层(hierarchical)。两级分层:局部区 Area 和主干区 Backbone。
- 内部路由器 Internal Routers:链路状态通告只限于区内;每个路由器掌握所在区的详细拓扑;只知道去往其他区网络的「方向」;
- 区边界路由器 Area Border Routers:「汇总」到达所在区网络的距离,通告给其他去边界路由器;
- 主干路由器 Backbone Routers:在主干区内运行 OSPF 路由算法;
- AS 边界路由器 AS boundary routers(网关路由器):连接其他的 AS;
- 要了解详细信息,参考 RFC2328
BGP 边界网络协议 Border Gateway Protocol
- 事实上的标准域间协议。
- BGP 为每个 AS 提供了一种手段
- EBGP 从邻居 AS 获得子网可达性信息;
- IBGP 向所有 AS 内部路由器传播子网可达性信息;
- 基于可达性信息与策略,确定到达其他网络的「好」路径。
- BGP 会话 session,两个 BGP 路由器(peers)交换 BGP 报文:通告去往不同目的前缀 prefix 的路径(实现路由可达性信息的交换)。【不同于之前的「距离向量」,只是告诉你到达的费用,这里给出了到达目的网络的路径;因此可称为「路径向量」协议。】报文交换基于半永久的 TCP 连接。
- BGP 报文
- OPEN 与 peer 建立 TCP 连接,并认证发送方;
- UPDATE 通告新路径(或撤销原路径);
- KEEPALIVE 在无 UPDATE 时,保活连接;也用于对对 OPEN 请求的确认;
- NOTIFICATION 报告先前报文的差错;也被用于关闭连接;
- 分发路径信息
- AS3 中的某个路由器将前缀可达性信息发送给另一个域 AS1 中某个边界路由器,利用 eBGP 会话(外部会话);
- 当 AS1 中的某个边界路由器收到来自另一个 AS3 的前缀可达性信息时,1. 利用 iBGP 向 AS1 内的所有路由器分发新的前缀可达性信息;2. 边界路由器也可选择是否将该信息通过 eBGP 分发给其他的 AS;
- 「路由」=前缀+属性
- 两个重要属性
- AS-PATH AS 路径,包含前缀通告所经过的 AS 序列;
- NEXT-HOP 下一跳,开始一个 AS-PATH 的路由器接口,指向下一跳 AS
- 两个重要属性
BGP 路由选择
- 网关路由器收到路由通告后,利用其输入策略 import policy 决策接受/拒绝该路由;
- 基于策略 policy-based 路由(甚至包括政治问题)
- 路由器获知到达某目的 AS 的多条路径,基于以下准则选择
- 本地偏好 preference 值属性:策略决策 policy decision
- 最短 AS-PATH(但不是路由器层面的跳数)
- 最近 NEXT-HOP 路由器:热土豆路由
- 附加准则
- 可以划分为 提供商网络/AS provider network/AS 和客户网络/AS customer network/AS,两者的区别在于,客户网络一般希望其他的流量经过该网络。
- 根据与其他 AS 相连的数量,可分为桩网络 stub network/AS、双宿网络 dual-homed network/AS、多宿网络,一般桩网络和双宿网络为客户网络。
- 显然,客户网络不会向其他的 AS 通告路径(不希望外部流量经过它);而对于提供商网络来说,事实上它期望只路由去往/来自其客户的流量,因为其他经过它的流量没有收益;这方面没有具体的协议,要看不同的策略。
为什么采用不同的AS内与AS间路由协议?
- 策略 policy
- iner-AS 期望能够管理控制流量如何被路由,谁路由经过其网络等;
- intra-AS 单一管理,无需策略决策
- 规模 scale
- 层次路由节省路由表大小,减少路由更新流量
- 适应大规模互联网
- 性能 performance
- intra-AS 侧重性能
- inter-AS 策略主导
【目录】
- 交换和路由(5.1)
- 网桥(5.2)
- 透明网桥、生成树算法、VLAN、交换机
- Internet网络层(5.3)
- IP、ARP、ICMP、DHCP、NAT、IP隧道
- 路由协议(5.4)
- 链路状态路由、距离向量路由、边界网关协议*
- IP组播(5.5)
- 移动节点的路由(5.6)
- 移动自组网的路由(5.7)*
- IPv6(5.8)
交换和路由(5.1)
- 物理层转发器或集线器;数据链路层网桥或交换机;网络层路由器。
- 网络层两个平面:数据平面和控制平面。
- 两种交换方式:虚电路(面向连接,但仍是分组交换只是有链路建立之后维持连接)和数据报。
- 路由选择方式:逐跳路由、源路由(由发送节点决定数据包所经过节点,分为严格源路由和分散源路由)。
如何获得路径?静态路由(人工配置)和动态路由;其中动态又有几种方法:1. 扩散法 Flooding,也称洪泛法(产生大量重复分组);2. 逆向学习法 Backward Learning【联想网桥学习端口的转发表的过程】
单跳链路所覆盖范围和所能连接节点个数有限,需要采用多跳方式通过许多中间节点相连构成一个互连的网络。
网络互连设备:用于多跳连接的中间节点
物理层的转发器或集线器(物理层设备)
- 连接起来的网络(局域网)仍然属于同一个冲突域;
- 连接的节点数目有限制:如以太网的节点最多1024个;
- 覆盖的范围仍然有限(如5-4-3原则)。
数据链路层的网桥或交换机(第二层设备)
- 连接相同或类似数据链路层协议的网络;
- 能隔离端口冲突域(存储-转发,帧交换),但属于同一个广播域;
- 交换机:多端口、高性能的网桥,通过交换硬件电路来实现快速的转发。
网络层的路由器(第三层设备)
- 基于逻辑网络层,可连接各种不同类型的网络;
- 分组交换,能进一步隔离广播域。
第三层、第四层、第七层交换机。(网关设备)
网络互连设备的两个平面
- 数据平面:如何转发分组(数据传递),侧重交换--低头干活
- 查找转发表。
- 通过交换电路实现分组转发。
- 性能要求:几个微秒的转发延迟。
- 控制平面:为分组转发提供支持,侧重路由--抬头看路(指挥)
- 构建转发表--路由。
- 性能要求:几秒甚至几十秒的收敛时间。
- 编址:通过互连设备连接的节点的统一标识(逻辑编址)。
- 地址解析:网络层逻辑地址(IP地址)和数据链路层物理地址(MAC地址)的映射转换。
- 网络地址转换NAT:内部网络和外部网络地址之间的转换。
- 差错报告:分组丢失或网络拥塞时通知相应节点。
- 信令协议:预先建立数据传输的通道和预约相应资源。
【按照如何决定路由,分组交换互连网络的内部操作分为虚电路和数据报两种方式。】
虚电路
- 面向连接的方式:连接建立、数据传输和连接释放。
- 仅仅在连接建立时进行一次路由选择。
- “虚”:仍然采用分组交换方式,不是真正的“硬”电路交换。
- 节点维护虚电路路由信息:虚电路表
- 前一个节点和后一个节点的标识。
- 虚电路号
- 全局唯一(全局虚电路)
- 节点之间要交换信息以知道哪些虚电路号可用。
- 永久虚电路(PVC):预先人工配置好。
- 交换虚电路(SVC):信令(控制指令)协议来建立虚电路。
- 链路唯一(动态虚电路)
- 区分经过该链路上不同虚电路中的分组。
- 记录:到上一个节点的链路所使用(上一节点选取)的虚电路号和到下一个节点的链路(本节点选取)使用的虚电路号。
- 全局唯一(全局虚电路)
数据报
- 无连接方式。
- 每个分组根据头部包括的目的地址等控制信息来独立决定路由(前后分组在路由上没有关系)。
- 分组经过路径可能会各不相同,可能会丢失、延迟、失序。
- 现代大多数分组交换网络,选择数据报形式路由。【这里似乎将分组交换归于数据报】
网桥(5.2)
【透明网桥、生成树算法、VLAN、交换机】
- 数据链路层设备,不太复杂的局域网互联。
- 可分为源路由网桥和透明网桥,前者很少用;透明网桥提供网段间隔离功能,进行「过滤」和「转发」(网桥的不同端口属于不同的冲突域)(注意广播帧会进行扩散,网桥连接的网路属于同一个广播域)。
- 【生成树算法】略
- 虚拟局域网 VLAN:局域网交换机或网桥连接起来的拓展局域网,无法隔离广播帧(属于同一广播域),占用带宽且有安全性问题;VLAN 试图解决广播帧隔离问题,将其分割成相互隔离的几个虚拟局域网;
- 三种方案:1. 基于端口;2. 基于 MAC 地址;3. 基于(第三层即网络层)协议
- (局域网)交换机实际上是一种高性能网桥(也具有自学习来构建转发表)
网桥概述
- 第二层(数据链路层)的设备,适合于不是非常复杂的局域网之间的互连。
- 源路由网桥:源节点发现到目的节点的路由(很少使用)。
- 透明网桥:实现MAC子层的连接,对于遵循802标准的LAN透明。
- 不需要对连接在这些LAN上的节点的通信软件进行修改。
- 对于在两个或多个LAN中的所有节点来说,属于一个扩展的大LAN。
- 在不是复杂的网络拓扑中,网桥也可不进行任何配置。
- 透明网桥提供网段间的隔离功能,进行“过滤”和“转发”
- 网桥的不同端口属于不同的冲突域。
- 网桥基于扩散法和逆向学习来维护一个转发表,记录节点在哪个端口上
- 基于收到分组的源地址了解到节点可通过该端口到达。
- 如果收到分组目的节点在转发表中找不到,则进行扩散。
- 如果目的节点所在的端口与到来端口相同,则不转发。
- 否则转发到目的节点所在的端口上。
- 注意:广播帧会进行扩散,网桥连接的网络属于同一个广播域。
网桥的基本工作方式
- 学习:站点A给B发送数据,转发表加入。
- 扩散:帧向所有其它端口(即端口2和3)扩散。
- 转发:B发送数据给A,学习到,转发到端口1。
- 过滤:C发送数据给A,学习到
,过滤(不转发)该帧。 - 老化:转发表表项的TTL(Time To Live)每秒都减少,为0时从转发表中清除,一般初始TTL设置为300秒。
路由回路带来的问题
- 扩散时产生重复分组
- W发送广播帧(f1),除B1扩散外,B3和B4扩散到LAN5(f2,f3),B4和B3扩散到LAN 2… →广播风暴
- 单播帧在不知道目的节点位置时有同样的情形→单播风暴
- 重复转发,更严重的是逆向学习时出现错误学习。
- 如节点W发送帧f到节点Z,W和Z的位置已知。
- B3和B4收到f后转发到LAN 5(f1和f2);
- B3发送的f1被B4收到,B4学习到W在LAN 5;
- B4发送的f2被B3收到,B3学习到W在LAN 5;
- 节点Z收到f1和f2;
- 节点Z发送帧给W时,B3和B4不会转发该帧。
- 如节点W发送帧f到节点Z,W和Z的位置已知。
IEEE 802.1d生成树算法
- 路由回路不可能完全避免
- 复杂的网络很容易有意无意导致回路出现。
- 多条路径存在可以提供冗余以提高可靠性。
- 通过网桥连接的互连网可看成一个图,图中节点是网桥和共享链路局域网,而网桥和局域网连接的端口(链路)为图中的边。
- 构建一颗生成树(Spanning Tree)来覆盖所有局域网。
- 一个连通图存在一颗生成树,它保证了图的连通性,同时又没有一个闭合环。
- 其主要目标为避免路由回路而不考虑性能方面的因素。
- 扩散和转发都限制在生成树上。
- 构建一颗生成树(Spanning Tree)来覆盖所有局域网。
- 每个网桥配置
- 网桥ID(BID):2字节的优先级+6字节的MAC地址(网桥的基本MAC地址)。
- 每个端口分配16比特的端口号以及端口花费。
- 算法运行
- 网桥之间通过 BPDU(桥协议数据单元)消息的交换来构造生成树。
- 网桥故障或者新网桥加入时自动发现拓扑变化,重新生成新的生成树。
做个游戏:选个老大、抱老大的大腿
- 每个同学确保自己前后左右有1个以上的邻接同学(直接连接),只有邻接间才可以联系(交换信息)
- 每人准备纸笔记录
- 以学号的后3位作为自己的ID(没有重复?)
- 开始时,每人都认为自己是老大,记下<老大是谁[ID]、距离多少、通过谁[ID]得到的>,(相邻之间距离都是1)
- a.定期一一告诉你所有的邻接同学你所记下的<老大是谁[ID]、距离多少、你是谁[ID]>
- b.收到邻接同学的上述信息后,和自己最新记录依次进行比较:有更高优先级的老大(ID更小)?可以距离更近(通过这个邻居)?这个邻居优先级更高(ID更小)?注意:前一项相同才比较下一个。有满足条件的则更新自己的记录,并马上告诉你所有的邻接同学。
- 定期执行a。稳定后,观察结果。
根桥、根端口和选取端口→生成树
- 生成树的根桥为BID最小的网桥
- 优先级越高(数越小),越有可能成为根桥,相同时比较MAC地址。
- 每个网桥可以了解到根桥方向的路径花费
- 等于路径上经过的那些连接到另外一个网桥的端口花费之和。
- 【对于网桥】网桥到根桥具有最少路径花费的路径为根路径,其花费为根路径花费,该路径上的第一个跳段所使用的端口为根端口。
- 如果有多条最少花费路径时,具有更低端口号的端口为根端口。
- 根桥没有根端口。
- 【对于局域网】每个局域网上到根桥的根路径花费最少(最靠近根桥)的那个网桥为选取桥。
- 如果有多个可选的网桥时BID最低的为选取桥。
- 选取桥连接到该局域网上的端口为选取端口。
- 如果有多个端口连接到同一个局域网上,端口号最低的端口为选取端口。
- 生成树由所有局域网和网桥以及所有根端口和选取端口组成。
- 根端口和选取端口为转发状态。
- 其他端口为阻塞状态,不允许往该端口转发也不会转发来自于该端口的帧(正常的数据帧)。(但转发BPDU)
BPDU消息
- LLC头部的DSAP/SSAP为0x42,MAC目的地址为STP组地址01:80:C2:00:00:00,不会被转发到其他端口上。
- 从端口收到一个BPDU消息都会和自身准备发送的BPDU消息比较,判断是否是收到一个“更好”的BPDU消息:
- 收到的BPDU标识一个具有更小BID的根桥。
- 收到的BPDU标识同一个根桥,但具有更小的根路径花费。
- 收到的BPDU的根桥BID和路径花费相同,但发送该BPDU的桥BID更小。
- 收到的BPDU的根桥BID、路径花费和发送消息的桥BID相同,但端口号更小。
- 如果是一个“更好”的消息,则更新自身的BPDU消息,相应的根路径花费等于BPDU消息中的路径花费加上端口的路径花费。更新后的BPDU在“更差”的端口上发送。
生成树算法例
- BPDU消息(根桥,花费,发送者)表示是哪个网桥发送的,其中到根桥的花费为多少。
- B1为根桥
- RP表示网桥的根端口
- DP表示局域网上的选取桥的选取端口
- 所有桥初始上电时都认为自己是根桥。
- 根桥定期(2s)发送BPDU消息,包括生命期(初始为0)和最大生命期(缺省为20s)。
- 一旦收到“更好”的BPDU消息,则不再认为自己是根桥,从而不再定期产生BPDU。
- 网桥一旦发现“最好”的BPDU消息最大生命期到达后超时,则宣告自己为根桥,重新开始生成树算法。
广播帧和组播帧的转发
- 稳定状态下单播帧和广播帧的扩散和转发沿着生成树进行。
- 如节点Z发送帧到节点W,节点W发送帧到节点Z。
- 对于组播帧,许多网桥采用和广播帧类似的处理。也可以进一步优化:
- 通过GARP组播登记协议GMRP(GARP Multicast Registration Protocol)协议使得网桥了解到端口方向是否有组成员。
- 通用属性登记协议GARP(Generic Attribute Registration Protocol)。
拓扑变化
- 生成树收敛过程中新旧拓扑混合在一起(节点不同步)
- 原来属于转发状态的端口经过计算后发现不是转发状态,在这段重新计算的时间内可能出现网络分割。
- 原来不是转发状态的端口在新的拓扑中要变为转发状态时可能会出现路由回路。(问题大)
- 避免出现路由回路:
- 阻塞状态到转发状态时不是立即迁移,而是等待足够时间(BPDU消息传遍网络时间的两倍),保证新拓扑信息传遍所有局域网。
- 考虑老拓扑中根桥B附近故障,经过T到达最远的地方A,而新拓扑的根桥为A,新的拓扑信息经过T到达B。
- 转发延迟=BPDU消息传遍网络的时间,缺省15秒。
- 其中引入两个新的状态:监听和学习状态,转发延迟后迁移到下一状态
- 监听状态(15s):不转发,不学习节点位置,但转发BPDU消息
- 学习状态(15s) :不转发,学习节点位置,转发BPDU消息
- 还有一个关闭状态:该端口关闭,不使用
- 阻塞状态到转发状态时不是立即迁移,而是等待足够时间(BPDU消息传遍网络时间的两倍),保证新拓扑信息传遍所有局域网。
转发表更新
- 转发表的超时为300秒(5分钟)。
- 拓扑变化后按照新的生成树来转发,原有转发表的表项不再适用,需要移走这些老的表项。
- 网桥检测到拓扑变化
- 网桥的转发状态端口变为断开或阻塞状态,网桥的阻塞状态端口变为转发状态。
- 发送拓扑变化通知(TCN)消息给根桥
- 途中选取桥发送拓扑变化通知确认(TCA)给下游网桥,并且转发到上游网桥。
- 根桥定期发送的BPDU消息中设置拓扑变化(TC)比特为1
- 这个过程持续最大生命期+转发延迟=35秒时间。
- 网桥收到拓扑变化BPDU消息后将转发表表项超时设置为较小的值(15秒的转发延迟)。
快速生成树协议(Rapid STP)
传统STP
- 收敛速度较慢(被动)
- 判断需要重新计算:等待根桥的BPDU消息超时(20s)
- 端口状态从阻塞到转发状态(2*15s)
RSTP
- 收敛速度快(主动)
- 判断需要重新计算:每个网桥定期(2s)生成BPDU消息,连续3个未收到说明该端口断开。
- 端口状态从阻塞到转发状态
- 重新定义端口状态和角色
- Disabled/Blocking/Listening都不属于生成树,也不学习节点位置,合并为丢弃(Discarding)状态。
- 转发状态的端口引入端口角色:根端口和选取端口。
- 丢弃状态的端口引入角色:
- 备份(backup)端口:选取桥除选取端口外还连接到同一LAN的端口。
- 替代(alternate)端口:除根端口那条路径外还可以到达根桥的路径上的第一跳端口。
- 针对选取桥除选取端口外还有备份端口连接,选取端口有问题时最优的备份端口成为选取端口,并转为转发状态。
- 老的根端口为丢弃状态时,从最优的替代端口选取的新根端口可以直接为转发状态。
- 针对边缘链路(只有端系统连接):直接为转发状态。
- 针对点到点链路,原有的定期(2s)超时以proposal/ agreement同步代替。
传统 RTP
- 转发表项超时
- 根据TC=1的BPDU消息传播将其减少为15s。
RSTP
- 针对点到点链路,原有的定期(2s)超时以proposal/ agreement同步代替
- 上游节点A(选取桥)发现处于丢弃状态的端口为选取端口时,发送proposal给点到点链路M的下游节点B询问其是否为子树?
- 如果是(该端口通过根端口连接到M),则发送agreement给上游节点,上游节点将该端口设置为转发状态。
- 根端口为转发状态。
- B继续询问自身的下游节点C,开始proposal/ agreement。
- 如果不是,则说明A不是选取桥, 不agreement 。
- 转发表项超时
- 检测到拓扑变化(如链路断开)导致端口状态改变时移走该端口对应的老表项,生成的BPDU消息TC比特为1,通知其他网络拓扑变化。
STP实现拓扑变化例
- 链路断开时,222/444等待20秒发现到根桥路径故障;444发现新的根端口02,通过端口01(选取端口)转发BPDU到222;222发现新的根端口;这些端口变为转发状态需要(15+15s),总共50秒。
- 链路恢复时,222从端口01收到BPDU,根端口从03变为01,同时03变为选取端口;
- 444一旦从01端口收到BPDU,根端口从02变为01;
- 这些活跃端口(根端口和选取端口)需要经过15+15s过渡到转发状态。
RSTP实现拓扑变化例
- 链路断开时
- 222发现根桥不可用,宣告自己为根桥并通过03端口发送给444;
- 444发现从01端口来的BPDU更差,说明原来的根端口不可用,原来的替代端口02变为根端口,并且转为转发状态;01端口为选取端口,暂时为丢弃状态;
- 222收到BPDU消息,03为根端口;
- 444发送proposal给222,222回应以agreement后,444的选取端口01转为转发状态。
- 链路恢复时,111设置03为选取端口,发送proposal给222;
- 222发现该BPDU更好,将所有除边缘端口外的选取端口转为丢弃状态,同时发送agreement给111,这样111的端口03为转发状态;
- 222继续同步过程,发送proposal给444,444将根端口从02变为01,将所有非边缘选取端口为丢弃状态,同时回应以agreement,222将选取端口03转为转发状态。
虚拟局域网(Virtual LAN)
- 局域网交换机或者网桥连接起来大的“扩展”局域网
- 网桥具有端口隔离功能(冲突域隔离),但是它并不能隔离广播帧(还是同一个广播域)。
- 广播帧会被网桥转发给所有主机中,这可能占用相当大的带宽和不必要的处理,而且任何人都能监听到广播帧,从而可能带来安全方面的问题(比如ARP协议) 。
- VLAN(IEEE 802.1Q)试图解决广播帧隔离问题
- 一个扩展的LAN可以被分割成几个逻辑上处于不同位置的隔离的虚拟局域网,每个虚拟局域网被分配一个标识(ID)。
- 帧只在具有相同VLAN标识的网段间转发,从而可以限制广播帧的扩散范围。同时单播帧也只在相同ID的VLAN中转发。
VLAN 类型
- 如何把一个扩展的LAN分割成多个VLAN?
- 基于端口的VLAN:根据局域网交换机的端口来进行分割。
- 交换机根据从哪个端口收到帧来判断这个帧是属于哪个VLAN的。
- 如果节点移动位置,需要重新配置交换机相应端口的VLAN设置。
- 连接到交换机的一个端口上所有节点都必须属于同一个VLAN中。
- 基于MAC地址的VLAN:根据帧的源MAC或者目的MAC地址来确定属于哪一个VLAN。
- 交换机维护了一个MAC地址和对应VLAN的表。
- 表的维护是一项繁琐的工作。
- 节点的移动无需进行重新配置。
- 基于协议的VLAN
- 根据第三层(网络层)的协议和第三层地址来判断属于哪一个VLAN。
- 要求交换机支持第三层的交换。
- 很灵活,但容易被欺骗。
- 基于端口的VLAN:根据局域网交换机的端口来进行分割。
VLAN 帧
- 三种类型的帧
- VLAN帧
- 优先级标记帧(VID=0)
- 传统以太网帧
- 三种链路
- Trunk链路
- Access链路
- Hybrid链路
- 干线(Trunk)链路上传输VLAN帧
- TPID=0x8100表示VLAN帧。
- TCI(标记控制信息)
- 3比特优先级,[0..7],7最高。
- DEI(以前为CFI)可丢弃指示(Drop Eligibility Indicator)。
- VLAN ID:0表示未知VLAN。
- 注意:VLAN头部(标记帧)只在支持VLAN的设备间才存在。
交换机
- (局域网)交换机实际上是一种高性能的多端口网桥。
- 和网桥一样,它从一个端口接收以太网帧,然后向另外端口(可能多个)转发。
- 也具有通过自学习来构建转发表的功能。
交换机和网桥的主要区别
- 网桥一般只有少数几个接口,而交换机则可能有几十个端口。
- 交换机中帧的转发采用了高效的交换逻辑来实现,从而能够达到较高的性能。
- 许多交换机都支持全双工模式(能够同时通过同一个端口发送和接收帧)。以全双工方式连接到端口的站点永远也不会检测到冲突的存在,吞吐量是原来的两倍。
交换机的逻辑结构
- 每个端口都有一个发送和接收侧,端口的接收侧接收MAC帧,然后根据目的地址来决定往哪个端口的发送侧转发。每个端口的发送和接收侧连接到一个纵横开关上。
交换机帧转发方式
- 存储转发(Store and Forward)
- 在完全接收到帧并存放入输入缓存后再转发至目的端口。
- 在转发帧之前可以首先进行差错检测,把那些出错的帧丢弃掉。
- 但由于要等到接收完一个完整的帧后再输出到交换逻辑来进行转发,从而转发延迟比较长。
- 直通(Cut Through)
- 在收到帧中的目的地址字段后就开始把它和交换机的转发表比较,查找到目的地址后就直接将信息帧发送到目的端口。
- 转发延迟相比存储转发要小一些。
- 但是没有差错检测机制,从而可能把坏帧也转发出去,会浪费一部分的带宽。
- 无残帧(Fragment Free)
- 和直通类似,以太网交换机在收到64个字节的数据后才开始转发。
- 考虑到大多数错误和冲突(所有正常的冲突)出现在帧的前面64个字节。
- 自适应转发:当网络误码率较低时使用直通技术,而当网络误码率较高时则采用存储转发技术。
Internet网络层(5.3)
【IP、ARP、ICMP、DHCP、NAT、IP隧道】
Internet网络层
- Internet的前身即ARPANET,其主体内容为TCP/IP,源自Unix,其核心是网络层的IP(Internet Protocol)。
- IP的设计目标是inter-networking
- 连接各种类型的异构网络;
- 路由器和链路故障仍能通信;
- 有效利用网络的资源,支持各种类型的应用。
- Internet(TCP/IP)可用于连接各种异构网络,遵循命运共享、软状态和端到端的设计原则,采取松散、分布式、无状态路由的网络架构。
IP 实现特点
- 沙漏模型,IP是核心部分,只要求下层物理网络提供基本的数据递交功能(其MTU不低于576字节)。
- 支持下层各种异构物理网络,通过IP地址唯一逻辑标识Internet上某台主机。
- 无连接方式,网络层提供尽力递交(best-effort)的数据传输服务:无带宽保证,分组可能丢失、失序、延迟,无拥塞指示。
- 命运共享策略:只要网络是连通,端系统间的通信仍然可继续。
- 无状态的路由设计:路由器不需要为端系统间的分组流维护状态信息。
- 软状态机制:路由表的维护通过定期地刷新(路由信息交换)来完成,超时后状态被移走。
- 端到端的设计原则:
- 逐跳的差错控制和流量控制仍然会由于中间节点的问题需要在端系统实现这些复杂的功能。
- 在某跳中实现复杂的功能仅仅优化性能,而不是保证正确性。
- 基于IP,由端系统提供面向连接的可靠、按序递交的TCP服务和无连接方式的不可靠UDP服务。
- 沙漏模型,IP是核心部分,只要求下层物理网络提供基本的数据递交功能(其MTU不低于576字节)。
两个平面
数据平面:如何转发IP分组
- 此平面给出IP分组的格式,以及如何处理IP分组。
控制平面:为数据平面的IP分组转发提供支持
- 路由协议:如何为IP分组找到到目的端的路径。
- ARP协议:在通过物理链路传输IP分组前首先知道下一跳节点的硬件地址。
- ICMP协议:IP分组递交出错时报告差错给源端。
基于这两个平面之上,TCP和UDP分别提供可靠的面向连接和无连接方式的数据递交服务。
IP 协议
- IP提供的数据递交服务类型
- 单播(unicast):一到一
- 组播(multicast):一到多或者多到多
- 广播(broadcast):一到所有
- 联播(anycast):一到多中任意一个
- IP协议设计主要考虑如下:
- 无连接方式,提供转发支持:源地址和目的地址。
- 多个高层协议支持:如TCP-0x06、UDP-0x11、ICMP-0x01。(网络层多路复用)
- 扩展性:支持变长的IP选项。
- 服务质量:服务类型进行区分。
- 路由回路:分组有生命期。
- 分组出错:头部检验。
- 每跳都要重新计算。
- MTU限制:分段和重组
- 逐跳重组(透明分段):可能多次分段和重组,每跳是同一个出口。
- 接收端重组:途中可分段,分段可能是不同路径,最后在接收端重组。
IP 分组格式
- 版本号:IPv4(0100)。
- TOS(8bit):早期忽略,目前被用于区分服务的DSCP(区分服务编码点)。
- 分组流字段
- 源和目的IP地址。
- 协议号:IP分组携带的数据属于哪个协议。
- 封装类字段:固定长度+可变选项+数据部分。
- 头部长度IHL(4bit):取值5-15,以32比特为单位,20~60字节(选项最多40字节)。
- 总长度(16bit):最长65535字节(数据最长65515字节)。
- 差错控制字段
- TTL(8bit):防止分组永远在网络游荡,分组经过路由器转发时TTL减1,为0时丢弃分组,并发送ICMP差错报告给源。
- 头部检验和(16bit):反码运算来保护头部。
- IP选项:多种可变长选项。
- 填充:保证数据部分以32比特边界开始。
IP 分段和重组
- 分组传输经过的物理网络都有MTU(帧携带的数据大小)。
- IP采用接收方重组的策略。
- IP分组头部与分段相关字段:
- 标识(16bit):标识原始分组。(加上IP源地址和目的地址唯一标识)
- 分段偏移(13bit):原始IP分组的哪个部分?以8字节为单位前面的分段携带数据长度为8的倍数。(可标识16bits长度空间)
- MF:是否最后一个分段。(可以开始重组)
- DF:不允许分段。
- 最大传输单元 MTU:链路层数据帧可封装的数据上限不同。因此 IP 要进行 分片 fragmented 和重组 reassembled ,上面第二行的「标识」字段为分片计数,标志位有 3 位,第一位保留,后面分别是 DF 禁止分片和 MF 更多分片(0 表示最后一片或未分片);「片偏移」标识该 IP 分组的分片在原 IP 分组数据的相对偏移量,以 8 字节为单位。
IP 选项
- IP头部的可选项是可变长的,主要用来进行网络测试或调试。
- 每个IP选项或者只有一个字节,或者可变长度,采用TLV(类型/长度/值)方式来描述。
- 前面一个字节为选项类型部分,由于分组可能会要进行分段,类型的第一个比特(字节最高位)被称为Copied标志,为1时所有分段都应该包含该选项,否则仅第一个分段包含该选项。
- 单字节选项:
- 类型0选项:表示选项部分结束(相当于填充);
- 类型为1表示NOP,用于选项间填充。
- 记录路由(RR)选项
- 指针给出目前尚未使用的第一个IP地址槽的偏移,初始为4。
- 路由器转发时将外出链路的IP地址加入到列表中,指针+4,最多9个地址。
- 源路由选项:指定该IP分组从源到目的端必须经过的路由器列表。
- 严格源路由:分组经过的路径必须与选项中给出的路径严格一致。
- 松散源路由:分组转发时应该按照顺序经过那些路由器,但其中可经过其他路由器。
- 时间戳选项
- 与RR选项类似,纪录IP地址和路由器的当前时间。
IP 地址
【小结】
- 子网划分:在 IP 地址类的基础上再进行划分。因此一个 IP 地址可分为网络号、子网号、主机号三部分。
- 如何确定是否划分了子网?子网掩码。
- 注意,在一个子网中,主机号为全零表示该子网,全 1 表示广播地址,无法进行分配。
- CIDR Classless InterDomain Routing 无类域间路由,融合了子网地址和子网掩码,网络前缀可以是任意长度,格式为
a.b.c.d/x
- 利用 CIDR,可以提高 IPv4 地址空间的分配效率;同时提高路由效率——路由聚合 route aggregation(可以将几个子网聚合成一个超网)
另外,比如说一个网段中的某个子网分离出去了,则在路由表中另外加一条记录——因此遵循最长前缀匹配。
互连的每个主机和路由器的网络接口都有一个唯一的IP地址。
IP地址除了用作唯一标识外,还用于描述其所在的逻辑网络(子网)
- IP地址分为网络号和主机号两部分,其中网络号标识某个子网,而主机号标识该子网中的主机。(这其实是一种层次划分的方法)
- 路由时,只需要了解如何到达子网,而不必了解子网的每一台主机。
- 实际在某个物理网络中传递时需要将IP地址映射为物理地址-ARP协议。
IP地址由4个字节(32bit)组成,常用便于阅读的点十进制标记法,中间用小数点隔开,如
- 00000001 00000010 11111111 00000100
- 1 · 2 · 255 · 4
- 也可写成16进制,如
Ping 0x0102ff04
。
Internet的IP地址由IANA(Internet Assigned Number Authority)分配
- IANA再把IP地址的分配授权给多个区域互联网注册管理机构RIR(regional Internet registries),RIR进一步授权给更低等级的注册管理机构或代理。
IP 地址类
考虑到不同的网络规模分为A、B、C类地址。
- A类:网络号全0和127有特殊含义,支持224-2主机/网络。
- B类:16384(214)个网络,65534(216-2)个主机/网络。
- C类:200多万个C类网络,254台主机/网络。
支持组播:D类地址。
- 全0或全1的地址有特殊的意义
- 全1的意义为“全部”(all)。
- 全0的意义为“这个”(this)。
A类地址127.0.0.0为loopback地址
- IP模块收到目的地为回环地址时将分组递交给对应的高层协议模块。
- 可测试协议栈是否工作正常,以及用于主机内不同进程间的通信。
- IP模块从高层收到目的地为本机某个接口IP地址时通过回环接口递交给高层协议模块。
IP 子网
- IP地址应用的一个方面是IP子网。为什么要划分IP子网?
- 多个物理网络(子网)共享IP网络地址空间(常为A、B类)。
- 路由和管理需要。
- IP子网如何划分?
- 三层层次结构:网络ID+子网ID+主机ID
- IP网络进一步分成多个子网,IP地址主机部分的一些比特作为子网号。
- 引入子网掩码来截取子网号。
- 三层层次结构:网络ID+子网ID+主机ID
- 只有本地路由器知道子网的存在,外部路由器仍然认为这些子网是一个统一的网络。
- IP地址应用的一个方面是IP子网。为什么要划分IP子网?
子网掩码
子网掩码标识地址哪些部分属于网络,哪些属于主机。
- 32比特的整数,常用点十进制描述。
- 如果对应的比特属于网络部分则为1,否则为0。
- 实践中网络部分和主机部分一般不会交错,即子网掩码常常是连续多个1后跟多个0采取/n的方式书写。
- A类地址的掩码为255.0.0.0→/8;
- B类地址的掩码为255.255.0.0→/16;
- C类地址的掩码为255.255.255.0→/24;
- 子网掩码并不以字节单位为边界。
IP 子网划分示例
- 变长子网掩码(VLSM)
- 静态、固定长度的子网掩码划分的子网规模差不多,容易导致IP地址空间的浪费。
- 全0、全1限制的浪费。
- 子网内多余地址的浪费。
- 变长子网掩码:不同子网采用不同长度的子网掩码。 → 多层子网
- 假设C类地址202.120.224.0/24要分配给5个子网,其中3个子网要支持50台,另外2个子网支持30台主机。
- 首先采用掩码255.255.255.192分成4个子网,每个支持62主机。
- 第4个子网进一步采用255.255.255.224分成2个支持30主机的子网。
CIDR(Classless Inter-Domain Routing)
- 总的IP地址空间不够,全球分配也很不公平。
- A、B类网络主机数太多,网络数太少;(地址浪费)
- C类网络网络数太多,主机数太少。(主干路由器的路由表越来越庞大,查找开销大,增加路由负担,需要合并)。
引入CIDR,抛弃IP地址类的概念、边界和路由方法,通过地址汇集、只是使用网络掩码(子网掩码)的方法来描述连续地址块。
- 通过网络掩码来描述地址块,一般采用
x.x.x.x/y
格式,y表示前面多少个比特属于网络部分。 - 网络掩码可以是从0到30的任意长度,
- /0表示主机。
- 长度为31的掩码用在点到点链路上,主机部分为0和1不被解释为网络或广播地址。
- 通过网络掩码来描述地址块,一般采用
CIDR 超网
- 地址汇集(合并)形成的网络也称为超网。
IP转发(CIDR路由)
IP转发:节点接收分组,查找转发表将分组送到相应的外出接口。
- 节点之间通过控制平面的路由协议来交换路由信息建立路由表。
- 转发表根据路由表来确定。
转发表包含:目的网络/网络掩码/下一跳/(网络接口)
- 直接路由(下一跳为0.0.0.0):目的节点和当前主机在同一网络,可直接通过对应的接口进行本地递交(启动ARP)。
- 间接路由:需要通过下一跳路由器转发(仍然启动ARP,本地递交给下一跳路由器)。
- 缺省路由(网络掩码为0.0.0.0):当转发表中找不到路由时采用。
- 网络掩码为255.255.255.255的路由为主机路由。
如何匹配路由表中的表项?
- 目的IP地址 & 路由表项的网络掩码=目的网络 & 网络掩码?
转发过程中不会改变源和目的IP地址,改变的是MAC地址(在不同的链路段上使用不同的源和目的MAC地址进行数据帧封装)。
最长前缀匹配
- CIDR要求最长匹配原则:网络掩码最长的匹配。
- Trie算法实现快速查找匹配:传统的BSD Unix系统采用一个称为Trie的前缀树的数据结构。
- 每个转发表项(目的网络地址&网络掩码)用“前缀*”表示,所有前缀构成词典。
- Trie前缀树实际上是一颗二叉树:从根开始根据前缀的每个比特取值来决定所在的分支。
- 匹配时根据目的地址的每个比特决定从根开始经过的节点,直到所有比特匹配完或者无法进一步往前查找,匹配结束。
- 如果没有经过带*的节点,则无法匹配。
- 否则最后一个带*节点对应前缀就是最长前缀匹配。
- 二叉树可以压缩:如果Trie中的某个节点下面只有一条路径,而且途中没有带*的节点,那么这段路径可以压缩为该节点的子节点,同时在匹配时可以一次匹配多个比特而不是一定要逐个逐个比特地匹配。
ARP(Address Resolution Protocol)
- 地址解析协议ARP:
- IP地址 - MAC地址
- 数据链路层传输中,用于以太网等广播网络中解析地址。
- 如果不知道IP地址对应的MAC地址,发送ARP请求,暂时保留IP分组在缓冲区。
- ARP请求采用广播发送:Sender IP、MAC address; Target IP、MAC address。
- Target IP节点单播响应ARP请求,源和目的字段互调,并且填写源MAC地址。
- 所有站点收到ARP请求或响应,更新相应的缓存(cache)
- ARP请求的目的站点B(A - B)缓存/更新A的映射。
- ARP响应的接收者A缓存B的映射。
- 其他接收到ARP请求的站点同样可以缓存/更新A的映射。
- ARP缓存的目的:高效。
- ARP缓存的TTL:20分钟。
- arp –a 显示ARP表。
- 无故(Gratuitous)ARP:在启动或者改变IP地址时使用。
- 发送一个要求解析自己IP地址的ARP请求:sender IP, MAC address; sender IP, MAC address=?
- 检查地址是否已经使用。
- 可以让接收者缓冲该MAC地址。
- 静态ARP映射可以避免解析过程带来响应延迟,也可避免ARP攻击带来的安全威胁。
ARP Spoofing Attack(Man-in-the-Middle)
- 伪造一个ARP响应。
- 节点收到伪造的响应后会更新缓存,即poisoning。
Reverse(反向)ARP
- RARP:MAC - IP地址
- 无盘工作站获得自己的IP地址,MAC地址是唯一不变的。
- 主机广播RARP请求,RARP服务器返回该MAC对应的IP地址。
- 采用ARP分组格式,操作字段为3和4。
- RARP的缺陷
- 不能跨越路由器(每个子网需要服务器);
- IP配置信息简单,应用层的BOOTP/ DHCP更好。
ICMP(Internet Control Message Protocol)
- ICMP被认为是IP的一部分,必须实现;
- 主要功能包括
- 差错报告:TTL超时,目的不可达,不能分段等。【差错报告类:收到IP分组后触发。】
- 网络管理:ping/traceroute。
- 端系统配置:路由器通告等。【后面两个属于查询类消息:源发送ICMP请求到目的端,目的端回应以响应。】
- ICMP消息是可路由的,封装在IP分组(协议号为1)中传递。
- ICMP消息最少8个字节 type/code:类型/子类型
- ICMP 消息
ICMP 差错报告
- IP分组递交或者转发出现错误时发送ICMP差错报告
- 差错报告信息中包含了出错IP分组头部以及数据的前8个字节。
- ICMP消息发送给对应IP分组的源IP地址对应的节点。
- ICMP差错消息限制
- ICMP不报告ICMP消息本身的错误。
- ICMP不报告IP分组的检验和错误。
- 不能向IP分组途径的路由器报告差错或更正差错。
- ICMP只报告IP分组的第一个分段的错误。
- ICMP不报告广播和组播分组的错误。
- Type 3: 目的地不可达
- Code 0: 网络不可达,找不到对应路由表项。
- Code 1: 主机不可达,ARP请求没有响应。
- Code 2: 协议不可达,目的地不支持IP头部中的protocol。
- Code 3: 端口不可达,没有应用程序绑定在该端口上。
- Code 4: 需要分段但DF置位。
- Type 5:重定向,通知有一条更好的路由。
DHCP(Dynamic Host Configuration Protocol)
- 动态主机配置协议DHCP由原有BOOTP基础上扩展而来,属于应用层的协议,采用C/S架构。
- 采用UDP,服务方端口号为67,客户方端口号为68。
- DHCP服务器可提供IP地址、掩码、缺省路由器、DNS服务器、缺省TTL等丰富的IP配置信息。
- DHCP有三种IP地址分配方法
- 自动方法:根据唯一客户标识固定分配。
- 动态方法:从地址池中租用一个。
- 手工方法:IP地址第三方方式分配,DHCP用于其他配置。
- DHCPNAK:拒绝DHCPREQUEST的租用,收到后重新发送DHCPDISCOVER。
- DHCPDECLINE:收到ACK但是发现地址不可用,重新DHCPDISCOVER。
- DHCPRELEASE:不再租用。
DHCPINFORM:用于获取IP地址外的配置信息。
DHCP 中继代理
多个物理网络时,本地广播不会跨越路由器。
- 每个物理网络部署一个DHCP服务器。
- 引入Relay Agent
- 设置为收到DHCP消息后转发到某个DHCP服务器
- DHCP消息中的中继IP地址字段填充为当前Relay Agent的地址。
- DHCP服务器根据中继IP地址字段知道在哪个物理网络,从而分配合适的IP地址。
NAT(Network Address Translation)
- 全球Internet合法的IP地址严重不足,尽管利用CIDR更有效使用IP地址,仍然不够。
- 另一方面,内部网络中的主机不会要求在同一时刻全部连接到Internet。
- 内部网络中主机可采用内部IP地址,甚至可采用其他IP地址。
- RFC1918给出了A、B、C类内部IP地址,分别为:【1 个 A 类,16 个 B 类,256 个 C 类】
- 10.0.0.0/8
- 172.16.0.0/12 (172.16.0.0~172.31.0.0)
- 192.168.0.0/16 (192.168.0.0~192.168.255.0)
- RFC1918给出了A、B、C类内部IP地址,分别为:【1 个 A 类,16 个 B 类,256 个 C 类】
网络地址转换NAT设备负责在内部网络用到的IP地址与外部用于连接到Internet的IP地址之间进行地址转换。
- 基本NAT:内部IP地址(主机)被映射为某个外部IP地址(从外部的公共IP地址池中选取)。
- 基于端口的NAT(NAPT):
- 针对主机的每个会话(TCP连接、UDP或者ICMP会话)进行映射。
- 一个公共IP地址可以有65535个端口号,即6万多条TCP连接。
NAT 转换表
手工添加映射。
自动添加:当内部网络中的主机发送的分组到达NAT设备时,从地址池中选择一个可用地址或者可用地址加上端口号。
双向NAT:
- Internet的主机要访问内部网络的某个服务,首先解析对应的域名。
- 引入应用层网关DNS-ALG,NAT设备看到NS响应时选择可用的公共IP地址来替换解析的内部地址,同时添加进NAT转换表。
两次NAT:
- 大部分NAT,或者转换源地址(从内部网络到外部网络的方向)或者转换目的地址(从外部网络到内部网络的方向) 。
- 内部网络和外部网络中的IP地址空间有重复时,这些具有重复IP地址的主机之间的分组的源地址和目的地址可能都需要进行转换。(相当于远程两个内部地址间通信)
NAT 优缺点
NAT的优点
- 大部分情况对于主机透明,缓解IP地址空间不足。
- 额外的安全保障。
- 可支持端口重定向、负载均衡、透明代理。
NAT的问题
- 违背了端到端和无状态路由的设计原则。
- NAT设备成为性能的瓶颈和可能的攻击目标。
- 有些应用和协议需要应用层网关的帮助才能穿越NAT。
- 许多应用依赖于IP服务模型的一个关键假设:所有节点都有一个唯一的全局IP地址。
- 应用层协议(如FTP)消息里面包含了IP地址和端口号时有问题。
- 应用层协议(如RTP)使用多条TCP连接之间有关联时有问题。
- 如果通信的双方都位于NAT设备之后,要采用相应的NAT穿越技术。
- 通过UPnP(Universal Plug and Play)协议与NAT设备通信来添加NAT映射(内部IP地址+端口号到公共IP地址+端口号)到转换表。
- 将映射后的公共IP地址和端口号广而告之其他主机。
IP隧道(Tunneling)
- 在采用IP协议的网络上任意两个节点之间建立一条虚拟链路。
- 通过这些虚拟链路(虚拟接口tun)连接的节点构成了一个覆盖网(Overlay Network)。
- 还可应用在公网上构建虚拟专用网(VPN)、移动IP技术中等。
- 隧道可由管理人员手工配置,也可通过一个隧道建立协议自动建立。
- 隧道封装协议
- IP-in-IP(RFC2003)
- 原有的IP分组作为IP分组的数据部分,源和目的地址分别为隧道的两端,协议号为4。
- 原有IP分组头部除了其TTL减一和必要的检验和的重新计算外,其他头部字段都不变。
- GRE(Generic Routing Encapsulation)(RFC2890)
- 在任何网络层协议之上传输任何协议的分组提供封装支持。
- 用于IP网络时,IP分组头部协议字段为0x47表示GRE分组。
- PPTP为微软开发的私有协议(RFC2637),用于封装一个PPP分组(GRE头部的协议类型为0x880B)。
- L2TP是IETF开发的封装协议(RFC2661)。
- 可以通过UDP(端口为1701)或者IP协议(协议号为115)来传输。
- L2TP封装了一个PPP帧,提供了隧道两端的认证协议,但是自身并不包含加密功能,而是依赖于IPSEC。
- L2TPv3(RFC3931)则除了可以封装PPP帧外还可以封装包括以太网在内的其他数据链路层协议帧。
- 在任何网络层协议之上传输任何协议的分组提供封装支持。
路由协议(5.4)
分布式动态路由协议
- 支持网络拓扑动态变化
- 大多数情况下网络拓扑稳定。
- 分布式:算法和协议实现分散到各节点(路由器)
- 节点存储和处理能力相对较强。
- 主要包括:链路状态路由和距离向量路由。
- 支持网络拓扑动态变化
自治系统AS(Autonomous System)
- Internet规模大,路由消息、路由表和收敛性要求进行不同区域的路由控制,实现不同路由协议的层次路由(分层分段进行的路由)。
- AS由一个或者多个独立的管理实体控制的采用相同路由策略的网络和路由器组成。
- 分配一个16比特的自治系统编号(ASN)。2007年RFC 4893扩充为32比特,X.Y来表示。
- 自治系统内部选择各自的内部路由协议(IGP)。
- 自治系统之间运行外部路由协议(EGP)。
网络拓扑图
- 网络拓扑用图表示
- 节点对应路由器。
- 边对应路由器之间的链路。
- 边的权重对应链路的花费
- 花费可能是距离、信道带宽、平均通信量、通信开销、队列平均长度、测量到的时延和其它一些因素的综合。
- 源到目的地之间的路径由一系列链路组成:
- 路径中的第一条链路连接到源。
- 路径中的最后一条链路连接到目的地。
- 对应所有的i,路径中的第i和i-1条链路连接到同一个节点。
- 最小花费路径:源到目的地之间所有可能路径的链路花费总和最小。
- 若所有的链路花费相同(比如取1,即段跳值),则最小花费路径即最短路径。
Dijkstra 算法
- 图论:给出一个图拓扑(及链路花费),任何一个节点能找到到其它所有节点的最小花费路径。
- 基于最优原理
- 如果节点A到节点B的最优路由经过了节点C,则该路由上的A到C和C到B分别也是节点A和节点C、节点C和节点B的最优路由。
- 基本思想:由于所有链路花费非负,经过迭代的方法,按照到源节点的最短路径花费的递增的顺序,逐步寻找到那些离源节点越来越远的节点。
- 第一轮,从源的直接邻居中寻找到离源节点最近的节点。
- 第二轮,从(源和第一轮找到的节点)的邻居中寻找到离源节点次近的节点。
- 第三轮,从(源和第一轮、第二轮找到的节点)的邻居中寻找到离源节点第三近的节点。
- …
- 标记节点集合:初始为源,每轮选择的节点加入到标记节点集合。所有节点都已加入,则算法结束。
链路状态 LS 路由
- 邻居发现过程
- 路由器定期在链路上发送报文给自己的邻居,通过从链路上收到的来自于邻居节点(包含节点ID)的报文来发现邻居(和双向链路)。
- 到邻居节点的花费可以通过手工配置或者通过测量延迟的方法来获得。
- 每个节点根据其所有邻居列表和到邻居的花费组建链路状态分组(LSP),然后通过扩散的方法传播给所有路由器。
- 每个节点根据了解到的当前全局拓扑以Dijkstra算法计算路由。
链路状态信息的分发
- 链路状态分组(LSP)的传输不能依赖路由表。
- 扩散法
- 路由分组包括顺序号,节点记录最新收到的来自于各个节点的最大顺序号。
- 过时、重复的信息(比较顺序号)丢弃,新的信息被扩散。
- 顺序号重复使用,并且路由器可能崩溃。解决方法:
- 顺序号足够大(32比特)
- 只要顺序号增长的幅度不会太大,以至于在LSP分组被移走之前顺序号增长的幅度就大于整个顺序号空间n的一半。
- 对于每个顺序号a,一半顺序号大于a,另一半小于a。
- |a-b|
n/2且a>b,则认为a小于b。
- 增加一个计时(age)字段:丢弃过时的路由器信息。
- 重启时必须等待前面的age超时再扩散LSP。【防止新发送的 LSP 被认为是「旧的」而被丢弃】
- 顺序号足够大(32比特)
- 依然会有问题
- 假设一个路由器出现故障(ARPAnet 初期),发送三个更新消息,顺序号分别为a、b、c,并且满足a < b < c < a。【重复受到 a b c a ... 的 LSP 报文,并且由于 LSP 报文要经过一定的时间才会减 age,造成不断更新来不及减少 age】
- 解决方法:有限时间内顺序号永远不回绕。
- 回绕时,加快(扩散age=0的LSP)并等待age超时。
优化扩散 LSP
- 节点间LSP交换采用可靠传输机制: 扩散LSP时要求ACK。
- 收到LSP后不是马上扩散,而是等待一段时间,丢弃这段时间来的重复和过时的LSP,减少负载开销。
- 路由器从X收到S的LSP时
- 如果顺序号更新,则接受,增加S的状态,设置ACK X,设置Send给其它路由器;
- 如果更老,则忽略;
- 如果相等,则设置ACK X,清除Send X。
- 轮流扫描ACK和Send标志,发送实际的报文。
- 路由器从X收到S的LSP时
OSPF(Open Shortest Path First)
参考链接:华为 OSPF 技术指导;wiki 开放式最短路径优先
- 典型的链路状态路由协议即OSPF(开放最短路径优先协议)。
- OSPF支持各种类型的网络
- 点到点链路:连接两个路由器节点的双向边来表示。
- 末端网络(Stub network):路由器节点到网络节点的单向边。
- 多个路由器连接在一个广播(共享)网络
- 路由器之间的双向边。
- 引入网络节点,路由器节点通过双向边连接到网络节点,网络节点到路由器节点的边的花费为0。
- NBMA(Non-broadcast multiple access):路由器之间的双向边。
OSPF LSP:LSA
- OSPF的LSP称为链路状态通告LSA(Link State Advertisement)。
- 路由器LSA(第1类 LSA)描述路由器周围情况。
- 网络LSA(第2类 LSA)描述网络的链路状况。
- 选取路由器DR(Designated Router)负责扩散网络LSA。
- 引入邻接关系的概念
- 广播链路中
- 通过Hello协议选取DR和BDR(备份DR),比较优先级字段,越高优先为DR,相同时选择更高的路由器ID。
- 只有DR和BDR与其他路由器有邻接关系。
- 避免广播链路中邻居路由器的LSP的互相扩散。
- 点到点链路上邻居等同于邻接。
- 链路状态信息只有在邻接关系的路由器间交换
- 通过组播地址224.0.0.5表示所有OSPF路由器,224.0.0.6表示DR和BDR路由器。
- 节点在广播链路扩散LSP时首先传输给DR,然后传输给所有OSPF路由器。
- 广播链路中
OSPF 区域
- OSPF支持区域,每个区域通过一个32比特的区域ID来标识。
- 主干区域的区域ID为0(0.0.0.0),其他区域为本地区域。
- 每个区域内部都运行一个基本链路状态路由算法。
- 区域内(intra-area)路由只需根据区域内部的路由信息来选择路由。
- 区域间(inter-area)路由必须通过主干区域,限制路由的规模。(先区域间,后区域内的层次路由)
- 区域边界路由器(ABR)连接到多个区域
- ABR必须要连接到主干区域。
- ABR与主干区域不连通时引入虚拟链路
- 虚拟链路属于主干区域。
- 实现虚拟链路的两个ABR应该连接到同一个本地区域,虚拟链路的路由使用该区域内路由完成。
OSPF 路由器
- 主干路由器:主干区域内的路由器,包括ABR。
- 内部路由器:不连接到主干区域的路由器。
- ASBR:连接其他AS的路由器,可在本地或者主干区域。
跨区域(区域间)的LSA
- 汇集LSA(第3类 LSA)
- 汇总本地区域的拓扑信息的链路状态。
- ABR将其扩散到主干区域,然后扩散到其他区域。
跨AS的LSA
- AS外部LSA(第5类 LSA)
- 包括从其他自治系统收到的外部路由信息。
- 由ASBR扩散至自治系统,进一步由ABR扩散到所有区域。
- 到外部路由的花费的定义
- 类型1:外部路由花费和内部路由花费的和。
- 类型2:外部路由花费,忽略内部路由花费,适用于外部路由花费的数量级远远大于内部路由花费的情况。
- 有多个ASBR时选择哪个出口?通过ASBR汇集LSA(第4类 LSA):
- 包括到ASBR的花费。
- 由ABR负责构造,然后扩散到主干区域和其他区域
- 有多个ASBR时选择哪个出口?通过ASBR汇集LSA(第4类 LSA):
- 末端区域(Stub Area):只有一个ABR的区域
- 可不扩散汇集LSA、AS外部LSA和ASBR汇集LSA。
- 仅扩散一条缺省路由就可以了。
OSPF 消息
- Hello分组
- 链路上定期(缺省10秒)发送来发现邻居,选取DR和BDR。
- 链路状态更新(Link State Update)
- 定期(缺省30分钟)或者有变化时扩散。
- 包括多个LSA。
- 链路状态确认(Link State ACK)
- 可靠扩散,收到Update时确认。
- 数据库描述(Database Description)
- 链路恢复时在链路上发送。
- 描述各自拥有的链路状态的当前顺序号。
- 链路状态请求(Link State Request)
- 要求邻接路由器传递特定的链路状态信息。
OSPF 特征总结
- RFC 2328,运行在IP之上,协议号89;
- 采用链路状态路由算法,收敛速度快;
- 采用组播来传递消息
- 224.0.0.5 = AllSPFRouters (form DR to all routers)
- 224.0.0.6 = AllDRouters (from a router to DR and BDR)
- 支持多种Metric,而不是RIP的Hop Count;
- 支持变长子网;(包含掩码信息)
- 支持各种路由,允许交换通过其他途径了解到的路由信息,比如到外部的路由;
- 路由消息认证;
- 支持区域,引入了层次路由;
- 支持多条最短路由间的负载均衡:等价多路径路由ECMP(Equal Cost Multipath Routing)。
距离向量路由
- Bellman-Ford/Ford-Fulkerson算法基于最优原理
- 多次迭代计算,节点到S的最短距离为非递增的,k轮计算的距离为最多经过k跳的最短路径。
- 当所有最短距离不变的情况下迭代结束。
- 最多迭代次数为节点的个数。
3 种路由协议比较
IP 组播(5.5)
- 有许多一对多的组播应用
- 采用广播或者由发送者给每个接收者单播的方式。
- 应用层组播
- 不是源单播给所有接收者。
- 引入一个或者多个中继节点,每个中继节点再采用单播方式来发送数据给一部分接收者。
- IP组播(IP Multicast)
- 网络层提供组播支持,允许一个或多个发送者(组播源)发送单一的IP分组到特定的多个接收者。
- 保证每个链路上最多只会有分组的一份拷贝。
IP 组播服务模型
- 1989 年 RFC 1112 定义了任意源组播ASM(Any Source Multicast)服务模型。
- 接收者属于同一个组播组,通过组播地址标识。
- 发送者可不属于组播组,组装一个组播帧(目的地址为组播地址)发送。
- 组播组可任意规模,接收者可在Internet上任何地方,动态加入或退出。
- 组播路由器负责组播分组的转发,转发到所有成员所在的网络上,同时保证在任意一个网络上最多传输一次。
IP 组播地址
- 平坦地址结构:224.0.0.0~239.255.255.255
- 永久地址
- 由IANA分配,范围为224.0.0.0至224.0.0.255。
- 本地唯一(Link-Local),TTL取值为1,不被转发到其他链路。
- 临时地址
- 需要保证在一定的范围内没有其它的组播组在使用同一地址。
- TTL字段可用于限定组播分组的传输范围
- TTL为0限制主机范围,TTL为1限制在链路上。
- 组播路由器可配置一个TTL阈值,如果收到的组播分组的TTL字段取值小于或者等于该阈值,则不转发。
- 扩展环搜索(Expanding Ring Search)决定最合适的TTL取值。
- 发送一个TTL为1的组播分组,如果没有任何响应,则尝试TTL为2,一直继续下去。
- 本地管理组播地址,地址范围为239.0.0.0~239.255.255.255。
- 类似于单播IP地址空间的内部地址,只在内部网络中使用。
- 内部网络出口路由器保证该组播分组不会被传播到Internet之上。
IP组播分组的传输
- 点到点链路上与单播分组一样。
- 广播链路
- IP组播地址映射为链路层组播地址:直接映射。
- OUI=01:00:5E
- 第25比特为0
- 低23比特=IP组播地址的低23比特32个IP组播地址映射到同一个MAC地址。
- 发送:IP组播成链路层组播帧后发送。
- 接收:
- setsockopt加入到组播组,同时告诉网卡要求监听相应的链路层组播帧。
- IP组播地址映射为链路层组播地址:直接映射。
IGMP(Internet Group Management Protocol)
- 组成员关系协议(IGMP)用于组播路由器了解是否有成员属于组播组。用于主机-路由器之间。
- 每个组播路由器定期(60到90秒)发送Query消息给所有支持组播的主机(224.0.0.1)。
- 最小IP地址的组播路由器充当询问者,其他停止发送Query。
- 收到Query后主机发送Report其所属的组播地址G。
- 反馈抑制:Query包含最大响应时间,主机随机选择[0,Max Resp.Time]时刻准备发送Report。听到Report的主机无需再发送。
- 主机在加入组播组时主动发送Report。
- 软状态机制:
- 定期的Query刷新状态。
- 超时时移走状态信息。
- 离开时可
- 悄悄离开,但可能会浪费带宽(无组播成员,仍然在传输)。
- 最近一次组成员询问中发送report消息的主机,则发送Leave Group消息给224.0.0.2(所有支持组播的路由器)。
- Querier发送指定了组播组的Query消息来询问对于特定的组播组G是否还有其他成员属于该组播组。
IGMP 消息
- RFC 3376给出了IGMPv3规范,支持单一源组播SSM(Single Source Multicast)。
- 组播组通过(源,组播地址)标识。
- Query消息增加源IP地址列表。
- IGMPv3Report:指出要过滤和允许接收的源IP地址列表。
- IGMP建立在IP上,协议号为2 。
移动节点的路由(5.6)
- 移动主机(MH)在位置的移动过程中
- 仍然接入同一个IP子网,使用第二层移动或者该IP子网本身提供的移动机制。
- 接入另外一个IP子网
- DHCP获得新的IP地址,但是原有的TCP/UDP会话无法继续。
- Mobile IP(RFC 5944)支持无缝移动,即支持IP Mobility。
- IP地址的最初设计包含了位置(路由)和标识(主机)的关联。位置移动后,如何提供位置和标识之间的映射?
- 归属地址(Home Address):标识移动主机。
- 通信节点 CN(Correspondent Node):和移动主机通信的节点。
- MH 到新的位置时发布主机路由,路由表将非常庞大。
- 采用源路由机制,MH 在新位置通过记录路由选项了解到新的位置,CN 发送的分组采用源路由选项。
- 选项长度有限。
- 防火墙一般丢弃源路由选项的IP分组。
Mobile IP
- 归属地址(Home Address) 属于某个Home Network,标识移动主机。
- 转交地址 CoA(Care-of-Address):主机的当前位置。
- 归属代理 HA(Home Agent):部署在归属网络中,为移动主机提供IP移动服务。
- 维护 Home Address 与 CoA 之间的映射(Home Address/CoA/生命期)。
- 外地代理 FA(Foreign Agent):部署在外地网络中,为到访的移动主机提供服务。
- 移动主机自身可充当FA,通过DHCP申请的地址为协作定位转交地址(Co-located CoA)。
- 或者 FA 的地址为 CoA。
- 维护到访的 MH 与 MAC 地址的映射(MH/HA/MAC/生命期)。
- FA 到 MH 的递交采用 MAC 层的直接递交而不是 IP 子网的递交(即不需要IP转发和ARP),对于CCoA,需要修改 IP 协议栈递交到相应的应用。
Mobile IP 路由
- CN发送到MH的分组首先到Home Network,然后HA通过隧道(可采用 IP-in-IP 或者GRE)到达FA,FA通过MAC直接递交给MH。
- MH发送给CN的分组采用IP路由,或者通过隧道到HA然后到CN。
- ICMP路由通告和请求扩展为代理通告和请求消息
- 代理通告:链路上的HA、FA(一个或多个CoA地址)。
- 代理请求:请求发送代理通告。
- MH回到归属网络发送生命期为0的Register请求来删除映射。
- HA和FA映射表包含生命期:软状态机制。
- MH在外地网络时,HA采用Proxy ARP,代替MH回应以HA的MAC地址。
- MH回到归宿网络,采用Gratuitous ARP来更新路由器的ARP映射。
三角路由(Triangular Routing)问题
- 移动主机发给通信节点可以采用IP路由沿着最优路径到达通信节点,但是反过来通信节点发给移动主机的负载首先到达HA,然后通过隧道方式到达FA并最终递交给移动主机。
- 如果CN也位于外地网络中,则会出现三角路由问题(亦称Two-crossing Problem):带来带宽和传输效率的损失。
- 通信节点也作相应的更新,通过一个绑定缓存表来维护正在与其通信的移动节点的最新位置。
- CN首先查Binding Cache,如果有直接到CoA。
- 否则基于IP转发,分组到达HA,沿隧道到CoA。
- HA发送Binding Update给CN告知MH所在的CoA。
- CN的Binding Cache即将超时时发送Binding Request给HA,HA回应以Binding Update。
IPv6(5.8)
IPv4 的问题
- 地址空间(32比特)有限
- CIDR,NAT,DHCP等来缓解地址不足;
- 但考虑到:
- 新设备:PDA/Cell Phone/家用电器等;
- 新用户:发展中国家;
- 永远在线:Cable Modem,FTTH
- 路由表越来越庞大,路由效率低;
- 头部过于复杂:可变长,IP选项,无法快速处理和转发;
- 没有安全性考虑;
- 几乎没有提供 QoS 保障;
- 没有移动性支持;
- 采用 DHCPv4 自动配置或者手工配置 TCP/IP 参数。
IPv6 的优势
- 更大的地址空间(128比特):3.4 x \(10^{38}\) ;
- 更加有效的路由;
- 简化的头部格式;
- 内嵌的安全支持:IPSec;
- 头部包括 Traffic Class,Flow Label,支持 QoS;
- 考虑到 IP 移动;
- server-less 自动配置:plug-and-play。
IPv6 分组格式
- IHL去掉:固定头部
- 源端分段,和分段有关字段去掉
- 头部检验和去掉
- Next Header 代替协议字段,支持选项
- Hop Limit 代替 TTL
- Payload Length 代替 Total Length
- Traffic Class(DSCP+ECN)代替ToS
- 新增Flow Label
IPv6 拓展头部
- Next Header:用于链接扩展头部和数据部分。
- 8个基本扩展头部,建议顺序:
- 逐跳选项、目的选项、路由、分段、认证(AH)、封装安全负载(ESP)、目的选项、移动和无下一头部。
- 逐跳选项:如果有,则必须为第一个选项,途中的所有路由器都须处理。
- 分段头部:IPv6仅允许源端分段,中间节点不支持分段。
- 最小MTU从576增加到1280字节
- 路由头部:提供源路由,目前仅支持2类路由头部RH2,到达目的地后改变分组目的地址继续转发。
- 移动头部:与路由头部一起提供IP移动支持。
- 目的选项:可以出现最多2次
- 分组到达目的地时使用。
- 到达第一个目的地时使用第一个目的选项。
IPv6 地址
- 128比特的IPv6地址以16个比特为一组分为8组,每组以十六进制书写,组与组之间用冒号分割。如 8000:0000:0000:0000:0123:4567:89AB:CDEF。
- IPv6地址书写格式中的0可以压缩
- 012 → 123: 分割的多个0可以缩写,但仅仅缩写一次。
- 如 8000::123:4567:89AB:CDEF。
- IPv4 地址可在书写格式的最低32比特出现。如 ::FFFF:202.120.224.5。
- IPv6支持 任播(Anycast),其地址与IPv4的子网地址格式类似,前面为子网前缀,最后为连续多个0。
- 全局单播地址的分配考虑到了路由汇集的支持。
IPv6主机支持 Plug-and-Play
- 可构造一个链路唯一的IPv6地址(FE80::/10):
- 前面为1111 1110 10+54个0。
- 最低64位为EUI-64地址:在原来MAC地址中OUI+OUA→OUI+0xfffe+OUA,然后OUI的U/L比特取反,一般从原来的0→1。
- 如 00-d0-59-59-38-80 → FE80::2d0:59ff:fe59:3880。
- IPv6路由器发布ICMP路由通告给出所在子网的地址前缀,再和EUI-64地址合在一起组成全局地址。
IPv6 的过渡
- IPv6将地址解析、差错报告和组播成员管理结合在一起在ICMPv6中定义。
- IPv4和IPv6最重要的区别是更大的地址空间。
- 较长的一段时间之内,IPv4和IPv6会同时并存,如何过渡?
- 双协议栈:同时运行IPv4和IPv6协议栈。
- 协议转换:类似于NAT,负责分组格式转换,由于会丢失一些特征不再建议使用。
- 隧道:
IPv6 隧道
- 如何找到隧道的另一端?
- 人工配置。
- 隧道代理(Tunnel Broker):RFC3053帮助用户配置包括6in4在内的IP隧道。
- 自动隧道:包括6to4、Teredo和ISATAP。
- RFC 3056:6to4 自动隧道
- 引入6to4地址2002::/16,接下来32比特为IP地址。
- 128.178.156.38 → 2002:80b2:9c26:0:EUI (2002:ipv4/48)
- 6to4主机A和另外一个6to4主机B(从其16比特前缀为2002了解到)通信时,从中获取对方的IPv4地址,然后通过IPv4隧道A→B。
- 6to4主机A与其它IPv6主机C的通信则需要通过6to4 Relay Router,采用IPv4地址anycast地址192.88.99.1(2002:c058:6301::0),这样首先通过隧道Aany 6to4 relay router ,然后通过IPv6到达目的地。
- 引入6to4地址2002::/16,接下来32比特为IP地址。
数据链路层
5.1 数据链路层服务
- 术语
- 主机和路由器:节点 nodes
- 连接相邻节点的通信信道:链路 links【物理链路和数据链路,这里是指数据链路】
- 有线链路 wired links
- 无线链路 wireless links
- 局域网 LANs
- 链路层数据分组:帧 frame ,封装网络层数据报
- 数据链路层负责通过一条链路从一个节点向另一个物理链路直接相连的相邻节点传送数据报。
- 链路层服务
- 组帧 framing
- 封装数据报构成数据帧,加首部和尾部
- 帧同步(如何从比特流中识别出帧,一般在首位加上帧定界;如果在数据中出现了冲突,可以进行转义)
- 链路接入 link access
- 如果是共享介质,需要解决信道接入 channel access 问题
- 帧首部中的 MAC 地址,用于标识帧的源和目的(不同于 IP 地址)
- 相邻节点间可靠交付
- 在低误码率的有线链路上很少采用(如光纤,某些双绞线等)
- 无线链路:误码率高,需要可靠交付【确认、重传等机制】
- 流量控制 flow control
- 协调 pacing 相邻的发送结点和接收
- 差错检测 error detection
- 信号衰减和噪声会引起差错
- 接收端检测到差错:通知发送端重传或者直接丢弃帧
- 差错纠正 error correction
- 接收端直接纠正比特差错
- 全双工和半双工通信控制
- 全双工:链路两端结点同时双向传输
- 半双工:链路两端结点交替双向传输
- 组帧 framing
- 每个主机或路由器接口
- 链路层在「适配器」(即网络接口卡-NIC)中实现或者在一个芯片上实现
- 以太网网卡,802.11 网卡,以太网芯片组
- 实现链路层和物理层
- 链接主机的系统总线
- 由硬件、软件与固件组成
- 网卡间通信
- 发送端:将数据报封装成帧;增加差错检测比特,实现可靠数据传输和流量控制等。
- 接收端:检测差错,实现可靠数据传输和流量控制等;提取数据报,交付上层协议实体。
5.2 差错编码
- 差错检测:差错编码
- 基本原理:将 D 编码为 DR,其中 R 为差错检测与纠正比特(冗余比特)【也叫监督位】
- 差错编码可分为检错码与纠错码
- 对于检错码,如果编码集的汉明距离 \(d_s=r+1\),则该差错编码可以检测 r 位的差错;
- 对于纠错码,如果编码集的汉明距离 \(d_s=2r+1\),则该纠错编码可以纠正 r 位的差错。
- 奇偶检验码
- 1 比特
- 二维奇偶校验
- Internet 校验和 Checksum
- 发送端:将「数据」(校验内容)划分为 16 位的二进制「整数」序列;求和 sum,补码求和(最高位进位的 1 返回最低位继续加);校验和 Checksum,sum 的反码;放入分组(UDP TCP IP)的校验和字段;
- 接收端:与发送端相同算法计算;计算得到的 checksum,为 16 位全 0(或 sum 为 16 位全 1),无错;否则说明出现了差错。
- 循环冗余校验码 CRC
- 检错能力更强大的差错编码
- 将数据比特 D 视为一个二进制数
- 选择一个 r+1 位的比特模式(生成比特模式) G
- 目标,选择 r 位的 CRC 比特 R 满足
刚好可以被 G 整除(模 2) - 接收端检错:利用 G 除
,余式全 0,无错;否则有错 - 可以检测所有突发长度小于 r+1 位差错
- 广泛应用于实际网络 (以太网,802.11WiFi,ATM)
5.3 多路访问协议
- 多路访问控制 MAC 协议
- 两类链路
- 点对点链路
- 拨号接入的 PPP
- 以太网交换机与主机间的点对点链路
- 广播链路(共享介质)
- 早期的总线以太网(同轴电缆)
- HFC 的上行链路
- 802.11 无线局域网
- 点对点链路
- 单一共享广播信道
- 两个或者两个以上结点同时传输:干扰 interference
- 冲突 collision:结点同时接收到两个或者多个信号——接收失败
- 多路访问控制协议 multiple access control protocol
- 采用分布式算法决定结点如何共享信道,即决策结点何时可以传输数据
- 必须基于信道本身,通信信道共享协调信息!(无带外信道用于协调)
- 理想 MAC 协议
- 给定:速率为 Rbps 的广播信道
- 期望:
- 当只有一个节点希望传输数据时,它可以以速率 R 发送;
- 当有 M 个结点期望发送数据时,每个节点平均发送数据的平均速率为 R/M
- 完全分散控制:无需特定节点协调;无需时钟、时隙同步
- 简单
- MAC 协议分类
- 信道划分 channel partitioning MAC 协议:多路复用技术;TDMA FDMA CDMA WDMA 等
- 随机访问 random access MAC 协议:信道不划分,允许冲突;采用冲突「恢复」机制;(局域网中用到)
- 轮转 taking turns MAC 协议:结点轮流使用信道
- TDMA: time division multiple access
- 「周期性」接入信道
- 每个站点在每个周期,占用固定长度时隙
- 未用时隙空闲 idle
- FDMA: frequency division multiple access
- 信道频谱划分为若干频道 frequency bands
- 每个站点分配一个固定的频带
- 无传输频道空闲
- 随机访问 MAC 协议
- 当结点要发送分组时信道全部数据速率 R 发送分组;没有事先的节点间协调
- 两个或多个结点同时传输——冲突
- 随机访问 MAC 协议需要定义:1. 如何检测冲突;2. 如何从冲突中恢复(例如通过延迟重传)
- 典型的随机访问 MAC 协议:
- 时隙 sloted ALOHA
- ALOHA
- CSMA CSMA/CD CSMA/CA
- 时隙 ALOHA 协议
- 假定:
- 所有帧大小相同;
- 时间被划分为等长的时隙(每个时隙可以传输一个帧);
- 节点只能在时隙开始时刻发送帧;
- 节点间时钟同步;
- 如果 2 个或以上结点同一时隙发送帧,节点即检测到冲突;
- 运行:当节点有新的帧时,在下一个时隙 slot 发送:
- 如果无冲突:该结点以在下一个时隙继续发送新的帧;
- 如果冲突:该结点在下一个时隙以概率 p 重传该帧,直至成功。
- 优点:
- 单个结点活动时,可以连续以信道全部速率传输数据;
- 高度分散化:只需同步时隙;
- 简单;
- 缺点:
- 冲突,浪费时隙;
- 空闲时隙(冲突时都以概率 1-p 不发);
- 结点也许能以远小于分组传输时间检测到冲突;
- 时钟同步;
- 效率 efficiency:长期运行时,成功发送帧的时隙所占比例。
- 当很多个节点同时要发送很多消息时,可计算得到理论最优 p 值;当节点数 N 很大时,这个概率趋近于 1/e=0.37
- 假定:
- ALOHA 协议
- 没有时隙的概念:更简单,无需同步
- 当有新的帧生成时,立即发送
- 冲突可能性增大
- 理论计算,其效率约为 1/2e=0.18
- 意义:最早提出的 MAC 协议(ALOHA 的命名为夏威夷岛上的 hello 的意思)
- CSMA 协议
- 载波监听多路访问协议 CSMA carrier sense multiple access
- 发送帧之前,监听信道(载波)
- 信道空闲:发送完整帧;
- 信道忙:推迟发送
- 1-坚持 CSMA
- 非坚持 CSMA
- p-坚持 CSMA
- 冲突可能仍然发生:信号传播延迟;
- (在发送一个帧的过程中,检测到冲突)继续发送冲突帧:浪费信道资源
- CSMA/CD 协议
- CSMA with Collision Detection
- 短时间内可以检测到冲突;
- 冲突后传输中止,减少信道浪费;
- 冲突检测
- 有线局域网易于实现:测量信号强度,比较发射信号与接收信号
- 无线局域网很难实现:接收信号强度淹没在本地发射信号强度下
- 边发边听,不发不听(指监听冲突)
- 事实上我们无法避免冲突,但是希望在发送一个最小长度的帧的过程中,即使在极端情况下(一条链路两端的结点之间),发送方也能在发送完成之间就能够检测出错误(这样的话,可以保障当我们完全发送一整个帧之后,可确认此次发送不会引起冲突)。也即一个节点发送数据帧的时间(帧长度 L/带宽 R)要小于一个 RTT,也即 \(L_{min}/R=RTT_{max}=2d_{max}/V\);
- 轮转访问 MAC 协议
- 信道划分 MAC 协议,优点在网络负载重的时候效率高,公平;
- 随机访问 MAC 协议,优点是网络负载轻时,共享信道效率高,单个结点可以利用信道的全部带宽;
- 轮转访问 MAC 协议想要结合两个的优点。
- 轮询 polling
- 主节点轮流「邀请」从属结点发送数据(有主节点,只有被邀请的时候才会发送)
- 典型应用:哑 dumb 从属设备(例如,非智能的传感器)
- 问题:轮询开销(轮询信号也要占用带宽);等待延迟(只有第 4 个结点要发送,但要等到轮询到它才能发送);单点故障;
- 令牌传递 token passing
- 控制令牌一次从一个结点传递到下一个结点
- 令牌:特殊帧
- 问题:令牌开销;等待延迟;单点故障(令牌丢失)
- MAC 协议总结
- 信道划分协议:时间、频带、码片划分
- TDMA FDMA CDMA
- 随机访问 MAC 协议
- ALOHA S-ALOHA CSMA CSMA/CD
- CSMA/CD 应用于以太网
- CSMA/CA 应用于 802.11 无线局域网
- 轮转访问 MAC 协议
- 主节点轮询:令牌传递
- 蓝牙、FDDI、令牌环网
- 信道划分协议:时间、频带、码片划分
【目录】
- 数据链路层的功能(3.1)
- 帧同步机制
- 差错检测与校正(3.2)
- 简单差错控制编码:奇偶校验码、Internet检验和、循环冗余码(CRC)、线性分组码
- 卷积码*
- RS码*
- 数据链路协议(3.3)
- 停等协议
- 滑动窗口协议
- 数据链路层协议举例(3.4)
- HDLC
- PPP
数据链路层的功能
- 数据链路层的基本功能是在物理层提供的比特流传输服务基础上,把服务用户(网络层)来的数据沿一段逻辑链路可靠地传递给相邻的节点网络层。
- 涉及4方面的内容:
- 帧同步:约定处理的基本单元(帧,或称 DL-PDU),进行帧的起始和结束定位。
- 传输过程中可能有差错、流量等需要处理和控制。
- 更有效地利用链路。
- 差错控制(可靠传递)
- 差错检测与校正。
- 反馈重发:确认和重传。
- 超时和序号:一帧可能完全消失,或重复。
- 流量控制
- 接收方的能力有限制,控制发放方的发送速率。
- 是相邻节点间。
- 链路管理
- 主要用于面向连接的服务。
- 链路的建立(准备)、恢复和关闭
- 通知对方已准备好,序号初始化等,通信过程中维持链路,链路出错时恢复链路,最后释放链路。
- 多路访问:多个节点共享一条广播链路。
- 点到点的链路相对来说要简单些。
帧同步机制
有2类通信协议(同步)机制:
- 异步协议(字符为单位同步,字符间异步:字符内连续传输)
- 在字符起始处进行同步位同步:发送方和接收方采用近似同一频率的时钟,短时间内时钟的偏移是可以忍受的。
- 同步协议(帧为单位同步,字符间同步:帧内连续传输)
- 在帧(比较大的数据单元)的起始处同步。
- 维持固定的时钟,采用某种方法(比如物理层的4B/5B编码等)将时钟信号编码进数据中。
- 面向字符的同步协议:特殊字符表示帧的开始和结束。
- 面向比特的同步协议:特殊比特模式表示帧的开始和结束。
- 字节计数的同步协议:特殊字符表示开始,字节数表示结束。
- 违例编码法:采用不在正常数据部分出现的物理信号模式。
- 固定长度(SONET/ATM/T1):搜索特定比特模式来确定开始。
起止式异步规程【异步】
- 起始位和终止位进行同步,起始位为低电平,终止位和空闲位为高电平。
- 接收端通过检测起始位的下降前沿来决定字符的开始,并作为后面各位的定时基准。
- 大部分接收端采用更短周期时钟:比如16倍时钟。
- 简单、信道有效利用率低、差错和通信控制能力差。
面向字符的同步协议
- 利用一些特殊定义的字符来标识帧的起始位置,分隔不同的段,控制信息交换的过程。
- 字符填充:特殊字符可能在数据部分出现。一种方案:
- 利用转义字符DLE(Data Link Escape)来实现数据透明
- 在控制字符前面有一个DLE时才具有特殊意义。
- 每个独立的控制字符作为普通的数据字符。
- 若数据段本身出现DLE,则在前面插入一个DLE。接收方接收到连续两个DLE,则去掉第一个DLE,并且作为普通字符看待,不再具有转义意义。例:接收到DLE/DLE/DLE/ETX表示DLE(data) + ETX(control)
- 特殊字符随采用的字符编码集而不同(ASCII/EBCDIC)。
- 利用转义字符DLE(Data Link Escape)来实现数据透明
- 有很大局限性(早期使用较多)。
面向比特的同步规程
- 通过一个特定的比特模式“01111110”来标识帧的起始位置。
- 比特填充:保证数据部分不会出现连续6个1
- 帧中的其他字段中如果出现连续5个1,则之后插入一个0。
- 当接收时,如果出现连续5个1后跟一个0,则删除0。
- 相比面向字符,兼容性好,硬件实现方便。
- 【HDLC】
字节计数的同步规程
- 同步字符来进行帧同步,SOH标志帧开始。
- 字节计数来确定帧的结束边界位置。
- CRC1对前面标题部分校验,CRC2对数据部分校验。
- 特殊字符少,但Count的差错可能是灾难性的。
- 【DDCMP】
违例编码法
- 通过不会在数据部分出现的编码信号来进行定位。
- 比如曼彻斯特编码中的高-高/低-低信号。
- 【局域网 IEEE 802】
固定长度
- SONET帧固定为810字节,每行前面三个字节头部,87字节用户数据,每帧的前面两个字节包含一个特殊的比特模式来表示帧的开始。
- 数据部分没有进行填充来保证数据透明。
- 接收方首先检查相应的帧开始模式,然后检查每隔810字节后是否也是相同的比特模式,如果不是,则重新扫描帧开始模式。
固定长度 + HEC
- ATM(异步传输模式)采用53字节的信元cell,其中5个字节的头部中最后一个字节为HEC(信头差错校正)。同步状态:
差错检测与校正
传输差错特性
链路上有两种不同的差错
- 随机差错:随机热噪声
- 随机热噪声是信道固有的、持续存在的;
- 码元(比特)的差错是独立的,和前后的码元无关;
- 随机错的概率很低,物理信道的设计保证相当大的信噪比。
- 误码率(BER):发生差错的码元数/接收的总码元数
- 突发差错:冲击噪声
- 外界的因素,持续时间短,突发性;
- 传输中产生差错的主要原因;
- 突发长度:突发差错发生的第一个码元到有错的最后一个码元间所有码元的个数。比如4800bps信道上的10ms的冲击噪声的突发长度为48比特。
差错控制编码
- 差错控制通常通过差错编码来实现。
- 基本思想:在被传送的信息中附加一些监督位(码元),在收和发之间建立某种校验关系,当这种校验关系因传输错误而受到破坏时,可以被发现甚至纠正错误,这种检错与纠错能力是用信息量的冗余度来换取的。
- 差错编码:对要发送的信息位(k)附加上按照某种数学关系产生的冗余/监督位(r)。
- 编码效率R=k/(k+r):码字中信息位所占的比例。
- 漏检率:接收者无法了解到信息位出错的概率。
- 按照:
- 是否能纠错:检错码和纠错码。
- 信息码元和冗余码元之间的关系是否为线性:线性码和非线性码。
- 信息码元和冗余码元之间的约束方式:分组码和卷积码。
- 纠正错误类型:纠正随机错误和纠正突发错误码。
- 差错编码的任务就是要根据不同的差错特性,设计出编码效率高、纠错能力强的编码。
- 实现中,根据需要尽量简化编码实现的复杂度,节省设计费用。
一些差错编码术语
- 码元:数据通信中每一个符号的通称。在差错编码中一般用二进制表示,此时对应于比特(位)。
- 码字:若干个码元序列组成的数据单元。
- 码长:码字中码元的数目。
- 码重:码字中非0数字的数目
- 对于二进制码来讲,码重W就是码字中1的数目。
- 例如码字10100,码长n = 5,码重W = 2。
- 码距(汉明/海明距离):两个等长码字之间对应符号不同的数目
- 对于二进制码字而言,两个码字之间的模二相加,其不同的对应位必为1,相同的对应位必为0。
- 两个码字之间模二相加得到的码重就是这两个码字之间的距离。
- 如:码字10100与11000之间的码距d = 2。
- 最小码距:在码字集合中全体码字之间距离的最小数值,表示为dmin。
差错控制方式
- 自动请求重发ARQ(Automatic Request for Repeat)
- 接收方检测错误,通知发送方重传。
- 双向信道,发送方缓存发送的数据。
- 前向纠错FEC(Forward Error Correction)
- 接收方不仅可以检测错误,而且知道错误的位置、加以纠正。
- 采用纠错码,无需反向信道,无需重发。
- 纠错码一般说来要比检错码使用更多的冗余位,也就是说编码效率低,而且纠错的设备也比检错的设备复杂得多
- 混合纠错HEC(Hybrid Error Correction):ARQ和FEC结合
- 误码率较高时采用ARQ,低时采用FEC。(简单的FEC,不行则ARQ)
奇偶校验
Internet 校验和
【注意,这里所谓的「取反相加」,在实现的时候可以是相加最后对和取反作为检验码。
取反的意义在于,在检验阶段,只需要将所有的全部相加,结果为全 1 则正确。】
- 高层协议的软件校验方法。
- 【在 IP ICMP TCP UDP 中用到】
- 每2个字节为一组(word),按照二进制反码运算相加。
- 最后如果为单字节,则附加一个为0的字节。
- 生成校验和
- 校验和字段为0,然后二进制反码相加,最后取其反码作为校验和的取值。
- 验证校验和
- 按照二进制反码运算相加,如果为全1(-0),则说明校验和正确。
循环冗余码 CRC
- 计算机网络/存储中使用广泛的检错码
- 纠错码的编码效率较低,常采用检错码+ARQ。
- 也称为多项式码
- 二进制比特串和一个只有0和1两个系数的多项式一一对应;
- k位信息位对应于一个(k-1)次多项式K(x): 比如1011011;
- r位冗余位对应于一个(r-1)次多项式R(x): 比如110110;
- 信息位+冗余位(n=k+r)对应于一个(n-1)次多项式
- T(x)=xrK(x)+R(x)
- 编码:找一个生成多项式G(x)(r次多项式,最高位的系数为1), xrK(x)除以G(x)得到的余式为冗余位R(x)。
- 解码:接收方的码字除以G(x),如余式为0(能整除)表示无错。
- CRC的多项式运算采用模2运算(异或、按位加/减)
- 差错模式(差错多项式)E(x)=发送码字和接收码字的半加,其中1的位置对应变化信息位(差错)的位置。
- 若E(x)能被G(x)整除,则CRC不能检测这样的错误。
- CRC 硬件实现:除以G(x)的运算可以通过移位寄存器和半加器来实现
线性分组码【介绍了海明码】
- 线性:信息码元与监督码元之间的关系可以用一组线性方程来表示。
- 分组:将信息码元若干位为一组,该组监督码元仅与本组信息位有关。
- 线性分组码的线性特性
- 任意两个许用码字的和也是许用码字。
- 码集(码字集合)的最小码距等于非零码的最小码重。
- 一些线性分组码
- 奇偶校验
- 循环冗余码
- 海明码
- Reed-Solomon码
码集汉明(海明)距离和检/纠错能力
- 假设要传送的消息为A/B两个状态编码(码字)
- A: 0 B: 1
- 海明距离=1;
- 没有检错/纠错。
- A: 00 B: 11
- 海明距离=2;
- {01,10}不用,可以检测1比特错,没有纠错能力。
A: 000 B: 111
- 海明距离=3;
- 检测出两位及两位以下差错;
- 纠正1比特差错。
为检出e个错码,要求码集的海明距离d≥e+1。
为纠正t个错码,要求码集的海明距离d≥2t+1。
为检出e个错码,同时能纠正t个错码,则应满足 \(d ≥ e+t+1\) (e>t)。
例:if e = 2, t = 1, then d≥e+t+1=4
- {0000,1111} d = 4, 能检2个错码,能纠1个错码;
- {0011,0101,0110}, {1001,1010,1100} 能检1个错码;
- {1100,1011} 能纠1位错。
纠正一比特错的线性分组码:海明码
【奇偶校验可以看成是一种简单情况:海明码用了 r 组检验式。
共有 r 个校验式,因此其所能表示的空间大小为 \(2^r\);为了能纠正一位错误,显然其要包含正确的情况和任意一位出错的情况 n+1】
- 信息位越长,编码效率越高。如:k=7,冗余位最少为4,编码效率为7/11。(k→∞,编码效率k/(k+r)→100%)
- 纠正突发错误
- 【注意到,海明码只能应对随机错误而无法应对突发错误。】
- 连续P个码字排成一个矩阵,每行一个码字,从而可以纠正突发长度小于等于 P 的突发错。
- 【通过下图的排列和发送方式,将可能的 P 位长度突发错误分散到了 P 个码字中,每个码字中的错误为仅有 1 位正好是海明码能够纠正的。】
卷积码
【略】
RS 码
数据链路协议(模型)
- 有关数据链路层协议的这部分内容,主要是面向连接服务中的可靠性和流量控制,包括:
- 停等协议
- 滑动窗口协议
停等协议
- 停等协议(Stop-and-Wait)
- 发送者在发送一个帧之后停下来,等待对方确认后继续发送下一帧。
- 如果确认在一段时间后无返回,发送者超时,重传帧。
- 简单的停等协议不包含序号,这会导致一些问题。【超时重传后受到上一针延迟发来的确认帧】
- 解决这个问题的办法是使用顺序号标识帧和确认(简单的只需要1比特):只有帧发送成功才能发新帧。其中发送方维护next_frame_to_send,接收方维护frame_expected。
滑动窗口
- 停等协议在开始传输一个数据帧到确认回来这一段时间里必须等待,传播时间远大于传输时间的时候会带来很大的浪费。
- 管道(Pipelining)
- 发送方在等待确认帧回来之前可以连续发送多个数据帧
- 序号的位数有要求
- 发送方要求能够缓存那些已经发送但没有确认的帧
如何进行pipelined的差错恢复?
- 回退N (Go Back N,GBN)
- 接收方只允许顺序接收,也就是说如果一帧出错,则它后面的N帧尽管可能正确到达接收方,但被直接丢弃,不发送确认。发送方将超时,按序重传所有未被确认的帧。
- 选择重传(Selective Repeat,SR)
- 若某一帧出错,后面送来的正确帧不是简单地丢弃,而是缓存在接收缓冲区,当发送方意识到坏帧后,只重传坏帧。一旦重传的帧收到后,接受方与原先已收到但暂存在缓冲区中的其余帧一起按正确的顺序递交。
滑动窗口
- 滑动窗口的形成
- 序号计数(n比特)是有限的,将会回绕。
- 发送缓冲区和接收缓冲区是有限的。
从而形成发送窗口、接收窗口
- 窗口是动态滑动的、大小是不固定的,但有限的。
- 实际上,发送窗口即已发送、尚未确认的帧;接收窗口是可用的接收缓冲区大小。
停等协议可以看成是一个发送窗口=接收窗口=1的滑动窗口协议。
GBN为发送窗口 ≤ 2n-1、接收窗口=1的滑动窗口协议。
SR协议:1≤ 接收窗口≤ 发送窗口≤ 2n-1。
TCP使用顺序号、累加确认、检验和和超时重传机制,和GBN非常类似,但是许多TCP的实现都缓冲那些收到的但失序的TCP段。
数据链路层协议
数据链路层协议: HDLC
HDLC(High-Level Data Link Control)
- 可提供面向连接和无连接的服务。
- 面向比特的同步规程:01111110
- 地址:标识目的节点或源节点(主站/从站),最低(E)为扩展位。
- 控制:指出属于那种帧
- P(oll)/F(inal):主站发出时表示P,如果为1要求对方响应;从站发出时表示F,为1表示响应结束。
- 信息I帧:携带用户数据,帧的序号在N(S)中。并且支持捎带确认:N(R)表示之前的所有帧都正确。
- 监控S帧:控制传输,亦可实现单独确认。(没有数据部分)
- 无编号U帧:其它链路控制功能
- M=00000:UI(无编号信息)帧
- 三种站点:
- 主站:控制链路的操作,发送 COMMAND。
- 从站:响应主站的控制,发送 RESPONSE。
- 主从站:主站和从站的结合。
- 两种链路配置
- 非平衡配置:一个主站,多个从站。
- 平衡配置:两个主从站。
3 种数据传输模式
- 正常响应模式 NRM:用于非平衡配置中。主站发起数据传输,从站响应。
- 异步响应模式 ARM:用于非平衡配置中,从站也可发起数据传输,但主站维护链路。很少使用。
- 异步平衡模式 ABM:用于平衡配置,任何一个站点可以发起数据传输。
S帧:
- RR(00,Receive ready):准备接收I帧。
- RNR(10,Receive not ready):尚未准备好接收。
- REJ(01,Reject):回退N。
- SREJ(11,Selective reject):选择重传。
U帧:一些典型的U帧
- SABM:设置ABM模式。
- DM:断开模式。
- DISC:终止链路连接。
- UA:确认U帧。
- UI: 无编号信息帧。
- RSET:重置位,reset N(R),N(S)。
PPP
SLIP是一种面向字符的同步协议,仅仅包含封装功能。
- PPP (Point-to-Point Protocol)
- 提供无连接服务。
- 异步PPP:面向字符的同步协议,常用软件实现。
- 同步PPP:面向比特的同步协议,常用硬件实现。
异步PPP的字符填充
- 转义字符为0x7d=01111101。
- 如果需要转义,则发送0x7d+ (数据字节半加0x20):0x7e - 0x7d5e(接收方可以通过再次半加0x20来恢复) ;0x7d本身 - 0x7d5d。
- ACCM异步控制字符映射表:用于转义控制字符
- 如果字节值n∈ (0 : 31),当ACCM中的比特n为1时进行转义。
同步PPP帧的封装方法:采用类HDLC的帧格式
- 链路控制协议 LCP(0xc021):链路维护、认证和选项协商。
- 认证机制支持 CHAP(共享密钥)和PAP(明文)。
- 网络层协议(0x0021:IP)
- 网络控制协议NCP(0x8021:IPCP):网络层协议协商
- 动态分配地址、网关、DNS服务器等。
PPP通信阶段状态转换图
- 最初为Dead状态,物理链路建立进入链路建立状态(ESTABLISH)。
- 链路建立状态:(AUTHENTICATE)
- 利用LCP协议协商选项,最大帧大小、认证机制等。
- LCP协议监测链路的质量。
- 协商、认证完成后进入网络层配置状态(NETWORK)。
- IPCP协议配置IP地址、是否压缩等。
- 进入打开状态:开始传输网络层(IP)数据(OPEN)。
- 一方发送LCP终止请求进入中止中状态(TERMINATE)。
- 中止确认后进入Dead状态(DEAD)。
局域网
5.4 ARP 协议
- MAC 地址
- 32 位 IP 地址:接口的网络层地址;用于标识网络层分组,支持分组转发
- MAC 地址(或 LAN 地址,物理地址,以太网地址)
- 作用:用于局域网内标识一个帧从哪个接口发出,到达哪个物理相连的其他接口
- 48 位 MAC 地址(用于大部分 LANs),固化在网卡的 ROM 中,有时也可以软件设置,例如 1A-2F-BB-76-09-AD
- 局域网内的每块网卡都有一个唯一的 MAC 地址
- MAC 地址由 IEEE 统一管理与分配
- 网卡生产商购买 MAC 地址空间(前 24 比特)
- 类比:MAC 地址像身份证号,IP 地址像邮政地址
- MAC 地址是「平面」地址——可携带;可以从一个 LAN 移到另一个 LAN
- IP 地址是层次地址——不可携带;IP 地址依赖于节点连接到哪个子网
- ARP 地址解析协议
- 需要(在同一个 LAN 内)在已知目的接口的 IP 地址的前提下,确定其 MAC 地址
- ARP 表:LAN 中的每个 IP 节点(主机、路由器)维护一个表
- 存储某些 LAN 节点的 IP/MAC 地址映射关系
- TTL Time To Live 经过这个时间以后该映射关系会被遗弃(典型值为 20min)
- 存储某些 LAN 节点的 IP/MAC 地址映射关系
- 例:A 想要给同一局域网内的 B 发送数据报,若 B 的 MAC 地址不在 A 的 ARP 表中,则 A 广播 ARP 查询分组,其中包含 B 的 IP 地址,其目的 MAC 地址 FF-FF-FF-FF-FF-FF
- B 接收 ARP 查询分组,IP 地址匹配成功,向 A 应答 B 的 MAC 地址(单播帧);A 在其 ARP 表中缓存 B 的 IP-MAC 地址对,直至超时
- ARP 是「即插即用」协议:节点自主创建 ARP 表,无需干预。
- 寻址:从一个 LAN 路由至另一个 LAN【可以根据 IP 地址来判断】
- 通信过程:A 通过路由器 R 向 B 发送数据报
- 关注寻址:IP 地址(数据报中)和 MAC 地址(帧中)
- 假设 A 知道 B 的 IP 地址:用户需要的,输入了域名或 IP 地址;
- 假设 A 知道第一跳路由器 R(内)接口的 IP 地址:默认网关;
- 假设 A 知道第一跳路由器 R(内)接口的 MAC 地址:ARP 协议。
- A 构造 IP 数据报,其中源 IP 地址是 A 的地址,目的 IP 地址是 B 的 IP 地址;
- A 构造链路层帧,其源 MAC 地址是 A 的 MAC 地址,目的 MAC 地址是 R 内接口的 MAC 地址,封装 A 到 B 的 IP 数据报;
- 帧从 A 发送至 R;
- R 接收帧,提取 IP 数据报,传递给上层 IP 协议;
- R 转发 IP 数据报;
- R 创建链路层帧,源 MAC 地址是 R 外接口的 MAC 地址,目的 MAC 地址是 B 的 MAC 地址,封装 A 到 B 的 IP 数据报;
5.5 以太网 Ethernet
- 「统治地位」的有线 LAN 技术
- 造价低廉 NIC 不足 100 元;
- 应用最广泛地 LAN 技术;
- 比令牌局域网和 ATM 等,简单、便宜;
- 满足网络速率需求:10Mbps-10Gbps;
- 物理拓扑
- 总线 bus:上世纪 90 年代中期前流行
- 一般是同轴电缆
- 所有节点在同一冲突域 collision domain,可能彼此冲突;
- 星型 star:目前主流网络拓扑
- 中心交换机 switch【如果把交换机换成集线器,由于集线器是物理层设备,逻辑上仍然是总线型】
- 每个节点一个单独冲突域;
- 总线 bus:上世纪 90 年代中期前流行
- 以太网:不可靠、无连接服务
- 无连接 connectionless:发送帧的网卡与接收帧的网卡间没有「握手」过程
- 不可靠 unreliable:接收网卡不向发送网卡进行确认;差错帧直接丢弃,丢弃帧中的数据恢复依靠高层协议(如 TCP),否则发生数据丢失;
- 以太网的 MAC 协议:采用二进制指数退避算法的 CSMA/CD
- 以太网 CSMA/CD 算法
- NIC 从网络层接收数据报,创建数据帧;
- 监听信道:如果 NIC 监听到信道空闲,则开始发送帧;如果 NIC 监听到信道忙,则一直等待到信道空闲,然后发送帧(1-坚持 CSMA);
- NIC 发送完整帧,而没有检测到其他节点的数据发送,则 NIC 确认帧发送成功;
- 若 NIC 检测到其他节点传输数据,则中止发送,并发送阻塞信号 jam signal;
- 中止发送后,NIC 进入二进制指数退避:
- 第 m 次连续冲突后,去 n=min(m,10),NIC 从 {0,1,2,..,2n-1} 中随机选择一个数 K;NIC 等待 K 512 比特的传输延迟时间,再重新选取等待时间;
- 连续冲突次数越多,平均等待时间越长;
- 以太网帧结构
- 发送端网卡将 IP 数据报封装到以太网帧中
- 前导码 Preamble (8B)
- 7 字节的 10101010,第 8 字节为 10101011
- 用于发送端与接收端的时钟同步
- 目的 MAC 地址、源 MAC 地址(各 6B);
- 类型 Type(2B):如 IP 数据报、Novell IPX 数据报、Apple Talk 数据报等;
- 数据 Data(46-1500B):上层协议载荷
- 有最短数据长度的要求,这是为了使得发送方可以检测到冲突,参见上一节的讨论;
- CRC(4B)循环冗余校验码:丢弃差错帧;
- 不同的以太网标准
- 相同的 MAC 协议和帧格式
- 不同速率:2Mbps 10Mbps 100Mbps 1Gbps 10Gbps
- 不同物理介质:光纤、线缆
- (以太网)交换机 switch
- 链路层设备:
- 存储-转发以太网帧
- 检查到达帧的目的 MAC 地址,选择性 selectively 向一个或多个输出链路转发帧
- 利用 CSMA/CD 访问链路,发送帧;
- 透明 transparent:主机感知不到交换机的存在
- 即插即用 plug-and-play
- 自学习 self-learning:交换机无需配置
- 链路层设备:
- 交换机:多端口间同时传输
- 主机利用独享 dedicated 链路直接连接交换机
- 交换机缓冲帧;
- 交换机在每段链路上利用 CSMA/CD 收发帧,但无冲突,且可以全双工
- 每段链路一个独立的冲突域(只有一个计算机)【称这类以太网为交换以太网】;
- 交换 switching:连接到交换机的多组主机之间可以同属传输没有冲突;
- 交换机转发表:交换表 switch table
- 交换表的每个入口 entry(交换表项):(主机的 MAC 地址, 到达主机的接口 ,时间戳)
- 看起来很像路由器,但是维护的过程不同于路由协议。
- 交换机:自学习
- 交换机通过自学习,获知到达主机的接口信息
- 当收到帧时,交换机「学习」到发送帧的主机(该帧的源 MAC 地址),位于收到该帧的接口所连接的 LAN 网段;
- 将发送主机 MAC 地址/接口信息记录到交换表中。
- 收到帧后
- 记录帧的源 MAC 地址与输入链路接口
- 利用目的 MAC 地址教检索交换表:
- 若交换表中检索到与目的 MAC 地址的入口
- 若目的主机位于收到帧的网段(接口),则丢弃帧;
- 否则将帧转发到该入口指向的接口;
- 若找不到,则泛洪 flood,即向除收到该帧的接口之外的所有接口转发;
- 若交换表中检索到与目的 MAC 地址的入口
- 交换机可以互联(层级结构)
- 组织机构 institutional 网络
- 路由器去往外部网络;
- 内部采用层级的交换机连接;
- 可知,这一个机构的网络是一个 IP 子网(广播域);
- 交换机 vs. 路由器
- 均为存储-转发设备
- 路由器:网络层设备,检测网络层分组首部;
- 交换机:链路层设备,检测链路层帧的首部;
- 均使用转发表
- 路由器:利用路由算法(路由协议)计算(设置),以及 IP 地址
- 交换机:利用自学习、泛洪构建转发表,一句 MAC 地址;
- 均为存储-转发设备
- 交换机可以看成是多端口的网桥,两者原理上完全类似;
- 所谓直通传输 cut through,就是在接收的同时就可以进行转发;
5.6 PPP 协议
- 一个发送端,一个接收端,一条链路:比广播链路容易
- 无需介质访问控制 MAC
- 无需明确的 MAC 寻址
- 例如,拨号链路,ISDN 链路
- 常见点对点数据链路控制协议
- HDLC: High Level Data Link Control
- PPP(Point-to-Point Protocol)
- PPP设计需求[RFC 1557]
- 组帧:将网络层数据报封装到数据链路层帧中
- 可以同时承载任何网络层协议分组(不仅仅是 IP 数据报)
- 可以向上层实现分用(多路分解)【就是在数据帧中增加字段来描述是哪一个协议】
- 比特透明传输:数据域必须支持承载任何比特模式【特殊比特进行填充处理】
- 差错检测(无纠正)
- 连接活性 Connection liveness 检测:检测、并向网络层通知链路失效
- 网络层地址协商:端节点可以学习/配置彼此网络地址【支持动态地址分配,比如完成 IP 地址协商】
- 组帧:将网络层数据报封装到数据链路层帧中
- 无需支持的功能【差错恢复、流量控制等由高层协议处理,例如 TCP 】
- 无需差错纠正/恢复
- 无需流量控制
- 不存在乱序交付
- 无需支持多点链路
- PPP 数据帧
- 通过协商,可以省略 address control protocol 中一个和 check 中两个,共 5 个字节
- 字节填充 Byte Stuffing
- 「数据透明传输」需求:数据域必须允许包含标志模式 <01111110>
- 发送端: 在数据中的<01111110>和 <01111101>字节前添加额外的字节 <01111101> (“填充(stuffs)”)
- PPP 数据控制协议
- 在交换网络层数据之前,PPP 数据链路两端必须
- 配置 PPP 链路:最大帧长;身份认证 authentication 等
- 学习/配置网络层信息:
- 对于 IP 协议:通过交换 IPCP 协议(IP Control Protocol)报文(IP 分组首部的「上层协议」字段取值 8021),完成 IP 地址等相关信息配置
- 在交换网络层数据之前,PPP 数据链路两端必须
5.7 802.11无线局域网简介
- 802.11b
- 2.4-2.5GHz 免费频段 unlicensed specturm
- 最高速率 11Mbps
- 物理层采用直接序列扩频 DSSS 技术
- 所有主机使用相同的码片序列
- 802.11a
- 5-6GHz 频段
- 最高速率 54Mbps
- 802.11g
- 2.4-2.5GHz 频段
- 最高速率 54Mbps
- 802.11n
- 多天线 MIMO
- 2.4-2.5GHz
- 最高速率 600Mbps(四天线同时)
- 均采用 CSMA/CA 多路访问控制协议
均有基础设置(基站)网络模式和特定网(自组网)网络模式
体系结构
- 无线主机与基站通信
- 基站 base station = 访问点 AP
- 基本服务集 BSS Basic Service Set,也成为单元 cell
- 无线主机与基站通信
信道与 AP 关联
- 802.11b: 2.4GHz-2.485GHz频谱划分为11个不同 频率的信道
- 每个 AP 选择一个频率(信道)
- 存在干扰可能:相邻的 AP 可能选择相同的信道【相同或相邻都会产生干扰,因此要有 MAC 协议】
- 主机:必须与某个 AP 关联 associate【例如接入 WiFi】
- 扫描信道,监听包含 AP 名称(服务集标识符 SSID)和 MAC 地址的信标 beacon 帧
- 选择一个 AP 进行关联
- 可能需要进行身份认证
- 典型情形:运行 DHCP 获取 IP 地址等信息
- 802.11b: 2.4GHz-2.485GHz频谱划分为11个不同 频率的信道
802.11AP关联:被动扫描与主动扫描
- 被动扫描(scanning)
- 各 AP 发送信标帧
- 主机向选择的 AP 发送关联请求帧
- AP 向主机发送关联响应帧
- 【关联结束,之后可能是 DHCP 分配地址】
- 主动扫描
- 主机主动广播探测请求帧 Probe Request Frame
- AP 发送探测响应帧 Probe Response Frame
- 主机向选择的 AP 发送关联请求帧;AP 向主机发送关联响应帧;
- 被动扫描(scanning)
802.11:多路访问控制
- 避免冲突: 2+ 结点同时传输
- CSMA – 发送数据前监听信道:避免与正在进行传输的其他节点冲突
- 不能像CSMA/CD那样,边发送、边检测冲突!
- 无线信道很难实现(信号衰减)
- 无法侦听到所有可能的冲突:隐藏站、信号衰落
- 目标:避免冲突(avoid collisions)-CSMA/C(ollision)A(voidance)
IEEE 802.11 MAC协议: CSMA/CA
发送方
- 若监听到信道空闲了DIFS时间【而不是空闲就发送】,则发送整个帧(无同时检测冲突,即CD)
- 若监听到信道忙,则
- 随机退避计时
- 当信道空闲时,计时器倒计时;
- 当计时器超时,发送帧
- 若没有收到 ACK,则增加随机退避间隔时间,继续进行等待
接收方
- 若正确接收帧,延迟 SIFS(明显小于 DIFS) 后,向发送端发送 ACK(由于存在隐藏站问题)
基本思想:允许发送端“预约”(reserve)信道,而不是随 机发送数据帧,从而避免长数据帧的冲突
- 发送端首先利用CSMA向BS发送一个很短的 RTS(request-to-send) 帧
- RTS 帧仍然可能彼此冲突 (但 RTS 帧很短)【因此到来的信道浪费要比数据帧冲突的小很多】
- BS 广播一个 CTS(clear-to-send) 帧作为对 RTS 的响应
- CTS 帧可以被所有结点接收
- 消除隐藏站影响
- 发送端可以发送数据帧
- 其他节点推迟发送
- 利用很小的预约帧彻底避免了数据帧冲突!
- 发送端首先利用CSMA向BS发送一个很短的 RTS(request-to-send) 帧
802.11数据帧有4个地址字段
- 地址 4 用于自组网络
网络安全
6.1 网络安全基础
- 我国互联网基本状况
- 引自《2014年中国互联网网络安全报告》
- 截至2014年12月底:网站总量为364.7万 独立域名为481.2万 ISP为1068家 网民规模为6.49亿 手机网民规模达5.57亿 互联网普及率为47.9%
- 我国互联网网络安全状况
- 总体平稳,形势严峻
- 基础网络仍存在较多漏洞风险
- 2014年,CNCERT/CC协调处理涉及电信企业漏洞事件1578起
- CNVD(国家信息安全漏洞共享平台)收录与基础电信企业软硬件 资产相关漏洞825个,66.2%与路由器、交换机等网络设备相关
- 云服务日益成为网络攻击重点目标
- 域名系统面临严峻的拒绝服务攻击
- 2014年,针对我国域名系统,流量规模达1Gbps以上的拒绝服 务攻击事件,日均约187起
- 针对重要网站的域名解析篡改攻击频发
- 网络攻击威胁逐渐向工业互联网渗透
- 2014年9月,出现一种远程木马“Havex”,利用OPC(开放通 用通信协议)工业通信技术,扫描发现工业系统联网设备,收集 工控设备详细信息并回传
- 可以接收、执行恶意代码
- 分布式反射型攻击逐渐成为拒绝服务攻击的重要形式
- 涉及重要行业和政府部门的高危漏洞事件增多
- 基础应用或通用软硬件漏洞风险凸显
- “心脏出血”(Heartbleed)
- “破壳”(Bash Shell Shock)
- 漏洞风险向传统领域、智能终端领域泛华演进 【电力、高速公路等传统领域;智能终端】
- 网站数据和个人信息泄露仍呈高发态势
- 移动应用程序成为数据泄露的心主体
- 移动恶意程序逐渐从主流应用商店向小型网站蔓延
- 具有短信拦截功能的移动恶意程序大爆发 【用户信息泄露】
- 针对金融、电信行业的网页仿冒事件大幅增加
- 钓鱼站点逐渐向云平台迁移
- 针对政府部门和重要行业单位网站的网络攻击频度、烈度和复杂度加剧
- 互联网网络安全一组数据(2014年)
- 木马和僵尸程序监测:
- 木马或僵尸程序控制服务器IP地址总数104230(↓45.0%)
- 木马或僵尸程序受控主机IP地址总数为13991480(↓25.2%)
- “飞客”蠕虫监测:
- 全球互联网月均近943万台主机IP地址感染“飞客”蠕虫
- 移动互联网安全监测:
- CNCERT/CC捕获或通过厂商交换获得的移动互联网恶意程序样本数为951059(↑35.3%)
- 恶意扣费类居首,为522889(55.0%),资费消耗类(15.3%)、 隐私窃取类(12.9%)分列二、三位
- 针对Android平台的占99.9%,其次是Symbian,占0.1%
- CNCERT/CC捕获或通过厂商交换获得的移动互联网恶意程序样本数为951059(↑35.3%)
- 网站安全监测:
- 我国境内被篡改网站数量为36969个(↑45.0%)
- 政府网站1763个(↓27.4%)
- 监测到仿冒、钓鱼页面99409个
- 监测到40186个境内网站被植入后门
- 我国境内被篡改网站数量为36969个(↑45.0%)
安全漏洞
- CNVD收集新增漏洞9163个
- 前三甲漏洞:应用程序漏洞(68.5%)、Web应用漏洞 (16.1%)、网络设备漏洞(6.0%)
网络安全基本概念
网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而 遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。
网络安全基本属性
- 机密性(confidentiality): 只有发送方与预定接收方能够理解报文内容
- 发送方加密报文 接收方解密报文
- 身份认证(authentication): 发送方与接收方希望确认彼此的真实身份
- 信息完整性(message integrity): 发送方与接收方希望确保信息未被篡改(传输途中或者后期),发 生篡改一定会被检测到
- 可访问与可用性(access and availability): 网络服务必须对被授权用户可访问与可用
- 机密性(confidentiality): 只有发送方与预定接收方能够理解报文内容
于此同时
- 相对性:只有相对的安全,没有绝对的安全
- 时效性:新的漏洞与攻击方式不断发现
- 相关性:新配置、新系统组件可能会引入新的安全问题
- 不确定性:攻击时间、攻击者、攻击目标和供给发起的地点都具有不确定性
- 复杂性:网络安全是一项系统工程,需要技术和非技术的手段【如法律】
- 重要性:网络安全关乎国家、政府、企业、个人的安全
网络安全研究领域
- 入侵者 bad guys 如何供给计算机网络
- 如何防护网络对抗攻击
- 如何设计网络体系结构免疫 immune 攻击
Internet 最初设计几乎没考虑安全性
- 最初愿景: “一组彼此信任的互助用户连接到 一个透明网络”进行信息共享
- Internet协议设计者扮演了“追赶者”(catchup)角色
- 网络安全需要在网络各个层次考虑!
6.2 网络安全威胁
- 攻击方式
- 窃听(eavesdrop): 窃听信息
- 插入(insert):主动在连接中插入信息
- 假冒(impersonation): 可以通过伪造(spoof)分组中的源地址(或者分组的任意其他字段)
- 劫持(hijacking): 通过移除/取代发送发或者接收方“接管”(take over)连接 【不同于 eavesdrop 接收方可能接收不到消息】
- 拒绝服务DoS(denial of service): 阻止服务器 为其他用户提供服务(e.g., 通过过载资源)
- 映射(Mapping):
- 发起攻击前: “探路”(case the joint) – 找出网络上在运行什么服务
- 利用ping命令确定网络上主机的地址 【找到主机】
- 端口扫描(Port-scanning): 依次尝试与每个端口建立 TCP 连接
- nmap (http://www.insecure.org/nmap/),广为使用的国外端口扫描工具之一
- 对策(Countermeasures)?
- 记录到达的网络流量
- 分析、识别出可疑活动( IP地址和端口被依次扫描)【一个主机,例如是 Web 服务器,但是频繁有 IP 来请求你不开启的端口】
- 分组“嗅探”(sniffing):
- 广播介质(共享式以太网,无线网络)【总线网络,或者是早期的 Hub 网络】
- 混杂(promiscuous) 模式网络接口可以接收/记录所有经过的分组/帧【第二层,混杂模式,所有经过的帧都会接收】
- 可以读到所有未加密数据(e.g., 包括口令!)
- Wireshark就是一个典型免费的分组嗅探软件
- 对策
- 组织中的所有主机都运行软件,周期性监测网络接 口是否工作在混杂模式
- 每段广播介质连接一台主机(如交换式以太网)
- IP欺骗(Spoofing):
- 直接由应用生成“原始”IP分组,可以设置分组的源IP地址字段为任意值
- 接收方无法判断源地址是否被欺骗
- e.g.: C冒充B【在做一些事情的时候,不希望被追踪】
- 对策: 入口过滤(ingress filtering)
- 路由器不转发源IP地址无效的IP分组 (e.g., 源IP地址不属于所连接网络)
- 很有效!但是不能强制所有网络都执行入口过滤
- 拒绝服务DOS(Denial of service):
- 向接收方恶意泛洪(flood)分组,淹没(swamp)接收方
- 带宽耗尽;
- 资源耗尽;
- 分布式拒绝服务攻击 (DDOS): 多个源主机协同淹没接收方
- e.g., C与另一个远程主机协同对A进行SYN攻击(TCP 请求连接)
- 向接收方恶意泛洪(flood)分组,淹没(swamp)接收方
- DDoS攻击过程: 1. 选择目标;2. 入侵(break into)网络中主机(构建僵尸网络);3. 控制僵尸主机向目标发送分组【直接式】
- 反射式DDoS攻击:1. 选择目标;2. 入侵网络中主机(构建僵尸网络);3. 选择反射服务器;4. 借助发射服务器向目标发起攻击;【要事先扫描网络中有哪些可以作为反射服务器。利用 IP 欺骗将僵尸网络发送的请求地址修改为目标服务器,发送给反射服务器;反射服务器会与目标服务器做出反应,从而淹没目标服务器】
- DOS: 对策
- 在到达主机前过滤掉泛洪分组(e.g., SYN)
- 可能好坏一起扔
- 追溯(traceback)攻击源
- SYN cookie[RFC 4987]
- 在到达主机前过滤掉泛洪分组(e.g., SYN)
6.3 密码学基础
- 密码学(cryptography)术语
- \(m\):明文
- \(K_A (m)\):密文,利用秘钥KA 加密
- \(m = K_B (K_A (m))\):利用秘钥KB 解密
- 对称密钥加密: Bob和Alice共享相同(对称)密钥: \(K_s\)
- e.g., 单码替代密码的替代模式
- 公开密钥加密(非对称)
- Alice 要发送消息给 Bob,利用 Bob 的公钥加密,Bob 利用其私钥解密
- 破解加密方法
- 唯密文攻击(cipher-text only attack): 入侵者(如 Trudy)只截获到密文,基于对密文的分析进行破解
- 暴力破解(brute force):尝试所有可能的密钥
- 统计分析
- 已知明文攻击(known-plaintext attack): 入侵者已知(部分)明文以及与之匹配的密文
- e.g., 在单码替代密码 (monoalphabetic cipher)中,入侵者已确认字母a,l,i,c,e,b,o 的替换关系
- 选择明文攻击(chosen-plaintext attack): 入侵者可以获取针对选择的明文的 密文
- 唯密文攻击(cipher-text only attack): 入侵者(如 Trudy)只截获到密文,基于对密文的分析进行破解
- 传统加密方法
- 替代密码(substitution cipher): 利用一种东西替代另一种东西
- 凯撒密码(Casesar cipher):一个字母替代另一个字母
- 凯撒密码(Casesar cipher):一个字母替代另一个字母
- 如k=3,“bob. i love you. alice”→“ere, l oryh brx. dolfh”
- 单码(字母)替代密码(monoalphabetic cipher)
- 加密秘钥: 26个字母集合向26个字母集合的映射
- 多码(字母)替代加密(polyalphabetic encryption):使 用多个单码替代密码,明文中不同位置的字母使用不 同的单码替代密码
- 例如,使用采用两个凯撒密码的多码替代加密
- 加密秘钥: (C1 =5, C2 =19); C1 , C2 , C2 , C1 , C2 ;……【这一序列循环使用】
- 凯撒密码(Casesar cipher):一个字母替代另一个字母
- 换位(transpositions)密码: 重新排列明文中的字母
- 置换法(permutation method)
- 将明文划分为固定长度(d)的组,每个组内的字母按置换规则(f)变换位置
- 密钥:(d, f)
- 列置换加密
- 将明文按行组成一个矩阵,然后按给定列顺序输出得到密文
- k=4(矩阵列数), (2, 3, 1, 4)(输出顺序)
- 列置换加密的密钥包括列数和输出顺序
- 可以用一个单词来表示
- 单词长度表示列数,单词中的字母顺序表示输出顺序
- 置换法(permutation method)
- 替代密码(substitution cipher): 利用一种东西替代另一种东西
- 现代加密技术
- 现代加密技术的基本操作包括经典的替代和置换
- 不再针对一个个字母,而是针对二进制位操作
- 现代加密技术主要分为:
- 对称密钥加密
- 非对称密钥加密(公开密钥加密)
- 对称密钥加密:【传统的替代和置换都是对称的】
- 流密码(stream ciphers)
- 分组密码,也称块密码(block ciphers)
- 现代加密技术的基本操作包括经典的替代和置换
- 流密码
- 基本思想:
- 首先利用密钥K产生一个密钥流:z=z0 z1 z2 …
- 然后使用如下规则对明文串x=x0 x1 x2 … 加密:y=y0 y1 y2 …=Ez0(x0)Ez1 (x1)Ez2(x2)…
- 解密时,使用相同的密钥流与密文做运算 (XOR)【两次异或即得到明文】
- 基本思想:
- 分组密码
- 将明文序列划分成长为 \(m\) 的明文组
- 各明文组在长为 \(i\) 的密钥组的控制下变换成长度为 \(n\) 的密文组
- 通常取 n=m【例如 64bits 的明文变为 64bits 的密文】
- n>m 扩展分组密码
- n<m 压缩分组密码
- 典型分组密码结构:Feistel分组密码结构
- 在设计密码体制的过程中,Shannon提出了能够破坏对密码系统进行各种统计分析攻击的两个基本操作: 扩散(diffusion)和混淆(confusion)
- 基于1949年Shannon提出的交替使用替代和置换方式构造密码体制
- Feistel 分组密码结构
- 基于“扩散”和“混乱”的思考 ,Feistel提出通过替代和置换交 替操作方式构造密码
- Feistel是一种设计原则,并非一个特殊的密码
- Feistel结构的分组密码安全性取决于:
- 分组长度
- 分组长度越大,安全性越高,加密速度越慢,效率越低
- 目前常用的分组加密算法的分组长度取64位
- 子密钥的大小
- 子密钥长度增加,安全性提高,加密速度降低
- 设计分组密码时需要在安全性和加密效率之间进行平衡
- 循环次数
- 循环越多,安全性越高,加密效率越低
- 子密钥产生算法【每一轮的密钥都是从初始的密钥计算过来的】
- 在初始密钥给定的情况下,产生子密钥的算法越复杂,安全性越高
- 轮函数
- 一般情况下,轮函数越复杂,加密算法的安全性越高
- 分组长度
- 数据加密标准: DES
- DES: Data Encryption Standard
- IBM公司研制 1972年,美国国家标准局NBS (National Bureau of Standards)开始实施计算机数据保护标准的开发计划。
- 1973年5月13日,NBS征集在传输和存贮数据中保护计算 机数据的密码算法。
- 1975年3月17日,首次公布DES算法描述。
- 1977年1月15日,正式批准为加密标准(FIPS-46),当年7 月1日正式生效。
- 1994年1月的评估后决定1998年12月以后不再将DES作为数据加密标准。【每隔五年对加密算法进行评估】
- DES是16轮的Feistel结构密码
- DES是一个包含16个阶段的“替代--置换”的分组加密算法
- DES的分组长度是64位
- 64位的分组明文序列作为加密算法的输入,经过16轮加密得到64位的密文序列
- DES使用56位的密钥【也有用 64 位的,但其实是每一个字节的第 8 位是校验位】
- DES的每一轮使用48位的子密钥
- 每个子密钥是56位密钥的子集构成
- IP 置换,是指初始的置换
- 初始置换IP(Initial Permutation)
- 把输入的 64 位数据的排列顺序打乱,每位数据按照一个固定的规则重新组合;
- 一轮 DES 加密过程
- DES:f 函数结构
- 黑盒变换
- 多个函数/操作(E、异或、S、P)的组合函数
- 扩展变换:扩展变换(Expansion Permutation,也被称 为E-盒)将64位输入序列的右半部分从32位扩展到48位。
- 确保最终的密文与所有的明文位都有关【有个位出现在结果的多个位中】
- S-盒替代(S-boxes Substitution)
- 【异或运算之后得到 48bits 分成 8 个 6bits 长度的,经过 S 盒输出 4bits 长度,最终输出 32bits;再经过 P 盒置换】
- P-盒置换(P-boxes Permutation)
- 经过特定的换位标
- 逆初始置换(Inverse Initial Permutation)
- 初始置换和对应的逆初始置换操作并不会增强DES算法的安全性
- 主要目的是为了更容易地将明文和密文数据以字 节大小放入DES芯片中
- 每轮子密钥的生成
- DES的安全性
- DES的56位密钥可能太小
- 1998年7月,EFE(电子前哨基金会)宣布攻破了DES算法,他们 使用的是不到25万美元的特殊的“DES破译机”,这种攻击只需 要不到3天的时间。
- DES的迭代次数可能太少
- (但是)16次恰巧能抵抗差分分析
- S盒(即替代函数S)中可能有不安全因素
- DES的一些关键部分不应当保密【加密算法应该公开】
- DES存在弱密钥和半弱密钥
- 针对DES的攻击方法:
- 差分分析方法(Difference Analysis Method)
- 线性分析方法(Linear Analysis Method)
- 旁路攻击法(Side-Channel Attack)
- DES的56位密钥可能太小
- DES的改进
- 密码分组链接(CBC-cipher block chaining)
- 加密算法的输入是当前明文分组和前一次密文分组的异或 【由于是分组加密,会出现这样的问题:同一组明文经过加密算法的结果是相同的】
- 重复的明文分组不会在密文中暴露出重复关系
- DES密钥过短(56bits)→多重DES
- 3DES使用3个密钥,执行3次DES算法,加密过程:加密-解密-加密(EDE)
- \(C=E_{K3} (D_{K2} (E_{K1} (M)))\)
- 为了避免3DES使用3个密钥进行三阶段加密带来的密钥过长的缺点(168bit),Tuchman提出使用两个密钥的三重加密方法,这个方法只要求112bit密钥,即令其K1 =K3。
- \(C=E_{K1} (D_{K2} (E_{K1} (M)))\)
- 3DES的第二阶段的解密并没有密码编码学上的意义,唯一优点是可以使用3DES解密原来的单次DES加密的数据 ,即K1=K2=K3
- \(C=E_{K1} (D_{K1} (E_{K1} (M)))=E_{K1} (M)\)
- 3DES使用3个密钥,执行3次DES算法,加密过程:加密-解密-加密(EDE)
- 高级加密标准AES
- AES: Advanced Encryption Standard
- NIST(美国国家标准技术研究所)对称密钥加密标准, 取代DES(2001年12月)
- 1997年NIST宣布征集AES算法,要求:
- 可公开加密方法
- 分组加密,分组长度为128位
- 至少像3DES一样安全
- 更加高效、快
- 可提供128/192/256位密钥
- 比利时学者Joan Daemen和Vincent Rijmen提出的 Rijndael加密算法最终被选为AES算法。
- NIST在2001年12月正式颁布了基于Rijndael算法AES标准
- 密码分组链接(CBC-cipher block chaining)
- Rijndael加密算法简介
- 不属于Feistel结构
- 加密、解密相似但不完全对称
- 支持128/192/256数据块大小
- 支持128/192/256密钥长度
- 有较好的数学理论作为基础
- 结构简单、速度快
- Rijndael算法特点:
- 分组长度和密钥长度均可变(128/192/256bits)
- 循环次数允许在一定范围内根据安全要求进行修正
- 汇聚了安全、效率、易用、灵活等优点
- 抗线性攻击和抗差分攻击的能力大大增强
- 如果1秒暴力破解DES,则需要149万亿年破解AES
- 公钥密码学
- 对称密钥加密:
- 需要发送方与接收方知 道共享的秘密密钥
- Q: 最初如何商定密钥( 尤其“素未谋面”)?
- 公开密钥加密
- 完全不同的方法 [Diffie-Hellman76,
- 双方无需共享秘密密钥
- 公钥完全公开,私钥只有接收方知道
- RSA: Rivest, Shamir, Adelson algorithm
- 对称密钥加密:
- 前提条件: 模运算
- x mod n = x除以n的余数
- [(a mod n) + (b mod n)] mod n = (a+b) mod n
- [(a mod n) - (b mod n)] mod n = (a-b) mod n
- [(a mod n) * (b mod n)] mod n = (a*b) mod n
- 因此 \((a\ mod\ n)^d\ mod\ n = a^d\ mod\ n\)
- RSA: 预备知识
- 报文/信息(message): 仅仅是一 (bit pattern)
- 每个比特模式可以表示为一个唯一的整数
- 因此,加密一个报文就等价于加密一个数
- RSA: 生成公钥/私钥对
- 选择2个大质数p和q。(e.g., 1024bits的大质数)
- 计算 n = pq,z = (p-1)(q-1)
- 选择 e (满足e<n),使e与z之间没有公因子, 即e, z互质(relatively prime)
- 选择 d 使得 ed-1 刚好可以被z整除,(即: ed mod z = 1 ).
- 公钥: (n,e);私钥:(n,d).
- RSA: 加密、解密
- 给定公钥 (n,e)和私钥(n,d)
- 加密报文m (m<n)时,计算 c = \(m^e\) mod n
- 解密密文c时,计算 m = \(c^d\) mod n
- 注意 \(m = (m^e\ mod\ n)^d mod\ n\)
- 举例
- RSA的理论依据?
- RSA: 另一个重要性质
- 既可以公钥加密私钥解密,也可私钥加密公钥解密
- RSA为什么安全?
- RSA的安全性建立在“ 测”这个数论难题的基础上
- 即将两个大素数相乘在计算上容易实现,而 将该乘积分解的计算量相当大
- 假设已知Bob的公钥(n,e),那么有多大难度确定d,即私钥(n,d)?
- 本质上需要在不知道两个因子p和q的前提下,找出n的因子
- 分解一个大数是很困难的!
- RSA的安全性建立在“ 测”这个数论难题的基础上
- RSA 的实际应用
- RSA的幂运算强度很大
- DES 至少比 RSA 快 100 倍
- 实际应用中:利用公钥加密建立安全连接,然后建立第二个密钥对称会话密钥,用于加密数据
- 会话密钥(session key, KS)
- Bob与Alice利用RSA交换对称会话密钥KS
- 一旦双方确认KS ,则利用会话密钥加密/解密会话数据
- Bob与Alice利用RSA交换对称会话密钥KS
6.4 身份认证(Authentication)
- 目标: Bob希望Alice“证明”她的身份
- 协议ap1.0: Alice声明“I am Alice”
- 协议ap2.0: Alice在IP分组中声明“I am Alice”, IP分组包含Alice的源IP地址
- 协议ap3.0: Alice声明“I am Alice”的同时,发送 她的秘密口令进行“证明”.【嗅探(sniffing): Trudy 嗅探Alice 的分组,提取口令】
- 协议ap3.1: Alice声明“I am Alice”的同时,发送 她的加密的秘密口令进行“证明”.【回放攻击(playback attack): Trudy记录 Alice 的分组,稍后 “回放”给Bob】
- 目标: 避免回放攻击
- 一次性随机数(nonce): 一个生命期内只用一次的数R
- 协议ap4.0: 为了证明是“真实的”Alice,Bob向Alice发送一个随机数R,Alice必须返回R,并利用共享密钥进行加密【通过每一次生成的随机数,来使得每一次生成的密钥是不同的】
- 问题:需要共享密钥
- ap5.0: 利用一次性随机数以及公钥加密技术
- 【本质上:1. 利用 Alice 的私钥要证明是 Alice;2. 利用每次生成的随机数 R 来确保每次生成的密文是不同的。】
- ap5.0: 安全漏洞
- 中间人攻击(man in the middle attack):
- 【由于双方需要给对方发送自己的公钥,因而给了中间人进行「伪装」的可能性】
- 【密钥的可信性,涉及到密钥的分发问题】
6.5 消息完整性与数字签名
- 报文完整性
- 报文/消息完整性(message integrity),也称为报文/消息认证(或报文鉴别),目标:
- 证明报文确实来自声称的发送方
- 验证报文在传输过程中没有被篡改
- 预防报文的时间、顺序被篡改
- 预防报文持有期被修改
- 预防抵赖
- 发送方否认
- 接收方否认
- 密码散列函数(Cryptographic Hash Function):H(m)
- 散列算法公开
- H(m) 能够快速计算
- 对任意长度报文进行多对一映射,均产生定长输出
- 对于任意报文无法预知其散列值
- 不同报文不能产生相同的散列值
- 归纳特性:
- 单向性:无法根据散列值倒推出报文
- 对于给定散列值h,无法计算找到满足h = H(m)的报文m
- 抗弱碰撞性(Weak Collision Resistence-WCR)
- 对于给定报文x,计算上不可能找到y且y≠x,使得H(x)=H(y)
- 抗强碰撞性(Strong Collision Resistence-SCR)
- 在计算上,不可能找到任意两个不同报文x和y(x≠y),使得 H(x)=H(y)
- 单向性:无法根据散列值倒推出报文
- Internet校验和是优秀的密码散列函数吗?
- Internet校验和(checksum)具备散列函数的某些属性:
- 多对一映射
- 对于任意报文,产生固定长度的散列值(16-bit校验和)
- 但是,对于给定的报文及其散列值,很容易找到另一个具有相同散列值的不同报文!
- Internet校验和(checksum)具备散列函数的某些属性:
- 散列函数算法
- MD5:被广泛应用的散列函数(RFC 1321)
- 通过4个步骤,对任意长度的报文输入,计算输出128 位的散列值
- MD5不是足够安全
- 1996年,Dobbertin找到了两个不同的512-bit块,在MD5计算 下产生了相同的散列值
- SHA-1(Secure Hash Algorithm):另一个正在使用的散列算法
- US标准 [NIST, FIPS PUB 180-1]
- SHA-1要求输入消息长度<\(2^64\)
- SHA-1的散列值为160位
- 速度慢于MD5,安全性优于MD5
- MD5:被广泛应用的散列函数(RFC 1321)
- 报文摘要(Message digests)
- 对报文m应用散列函数H,得到一个固定长度的散列码,称为报文摘要(message digest), 记为H(m)
- 可以作为报文m的数字指纹(fingerprint)。
- 报文认证
- 简单方案:报文+报文摘要→扩展报文(m, H(m))【显然,中间人可以虚构报文摘要】
- 报文认证码MAC(Message Authentication Code):
- 报文m+认证密钥s+密码散列函数H → 扩展报文(m, H(m+s))
- 【注意,双方需要共享一个认证密钥 s】
- 【还有个问题:Bob 也知道他们共享的密钥,因此可以伪造 Alice 给他发了消息——无法防止 Alice 抵赖问题】
- 数字签名
- 如何解决下列与报文完整性相关的问题?
- 否认:发送方不承认自己发送过某一报文
- 伪造:接收方自己伪造一份报文,并声称来自发送方
- 冒充:某个用户冒充另一个用户接收或发送报文 【当然也涉及身份认证】
- 篡改:接收方对收到的信息进行篡改
- 数字签名(Digital signatures)
- 数字签名技术是实现安全电子交易的核心技术之一
- 可验证性(verifiable)
- 不可伪造性(unforgeable)
- 不可抵赖性(non-repudiation)
- 【显然,数字签名的实现需要用到密码学;并且,不能采用对称密码学】
- 一种简单的实现:Bob 通过其私钥对 m 进行加密,创建签名报文,和报文 m 一同发送给 Alice
- Alice可以证实:
- Bob签名了m
- 没有其他人签名m的可能
- Bob签名的是m而不是其他报文m’
- 不可抵赖(non-repudiation):
- Alice可以持有m和签名 \(K_B^-(m)\) ,必要时可以提交给法院证明是Bob签名的m
- 【问题:1. 运算量大;2. 数据量两倍于原始消息】
- Alice可以证实:
- 如何解决下列与报文完整性相关的问题?
- 签名报文摘要
- 先用散列函数 H 对于报文 m 生成报文摘要 H(m),再通过 Bob 其自身的私钥对于报文摘要进行数字签名,将其和 m 一同发送给 Alice
- Alice 收到后,用相同的 H 生成报文摘要,再用 Bob 的公钥对加密过的报文摘要进行解密,看两者是否相同——可以确认是 Bob 发送了消息
6.6 密钥分发与公钥证书
- 密钥分发中心(KDC)
- 回顾身份认证协议:ap4.0
- ap4.0: 为了证明是“真实的”Alice,Bob向Alice发送一个随机数R,Alice必须返回R,并利用共享密钥进行加密
- 对称密钥问题: 两个实体在网上如何建立共享秘密密钥?
- 解决方案: 可信任的密钥分发中心(Key Distribution Center-KDC)作为实体间的中介(intermediary)
- 密钥分发中心(KDC)
- Alice与Bob需要共享对称密钥.
- KDC:一个服务器
- 每个注册用户(很多用户)共享其与KDC的秘密密钥
- Alice和Bob只知道自己与KDC之间的对称密钥,用于分 别与KDC进行秘密通信.
KDC如何支持Bob和Alice确定用于彼此通信 称密钥呢?
- Alice 和 Bob 分别只和 KDC 共享一个密钥;
- 在一次会话中,Alice 向 KDC 发送其要和 Bob 通信的请求,KDC 可以用 A-KDC 解开 Alice 的报文从而确认发送方是 Alice;
- KDC 返回一个利用 B-KDC 加密过消息,包含了消息请求方是 Alice 和一次会话过程的随机数 R1;另外再发送 R1;由于是利用 B-KDC 加密的 Alice 解不开,也无法篡改,Alice 收到后将这一部分发送给 Bob;
- Bob 收到后,利用其和 KDC 之间的密钥 B-KDC 解密,从而确认消息的请求方是 Alice 并且用随机数 R1 进行通信。
认证中心(CA)
回顾身份认证协议:ap5.0
- 中间人攻击(man in the middle attack): Trudy向Bob假扮Alice, 向Alice假扮Bob。
- 比萨恶作剧
- Trudy创建邮件订单:Dear Pizza Store, Please deliver to me four pepperoni pizzas. Thank you, Bob
- Trudy利用她的私钥签名订单
- Trudy向比萨店发送订单
- Trudy向比萨店发送她的公钥,但她声称这是 Bob的公钥
- 比萨店核实签名;然后向Bob递送4个腊肠比萨
- Bob根本就不喜欢腊肠
公钥问题:
- 当Alice获得了Bob的公钥 (通过web网站、 e-mail、磁盘等),她怎么确认这真的是Bob的 公钥而不是Trudy的?
- 解决方案:可信任的认证中心(Certification Authority-CA)
认证中心
- 认证中心(CA): 实现特定实体E与其公钥的绑定
- 每个E(如人、路由器等)在CA上注册其公钥.
- E向CA提供“身份证明”.
- CA创建绑定E及其公钥的证书(certificate).
- 证书包含由CA签名的E的公钥 – CA声明:“这是E的公钥”【利用 CA 的私钥进行加密】
- 当Alice想要Bob的公钥时:
- 首先或取Bob的公钥证书(从Bob或者其他地方).
- 应用CA的公钥,解密证书中签名的公钥,获得 Bob 公钥【CA 的证书可以通过 CA 的官方网站上获取】
- 证书主要内容:
- 序列号(唯一发行号)
- 证书持有者信息,包括算法和密钥值
- 证书发行者信息
- 有效期
- 发行者数字签名
网络安全协议
7.1 安全电子邮件
- 安全电子邮件基本原理
- 电子邮件安全威胁
- 垃圾邮件:增加网络负荷,占用服务器空间
- 诈骗邮件
- 邮件炸弹:短时间内向同一邮箱发送大量电子邮件
- 通过电子邮件/附件传播网络蠕虫/病毒
- 电子邮件欺骗、钓鱼式攻击
- 电子邮件安全需求
- 机密性
- 完整性:在传输过程中不被修改
- 身份认证性:电子邮件发送者不被假冒
- 抗抵赖性
- 安全电子邮件基本原理
- 邮件具有单向性和非实时性
- 不能通过建立隧道来保证安全, 只能对邮件本身加密
- 邮件具有单向性和非实时性
- 1 Alice期望向Bob发送机密邮件m
- 【需要进行加密,但若直接用 Bob 的公钥加密,则计算量太大;因此,消息 m 用对称加密算法,其中用到的随机数则用 Bob 公钥加密;】
- 2 Alice期望提供发送者认证与报文完整性
- 【利用报文摘要实现完整性;再利用 Alice 的私钥实现身份认证。】
- 3 Alice期望提供保密、发送者认证与报文完整性
- 结合上面的两种加密方式
- 其中用了 3 个密钥:1. 对称密钥加密邮件信息 m,实现保密性;2. 用 Bob 的公钥来加密对称密钥(用到的随机数),也是为了实现保密性;2. 用 Alice 的私钥,结合哈希函数,实现身份认证(哈希函数也完成了报文完整性的保证)。
- 安全电子邮件标准
- PEM(Privacy Enhanced Mail)标准
- IETF与IRTF研究增强E-Mail的保密以及PEM的标准化 【由于美国对于加密算法的限制,没有被广泛使用】
- 1993年初,提出四份RFC(1421~1424)作为建议标准
- PEM的运行依赖PKI(公钥基础设施),如CA
- 没有被广泛配置
- PEM提供4种安全服务:
- 邮件加密
- 报文完整性
- 发送方的认证
- 防发送方否认
- PGP(Pretty Good Privacy)标准
- Philip Zimmermann于1991年发布PGP 1.0【现在事实上的标准】
- 可在各种平台(Windows、UNIX等)免费运行
- 还可用于普通文件加密及军事目的 【曾因为加密算法的原因受到美国的调查】
- 所用算法被证实为非常安全:
- 公钥加密算法:RSA、DSS或Diffie-Hellman
- 对称加密算法:CAST、3DES或IDEA
- 散列算法:MD5或SHA-1
- PEM(Privacy Enhanced Mail)标准
- PGP标准
- 特点
- 对邮件内容进行数字签名,保证信件内容不被篡改
- 使用公钥和对称加密保证邮件内容机密且不可否认
- 公钥的权威性由收发双方或所信任的第三方签名认证
- 事先不需要任何保密信道来传递对称的会话密钥
- PGP功能框架
- Alice期望PGP提供保密、发送者认证与报文完整性
- 特点
- PGP密钥
- 安装PGP时,软件为用户生成一个公开密钥对
- 公钥放置用户网站或某公钥服务器上
- 私钥则使用用户口令进行保护
- 用户为随机生成的RSA私钥指定一个口令,只有给出口令才能将私钥 释放出来使用
- PGP公钥认证机制与传统CA差异较大
- PGP公钥可以通过可信的Web认证
- 用户可以自己认证任何其信任的“公钥/用户名”对
- 用户还可以为其他公钥认证提供“担保”
- 防止篡改公钥的方法(Alice):
- 直接从Bob手中得到其公钥
- 通过电话认证密钥
- 从双方信任的David那里获得Bob的公钥
- 通过CA
- 安装PGP时,软件为用户生成一个公开密钥对
- S/MIME标准
- S/MIME(Secure/Multipurpose Internet Mail Extensions)标准
- 提供数据保密、完整性和认证等安全服务
- 不仅限于邮件使用,可用于任何支持MIME数据的传输 机制,如HTTP 增加了新的MIME数据类型:
- “应用 /pkcs7-MIME”(application/pkcs7-MIME)
- “复合/已签名”(multipart/signed)
- “应用 /pkcs7-签名”(application/pkcs7-signature)等
- 只保护邮件的邮件主体,对头部信息则不进行加密
- 认证机制依赖于**层次结构的CA(Tree of Trust) **
- 证书格式采用X.509规范【公钥体制,CA 所遵循的标准】
7.2 安全套接字层
- Web安全威胁
- 攻击与破坏事件层出不穷,需要安全Web服务
- Web应用广泛、服务器底层软件复杂,可能隐藏安全漏洞
- Web安全威胁的分类:
- 主动攻击:篡改C/S之间信息或篡改Web站点信息(难防易检)
- 被动攻击:监听数据流获取信息或进行信息量分析(难检易防)
- 机密性:网络监听、窃取数据
- 完整性:修改用户数据、修改传输的信息
- 拒绝服务:伪造请求淹没服务器
- 身份认证:伪造请求淹没服务器【钓鱼网站,在通信过程中没有去认证网站是否是真的】
- Web 服务器的安全威胁
- Web服务越强大,包含安全漏洞概率就越高
- HTTP服务可在不同权限下运行【HTTP 的方法如 DELETE】
- Web 浏览器的安全威胁
- 活动Web页可能隐藏恶意程序【最简单的是静态 Web 页;还有活动 Web 页,内嵌了一些可执行的代码,浏览器调用执行环境,例如 Java JavaScript 的程序;如果隐藏了一些恶意程序,就可能对用户造成威胁】
- 通信信道的安全威胁
- 监听程序会威胁通信信道中所传输信息的机密性
- 伪造、篡改、重放会威胁所传输信息的完整性
- 缺乏身份认证使得冒充他人身份进行中间人攻击
- 缺乏数字签名机制使得通信双方能相互攻击
- 拒绝服务攻击使得通信信道不能保证可用性
- 攻击与破坏事件层出不穷,需要安全Web服务
- 几个解决方案:应用层、传输层、网络层
- 基于应用层实现Web安全
- 为特定应用定制特定安全服务,将安全服务直接嵌入在应用程序中
- SSH 远程登录的安全壳协议
- Kerberos 基于 KDC 的密钥分发和认证协议
- S/MIMME PGP 之前介绍过
- SET 电子商务背景,三方甚至多方的解决安全问题的方案
- 基于传输层实现Web安全
- 【直接修改 TCP 不太现实,因此在传输层再加上 SSL 或 TLS】SSL 是安全套接字,TLS 是传输层安全,可认为 TSL 是 SSL 的变体【安全套接字层,类似于会话层】
- SSL或TLS可作为基础协议栈的组成部分,对应用透明【不仅针对 Web,理论上还支持之上的其他应用】
- 也可直接嵌入到浏览器中使用
- 使用SSL或TLS后,传送的应用层数据会被加密
- 保证通信的安全
- 基于网络层实现Web安全
- IPSec提供端到端(主机到主机)的安全机制【不是指进程到进程】
- 通用解决方案【因为是在 IP 层,还能用在 UDP】
- 各种应用程序均可利用IPSec提供的安全机制
- 减少了安全漏洞的产生
- IPSec提供端到端(主机到主机)的安全机制【不是指进程到进程】
- 安全套接字层(SSL)
- SSL: Secure Sockets Layer
- 广泛部署的安全协议
- 几乎所有浏览器和Web服务器都支持
- https 【就表明在使用 SSL】
- 每年通过SSL交易额达数十亿美元
- 实现:Netscape
- 变体:TLS(RFC 2246)
- 提供:机密性(confidentiality) 完整性(integrity) 认证(authentication)
- 最初目标: Web电子商务交易 加密(尤其信用卡号) Web服务器认证 可选的客户认证 方便与新商户的商务活动 (minimum hassle)
- 可用于所有基于TCP的网络应用【虽然主要是针对 Web 应用】
- 安全 socket 接口
- 广泛部署的安全协议
- SSL和TCP/IP
- 在 TCP 和 Application 层之间增加了 SSL 层
- SSL为网络应用提供应用编程接口 (API) C语言和Java语言的
- SSL库/类可用
- 【有人认为是传输层,或是应用层,也有人认为是会话层】
- 可以像PGP那样实现某些安全功能
- 但是,需要发送字节流以及交互数据 【因此 PGP 的解决方案不能直接应用过来】
- 需要一组密钥用于整个连接
- 需要证书交换作为协议的一部分:握手阶段
- 简化的(Toy)SSL: 一个简单的安全信道
- 握手(handshake): Alice和Bob利用他们的证书、私钥认证(鉴别)彼此,以及交换 共享密钥
- 密钥派生(key derivation): Alice和Bob利用共享密钥派生出一组密钥
- 数据传输(data transfer): 待传输数据分割成一系列记录
- 连接关闭(connection closure): 通过发送特殊消息,安全关闭连接
- 简化的SSL : 一个简单的握手过程
- TCP 连接建立之后,Alice 发送 hello;Bob 回复他的公钥证书;Alice 回应主密钥 MS
- 简化的SSL : 密钥派生
- 不同加密操作使用不同密钥会更加安全
- 例如:报文认证码(MAC)密钥和数据加密密钥
- 4个密钥:
- Kc = 用于加密客户向服务器发送数据的密钥 【客户和服务器都要】
- Mc = 用于客户向服务器发送数据的MAC密钥
- Ks = 用于加密服务器向客户发送数据的密钥
- Ms = 用于服务器向客户发送数据的MAC密钥
- 通过密钥派生函数(KDF)实现密钥派生
- 提取主密钥和(可能的)一些额外的随机数,生成密钥
- 不同加密操作使用不同密钥会更加安全
- 简化的SSL : 数据记录
- 为什么不直接加密发送给TCP的字节流?
- MAC放到哪儿?如果放到最后,则只有全部数据收全才能进行完整性认证。
- e.g., 对于即时消息应用,在显示一段消息之前,如何针对发送的所有字节进行完整性检验?
- 方案:将字节流分割为一系列记录
- 每个记录携带一个MAC
- 接收方可以对每个记录进行完整性检验
- 问题:对于每个记录, 接收方需要从数据中识别出MAC
- 需要采用变长记录
- 为什么不直接加密发送给TCP的字节流?
- 简化的SSL : 序列号
- 问题: 攻击者可以捕获和重放记录或者重新排序记录
- 解决方案: 在MAC中增加序列号
- MAC = MAC(Mx , sequence||data)
- 注意: 记录中没有序列号域【序列号信息已经隐含在 MAC 中了】
- 问题: 攻击者可以重放所有记录
- 解决方案: 使用一次性随机数(nonce)
- 简化的SSL : 控制信息
- 问题: 截断攻击
- 攻击者伪造TCP连接的断连段,恶意断开连接
- 一方或双方认为对方已没有数据发送
- 解决方案: 记录类型, 利用一个类型的记录专门用于断连
- type 0用于数据记录;type 1用于断连
- MAC = MAC(Mx , sequence||type||data)
- 问题: 截断攻击
- 总结
- 简化的SSL不完整
- 每个域多长?【字节流分为一系列的记录】
- 采用哪种加密协议?
- 需要协商吗?
- 允许客户与服务器支持不同加密算法
- 允许客户与服务器在数据传输之前共同选择 特定的算法
- SSL协议栈
- 介于HTTP与TCP之间的一个可选层
- 绝大多数应用层协议可直接建立在SSL之上
- SSL不是一个单独的协议,而是两层协议【四个协议】
- 介于HTTP与TCP之间的一个可选层
- SSL密码组(cipher suite)
- 密码组(cipher suite)
- 公开密钥算法(public-key algorithm)
- 对称加密算法(symmetric encryption algorithm)
- MAC算法
- SSL支持多个密码组【一套密码】
- 协商(negotiation): 客户与服务器商定密码组
- 客户提供选项 choice
- 服务器挑选其一
- 常见的SSL对称密码:
- DES –分组密码
- 3DES –分组密码
- RC2 – Rivest Cipher 2 分组密码
- RC4 – Rivest Cipher 4 流密码
- SSL公开密钥加密:
- RSA【还支持其他的】
- 密码组(cipher suite)
- SSL更改密码规格协议
- 更改密码规格协议(Change Cipher Spec Protocol)
- 更新当前连接的密钥组:标志着加密策略的改变
- 位于SSL记录协议之上
- ContentType=20
- 协议只包含一条消息(一个值为1的字节)
- SSL警告协议
- 警告协议(Alert Protocol)
- Alert消息:当握手过程或数据加密等出错或发生异常时,为对 等实体传递SSL警告或终止当前连接
- 位于SSL记录协议之上
- ContentType=21
- 协议包含两个字节:警告级别和警告代码
- SSL握手协议
- SSL握手协议
- 协商结果是SSL记录协议的基础, ContentType=22
- SSL v3.0的握手过程用到三个协议:握手协议、更改密码规格协议和警告协议
- 目的
- 服务器认证/鉴别
- 协商: 商定加密算法
- 建立密钥
- 客户认证/鉴别(可选)
- SSL握手协议
- SSL记录协议
- 记录协议(Record Protocol)
- 描述SSL信息交换过程中的记录格式
- 所有数据(含SSL握手信息)都被封装在记录中
- 一个记录由两部分组成:记录头和数据
- SSL握手过程
- 客户发送其支持的算法列表,以及客户一次随机数(nonce)【为了避免回放攻击】
- 服务器从算法列表中选择算法,并发回给客户: 选择 + 证书 + 服务器一次随机数
- 客户验证证书,提取服务器公钥,生成预主密钥 (pre_master_secret),并利用服务器的公钥加密预主密钥,发送给服务器
- 客户与服务器基于预主密钥和一次随机数分别独立计算加密密钥和MAC密钥【此时事实上可以进行加密解密了】
- 客户发送一个针对所有握手消息的MAC
- 服务器发送一个针对所有握手消息的MAC
- 最后2步的意义:保护握手过程免遭篡改
- 客户提供的算法,安全性有强、有弱
- 明文传输【除了用对方的公钥加密的】
- 中间人攻击可以从列表中删除安全性强的算法 【在握手过程中,从而为之后的供给带来方便】
- 最后2步可以预防这种情况发生
- 最后两步传输的消息是加密的
- 客户提供的算法,安全性有强、有弱
- 为什么使用两个一次随机数?
- 假设Trudy嗅探Alice与Bob之间的所有报文
- 第二天,Trudy与Bob建立TCP连接,发送完全相同的记录序列
- Bob(如Amazon)认为Alice对同一产品下发两个分离的订单
- 解决方案: Bob为每次连接发送完全不同的一次随机数
- 确保两天的加密密钥不同
- Trudy的报文将无法通过Bob的完整性检验
- SSL 握手协议工作过程
- SSL记录协议
- SSL记录协议的操作步骤:
- 将数据分段成可操作的数据块
- 对分块数据进行数据压缩 【在协商过程中还要确认压缩算法】
- 计算MAC值
- 对压缩数据及MAC值加密
- 加入SSL记录头
- 在TCP中传输
- 记录头(record header): 内容类型(ContentType); 版本; 长度
- MAC: 包括序列号, MAC密钥 Mx
- 片段(fragment): 每个SSL片段为 \(2^14\) 字节 (~16KB)
- SSL记录协议的操作步骤:
- 密钥派生
- 客户一次数、服务器一次数和预主密钥输入伪随机数发生器
- 产生主密钥MS
- 主密钥和新一次随机数输入另一个随机数发生器: “密钥块(key block)”
- 密钥块“切片”:
- 客户MAC密钥 服务器MAC密钥 客户加密秘钥 服务器加密秘钥 客户初始向量(IV) 服务器初始向量(IV)【对称密钥分组加密的时候,加上上一段的加密加过,从而保证相同的报文不会形成同样的加密结构。】
- 客户一次数、服务器一次数和预主密钥输入伪随机数发生器
7.3 IP 安全
- 虚拟专用网(VPN)
- 专用网(PN)
- 动机:安全
- 专用网络PN(Private Networks):基于专属的网络设备、 链路或协议等建设的专门服务于特定组织机构的网络。
- 民航网络、铁路网络、银行网络、军事网络……
- 成本问题:路由器、链路、DNS基础设施等
- 虚拟专用网(VPN)
- 动机:安全+成本
- 虚拟专用网VPN(Virtual Private Networks):通过建立在公共网络(如Internet)上的安全通道,实现远程用户、分支机构、业务伙伴等与机构总部网络的安全连接,从而构建针对特定组织机构的专用网络。
- 虚拟:“安全通道”不实际独占公共网络的资源,是一条逻辑的穿过公共网络的安全、稳定的隧道【逻辑上的连接】
- 通过隧道技术、加密技术、密钥管理、认证和访问控制等,实现与专用网类似的安全性能
- 【借助于公共网络(如 Internet),远程客户、分支机构、合作伙伴可以和总部之间建立安全通道】
- VPN的功能
- 数据机密性保护 数据完整性认证 数据源身份认证 防重放攻击 访问控制【哪些合法用户可以进入】
- VPN关键技术
- 隧道技术 数据加密 身份认证 密钥管理 访问控制 网络管理
- 隧道技术
- 构建VPN的核心技术
- 隧道:通过Internet提供安全的点到点(或端到端) 的数据传输“安全通道”(实质上是一种封装)
- VPN隧道利用隧道协议对通过隧道传输的数据进行封装
- 使数据安全穿越公共网络(通常是Internet)
- 通过加密和认证以确保安全
- 数据包进入隧道时,由VPN封装成IP数据报
- 通过隧道在Internet上安全传输
- 离开隧道后,进行解封装,数据便不再被保护
- 隧道协议内包括以下三种协议:
- 乘客协议(Passenger Protocol)【也就是封装什么,例如 TCP 协议】
- 封装协议(Encapsulating Protocol)【遵循一定的方式进行封装】
- 承载协议(Carrier Protocol)【通过公共网络传输,例如 Internet 也就是 IP 协议】
- 常见 VPN 隧道协议:
- 第二层隧道:PPTP【点对点隧道协议】、L2TP【二层隧道协议】
- 主要用于远程客户机访问局域网方案
- 第三层隧道:IPSec
- 主要用于网关到网关(路由器到路由器)、或网关到主机方案
- 不支持远程拨号访问
- 第二层隧道:PPTP【点对点隧道协议】、L2TP【二层隧道协议】
- 典型VPN实现技术
- IPSec:最安全、适用面最广
- SSL:具有高层安全协议的优势【借助 SSL 实现;基于 web,在客户端只需要用浏览器等】
- L2TP:最好的实现远程接入VPN的技术
- 典型VPN技术结合:IPSec与SSL、IPSec 与L2TP
- IP安全(IPsec)
- IPsec体系结构
- IPsec服务
- 机密性(confidentiality ) 数据完整性(data integrity) 源认证/鉴别(origin authentication) 重放攻击预防(replay attack prevention)
- 提供不同服务模型的两个协议: 认证头 AH;封装安全载荷 ESP
- IPsec的传输(transport)模式(主机模式)
- IPsec数据报的发送与接收均由端系统完成
- 主机是IPsec感知的(IPsec-ware)【主机来完成 IPSec 的功能】
- IPsec的隧道(tunneling)模式
- 边缘路由器是IPsec感知的(IPsec-ware)【主机和 IPSec 的传输是传统的 TCP 传输模式】
- 两个IPsec协议
- 提供IPsec服务的两个协议:
- AH:在IP数据报文头中的协议号为51
- ESP:在IP数据报文头中的协议号为50
- 认证头协议AH(Authentication Header)
- 提供源认证/鉴别和数据完整性检验,但不提供机密性
- 封装安全协议ESP(Encapsulation Security Protocol)
- 提供源认证/鉴别、数据完整性检验以及机密性
- 比AH应用更广泛
- 提供IPsec服务的两个协议:
- 根据两种传输模式和两种协议,可以有四种组合:其中最重要的是隧道模式 ESP。
- 安全关联(SA)
- 发送数据前,从发送实体到接收实体之间需要建立安全关联SA (security association)
- SA是单工的: 单向【双向通信需要两个 SA】
- 发送实体与接收实体均需维护SA的状态信息
- 回顾: TCP连接的端点也需要维护状态信息
- IP是无连接的;IPsec是面向连接的!
- 安全关联主要参数:
- 安全参数索引(SPI):32位SA唯一标识(ID)
- 加密密钥、认证密钥
- 密码算法标识
- 序列号(32位)【抗重放攻击】
- 抗重播攻击【接收方使用滑动窗口检测恶意主机重放数据报】
- 生存周期【规定SA的有效使用周期】
- 运行模式:传输模式或隧道模式
- IPSec隧道源、目的地址
- 例子
- 发送数据前,从发送实体到接收实体之间需要建立安全关联SA (security association)
- 安全关联数据库(SAD)
- IPsec端点将SA状态保存在安全关联数据库SAD (security association database)中
- 在处理IPsec数据报时,定位这些信息
- 对于n个销售人员,1个分支机构的VPN,总部的 路由器R1的SAD中存储2 + 2n条SAs
- 当发送IPsec数据报时,R1访问SAD,确定如何 处理数据报
- 当IPsec数据报到达R2
- R2检验IPsec数据报中的SPI
- 利用SPI检索SAD
- 处理数据报
- IPsec端点将SA状态保存在安全关联数据库SAD (security association database)中
- 安全策略数据库(SPD)
- Security Policy Database (SPD)
- 安全策略(SP):定义了对什么样的数据流实施什么样的安全处理【有些流量不需要经过 VPN】
- 应用IPSec、绕过、丢弃【绕过不采用 IPSec 传输;有些数据不符合 IPSec 的要求直接丢弃】
- 安全策略组成了SPD,每个记录就是一条SP
- 提取关键信息填充到一个称为“选择符”的结构
- 包括目标IP、源IP、传输层协议、源和目标端口等
- 利用选择符去搜索SPD,检索匹配的SP
- 提取关键信息填充到一个称为“选择符”的结构
- 安全处理需要的参数存储在SP指向的SA结构
- IPSec 数据报
- 传输模式 AH:不改变原 IP 头,在 IP 头和载荷之间插入一个 AH 头
- 包括下一个头、载荷长度、安全参数索引 SPI、序列号、认证数据(32bit 的整数倍)等参数
- 隧道模式 AH:相较于传输模式不同的是,构造了新的 IP 头
- 传输模式ESP:
- 不改变原 IP 头;先在原 IP 数据报载荷后面添加 ESP 尾部(主要是为了填充,满足加密算法的要求);将其进行加密;再构造 ESP 头部(包括 SPI 和序列号),最后在后面添加 ESP 认证数据(保证数据完整性)。
- 隧道模式ESP:
- 类似于传输模式 ESP;不同之处在于这里把 IP 头也放到了加密部分,共同完成加密;再添加 ESP 头部和 ESP 认证;最终生成新的 IP 头;
- 其中的认证部分也被称为 enchilada(玉米卷)
- 传输模式 AH:不改变原 IP 头,在 IP 头和载荷之间插入一个 AH 头
- 两种传输模式
- 传输模式 AH:在原 IP 头和载荷之间增加 AH 头
- 传输模式 ESP:在载荷最后增加 ESP 尾,在原 IP 头后增加 ESP 头,最后加上 ESP 认证;
- 隧道模式 AH:在原 IP 头之前增加 AH 头,并构造新的 IP 头
- 隧道模式 ESP:在最后增加 ESP 尾部,在原 IP 头之前增加 RSP 头,再在最后加上 ESP 认证,并构造新的 IP 头
- 数据报处理过程
- R1: 将原IP数据报转换为IPsec数据报
- 检索SPD,确定处理策略
- 检索SAD,确定SA
- 在原IP数据报(包括原IP首部域!)后面附加“ESP尾部”. 利用SA定义的算法与密钥,加密上述结果.
- 在加密结果前面附加“ESP头”,创建“enchilada”.
- 针对整个enchilada,利用SA定义的算法与密钥,创建报文认证码MAC;
- 在enchilada后面附加MAC,构成载荷(新IP数据报载荷);
- 构造全新的IP头,包含所有经典的IPv4首部字段;
- 将新IP头附加在载荷的前面
- R2: 解封IPsec数据报
- 从原始IP数据报中提取选择符,并搜索SPD,确定处理策略
- 丢弃或转入系统IP协议栈进行后继处理
- 判断是否为IPsec数据报
- 从头部提取
,并检索SAD - 若找不到SA,则触发IKE或丢弃包;
- 若找到,则根据SA解封数据报,得到原始IP数据报
- 从原始IP数据报中提取选择符,并搜索SPD,确定处理策略
- R1: 将原IP数据报转换为IPsec数据报
- 在enchilada内部:
- ESP尾部:填充以便应用分组密码
- ESP首部:
- SPI,接收实体基于此知道该做什么
- 序列号,抵抗重放攻击
- ESP的MAC认证字段,基于共享的秘密密钥
- IPsec序列号
- 对于新SA,发送方初始化序列号为0
- 每次通过SA发送数据报:
- 发送方增加序列号计数器(加1)
- 将计数器值置于序列号字段
- 目的
- 预防嗅探与回放分组攻击
- 接收重复的、已认证的IP分组,会破坏正常服务
- 方法
- 接收方检验分组重复
- 无需记录所有已接收分组;而是利用一个窗口
- SA的建立和密钥管理【安全关联】
- IPsec支持两种方式的SA建立和密钥管理:
- 手工方式
- 所有的信息需要手工配置
- SA永远存在
- 适用于结构简单的网络
- 自动方式
- SA可以通过协商方式产生
- SA过期以后重新协商,提高了安全性
- 适用于较复杂拓扑和较高安全性的网络
- Internet密钥交换(IKE)
- 前面的例子:在IPsec端点,手工建立IPsec SA
- 对于几百个端点规模的VPN,手工设置密钥是不可行的
- 替代方案:IPsec IKE (Internet Key Exchange)
- IKE协议可自动管理SA的建立、协商、修改和删 除,是IPSec唯一的密钥管理协议
- IKE 包含三个部分
- ISAKMP(Internet Security Association and Key Management Protocol)的通用框架
- 定义了协商、建立、修改和删除SA过程的通用框架
- OAKLEY的密钥交换模式
- 一个密钥交换协议,允许认证过的双方通过不安全的网络交换 密钥参数
- SKEME的共享和密钥更新技术
- 提供了IKE交换密钥的算法
- ISAKMP(Internet Security Association and Key Management Protocol)的通用框架
- IKE和IPSec
- IKE为IPSec提供服务:
- 密钥交换与管理
- 身份认证:通信对等体的认证
- IPSec SA的协商与管理
- IKE为IPSec提供服务:
- IKE: PSK与PKI
- 认证可通过
- 预共享密钥 (PSK),或者
- 公钥基础设施PKI (公开/私有密钥对以及证书).
- PSK:基于共享的秘密密钥
- 运行IKE认证彼此,并建立IPsec SAs (每个方向一个)
- 包括加密秘钥和认证密钥
- PKI:基于公开/私有密钥对以及证书
- 运行IKE认证彼此,并建立IPsec SAs (每个方向一个)
- 类似于SSL的握手过程
- 认证可通过
- IKE的阶段:概括为两个大的阶段
- 阶段1:建立双向IKE SA(也称为ISAKMP安全关联)
- 为双方进一步的IKE通信提供机密性、数据完整性以及数据源认证服务
- 注意:IKE SA不同于IPsec SA
- 两种模式:
- 野蛮模式(aggressive mode)【3个消息交互,使用较少的消息】
- 主模式(main mode)【6个消息交互;主模式提供身份保护(identity protection),并且更灵活】
- 阶段2:基于ISAKMP协议,进行IPsec SA的安全协商【第一阶段用 PK 进行加密解密,计算量比较大,后续建立起 IKE SA 之后就不需要了】
- 阶段1:建立双向IKE SA(也称为ISAKMP安全关联)
- IPSec 总结
- IKE用于交换算法、秘密密钥、SPI
- 采用AH协议或者ESP协议 (或者两者)
- AH提供完整性、源认证服务
- ESP提供完整性、源认证以及机密性服务
- IPSec 对等端可以是
- 两个端系统 【典型的是传输模式】
- 两个路由器/防火墙 【典型的隧道模式】
- 一个路由器/防火墙与一个端系统【传输模式】
7.4 无线局域网的安全
- WEP的设计目标
- WEP(Wired Equivalent Privacy): 有线等效保密
- 对称密钥加密
- 机密性
- 主机认证
- 数据完整性
- 自同步: 每个分组单独加密
- 给定加密分组和密钥,便可以解密;即便前序分组丢失,也可以继续成功解密分组(与CBC不同)【分组之间的解密不能有依赖关系,不能像 CPC 那样前一个的加密结果用来加密后一个】
- 高效
- 可以由硬件或软件实现
- 回顾: 对称流密码
- 【一个密钥经过密钥流发生器生成一个密钥流】
- 将密钥流的每个字节与明文的每个字节进行异或,得到密文【显然,解密的时候用相同的方法产生密钥流再进行异或即可解密】
- WEP使用RC4算法
- 流密码与分组独立性
- 回顾WEP设计目标: 每个分组独立加密
- 如果对于n+1号帧使用的密钥流,是在n号帧的密 钥流之后,那么每个帧就不是独立加密的
- 需要知道n号帧使用的密钥流截止到哪里
- WEP的解决方案:初始密钥+针对每个分组的新 IV(初始向量),产生针对每个分组的密钥流【针对每个分组产生一个 IV,和密钥放在一起才构成帧的密钥输入密钥流发生器】
- WEP加密
- 发送端针对数据(data)计算完整性校验值ICV(Integrity Check Value)
- 4字节的散列值/CRC,用于数据完整性校验
- 每端有104位的共享密钥
- 发送端生成24位初始向量(IV),附加到密钥上:得到128位密钥
- 发送端还要附加keyID (8位字段) 【可以有多个 key】
- 将128位密钥输入到伪随机数发生器,产生密钥流
- 利用RC4算法对帧中“数据+ICV”进行加密:
- 将密钥流与“数据+ICV”逐个字节异或(XOR)
- 将IV和keyID附加到加密数据,构成载荷
- 将载荷插入到802.11帧中
- 发送端针对数据(data)计算完整性校验值ICV(Integrity Check Value)
- WEP解密概述
- WEP解密概述
- 注意: 这里采用的消息完整性验证方法与报文认证码 MAC以及数字签名(利用PKI)不同.【因此安全性要差很多】
- 利用一次性随机数进行端点认证
- 一次性随机数(nonce): 一个生命期内只用一次的数R
- 如何证明Alice是“真实的”:Bob向Alice发送一次性随机数nonceR, Alice必须利用共享密钥加密并返回R。
- WEP的身份认证
- 端系统发送认证请求;AP 发送一次性数 R(128B);端系统利用共享密钥加密的一次数 R;如果解密值与一次数相等,则认证成功
- 注意
- 并非所有AP都进行认证,即便使用了WEP
- AP会在信标帧(beacon frame)中指示是否需要认证
- 认证需要在关联前进行
- 破解802.11WEP加密
- 安全漏洞
- 每帧一个24位的IV→IV最终会被重用
- IV以明文传输→重用IV容易被监测
- 攻击
- Trudy诱使Alice加密已知明文:d1 d2 d3 d4 …
- Trudy知道: \(c_i = d_i\ XOR\ k_i^{IV}\)
- Trudy已知ci 和di ,因此可以计算得到 \(ki^{IV}\)
- Trudy得到加密密钥序列:\(k1^{IV} k2^{IV} k3^{IV} …\)
- 下一次IV被重用时,Trudy便可以成功解密!
- 安全漏洞
- 802.11i: 改进的安全
- 多种(更强的)可选的加密方法
- 提供密钥分发 【在 WEP 中我们已有的密钥】
- 利用独立于AP的认证服务器 【而非简单通过 AP 完成认证】
- IEEE 802.11i 服务:
- 认证【双向认证】
- 访问控制
- 数据与完整性加密
- EAP: 扩展认证协议【802.11i 中用到的一个主要协议】
- EAP:客户(移动端)与认证服务器间的端-端协议
- EAP运行在两段独立的“链路”上【一个用的是 802.11 无线,而 AP 和 AS 之间用的是 RADIUS】
- 移动端到AP(EAPoL: EAP over LAN)
- AP到认证服务器(RADIUS over UDP)
7.5 防火墙
- 防火墙(firewall):隔离组织内部网络与公共互联网,允许某些分组通过, 而阻止其他分组进入/离开内部网络的软件/硬件设施。
- 【隔离内外部网络;可以是软件也可以是硬件】
- 为什么需要防火墙?
- 预防拒绝服务攻击(DoS):
- SYN泛洪: 攻击者建立许多虚假TCP连接,耗 导致“真正”的连接无法建立
- 预防非法修改/内部数据访问:
- e.g., 攻击者替换CIA网站主页
- 只允许对内部网络的授权访问:认证的用户/主机
- 预防拒绝服务攻击(DoS):
- 三种类型的防火墙
- 无状态分组过滤器(stateless packet filters)【静态防火墙;设置只看数据本身而不看状态】
- 有状态分组过滤器(stateful packet filters)【状态相关/动态分组过滤器;和通信状态有关】
- 应用网关(application gateways)【可能既有过滤也有应用网关】
无状态分组过滤
- 内部网络通过路由器防火墙(router firewall)与Internet连接
- 路由器逐个分组过滤,决策是否转发/丢弃分组,依据:
- 源IP地址、目的IP地址
- TCP/UDP源、目的端口号
- ICMP报文类型
- TCP SYN和ACK标志位
- 例1: 阻止协议字段=17,以及源或目的端口号=23 的数据报进入与离开
- 结果: 所有进入或离开的UDP流量,以及Telnet 连接均被阻止
- 例2: 阻止进入的、 ACK=0的TCP段
- 结果 : 阻止外部客户与内部主机主动建立 TCP 连接,但是允许内部客户与外部主机主动建立连接
- 访问控制列表 ACL(Access Control Lists): 规则表,自顶向下应用于 到达的分组:(action, condition)对
有状态分组过滤
- 无状态分组过滤器: 笨拙
- 不加以区分放行满足条件的所有分组
- 例如:放行dest port = 80、ACK=1的分组,即使没有建立的TCP连接
- 有状态分组过滤器: 跟踪每个TCP连接
- 跟踪连接建立(SYN)、拆除(FIN): 根据状态确定是否放行进入或外出的分组【跟踪 TCP 连接过程】
- 超时的非活动连接: 不再允许分组通过
- 扩展ACL,以便在放行分组前,检测连接状态表【下面最后一列打叉的不检测】
- 无状态分组过滤器: 笨拙
应用网关
- 基于应用数据以及 IP/TCP/UDP 头部字段过滤分组
- 例如:允许特定用户 telnet 外部网络
- 要求所有Telnet用户通过网关Telnet外部网络;
- 对于授权的用户,网关代理用户与目的主机建立 Telnet 连接,并且在两个连接之间进行数据中继;
- 路由器阻止所有不是由网关发起的Telnet连接。
防火墙、应用网关的局限性
- IP欺骗(spoofing): 路由器不知道数据是否来自于声称的源
- 如果多个应用需要特殊处理,则每个应用需要一个应用网关
- 客户软件必须知道如何连接网关
- e.g., 必须配置Web浏览器的代理服务器的 IP 地址【对于用户非透明】
- 过滤器经常对UDP流量使用“全部通过”或者 “全部不通过”策略
- 折衷(tradeoff): 确定安全级别
- (会影响)与外部网络的通信度
- 很多安全防护级别很高的网站仍然遭受攻击
物理层
【小结】
- 基本概念
- 数据 信号 码元
- 信源 信道 信宿
- 编码与调制
- 数字数据编码为数字信号
- 数字数据调制为模拟信号
- 幅移键控 ASK
- 频移键控 FSK
- 相移键控 PSK
- 正交振幅调制 QAK:在频率相同的情况下结合 ASK 和 FSK
- 模拟信号编码为数字信号
- 采样、量化、编码
- 奈奎斯特定理:采样频率要大于两倍的最大频率 f
- 模拟信号调制为模拟信号
- 频分复用 FDM
- 传输介质
- 双绞线:STP UTP
- 通信距离几千-数十千米
- 模拟传输用放大器;数字传输用中继器
- 同轴电缆
- 基带同轴电缆(局域网) 宽带同轴电缆(有线电视)
- 传输距离比双绞线更远
- 光纤
- 单模和多模光纤(多模适用于近距离)
- 光源为发光二极管
- 无线电波
- 手机、无线局域网 WLAN
- 微波、红外线和激光
- 因为有方向性,所以统称为 视线介质 Line-of-sight
- 卫星通信利用地球同步卫星作为中继,三颗即可实现全球通信;缺点是传播延时 250-270ms
- 双绞线:STP UTP
- 物理层接口的特性
- 机械特性:接口的规格、引线的数目、引脚的数量和排列情况
- 电气特性:电压高低、阻抗匹配、传输速率和距离限制
- 功能特性:指明某一电平的电压表示的意义,接口部件的信号线(数据 控制 定时线等)的用途
- 规程特性:工作规程和时序关系
- 中继器
- 区别于放大器放大的是模拟信号(将衰减的信号方法),中继器放大数字信号(将衰减的信号整形再生)
- 中继器两端的网络部分是网段,不是子网;
- 可以连接不同介质,但是要求速率相同(没有存储转发);
- 要求相同协议
- 粗同轴电缆 10BASE5 以太网规范,5-4-3,最多4 个中继器串联 5 段通信介质,只有 3 段可挂接计算机,及其两端只能用作扩展通信范围的链路段
- 集线器
- 本质上是多端口中继器
- 半双工
- 不能分割冲突域
【目录】
- 传输媒体(2.1)
- 双绞线、同轴电缆、光纤、电力线、无线传输媒体
- 信道的最大数据速率(2.2)
- 数字编码(2.3)
- 数字调制(2.4)
- 多路复用技术(2.5)
- 接入网技术(2.6)
- HFC、电话网络、光纤到户、无线接入
物理层
- 两个相邻的节点之间如何传递信息?
- 相邻节点间实际传送信息的物理载体:传输媒体(Transmission Medium)
- 传输媒体具有不同的带宽和抗干扰能力,限制了在其上传输的信息所能获得的最大数据速率。
- 传递的信息可能采用模拟(连续变化)或者数字(离散变化)形式来表示。
- 信息在传输媒体中以某种信号的形式来传输,信号也可以是模拟或者数字的。
- 需要充分利用传输媒体。
传输媒体
- 通信模型
- 物理信道常指从变换器输出到反变换器输入之间的部分,除了实际载体之外,还包括天线、滤波器以及功率放大器或者转发器等通信设备。
- 基于传输媒体上信号在传播过程的方向性
- 导向(guided)媒体:实际的物理线缆限制了信号传播的路径,包括双绞线、同轴电缆和光纤以及电力线等。
- 非导向(unguided)媒体:信号通过空气、水等无形的载体进行传播,包括无线电、微波、红外、激光、卫星、水声。
双绞线(twisted pair)
- 最常用的传输媒体:LAN连接、电话等。
- 一根电缆常常包括多(4)对双绞线
- 大对数电缆
- 双绞线减少相互间的干扰,单位距离上的旋绞次数越多,带宽越高。
- 非屏蔽双绞线UTP(Unshielded Twisted Pair)
- 没有屏蔽,细、轻,廉价,容易安装,适合于大规模电话线和LAN连接。
- 屏蔽双绞线STP(Shielded Twisted Pair)
- 可以每对双绞线外(Shielded)或所有双绞线外(Screened)增加金属屏蔽包层。
- 铝箔屏蔽双绞线FTP(Foiled Twisted Pair)、网屏式(Screened)UTP (S/UTP、ScTP):所有4对双绞线外增加。
- 屏蔽双绞线STP或STP-A(Shielded twisted pair):每对双绞线外增加。
- 双屏蔽双绞线S/STP或S/FTP(Screened shielded twisted pair):在每对双绞线外也在所有双绞线外部增加金属包层。
- 可以每对双绞线外(Shielded)或所有双绞线外(Screened)增加金属屏蔽包层。
同轴电缆(coaxial cable)
- 从里到外依次为铜芯、绝缘材料、网状导体、塑料外皮。
- 相比双绞线屏蔽更好,带宽更高(600M到3GHz甚至更高)速度更高,距离更远。
- 基带电缆(50欧姆)
- 传输离散变化的数字信号,根据直径的不同可以分为粗缆和细缆。
- 宽带电缆(75欧姆)
- 传输连续变化的模拟信号,经常采用FDM方式来传输多路信号,在CATV中使用。
- 早期以太网支持宽带同轴电缆选项,采用载带传输:虽然传输模拟信号,但是一路模拟信号占用了全部信道带宽。
光纤(fiber)
- 光纤是一根很细的可传导光线的纤维媒体,由超纯硅、合成玻璃或者塑料制作而成,每根光纤(高折射率的纤丝core)都有自己的低折射率的包层(cladding),cladding用于增加全反射作用强度。
- 光从核心入射到包层的角度大于临界角,在光纤内部传递的光会被包层反射过来,反射过去地沿“之”字形向前传播。【全反射】
- 一根或者多根光纤通过一层绝缘材料被包裹在塑胶外套里面而构成光缆。
- 光纤传送电信号的过程
- 根据核心和包层间的折射率变化的程度,光纤可分为:
- 渐变光纤:从核心到包层折射率逐渐减小。
- 突变光纤:折射率急剧改变。
- 多模(multimode)光纤
- 属于渐变光纤(允许多种角度的光束进入)。
- 直径较大 (62.5 微米),LED作为光源。
- 采用多径传输方式,光线沿着光纤以多种角度(模)不断被包层反射而向前传播 - 限制了最大数据速率。
- 常用于WDM和DWDM中。
单模(singlemode)光纤
- 属于突变光纤(只允许一定角度的光束进入)。
- 直径较小(12.5微米),采用激光作为光源,价格也更贵。【小于光的波长,因此只会近似的沿直线传播】
- 临界角几乎与核心平行,所有光束几乎是沿着相同的角度水平进入,几乎按照相同的路径沿轴心向前传播。
- 损耗小,支持更长距离和更高数据速率。
- 常用于SONET或SDH中。
光纤有很好的特质
- 轻便,重量和容积小。
- 化学性质稳定,耐腐蚀。
- 大容量(THz)。
- 低衰减。
- 电磁隔离,不受外部影响,不辐射电磁场(安全)。
缺点
- 连接(安装)不易,抽头分支困难。
- 接口设备较昂贵。
电力线
- 通过电力线路进行话音或者数据传输,也称为电力线载波PLC(Power Line Carrier)。
- 在发送时,采用合适的调制技术(如GMSK或OFDM)将要传输的数据进行调制转换成高频信号,采用耦合器将信号耦合到电力线上进行传输。
- 接收端首先经过滤波器将调制信号提取,再经过解调还原得到原始的数据。
- 一般高压环境下,10kbps左右的低速PLC使用0到500kHz范围的频率,主要用于电力系统本身的调度、远程控制和测量。
- 高速PLC工作在低压电力线,采用的频率范围为1到30MHz,可以达到45Mbps甚至150Mbps的数据速率。
- 通常用于家庭联网。
电力线通信的特点
- 组建成本低、覆盖范围广,不需要重新建设。
- 电力线传输容易受到周围环境和电力负荷变化的影响,不是非常稳定。
- 电力线传输交流电,存在本身固有的100HZ或120HZ脉冲干扰,干扰时间约2ms。
- 电力线负荷是动态变化的,负荷重时线路阻抗高,载波信号衰减比较厉害。
- 周围环境会有电磁干扰。
- 电力线通信会有多径传输,多个电力设备接入产生不同的阻抗。
- 采用OFDM或其他扩频技术。
无线媒体
无线电波段的传输特性
- 低频、中频波段 (Ground-wave传播)
- 波长较长,可轻易通过障碍物,沿地表传播,称为地波传播。
- 能量随着与信号源距离的增大而急剧减少,而且频率越高,损失越大。
- 高频、甚高频(短波和超短波)(Sky-wave传播)
- 沿地表传播时会被地球吸收,但可通过电离层反射,从而可达到更远的距离,称为天波传播。
- 波长越短,吸收的也越少,反射的也越多。由于电离层受天气和昼夜的影响,不是很稳定。
- 一般微波会穿越电离层,而长波则几乎完全吸收。
- 超高频以上(微波)(Line-of-sight传播)
- 若采用地波传播的话衰减会更大,而采用天波传播时其电波则会穿越电离层,难以把信号反射回来。
- 一般都采用空间波(视线)传播【有方向性】
- 地面微波:采用较高的微波定向天线中转。
- 卫星微波:通过卫星中转。
无线媒体的发送和接收是通过天线实现的。
- 全向天线
- 信号从天线发射后沿所有方向传播,各个方向辐射出的功率相等。
- 低频信号通常为全向传播。
- 定向天线
- 发射天线将电磁波聚集成波束后发射出去,故收发天线必须校准。
- 频率较高时才能聚集成束。
- 天线增益
- 特定方向上的输出功率相比理想情况下的全向天线功率的增加。
- 与采用的无线信号的频率、天线的有效面积相关。
- 天线的直径要求为无线信号的波长的1/10。比如AM无线电台的载波频率为1MHz,那么天线最少为30米。
无线媒体的影响因素
- 衰减:信号的强度随着其传输的距离增加而降低的现象。
- 导向媒体中衰减一般是一个相对固定的值;
- 无线媒体更加容易受到噪声和多径传输而带来的干扰,从而使得信号的衰减更加难以描述。
无线信号传输中,自由空间传播模型给出了在理想条件下(两点间直线传播且没有任何地表或者障碍物的阻隔、没有损伤源存在),其损耗与频率f(波长λ)和距离d的关系。
- 发送功率/接收功率 = \(({4\pi d\over \lambda})^2\)
- 与距离的平方成正比,传输越远,衰减越厉害。
噪声:影响两个无线节点间信号的视线传播而导致衰减和失真的因素。
- 信道本身固有的热噪声。
- 由于多个不同频率或者相同频率的信号同时进行传播时出现非线性因素时而导致的互调噪声。
- 信号传输路径上其他无关信号而产生的串扰。
- 周围环境因素而导致短时期的突发噪声。
多径干扰
- 由于障碍物和其他因素的影响还可能会出现反射、散射和衍射等多径传输。
- 接收方会接收到具有不同延迟的信号的多个副本,迟来的上一个信号单元的多径分量会对当前分量造成多径干扰。
无线通信
无线电(radio)通信
- 使用3kHz到1GHz的频段,受到无线电管制。
- 采用地波和天波传播方式。
- 一般采用全向传播,适于组播或者广播方式的应用,比如无线电广播和电视广播。
微波(microwave)通信
- 使用1GHz到300GHz的频段(大多数使用1GHz到40GHz的频段)
- 一般受到无线电管制,频段需要申请。
- ISM (Industrial, Scientific and Medical)频段无需申请(如2.4GHz和5GHz等)。
- 微波通信可以使用全向天线,通过地波和天波方式传播,只是信号所能传播的距离相比无线电通信更短 - 蜂窝通信(频率重用)。
- 地面微波采用定向天线支持视线传播
- 发射和接收天线必须精确对准。
- 长距离时需要使用微波中继站。
- 频率越高,支持数据速率越高(如6GHz微波带宽为30MHz,速率90Mbps,而18GHz微波带宽220MHz,速率可达274Mbps)。
卫星通信
- 利用地球同步卫星为中继转发微波信号:地面发射的信号沿上行信道到达卫星,转发器放大和变换后沿下行信道到地面接收站。
- 无距离限制,但传播延时较长:270ms。
- 微波的传播延迟3us/km;同轴电缆或光纤的传播延迟为53us/km。
- 甚小口径终端VSAT:考虑地面站昂贵。
- 卫星通信中,只要地面发送或者接收方中任一方有大天线和大功率放大器,则另一方可以采用1m的小天线。
- VSAT终端利用小天线通过中心站转接,中心站有大天线和大功率放大器。
- 两个VSAT终端间通过一个中心站Hub通信,传播延时为540ms。
红外通信(infrared)
- 短距离的利用红外线的通信,波长为850~950nm。
- 要求一定的方向性,也可使用相对不聚焦(漫射)的红外装置来构成无线局域网。
- 红外线的发送与接收装置硬件相对便宜而容易制造,无需天线。
- 不能穿过建筑物。
- 不需要申请频段。
激光通信(laser)
- 利用光波通信。
- 定向特性。
- 无需申请频段。
- 不能穿过障碍物,受天气(雨雾)影响。
- 相比红外可支持更长的距离。
水声通信
- 采用声波在水中传播。
- 声波传播速度只有大约每秒1500m,延迟比较大。
- 水声通信一般采用较低的频率,相对衰减较少,可以传播较长的距离。
- 声波的衰减在不同的海域(压力、温度、密度和海水盐度)有不同的特性。
- 会有大量的海洋环境噪声。
- 海水是一种不均匀的非理想介质,声波在水中传播时会有多条路径。有限的信道带宽和多径传播会造成非常严重的码间干扰。
- 水声通信可采用FDM和MIMO技术,提供10kbps甚至更高的数据速率。
信道的最大数据传输速率
- 信道带宽:物理信道所能传输信号的频率范围。
- 范围内的信号在信道上传输时不会产生明显失真。
- 由传输媒体和有关的附加设备与电路的频率特性综合决定的。如1路传统模拟语言信道的带宽是4kHz(其实是其低通滤波器限制)。
- 模拟和数字:连续变化的取值还是离散变化的取值。
- 信息:表示和存储。数字信息→数据
- 信号
- 信道
- 数据通信:数字信息(数据)通过模拟或数字信道以模拟或数字信号传输(数字传输)。或称数据传输。
限制信道传输速率的两个定理
Nyquist定理
- 给出了有限带宽为H的无噪声信道的最大数据速率。
- 只需要以每秒2H次的频率采样就能够完整地重构原有的波形,且最高也就是2H(更高频率的谐波将无法通过信道)。
- 波特率B(或称码元速率、调制速率):每秒信号状态变化的次数,单位:波特。即波特率最高2H波特,也足够了。
- 信号可取的离散值(状态)的个数为L。
- 数据速率C:每秒传输的比特数。
- \(C=B\log_2L = 2H\log_2L\)
Shannon定理
- 受噪声干扰的信道中最大数据速率。
- \(C=H\log_2(1+S/N)\)
- 信噪比SNR常常用分贝(dB)为单位来表示:
- \(10\log_{10}(S/N)\ dB\)
分贝
- 常表示增益、损耗以及信号强度的相对值。
- 信号沿传输媒体传播,其信号强度会有损耗或者衰减(loss),同时途中的放大器会放大信号强度,从而获得一个增益(gain)。
- 信号强度通常以指数形式下降,因此适合用对数形式的分贝表示损耗等。
- \(10\log_{10}(S/N)\ dB\)
- 在一个串联而成的传输通道上,净增益或损耗可以通过简单的加减运算来进行。
- 考虑一个信号到目的地经过一个放大器,第一段媒体的损耗为12dB,放大器的增益为35dB,第二段媒体的损耗为10dB,这样净增益=-12+35-10=13dB。
- 注意:分贝表示的是相对值,如从10mW到5mW与从1000mW到500mW的损耗都是一样的,都为3dB。
如何获得更高数据速率
- Nyquist定理:增加离散值(状态)的个数(L)--有限
- Shannon定理:增大信噪比(S/N)--亦有限
- 扩频
- 采用扩频技术来增加带宽(无线扩频理论基础)。
- 但无法通过无限制的增加信道带宽来获得很高的数据速率。
- 当 \(H \to \infty\)时,信道噪声也同样增加 \(N = \eta H\) 其中称 \(\eta\) 为噪声功率谱密度
数字编码
数字形式的数据以数字信号方式在数字信道上传输。
NRZ(Non-Return-Zero)编码
- 一种信号状态(正电压)代表1,另一种信号状态(负电压)代表0。
- 没有中间状态(零电压),而归零编码时每个脉冲之间会返回到零电压状态。
- 需解决两个问题
- 时钟恢复(Clock recovery):根据跳变来恢复时钟,可能长时间无跳变,从而接收和发送端之间很难进行比特同步。
- 基线漂移(Baseline wander):接收者记录收到的信号的平均值(基线),然后与这个平均值进行比较以确定高电平或低电平。连续的1或者0就会改变这个平均值。
NRZI(NRZ Inverted on ones)编码
- 比较相邻的信号单元而不是仅仅根据目前的信号(差分编码)。
- 用信号的跳变来表示1,无跳变表示0。
- 解决了连续1的问题,但是对于连续0的问题无能为力。
曼彻斯特编码
- 每个比特的传输都有电平的跳变,一个比特时间T分为两半:高电平 - 低电平为1,低电平 - 高电平为0。
- 可以看作时钟和NRZ编码异或而成。
差分曼彻斯特编码
- 比特时间的开始处的跳变有无来表示0或者1:有跳变表示0,没有跳变表示1。
- 每个比特时间仍然有一个跳变,用来同步(曼彻斯特编码)。
- 可以看作时钟和NRZI编码异或而成。
- 需要更复杂的设备,更好的抗干扰性。
- 曼彻斯特编码的波特率和比特率的关系(编码效率):只有50%!
4B/5B 编码
- 4比特的数据用5比特的码组来编码
- 保证码组前部没有多于1个’0’,尾部没有多于2个’0’。
- 采用4B5B编码的码组流不会出现超过连续3个’0’。
- 5比特的码组再用NRZI编码(有跳变表示1)
- 每个5比特的码组至少有2个“1”,也就是有2次跳变。
- 4B5B的编码效率:80%!
多级传输 MLT-3
- 4B/5B编码用于100Mbps以太网时,产生125M波特的信号,超过双绞线的100MHz的带宽。
- MLT-3采用三种电压:正电压(+V)、负电压(-V)和零电压(0)。
- 采用差分编码,保证传输比特1时都有一次跳变,而比特0则没有跳变。
- 如果要传输0,则采用和上一信号单元一样的电压。
- 如果传输1,则要考虑上一信号单元的电压
- 如果为+V或-V,则跳变为0;
- 如果为0,则跳变为+V或者-V,具体哪个还要考虑前面的最后一个非0电压是什么,跳变为该非0电压的反。
- MLT-3的电压跳变过程总是沿着-V、0、+V、0来循环的,即4个比特对应着一个信号模式(信号单元),在最坏的情况下(全1),信号的波特率为数据速率的1/4。
- 100BASE-TX采用4B/5B和MLT-3结合的编码方案
- 4B5B/NRZI编码后的信号再经过扰频技术产生一个更一致的频谱分布,最后采用MLT-3编码。
- 传输信号的能量集中在31.25 MHz以下,从而可以用于五类双绞线。
数字调制
- 数字调制:将数字数据以模拟信号方式传输
- 基带(调制)信号(实际上是被调制的信号):要传输的原始数字信号。
- 载波信号:信道上的模拟信号。
- 数字调制实际上是按基带信号的变化规律去改变载波信号某些参数的过程。
- 一般通信是双向的,数字调制的设备称为调制解调器(Modem:Modulator + Demodulator)。
- 在实践中,数字编码一般在有线媒体上使用。数字调制一般在(从有线媒介到无线媒介)无线媒体中使用。【有线媒介一般用数字信道】
- 模拟调制:将模拟数据转换为适合于信道中传输的模拟信号
- 调制信号一般为低频信号,不适合远距离的传输,需要较大的天线。
- 载波模拟信号占据与模拟调制信号相同的带宽,一般经过频率迁移技术将调制信号迁移到对应的频段上。
- 传输媒体的信道一般被分成多个不同频谱的子信道。无线电广播采用模拟调制技术。
载波形式
- 脉冲调制:载波为时间上离散的脉冲串,载波参数包括幅度、宽度、时间位置。
- 脉幅调制(PAM)、脉宽调制(PDM)和脉位调制(PPM)。
- 正弦波调制:载波为正弦波,参数包括幅度、频率、相位。
- 三种基本调制方法:调幅、调频和调相。
- 也称幅移键控ASK/频移键控FSK/相移键控PSK
- 通常用数字电路开关来实现。
调制方法
- 调幅、调频和调相
- 调相一般采用差分方法: D(B/Q)PSK:更好的抗干扰性和数据速率。
- 用相位差为180表示有跳变(1),用相位不变表示无跳变(0)。
- 为防止连续相位无变化而导致时钟同步出现问题,避免采取相位差为0。如差分四相移键控(差分正交相移键控DQPSK)的相位差45、135、225、315。
常用的数字调制技术
- 目前主要应用在无线信道中(有线信道多数是数字信道了)
- GSM采用GMSK(高斯最小频移键控)
- W-CDMA采用QPSK(4相相移键控)和BPSK
- TD-SCDMA采用QPSK和8PSK
- CDMA2000采用QPSK和BPSK
- 蓝牙1.0 采用GFSK,而蓝牙2.0采用4-DQPSK和8-DPSK
- 无线局域网802.11,采用DBPSK支持1Mbps,采用DQPSK 支持2Mbps,采用QPSK和CCK支持最高11Mbps
- 无线局域网802.11g,采用OFDM和BPSK或QPSK支持18Mbps,更高的速率采用OFDM和QAM
多跳传输形式
- 和信息的表示、存储(转存、复制)类似。
- 模拟传输【放大器】
- 模拟信号传输的方式,不关心携带的数据信号的内容(模拟数据或者数字数据)。
- 信号的畸变和衰减:放大器也会放大噪声信号。
- 数字传输【转发器】
- 关心信号的内容,中间或接收节点还原数字数据。
- 信道上可以是:
- 数字信号:一系列的0和1,可能是数字数据或者经过编码的模拟数据。
- 模拟信号:代表数字数据(调制后)。【上面说有线信道多是数字信道了;但因为接入网络可能仍然是模拟信道(早期调制解调器时代?),这样就还会出现在模拟信道上传输调制的数字信号的情况】
- 转发器(Repeater):校验、恢复为数字数据,然后重新生成相应的信号传递。
- 广泛用于长距离数据通信中。
多路复用技术
- 传输媒体的带宽或容量常超过传输单一数据信号的需求。让多个发送者共享媒体(信道) - 信道访问机制。
- 多路复用:属于物理层,如何把两路或多路信号组合起来在一个物理信道上进行传输。
- 多路访问:属于链路层,在物理层的多路复用技术的基础上怎样规范对于共享信道的访问使得多个用户可以同时共享信道。
- 双工模式指的是一个全双工的通信系统中如何分配正向和反向信道以支持全双工的通信。
频分多路复用(Frequency Division Multiplexing)
- 物理信道的总带宽分割成若干个和传输的单个信号带宽相同(或略为宽一点)的子信道。
- 每个子信道传输一路信号。
- 通过频谱搬移技术,将各路信号的频谱搬移到物理信道频谱的不同频段上。
- 频率调制时采用不同的载波。
- 早期电话系统、无线电广播和有线电视采用FDM技术。
- 为了防止相邻频道之间的串扰会增加保护频带
- FDM频率利用率不高。
- 由于放大器的非线性因素,仍然可能产生互调噪声。
多径传输带来的影响
- 多径传输信道上的高速数据传输很容易由于多径传输的影响而造成码间干扰。
- 信道的多径(时延)扩展:接收方收到的第一个和最后一个到达的多径分量间的时间间隔。
- 码间干扰ISI(Intersymbol interference):多径扩展超过了一个比特的传输时间,传输了某个比特的信号的多径分量可能会和包含了前一个比特的信号的多径分量同时到达。
- 信道的相干带宽(Coherence Bandwidth):多径扩展的倒数。
- 频率选择性信道
- 如果传输信号的带宽超过了信道的相干带宽,大于相干带宽的信号频率会大量衰退,而另外一些频率分量的衰退要弱得多。
正交频分复用OFDM(Orthogonal FDM)
- 多载波技术:把一个高速的数据流分解成许多低速率的子数据流,然后以并行方式在多个子信道上传输。
- 子载波的频率必须相互正交:避免载波信号间互相干扰。
- 子信道之间并不需要有保护频带,而是将信道等分成多个子信道。
- 每个子信道上码元持续时间比信道的时延扩展小,消除码间干扰。
- 采用快速傅里叶变换FFT来联合调制多个子载波来产生子信道上的信号。
- 广泛应用于数字电视广播DVB、DSL、802.11、移动通信以及电力线和水声通信中。
时分多路复用TDM(Time Division Multiplexing)
- 将一条物理信道按时间分成一系列的TDM帧
- TDM帧由若干时间片或者时槽组成。
- 每个子信道在固定的某个或者多个时槽处传输,称为同步TDM。
- 如果时槽的分配是动态的,称为统计时分多路复用STDM(Statistical Time Division Multiplexing),能够更有效地利用信道的带宽。
- TDM只适合于传输数字数据,FDM可传输模拟和数字数据。
- 如何解决发送方和接收方时钟同步的问题?
- 每个TDM帧之前添加相应的同步比特。
- 在每个时槽之间加上保护时间(类似于FDM的保护频带)。
- 使用原子时钟保证发送方和接收方时钟精确的同步。
TDM:T1信道
- T1信道
- 用于传输24路话音,即24个子信道。
- 每125 μs采样一次
- 模拟音频的采样频率为8KHz。
- 模拟音频信道的带宽为4KHz(300~3300Hz再加上各500Hz保护频带)。
- 每个样本7比特。
- 模拟音频的采样频率为8KHz。
- 每个子信道有8比特,其中一个比特用于传输控制信号。
- 每TDM帧还有一个比特用于帧的边界,连续的TMD帧中的该位一直要保持01010101……的模式。
- 因此,整个T1信道的容量(速率)
- \({(24*8+1)bit\over 25us}=1.544Mbps\)
TDM:E1信道和SONET
- E1信道
- 传输30路话音。
- 总共32个子信道,另2个子信道传输控制信号、同步。
- 30路子信道传输话音,每个样本8比特。
因此,整个E1信道的容量(速率)
- \({(32*8)bit\over 125us}=2.048Mbps\)
同步光纤网SONET(Synchronous Optical Network)
使用原子时钟,不需要同步比特或者保护时间。
复用基本单元为51.84 Mb/s的OC-1信号。
OC-48的数据速率为 48*51.84=2488.32M b/s,OC-192提供9953.28Mbps的数据速率。
波分多路复用WDM (Wavelength DM)
- 光波位于统一电磁频谱的高频段,支持高带宽。
- 不同波长的多个光波信号通过合波器(无源的棱柱或衍射光栅)复用到一根光纤上,接收方通过分波器将其分离。
- 若一路光波信号可达10Gb/s,采用DWDM将64路光波信号波分多路复用一根光纤,则数据速率高达640Gbps。(最近有报道,我国已实现100Tbps)
- 支持光交换,将一根光纤上输入的光信号向多条光纤转发(全光网络)。
- 波长与频率为一一对应的关系,因此WDM实际上是FDM的一种变种。
空分多路复用SDM(Space DM)
- 从空间的角度将多个线缆或者多个信号复用在一起,多个数据流通过多个线缆或者天线并行传输。
- 有线媒体中的空分多路复用很多时候指多对铜线或者光纤共用一条电缆或者光缆。
- 在无线媒体中,SDM指的是采用多天线来发送多个信号的技术。
- 基于发送方和接收方使用的天线的数目,可以分为
- 单入多出SIMO(single-input and multiple-output)
- 多入单出MISO(multiple-input and single-output)
- 多入多出MIMO(Multiple-Input and Multiple-Output)
- MIMO允许多个天线同时发送和接收
- 要传输的数据流首先经过时空编码形成多个子数据流,然后经过多个天线发送出去,经过空间信道后由多个天线接收再解码。
- 提高了信道的容量,提高了信道的可靠性,降低误码率。
- 广泛应用于新一代的无线网络中,包括4G移动通信、802.11n等。MIMO也可以用于有线网络,如DSL技术。
码分多路复用CDM(Code Division Multiplexing)
- 允许站点在同一时间同一频带的公共信道上传输不同的信息。
- 每个站点分配一种经过特殊挑选的相互正交的编码序列--码片序列。
- 不同的站点可以同时传输,只要知道某一站点的码片序列,就可从收到的信号中检测到该站点信息,并将其分离出来。
- 第三代移动通信技术采用CDMA,另外一个重要的应用是全球定位系统GPS(Global Positioning System)。
接入网技术
- 接入网是网络的边缘部分,也称为“最后一公里”或“第一公里”。
混合光纤同轴电缆HFC(Hybrid Fiber Coax)
- 也称有线通
- 干线采用光纤,而从光节点到用户为宽带同轴电缆
- 头端通过CMTS接入Internet,将IP负载与电视信号通过混合器频分复用。
- 用户通过CM接入到HFC网络。
- 一个CMTS可以支持4000到150,000个CM(用户)。
- CMTS与CM之间的数据链路层是DOCSIS(Data Over Cable Service Interface Specification)
- 下行信道
- IP分组封装成一个DOCSIS帧,然后采用64-QAM或者256-QAM调制成载波信号,再通过混合器频分复用后进入HFC网络。
- 上行信道
* 一个光节点下面的CM是通过树形拓扑结构的宽带同轴电缆连接。
* DOCSIS 1.0采用CDMA,而DOCSIS 2.0和3.0则采用TDMA和S-CDMA。
* 上行数据由CM封装成DOCSIS帧,然后采用QPSK、16-QAM等调制成载波信号。
* CM之间无法直接通信,而必须通过CMTS再发送到其他CM。- 欧洲采用EuroDOCSIS(中国和此类似)
- OCSIS允许同时使用多个下行和上行信道,从而支持更高速率。
- 欧洲采用EuroDOCSIS(中国和此类似)
- 下行信道
电话网络
公用电话交换网PSTN(Public Switched Telephone Network)
- 1878年美国的贝尔开办了第一个电话端局。
- 采用一个高可靠、高冗余、多层次的分层结构,采用电路交换方式。
- 本地回路
- 用户(subscriber)到端局(End Office)之间采用双绞线连接。
- 低通滤波器限制本地回路允许通过的频率范围(4KHz语音)。
- 中国的电话网由四级长途交换中心和一级本地网端局组成。
- 一、二、三、四级的长途交换中心构成长途电话网。
- 由本地网端局和按需要设置的汇接局组成本地电话网。
脉码调制PCM(Pulse Code Modulation)
- 数字传输中,将从本地回路来的模拟信号(话音信号)编码成数字信号以及反之,采用设备称为编码解码器(Codec)。--数字化
- 采样
- 基于奈奎斯特定理,按照2倍模拟信号带宽的频率采样。
- 对于4kHz话音,采样频率为每秒8k次,即每125μS采样一次。
- 量化:将采样点处测得的信号幅值分级取整
- 等分量化:
- 将模拟信号的最大可能幅值等分为若干级(通常为2n级)。
- 测量得到的幅值按此分级舍入取整。
- 比如假设最大幅值为256,分为8级,则幅值等级为[0,32)、[32,64)、[64,96)、[96,128)、 [128,160)、[160,192)、[192,224)、[224,256),误差为32。
- 取整时采用四舍五入的办法可使误差再缩小一半。
- 等分量化:
- 编码:将量化后的等级值用二进制数来表示(n bits)。
非均匀(非线性)量化PCM:G.711标准
- 引入对数函数,低幅区使用较小的量化间隔,高幅区使用更大的量化间隔。
- 编码成8个比特,数据速率为64kbps(1路话音要求)。
- 欧洲和中国采用A-law(A=87.7)将12比特的采样值(前面4个比特不变,后面8个比特利用对数函数压缩成4个比特)压缩成8比特。
- 美国采用μ-law(μ=255),13个比特采样值前面5个比特不变,后面8个比特使用对数函数压缩成3个比特。
PCM 变形
- 差分DPCM
- 量化幅度之间的间隔(当前值与前一个值之差)。
- 基于模拟信号的幅度不可能大幅度的跳变。
- 比如如果假设相邻样点间的跳变不可能超过16,则可用4比特编码。
- 增量(delta)调制
- 假设前后采样样本值相差1。
- 1个比特编码就可以。
- 预测编码
- 预测样本值,对实际采样值和预测之间的幅度差进行量化。
- 发送器和接收器必须使用同样的预测算法。
电话网络的数字信号复用标准
- 同轴电缆上的准同步数字系列PDH(Plesiochronous Digital Hierarchy)
- 最基本的复用单元是DS0(Digital Signal 0)对应着1路话音信号(64kbps)。
- 24路DS0复用成DS1,DS1信号在同轴电缆传输就称为T1载波,对应的信道称为T1信道。
- 中国的电话网络采用欧洲的E1标准。
- 光纤上的同步数字系列SDH(Synchronous Digital Hierarchy)
- 美国在1988年推出了同步光纤网SONET的数字传输标准,并为ITU-T接受为SDH。
- 采用原子时针同步,不需要同步比特,因此复用后的载波带宽为被复用载波带宽的倍数。
- 吸取了原来PDH各国标准不一致带来的互连问题,SONET和SDH的复用标准是相同的,只是采用了不同的术语和使用不同的复用基本单元。
本地回路接入
- 本地回路的双绞线带宽实际可支持16MHz。
- 电话话音在本地回路传输时端局那方通过低通滤波器限制其带宽为4KHz。
- 满足1路话音模拟传输需要。
- 模拟线路拨号上网(数字调制)
- 支持最高33.6kbps。
- 采用非对称V.90 Modem,下行最高56kbps。
- 窄带ISDN(N-ISDN)
- 2路64kbps数字传输。
- 数字用户线DSL(Digital subscriber line)
- 包括ADSL( Asymmetric DSL)、 VDSL(Very high-speed DSL)、SHDSL(Symmetric high-speed DSL)等。
非对称数字用户线ADSL(Asymmetric DSL)
- ADSL支持两种频分复用方式,分别是无载波幅度相位CAP(Carrierless Amplitude Phase)和离散多音DMT(Discrete Multi Tone)。实践中一般采用DMT(即OFDM)。
- 1.104MHz的带宽分成分成256个4312.5Hz信道
- 信道1-6保留为话音使用(目前普通电话采用信道1);
- 信道7-38用于上行;
- 其他信道用于下行。
- 上行和下行信道采用QAM调制,然后与话音信号一起通过DMT复用后传输到双绞线上。
- 1.104MHz的带宽分成分成256个4312.5Hz信道
- ADSL设备定期对电话线路进行测试来决定所有信道的信噪比,从而选择信道和相应的数据速率。
- ADSL在5-6公里距离提供最高12Mbps的下行速率和1.3Mbps的上行速率。
- ADSL2+使用2.2MHz的带宽,下行速率最高可达24Mbps,上行可到3.3Mbps。
光纤到户FTTH(Fiber To The Home)
- FTTH:最后一公里采用光纤到用户
- 通过点到点的直连光纤(direct fiber)
- 采用光分配网ODN(Optical Distribution Network)
- 有源光网络AON(Active Optical Network)
- 无源光网络PON(Passive Optical Network):光节点无需电源。
- PON采用点到多点结构,包括EPON和GPON技术,目前EPON占据主导地位。
- 中心节点被称为光纤线路终端OLT(Optical Line Terminal)
- 用户节点称为光网络单元ONU(Optical Network Units)
- OLT和ONU之间通过光纤和无源光合/分路器连接。
- 1个PON网络一般可支持128个用户,实践中为32或64。
- 其他FTTx包括光纤到大楼FTTB(Fiber To the Building)和光纤到路边FTTC(Fiber To the Curb)等,然后双绞线、同轴电缆到户。
FTTH结构
- 采用WDM,全双工方式。
- 下行方向采用1490nm,广播方式。
- 上行方向采用1310nm,采用TDMA,由OLT控制哪个ONU传输。
- 1550nm保留可选,用于转发RF模拟电视信号。
无线接入
- WiFi热点(局域无线)是有线或者无线宽带接入(广域无线)的一个有益补充。
- 免费/低费用。
- 覆盖范围有限,切换速度慢。
- 广域无线的蜂窝移动通信技术
- 无线信号在空气中传播会随着距离的增加而衰减,相对距离较远的小区可以使用相同的频率。(频率复用)
- 每个小区由一个小功率的基站控制,使用总频谱的一部分。(功耗低)
- 一组小区组成区群
- 一个区群中小区的数量称为区群大小或频率复用因子(=7)。
- 整个频带被分成多个频率组。
- 每个区群中可以使用所有频带,不过其中的每个小区使用不同的频率组,保证相邻小区不会使用同一个频率组。
移动蜂窝网络
- 第一代移动网络(1G)
- 采用FDMA和模拟传输技术。
- 第二代移动网络(2G)
- 采用数字传输技术
- 欧洲的全球移动通信系统GSM(Global System for Mobile communication)
- 美国的CDMA(IS-95)
- 2G的过渡
- GSM的过渡(2.5G、2.75G)
- 通用分组无线业务GPRS(General Packet Radio Service):理论上最高171kbps。
- 增强型GSM演进数据速率EDGE(Enhanced Data rate for GSM Evolution),也称为EGPRS:最高384kbps。
- EDGE演进(EDGE Evolution):最高1Mbps。
- CDMA的过渡:CDMA2000 1xRTT,最高153.6kbps。
- GSM的过渡(2.5G、2.75G)
- 第三代移动网络(3G)(IMT-2000标准)
- 要求车载144kbps、步行384kbps、静止2M bps。
- 3GPP家族(欧洲)的通用移动电话系统UMTS(Universal Mobile Telephone System)
- 核心网以GSM原有架构为基础,后来发展为全IP核心网。
- 空中接口
- W-CDMA(Wideband CDMA):中国联通部署。
- TD-SCDMA(Time Division-Synchronous CDMA):中国提出,中国移动部署。
- 3GPP2(美国)家族的CDMA2000 1xEV-DO
- 最高2.4Mbps,中国电信部署。
- 3G的过渡(3.5G、3.75G、3.9G)
- 3GPP家族:高速下行分组接入(HSDPA)/高速上行分组接入(HSUPA)/高速分组接入演进(HSPA+),被称为3.5G/3.75G。长期演进技术LTE(Long Term Evolution),性能和功能显著提高,但一般认为3.9G。
- 3GPP2家族:CDMA2000 1xEV-DO Rev A/Rev B。
- WiMAX(IEEE 802.16e-2005):下行128Mbps,上行56Mbps,属于4G标准,但一般也认为3.9G。
- 第四代移动网络(4G)(IMT-Advanced标准)
- 移动环境100Mbps,步行和静止1Gbps。
- 3GPP家族的LTE-Advanced(LTE-A):上行500Mbps,下行1Gbps。
- WiMAX的IEEE 802.16m:上行和下行1Gbps。
- 全IP技术,不再支持电路交换的电话服务,而是IP电话。
- 3G的CDMA代替以4G的OFDM和MIMO技术。
- 第五代移动网络(5G)
- 已经部署,支持10Gbps以上。
GSM体系结构
- 移动台MS(Mobile Station):GSM系统的移动用户设备
- 移动设备(手机),通过国际移动设备标识(International Mobile Equipment Identity,IMEI)唯一标识。
- 用户识别模块SIM卡(Subscriber Identity Module),存储国际移动用户标识(International Mobile Subscriber Identity,IMSI)、密钥、用户信息以及用于当前的网络接入的相关信息等。
- 基站收发站或基站BTS(Base Transceiver Station)
- 对应着一个小区,提供与移动台之间的无线空中接口。
- 基站控制器BSC(Base Station Controller)
- 控制一个或多个BTS,进行小区参数配置、信道资源管理、功率控制、控制的小区间的越区切换等。
- 移动交换中心MSC(Mobile Switching Center)
- 控制BSC,提供与其他公用通信网之间的接口。
- 本地位置寄存器HLR(Home Location Register)
- 用户参数及可用服务,用户目前所在的MSC。
到访位置寄存器VLR(Visitor Location Register)
- 为到访用户提供服务所需的用户所在位置区域号及向用户提供服务等临时信息
采用FDMA和TDMA混合的多址接入技术
- 采用FDD全双工模式,移动台到基站间的上行链路和基站到移动台之间的下行链路使用不同的频率。
- 上下共25MHz的频带进一步细分为124个200kHz的带宽的频带。
- 每个载频进一步按照TDMA方式分成8个时槽,基站负责控制移动台在相应的时槽进行通信。
- 本身支持电路交换方式的电路交换数据业务CSD(Circuit Switch Data):可支持9.6kbps。
GPRS引入分组交换技术
- 核心网络引入2个新的网络单元:GRPS网关支持节点GGSN(提供与外部IP网络接口)、GPRS服务支持节点SGSN(相当于MSC)。
- 最多支持8个时槽,每个时槽可选用4种不通过的信道编码方案,最高支持8×21.4=171.2kbps。
媒体访问控制
【目录】
- 媒体访问概述(4.1)
- 基于信道分割的同步协议和基于分组的异步协议
- CDMA和ALOHA、CSMA
- 局域网:以太网(4.2)
- 体系结构和帧结构
- CSMA/CD
- 全双工以太网和以太网媒体选项
- 无线局域网(4.3)
- IEEE 802.11标准
- 体系结构
- CSMA/CA
- RFID(4.4)
- 架构、数据传输方式和防冲突机制
概述
- 三种不同类型的链路(媒体)
- 点到点链路
- 两端的发送方想发就发。
- 流量控制:接收方可能会要求限制发送方。
- 广播链路:多路访问/多址访问(Multiple Access)
- 多个节点连接到共享广播信道。
- 同一时刻两个或多个节点同时发送会遇到冲突。
- 媒体访问控制(MAC):控制信道的分配方式。
- 点到多点链路
- 一个中心节点和多个外围节点。
- 中心节点到外围节点采用广播方式。
- 外围节点到中心节点也要采取MAC。
媒体访问控制MAC (Media Access Control)
信道资源的分配是固定还是动态
- 基于信道的同步协议:信道分割
- 资源分割成若干部分,每一部分固定分配给某一节点独享。
- 如何分割信道资源?频率、时间、扩频码、空间等。
- 怎样分配资源:一般采取集中式的策略,中心节点(基站)调度。
- 适合于长时间、低延迟的连续负载流。
- 资源分割成若干部分,每一部分固定分配给某一节点独享。
- 基于分组的异步协议:动态分配资源
- 协作的按需分配(demand-based)协议(悲观方法)
- 轮询机制:高负载环境下较合适
- 一般采取集中式,控制器询问节点来调度。
- 预约机制:长时间连续传输环境下较合适
- 信道访问分成竞争时槽和负载时槽。
- 竞争时槽决定负载时槽的分配,可以采取集中或者分布式。
- 令牌传递机制:高负载环境下较合适
- 令牌(Token)为信道访问的信物,令牌绕环传递。
- 获得令牌后传递的数据一般绕环一周后由发送者负责移走。
- 轮询机制:高负载环境下较合适
- 无协作的随机访问(random access)协议(乐观方法)
- 竞争机制:随机、突发性数据传输环境下较合适
- 协作的按需分配(demand-based)协议(悲观方法)
MAC协议的选择要考虑传输媒体、负载以及协议开销等因素
码分多址CDMA(Code Division Multiple Access)
具有扩频功能的信道分割技术
- 基于香农定理:增大信道带宽使得在一定信噪比的情况下误码率尽可能低(或相同误码率下,可以更低的信噪比)。
- 扩频通过一个正交码或者伪噪声(Pseudo Noise)序列来控制
- 产生具有伪随机和类似噪声的信号。
- 抑制窄带干扰:解扩时干扰的信号功率也被相应降低。
- 抗多径干扰:宽带信号是频率选择性的,迟来信号与当前信号的PN序列不同。
- 接收者知道发送者使用的PN序列就可以解扩,从而可用于多用户。
- 所有用户可在同时刻同频率发送通过自身PN序列扩频后的信号。
- 正交或准正交的PN序列使得接收方可通过发送者使用的PN序列解扩。
- 产生具有伪随机和类似噪声的信号。
- 三种基本的扩频技术
- 跳频(Frequence Hopping,FHSS):信道带宽按频率分割,不同的时刻使用不同的频率的载波。
- 跳时(Time Hopping,THSS):信道带宽分成多个时槽组成的帧,每个帧选择不同的时槽。
- 直接序列(Direct Sequence,DSSS):信息经过PN序列编码后再进行调制。
DS-CDMA原理
【可以从线性代数的角度理解:采用相互正交的一组单位向量作为基;对于某一个站点来说,1 和 0 分别用其对应的正向量和负向量表示,零向量表示未发送;所有站点的信号的和向量就是所发出的向量 S;接收端只需要根据其所对应的的码片(单位向量)与 S 乘积即可得到分量的结果。】
- 每个站点被指定一个唯一的m位码片序列(相当于PN)。
- 码片序列常采用双极型的形式描述:二进制0用“-1”代替,二进制1用“+1”代替。
- 站点发送比特1时,发送其码片序列(符号S),发送比特0时,发送其码片序列的反码(S)。
- 码片序列必须是两两正交的:
- 任意两个不同的码片序列S和T的内积(记为S•T)均为0;
- 任何码片序列与自己的内积(记为S•S)均为1。
- 若两个或两个以上的站点同时开始传输,它们的双极型信号就线性相加。
- 接收方只要知道发送者的码片序列,就可从收到的混合信息中还原出发送者发送的信息,这是通过计算接收到的混合序列和发送站点的码片序列的内积得到的:
- 如果结果为+1,表示发送了1;
- 如果结果为-1,表示发送了0;
- 如果结果为0,表示没有发送。
- 假设站点A、C均发送”1”,站点B发送”0”,站点D没有发送。接收到的信息为S,还原C发送的信息:
- \(SC = (A+\bar B+C) C = AC+\bar BC+CC = CC = 1\)
CDMA 优点
- 扩频技术使得其抗噪声和多径干扰能力强。
- 软容量
- 任何给定的信号带宽,可找到的正交码的个数是有限的。
- 可以采用准正交码,接收者进行解扩后会残余一些其他用户的多址干扰,但是大多数情况下这个干扰比较小。
- 准正交码的个数并没有一个硬性的性质。
- 准正交码的CDMA系统会出现远近(near-far)问题
- 远端用户的信号要比近端用户而言有更大的多址干扰:来自于离接收者近的用户的信号功率要比更远距离的用户的信号功率大得多。
- 一般通过功率控制进行均衡来解决。
- 其性能会随着系统中的用户数的增加而降低,进一步可以通过智能天线、干扰抑制和多用户检测技术来处理。
- 多个用户可以共享同一频率,支持小区之间的软切换。
竞争机制
纯ALOHA协议
- 最简单的基于竞争机制的共享媒体多路访问控制机制。
- 夏威夷大学的Norman Abramson等设计的早期分组无线广播网络的信道分配技术。
- 只要一个站点想要传输信息帧,立即发送信息帧(在信道f1)--想说就说。
- 接收站点通过检查帧检验序列(FCS)字段来决定帧是否完好无损。如果正确接收,站点通过另外一个信道(信道f2)发出确认。
- 考虑到信息帧和ACK帧可能丢失,站点在发送帧后监听一段时间,如果在信息来回传播的最大延迟时间(两倍于相距最远的两个站点之间传递信息的时间)再加上一小段固定的时间内:
- 如果收到了确认,则传输成功
- 否则,发送站点等待一段随机的时间后重发信息帧。
- 随机时间的设定上,需要考虑:如果太短,可能会产生许多冲突;而太长,则可能信道利用率较低。
- 如果重传多次仍得不到确认,放弃传输帧。
ALOHA 性能:无限用户
【在无限用户场景下,单位时间产生的帧的数量可简单建模为参数为 G(=单位时间正好生成一帧的概率 =负载)的泊松分布。
注意到纯 ALOHA 协议中,一个帧可能发生冲突的时间长度为两个单位时间;单位时间内成功发送一帧的概率(=吞吐率)为恰好发送一帧的概率乘以其他节点在冲突时间内未发送帧的概率。
注意结论:在负载 G=0.5 的时候吞吐率 S 达到最大值 1/2e=0.18。这里的「吞吐率」是进行了归一化的吞吐量,即实际吞吐量/最大理论吞吐量】
ALOHA 性能:有限用户
【对于有限用户来说,建模不能用泊松分布而需要采用二项分布;因此分析过程如下。
然而,当 N 很大的时候,结果和无限用户时是一样的 —— 事实上,基于概率论中用泊松分布来近似二项分布,这一结论是显然的。】
分槽Slotted-ALOHA
【显然,每个节点都随意发送,造成冲突的概率较大。改进的方法就是进行分槽,每个节点只有在时槽之处才发送。这样做的好处就是把冲突时间减小为纯 ALOHA 的一半(一个时槽)。
在性能分析中,过程和纯 ALOHA 类似。
结论:在负载 G=1 时,吞吐率 S 达到最大值 1/e=0.36;也正好是纯 ALOHA 的两倍。】
- S-ALOHA
- 信道上的时间被分成离散的时间间隔即时槽,其大小相当于帧的传输时间(帧时);
站点时钟同步,每个帧只允许在时槽开始处进行传输。
冲突危险区比ALOHA降低了一半:只有那些都在同一个时槽开始进行传输的帧才有可能冲突。
G=1.0时,S有最大值为1/e≈0.368=36.8%。
最大吞吐率:例题
- 考虑一个带宽R为9600bps的链路,帧长度L=120bits,请问ALOHA和S-ALOHA系统的最大吞吐率是多少帧/秒?
- 链路的帧速率F = 9600/120 = 80帧/秒
- ALOHA系统的最大吞吐率
- S = F*1/2e = 80*0.184 = 15帧/秒
- S-ALOHA系统的最大吞吐率
- S = F*1/e = 30帧/秒
载波监听多路访问(CSMA)
- ALOHA协议中站点在发送时不考虑其他站点情况
- 传播时间长的网络(无线、卫星通信)中合适。
- 在局域网中,帧的传播时间(距离短)常远小于帧的传输时间
- 一个站点发送帧后,别的站点马上就可以监听到。
- 载波监听(Carrier Sensor):想要传输的站点首先监听媒体上是否有其他站点在传输--先听后说
- 如果媒体空闲,则可立即传输(注意仍然可能遇到冲突)或者稍微等待一段时间传输。
- 如果媒体忙,它必须等待 - 忙等待策略。
- 发送站点在发送完后要等待一段时间以等待确认,如果没有收到确认,发送站点认为发生了冲突,就等待随机时间后重发该帧。
- 帧的冲突危险区为传播时间:多个节点在传播时间内同时传输会产生冲突。信道最大利用率由帧的平均长度和传播时间决定。
忙等待策略
监听到媒体空闲和忙后采用的策略
- 0-坚持(非坚持)CSMA
- 若媒体空闲就传输;否则,转到第2步。
- 若媒体忙,等待一段随机的重传延迟时间,重复第1步。(客气)
- 问题:媒体空闲时间可能被浪费掉,访问延迟更长。
- 1-坚持CSMA
- 若媒体空闲就传输;否则,转到第2步。
- 若媒体忙则继续监听,直到检测到信道空闲然后立即传输。(粗鲁)
- 如果有冲突,则等待一段随机的时间后重复第1步。
- 问题:两个站点同时发现忙?
- P-坚持CSMA
- 若媒体空闲,以概率P传输,以概率(1-P)延迟一个时间单位(该时间单位通常等于最大的传播延迟的两倍)。
- 若媒体忙,继续监听直到信道空闲并重复第1步。
- 若传输延迟了一个时间单位,则重复第1步。
- P-坚持要避免的主要问题是在负荷变化大的环境下的不稳定(P的取值问题)
- 总共有N个站点,如果这些站点都有帧要传输(极端重负荷),为了避免冲突,显然应该满足NP<1,即P<1/N。
- 但是这样的概率P在轻负荷时,大部分信道时间会被浪费掉。
以太网
局域网概述
- 按照网络覆盖地理范围
- 广域网(WAN)覆盖了较广的地理区域,途中会穿过一些公共设施,可能会利用公共电信公司所提供的线路来进行连接。途中通过中继交换节点相连。
- 局域网(LAN)也是一种连接着各种设备的通信网络,覆盖范围小,由某个组织单独拥有,数据传输速率一般要比广域网高得多。传统局域网使用广播,后来引入交换技术。
- 个人区域网(PAN)覆盖10米左右的区域,连接便携和移动等消费和控制类电子设备。
- 城域网(MAN)则覆盖于局域网和广域网之间的区域,它实际上不过是一个更大范围的局域网系统,一般采取和局域网相似的技术。
IEEE 802局域网体系结构
- IEEE于1980年成立802委员会制定局域网标准,使得不同厂商生产的设备间能够相互通信。
- 1985年被美国标准化协会ANSI采用成为美国国家标准。
- 1987年ISO修改并发布为ISO 8802标准。
- IEEE 802.1标准定义了局域网的参考模型
- 媒体和拓扑结构的不同,可以有多种访问控制,因此数据链路层分解成2个子层:
- 逻辑链路控制:隐藏下层媒体访问控制的细节,为高层提供统一的接口。
- 媒体访问控制:规范对媒体的访问,提供节点间帧的传输。
- 物理层也分解成2个子层:
- 媒体无关子层:信号编码方式、时钟同步以及媒体间通用的功能。
- 媒体相关子层:传输媒体和拓扑结构的说明,包括电气和机械定义等。
- 媒体和拓扑结构的不同,可以有多种访问控制,因此数据链路层分解成2个子层:
逻辑链路控制LLC(Logical Link Control)
- LLC层为高层提供统一的接口;涉及到站点间的传输,没有中间节点的参与。
- 链路为共享媒体,支持多点访问。
- LLC也包括一些有关链路访问的内容,和MAC层一起规范链路访问。
- LLC为上层用户提供三种类型的服务以供选择
- 无确认无连接服务(有线局域网通常如此)
- 数据帧(DL-PDU)的传送无需任何形式的确认,也不通过确认来实现流量控制和差错控制。
- 依赖于高层协议软件和其它方式提供可靠和流量控制机制。
- 数据报形式的服务,支持单播(点到点)、组播以及广播。
- 数据帧(DL-PDU)的传送无需任何形式的确认,也不通过确认来实现流量控制和差错控制。
- 有连接服务(广域网通常如此)
- 两个用户交换数据前必须建立一条逻辑连接,并且要提供相应的流量控制、排序和差错控制机制,同时提供连接释放功能。
- 只支持单播,没有组广播和广播方式。
- 有确认无连接服务(无线局域网通常如此)
- 提供数据报确认机制,在进行数据传输前无需建立逻辑连接。
- 无确认无连接服务(有线局域网通常如此)
LLC PDU格式
- 目的SAP(Service Access Point)和源SAP再加上节点地址(在MAC帧中的头部中包括)一起标识了正在进行通信的两个LLC用户,Control字段用于标识PDU的类型(参考HDLC协议)。
- SAP值AA:SubNetwork Access Protocol (SNAP)
SNAP(SubNetwork Access Protocol) SAP
- 全局的SAP编号(6位)非常有限
- 可使用本地分配的SAP编号,但要求预先知道对方机器的SAP编号。
- DSAP和SSAP都被设为SNAP(值为0xAA),控制字段为0x03,报头被扩展而包括了一个“协议类型”字段。
- 最早的协议类型字段为2个字节。
- 为了方便处理(16bits边界),标准将协议类型字段设为5个字节(40bits)
- 前面3个字节标识某制造商(OUI);
- 另2个字节则作为制造商可定义的协议类型。
以太网(Ethernet)
- 以太网是目前最为广泛使用的局域网技术
- 1973年Robert Metcalfe在博士论文中描述了其对局域网技术的研究,毕业之后加入Xerox公司参与以太网的工作。
- 1980年,Xerox、Intel、DEC联合开发以太网的基带版本DIX,并在1985年发布了以太网的增强版本。
- 其后,IEEE 802.3委员会以此为基础,制定了IEEE 802.3局域以太网规范,两个版本的整体技术是一致的。
以太网帧格式
- IEEE 802.3标准对DIX帧格式作了少许改动,这两种帧结构基本上一致:除了DIX格式的帧中的16比特的类型字段对应IEEE 802.3帧中的16比特的长度字段。
- 实际的环境中,大多数主机都采用DIX帧格式,而不是802.3帧格式。
- 64比特的前导(并不严格要求)
- 前导字段的前面7个字节中每个字节为 10101010
- 该字段用于“唤醒”接收者,接收者利用它与发送方的时钟进行同步;
- 差分曼彻斯特编码后的信号正好是一个矩形方波。
- 前导字段的最后一个字节取值为10101011,“提醒”接收者帧的开始。
- 以太网帧的结尾并没有采用相应的同步机制来确定,它通过检测到链路的空闲(无载波或者空闲信号模式)来表示。
- 前导字段的前面7个字节中每个字节为 10101010
- 各48比特的目的地址和源地址:LAN地址
- 16比特的类型/长度字段
- DIX格式中该字段为类型字段,标识这个帧应该递交给哪一个高层协议
- 类型字段的取值大于0x0600(=1536),如0x0800 (IP), 0x0806(ARP)。
- IEEE802.3 LAN中该字段为长度字段,指示所携带的用户数据的长度。
- 网卡驱动程序可以根据该字段的取值范围来确定该帧是哪种形式的帧。
- DIX格式中该字段为类型字段,标识这个帧应该递交给哪一个高层协议
- 数据和填充字段
- 以太网限制帧的最小长度(不含前导)为512比特(64字节),数据和填充字段要求最少为46字节。
- 目的地址(6)、源地址(6)、类型(2)和检验和(4)字段占去了18字节。
- 如果用户数据不够,则通过填充字段来满足限制。
- 数据字段最长(MTU)为1500字节,防止节点长时间地独占传输媒体。
- 32比特的CRC检验和,用于检测帧传输过程中可能出现的错误。
网卡(以太网接口)
- 网络适配器(Adapter)实现大部分的数据链路层协议,常被称为 网卡或者网络接口卡NIC。
- 网卡除总线接口和链路接口外还包括缓冲区和实现数据链路层协议逻辑的芯片或者可编程硬件。
- 网卡是一个半自治单元。
局域网地址
- 局域网上的所有节点(实际上全球所有LAN接口)都有一个唯一的LAN地址(固化在网卡上),也称MAC地址/物理地址。
- 以太网地址共6字节,常以易于阅读的方式来表示:被冒号(或者横线-)分割的每个数字对应于以太网地址相应字节的16进制值,即16进制表示BB:BB:BB:BB:BB:BB。
- IEEE 802标准中LAN地址采用字节的最低位在前的顺序(即按照在链路上传输的顺序)
- 地址a2:41:42:59:31:51不是一个组播地址,因为它的第一个字节(a2,10100010)的最低位是0
- LAN接口硬件(NIC)收到一个单播帧之后,进行过滤
- 如果帧的目的地址和节点的LAN地址匹配,则从帧中截取数据然后传递给高层;如果不匹配,则丢弃该帧。
- 混杂模式:所有收到的帧都交给高层。
组播帧地址的匹配
- 一个节点可能需要接收多种数据帧(如组播),地址匹配如何处理?
- 理想情况下,接口硬件芯片有它所感兴趣的所有地址
- 但是很难限定一个可以记录的感兴趣地址的最大个数。
- 很多芯片按下述规则来设计
- 地址中有一位来表示是组播地址还是单播地址;
- 节点告诉硬件它所感兴趣的单播地址;
- 芯片把感兴趣的组播地址分为若干个组,即采用hash bucket的方式。如果节点想要接收一个特定的组播地址,它记录hash(group address),所有目的地址的hash值匹配的帧才会被接受,否则丢弃。
- 另外一种芯片设计提供了
- 一些固定数目的确切地址(包括单播地址和组播地址);
- 其他感兴趣的组播地址的散列值。
CSMA/CD(Collision Detect)
- CSMA协议过程中不进行冲突检测
- 一旦有两个帧发生冲突,在这两个坏帧传输的这段时间内(如果帧很长,就倒霉了),其他站点都不能传输。
- 局域网的有线媒体可以进行冲突检测
- 传播延迟非常小;功率衰减也很小。
- 在传输帧的同时监听媒体,可监测到所传输帧与别的节点传输帧之间发生冲突。
- 一般通过检测媒体上的接收电平与自身发送电平的显著变化来完成。
- 带冲突检测的载波监听多路访问CSMA/CD--边说边听
- 多路访问(MA)即多个站点通过一个共享媒体来发送和接收帧;
- 载波监听(CS)意味着站点能够监测到链路是忙还是空闲;
- 冲突检测(CD)是指站点在传输帧的同时监听链路,从而能够监测到站点所传输的帧与别的站点传输的帧之间发生冲突的情形。
- 现实生活中的CSMA/CD:很多人在一个大的房间内讨论,任何人都可以发言
- 多路访问:每个人都可以讲话,也都可以听到别人说的;
- 载波监听:如果别人在讲话,则先听别人讲;
- 冲突检测:自己发言的同时发现另外一个也在讲,则停止讲话。
CSMA/CD具体步骤如下
- 有新帧要传输时,首先监听媒体:
- 1 若媒体空闲,传输;否则,转第2步。
- 2 若媒体忙,一直监听直到信道空闲(再等IFG时间)后立即传输。 - 1-坚持策略
- 在检测到媒体空闲后等待一个96比特时间的帧间间隔(IFG),有利于最近传输的节点能够将其收发器硬件从发送模式转向接收模式。
- 3 若在传输中监听到冲突,发出一个32比特的人为干扰(jamming)信号后停止传输,以便让所有的站点都知道发生了冲突并停止传输(对发送者)或丢弃发育不全帧(对接收者)。
- 接收者可以通过CRC校验错误发现发育不全帧。
- 4 发完jamming信号,等待一段随机的时间,再次试图传输(从第1步开始重复)。 - 二进制指数退避
- 有了CD,可以有效地减少被浪费的信道时间
- 在最大往返传播时间内(2倍两个最远的站点间的传播时间),冲突被检测到,从而终止传输。
冲突检测的要求
- CSMA/CD系统有一条非常重要的原则:帧必须足够长以使冲突能在帧传输完毕前被检测到,即传输时间≥2*传播时间。
- 基带系统的CSMA/CD冲突检测最长需要2倍传播延迟(时槽)。
- 10/100M以太网满足冲突检测要求的帧最小长度(时槽长度)为512比特(64字节): 51.2us、2500m/200m,1Gbps以太网时槽长度为4096比特(512字节) 。
- 宽带总线的最坏情况发生在与头端离得最远的两个相邻站点间,检测冲突的时间等于从头端到电缆尾部的传播延迟的4倍。
二进制指数退避
- CSMA/CD冲突后采用二进制指数退避算法进行等待
- 等待不同的时槽数(k)后重新尝试,通过随机选择时槽random(0,K)来避免同时尝试。
- 实际等待时间=k*时槽时间
基本思想是根据冲突次数来估计信道的负载:低负载时选择较小的K,重负载时选择较大的K。
- 第一次冲突产生后,每个站点等待0或1个时槽后尝试重新发送;
- 如果每个站点等待的时槽数相同,将再次冲突,从0、1、2、3中随机挑选一个数作为等待的时槽数;
- i≤10次冲突后,等待的时槽数从0~2i-1中随机选出;
- 如果冲突的次数达到10次后,随机等待的最大时槽数固定为1023;
- 16次冲突后,站点放弃传输,并报告一个错误。
二进制指数退避基本思想是根据冲突次数来估计信道的负载,从而兼顾0-坚持和1-坚持算法的优点,比P-坚持算法具有更好的动态适应能力。
非公平的不良后果:没有遇到过或遇到冲突次数少的站点比等待时间更长的站点更有机会、更快得到媒体的访问权。(喜新厌旧)
- 捕获效应(Capture Effect):一个站点A有大量数据要传输,另外一个站点B初始与A冲突后A选择的退避时槽更短,这样在以后A的新帧遇到冲突后更有机会获得媒体的访问权,这样导致A可以传输,而B每次竞争都失败。(嫌贫爱富)
千兆以太网的CSMA/CD扩展
- 冲突检测要求:帧的最小传输时间>=冲突检测时间=2*传播延迟
- 10Mbps以太网(10Base5)覆盖范围2500米,限制冲突检测时间为51.2us - 最小帧长512bit(64Bytes)
- 100Mbps以太网覆盖范围200米 - 1Gbps以太网的覆盖范围只有20米??
- 载波扩展:增加帧的最小传输时间
- 帧格式仍然是相同的以太网帧格式和相同的最小帧长;
- MAC帧尾部附加了特殊的编码(不会在正常数据部分出现);
- 时槽时间从64B扩展为512B(4096bits)。
- 超过512字节的帧不需要进行载波扩展。
帧突发(Frame Bursting)
- 站点有连续多个短帧发送时
- 竞争获得媒体访问权,然后采用载波扩展传输512B时间。
- 下一个短帧竞争获得媒体访问权,采用载波扩展传输512B时间。
- 帧突发(帧阵发)
- 第一帧仍采用载波扩展,在传输完成后并不释放对媒体的访问权
- 如果连续发送帧的总长度不超过8192B(64kb),那么发送下一个短帧。
- 短帧之间仍然需要(96比特的)帧间间隔IFG来使得接收者准备好。
- 通过发送一些特殊的编码(不在数据和载波扩展里出现)保证别的站点不会获得媒体的访问权。
- 第一帧仍采用载波扩展,在传输完成后并不释放对媒体的访问权
巨大帧(Jumbo)建议
- MAC帧的最大帧长从1500字节提高到9000字节(会有兼容性问题)
- 提高网络利用的效率,同时也减少了传输的帧的数目。
CSMA/CD性能分析
全双工以太网
- 只能在连接两个站点的点到点链路上使用,并且要求链路两端的站点都采用全双工方式。互连设备只能是交换机。
- 链路必须能够支持同时传输和接收信号,而不会互相干扰
- 10BASE5、10BASE2、10BASE-FP、10BASE-FB和100BASE-T4不能支持全双工模式。
- 没有别的站点竞争对链路的访问权限,从而不会出现冲突
- 不需要采用CSMA/CD协议的限制,有帧要传输就可以马上发送;
- 不再有冲突域,不需要有载波监听和冲突检测,从而也没有因为冲突而带来的站点的重传。
- 接收的同时也可以发送,端口支持的吞吐率是半双工方式的两倍。
- 站点和交换机之间的连接距离也不再受最短帧长(512比特)的限制,而纯粹考虑的是链路的物理特性
- 比如100BASE-FX在半双工方式时限制网段的直径最大为412米;而采用全双工方式后可以长达2千米。
- 采用同样的以太网帧格式、同样的最小帧长、同样的物理层协议
- 可以方便实现与半双工互连。
MAC 控制子层
- 可能会出现站点发送过快的情况,需要能够暂时缓存站点发送的帧以及进行流量控制。
- 半双工以太网的反压(back pressure)机制
- 假载波:接收方发送载波使得媒体忙。
- 假冲突:接收方检测到继续有自己的帧到来时立即传输来触发冲突。
- 802.3X给出了一通用的结构和协议来进行MAC控制(包括流量控制)。
- MAC控制子层位于传统的MAC层和MAC客户之间,MAC控制子层是可选的,对下面的MAC(半双工或全双工)是透明的。
- 半双工以太网的反压(back pressure)机制
流量控制
PAUSE帧实现了一个简单的流量控制机制:
- 站点可以向链路的另一端发出一个暂停帧而要求其暂时停止所有帧的发送(告诉对方暂停发送的时间)。
- 只用于全双工方式的点到点链路两端,不支持半双工方式。
- 不支持端到端的流量控制,只在本地点到点链路出现
- 暂停帧不能通过交换机、网桥等转发出去,只是由链路另一端进行处理;
- 目的地址为对方的MAC地址或者组播地址01:80:C2:00:00:01。
- PAUSE流量控制是双向的,即两端可以互相发送PAUSE帧。
- 链路另一端应该暂时停止发送的时间以时槽长度(512比特时间)为单位,实践中为最大取值。
- MAC控制参数为0的PAUSE帧表示恢复数据帧的传输。
有2种流量控制
- 对称流量控制:全双工链路的两端都可以发送PAUSE帧。
- 非对称流量控制中则只允许其中某一端发送PAUSE帧。
- 交换机可以发送Pause来阻塞端系统,而反过来则不行(减少注入网络的负载)。
- 端系统可以阻塞交换机,而反过来则不行(借用交换机的内部缓冲区)。
- 双方可用自动协商机制决定采用哪种流量控制。
转发器和集线器
- 转发器(Repeater,或称重复器、中继器)
- 在10Base2和10Base5中引入,用于扩展传输媒体的长度。
- 转发器用来连接两段电缆,从它连接的电缆上收到的数字信号(bit解码)转发给连接的另一条电缆中。
集线器(Hub)
- 10BaseT引入,组成星形拓扑结构,实际上是一个多口的转发器。
- 一些以太网标准中集线器(或后述的交换机)也称为转发器。
- 当从一条线路上接收到信号时,集线器会向其他线路转发。
- 如果多于两个端口同时传输,产生并发送一个冲突存在信号。
- 一般具有一些网络管理功能。
- 比如如果有一个站点出现故障,一直持续发送帧。10Base2对此就会无能为力,一个故障站点会导致整个网络也处于崩溃状态
- 10BaseT中的集线器可以检测到这个站点的故障,并且把该站点(端口)从网络中分割出来,其他站点仍然能够继续工作。
- 10BaseT引入,组成星形拓扑结构,实际上是一个多口的转发器。
转发器和集线器都:
- 工作在物理层,和MAC协议无关,既无缓冲功能,也无分段(冲突域分段)功能。
- 通过其连接的网段本质上仍然属于同一个冲突域(Collision domain)
- 采用CSMA/CD规则共享同一个信道的所有节点位于同一个冲突域
- 在同一个冲突域内,任何两个节点同时传输都会遇到冲突。
- 尽管物理上分段,但逻辑上仍使用同一个共享媒体。
物理层互联设备
- 在通过转发器或集线器构建以太网的实践中常常要求遵循5-4-3原则
- 5指任意两个站点间最多有5个以太网网段;
- 4指任意两个站点间最多有4个转发器;
- 3表示任意两个站点间最多有3个网段有站点相连;
- 另外2个网段仅仅用于扩充网络覆盖的范围。
- 通过转发器或集线器来连接多个网段的方式常常称为级连。
- 可堆叠集线器(Stackable Hub)
- 各个集线器之间可以通过另外一个高速数据通道(常常是Gbps)相连,从而使得各个堆叠起来的Hub组合起来形成一个具有更多端口的Hub。
- 堆叠起来的Hub实际上相当于一个大的Hub。
- 它和通过以太网技术把多个网段级连起来是不同的概念,级连技术必须遵循以太网的基本组网原则,即5-4-3原则。
无线局域网(WLAN)
- 1990年IEEE成立了802.11委员会来制定无线局域网标准,1997年发布IEEE 802.11标准,支持1M或2Mbps数据速率,工作在2.4GHz。
- 1991年欧洲ETSI开始高性能无线局域网HiperLAN研究,1996年发布HiperLAN-1,支持10Mbps的数据速率,2000年发布了改进版本HiperLAN-2,将数据速率提高到54Mbps。
- 采用基于连接的方式,其中的许多原理(如OFDM)被逐步加入到802.11。
- 1999年IEEE推出了802.11b,定义一个新的物理层协议,同样工作在2.4GHz,但是数据速率提高到11Mbps;
- 1999年IEEE发布了802.11a标准,采用OFDM技术,工作在5GHz波段,数据速率最高可达54Mbps。(由于兼容性问题,没有得到推广)
- 2003年IEEE发布了802.11g,工作在2.4GHz,最高数据速率为54Mbps。802.11g可以与802.11b兼容。
- 2004年IEEE成立了802.11n工作组来开发新的物理层协议,2009年10月29日正式发布,采用OFDM和多输入多输出天线MIMO技术,支持最高600Mbps的数据速率。
- 2013年发布工作在5GHz的802.11ac,8路天线,最高6.93Gbps。
- 2019年发布802.11ax(WiFi6),工作在1G~7GHz,最高10Gbps。
信道分配和WiFi认证
- 2.4GHz的频段(2.412~2.484GHz)分成14个带宽5MHz的信道
- 信道的信号能量会扩散到22MHz的频带。
- 信道之间必须相隔4或者5个信道(20MHz/25MHz)
- 同一个位置可以支持3个或者4个不重叠信道。
- 北美使用信道1、6和11,缺省采用信道11。
- 欧洲使用信道1、5、9、13。
- WiFi认证
- 1999年许多厂商成立了一个非盈利组织无线以太网兼容联盟(Wireless Ethernet Compatibility Alliance,WECA)。
- 2002年WECA更名无线相容认证(Wireless Fidelity,Wi-Fi)联盟。
- Wi-Fi联盟的任务是保证802.11b/802.11g设备之间的兼容性和互操作性,授予该产品Wi-Fi认证标志。
- 工作在5GHz的802.11a产品授予Wi-Fi5认证标志。
WLAN 体系结构
- 基本单元是基本服务集(BSS),由采用同一MAC协议共享无线媒体的站点组成。
- 支持自组织(Ad-Hoc)模式,站点之间直接通信,称为IBSS。
- 支持基础设施(AP,Access Point)模式
- 所有的通信必须通过AP中转。
- AP进一步可以通过一个分发系统DS与其他AP或者固定站点相连,DS一般采用以太网实现。
- 通过DS连接的两个或多个BSS被称为一个扩展服务集(ESS)
- 无线站点从ESS内的一个BSS移动到另外一个BSS,对于包括LLC在内的上层协议而言ESS内部的移动是透明的。
- 入口(portal)逻辑部件:把WLAN与其他外部网络(包括 Internet)连接起来。
- AP充当了WLAN与其他网络之间的网桥,负责在AP之间以及其他网络之间转发数据。
- 一个ESS可以包括多个AP,配置同一个SSID(更准确的说是ESSID),这些AP之间的漫游不会影响网络层以上高层协议。
- 目前市场上常见的WLAN产品除了支持AP的桥接功能外还可以充当路由器,相当于一个ESS,多个AP实现多个ESS。
- 这样,就有三种不同的移动类型
- 无移动:仅在BSS内部;
- BSS移动:在ESS内的BSS之间移动,无需分配新的高层地址和路由;
- ESS移动:一个ESS的BSS到另外一个ESS的BSS ,需分配新的高层地址和路由。
WLAN 提供的服务
- 5种分发服务:由AP提供,管理站点的关联以及站点在BSS之间的移动
- 关联相关的服务: Association、Reassociation 和 Disassociation
- AP定期或者收到请求后发送一个信标帧来描述AP以及所支持的能力(数据速率、功率管理要求等);
- 站点发送数据之前必须首先关联到某个AP中, BSS间的移动需重关联。
- 分发系统DS中的数据传递
- Distribution服务用于转发发给AP的帧,如果帧的目的地就在AP对应的BSS内,则直接通过无线信道发送给目的地,否则通过分发系统转发;
- Integration用于在802.11帧格式与其他非802.11网络的帧格式之间的转换。
- 关联相关的服务: Association、Reassociation 和 Disassociation
- 4种站点服务:在站点关联到AP之后使用,负责BSS内部的操作
- 数据递交(Data delivery),即完成数据的发送和接收;
- Authentication和Deauthentication:支持多种认证模式;
- 隐私(Privacy)服务防止消息内容被非指定接收者阅读,提供WEP加密选项。
WLAN 安全
- 802.11采用有线对等隐私WEP(Wired Equivalent Privacy)提供与传统布线网络(以太网)相当的安全保障。
- 没有密钥管理机制,采用共享密钥
- WLAN中所有站点使用同一个密钥。(更严格说使用4个共享密钥,站点在会话过程中选用其中一个。)
- 用户认证机制
- 开放系统认证:缺省采用, AP收到认证请求后确认成功。
- 共享密钥认证SKA:采用挑战-响应(challenge-response)协议,AP收到认证请求之后发送回一个包含随机数的挑战。站点需用共享密钥WEP加密来响应以便认证。
- 消息完整性和隐私
- 采用RC4流加密算法的WEP。
- 有限的密钥空间和初始向量IV明文传递,容易收到FMS攻击。
- 没有密钥管理机制,采用共享密钥
- 802.11i定义了两个新的安全协议:TKIP和CCMP
- 2003年发布Wi-Fi保护访问WPA(Wi-Fi Protected Access),采纳TKIP(基于WEP硬件)作为所有Wi-Fi认证产品必须实现的安全标准。
- 2004年发布采用CCMP(全新设计)的WPA2标准。
WLAN 媒体访问控制
- WLAN MAC称为分布式基础无线媒体访问控制(DFWMAC),其最底层是分布协调功能DCF,采用CSMA/CA。
- DCF之上是一个可选的点协调功能PCF,AP通过一个超级帧机制进行轮询来集中控制站点对于信道的访问。
- 绝大部分的WLAN产品只实现了DCF,很少实现PCF。
- 802.11不能采用CSMA/CD机制
- 要在发送的同时监听信号会大大增加无线收发器的复杂性:信号传播距离越远衰减越大,发送信号的功率要远远大于接收信号的功率,很难将接收信号与可能的噪声干扰区分开来。
- 隐藏节点问题:由于距离等因素导致无法监听到与其要竞争媒体的发送端的信号情况而出现冲突。
- 暴露节点问题:能够监听到某个发送者但实际该节点的传输不会干扰即将进行的通信,暴露节点导致无法有效地利用无线信道的资源。
CSMA/CA(Collision Avoidance)
- 1-坚持的CSMA
- 站点有帧要发送时,首先监听媒体。如果媒体空闲,则立即发送(仍然等待一个IFS)。如果媒体忙,则监听直到媒体空闲后立即发送。
通过显式的ACK机制检测冲突
- 接收者在收到一个数据帧之后,马上发送一个ACK,如果没有收到ACK,则认为遇到了冲突。
- 考虑到无线信道的误码率比较高,为提高可靠性,采用停等机制, DATA-ACK帧的交换是一个原子操作,属于同一个会话单元。
- 为了便于DATA-ACK交换原子操作的顺利进行,除了以物理层提供的空闲信道评估(CCA)进行监听外,引入虚拟载波监听机制。
- 网络分配向量NAV:目前预计的要占用媒体的时间,微秒为单位。
- 包括数据帧在内的802.11帧包含了一个持续时间(duration)字段,该字段给出了当前原子操作估计的剩余时间。
- 其他站点在监听收到该帧后设置自身的NAV计时器,在NAV超时之前不需要继续监听。
站点在监听到媒体空闲后并不能马上发送,需等待一个帧间间隔(IFS)。【下面两点原因】
- 站点在从物理层收到帧后需要时间来进行处理,和以太网MAC的IFG类似。
- ACK等相比普通DATA帧有更高的优先级要求:保证DATA-ACK等原子操作。
- SIFS最短
- 用于那些具有最高优先级的帧(短帧),包括ACK、PCF功能中用到的轮询响应帧和CTS帧等。
- SIFS的取值在物理层规范中定义,802.11 DSSS PHY为10微秒。
- PIFS用于PCF
- AP通过PIFS可以在其他采用CSMA/CA竞争机制的站点之前获得媒体的访问,从而通过轮询方式进行集中控制。
- PIFS长度等于SIFS加20微秒的时槽时间,即DSSS PHY的PIFS为30微秒。
- DIFS:普通的数据帧、RTS帧,DIFS长度为PIFS加上时槽时间(共50微秒)。
- EIFS(extended IFS)
- 收到一个出错帧(无法知道duration字段)时使用。
- 防止站点要发送的帧与属于当前出错帧对应的会话的后续帧冲突。
随机后退冲突避免机制:因为两个以上站点同时监听媒体空闲会遇到冲突
- 监听媒体空闲DIFS时间之后还要等待一段随机的后退时间。
- 802.11给第一个新帧赋予一个更高的优先级
- 连续传输多个新帧或者由于没有收到确认而重传老帧的优先级更低。
- 新产生的帧只需要等待DIFS时间,而那些重传帧或者多帧传输情况下的后面的帧要等待DIFS再加上随机后退时间。
802.11在下列三种情况下使用随机后退【3 中采取随机后退的情况】
- 站点要传输新帧在等待DIFS间隔期间监听到媒体忙;
- 由于没有收到ACK而要重传;
- 站点刚刚成功传输一个帧。
随机后退策略
- 站点维护一个竞争窗口CW,站点随机等待[0,CW]个时槽(20微秒)。
- 随机后退期间监听到媒体忙,冻结随机后退计时器,等空闲DIFS后恢复计时。
- 指数后退方法:通过冲突的次数来估计网络的负载
- CW 初始化为某个最小值(CWmin=31)。
- 每次发生冲突时竞争窗口翻倍,直到达到最大值(CWmax=1023)。
RTS/CTS机制
- 发送数据之前发送RTS帧,接收者回应以一个允许发送CTS帧
- RTS/CTS帧非常小,出错和遇到冲突的概率小,可更快知道是否遇到冲突。
- RTS和CTS帧头部的持续时间字段给出了本次数据会话(RTS-CTS-DATA-ACK)预计还要使用的媒体时间。(预约机制)
- 通过短的RTS/CTS控制分组预留接下来数据帧传输需要的带宽。
- RTS/CTS能解决隐藏节点问题。
- RTS/CTS并不能解决暴露节点问题。
分段机制
- 帧越长,整帧出错的概率也越大 —— 分段:大帧分解成多个小的MAC帧,接收者MAC层负责把分段进行重组。
- 分段和重组对于上层协议是透明的。
- 分段可以和CSMA/CA机制结合在一起,一旦获得媒体的访问权后,连续(收到前一个分段的ACK后)传输多个分段。
- 发送者要传输一个大帧的多个分段,首先通过RTS和CTS预留带宽,RTS帧/CTS的持续时间字段给出了传输第一个分段F1需要的时间,而在传输分段F1时给出了下一个分段需要的时间,这样发送者可以接下来发送F2分段。
RTS/CTS实践
- RTS/CTS机制不能解决暴露节点问题。
- RTS/CTS对于短帧的作用不是很大。
- 基于基础设施的WLAN中所有的通信都是要通过AP
- AP发送的帧不需要采用RTS/CTS。
- 隐藏节点相对来说比较少。
- 设置RTS阈值(帧长度超过时使用RTS/CTS)为超过最大可能的MAC帧的长度,从而完全关闭。
速率自适应和省电模式
- 根据当前信道条件选择最合适的数据速率
- 根据帧的丢失情况来增加和降低数据速率。
- 省电模式
- AP定期(一般每隔100毫秒)传输信标帧里面给出了下一个信标帧的时间间隔。
- 节点可通知AP(通过设置传输的MAC帧的相应头部字段)后进入睡眠状态,在下一个信标帧到来之前唤醒。
- 目的地为睡眠节点的帧会在AP缓存,AP在信标帧里给出有缓存帧的节点列表。
- 唤醒后的节点发现有缓存的帧发送轮询(Poll)消息给AP来获取缓存的帧。
- 假设信标帧每隔100毫秒发送,省电模式的节点每次唤醒250微秒的时间,99%的时间在睡眠状态,从而大大节省了电池的开销。
MAC 帧格式
- 三种类型的帧:数据帧、控制帧和管理帧
- MAC帧的顺序号(12bit)最大为4095。
- 数据字段包含要发送的负载,最多2312字节。
- MAC帧地址字段
- BSSID:表示哪个BSS,基础设施BSS而言为AP的无线接口的MAC地址,IBSS为生成的随机BSSID。
射频识别RFID(Radio-Frequency IDentification)
- 称为电子标签,可替代条形码。
- 自动识别技术,无需人为干预。
- 非接触式,可识别高速运动物体并可同时识别多个标签(比如每秒可处理50张标签)。
- 可工作于各种恶劣环境,能够防水、防磁、耐高温,使用寿命长。
- 标签通过一个全球唯一的ID标识,标签上储存数据容量更大,可以读取、修改、附加数据,可以对标签数据加密,安全性高。
- —— 可用于标识识别、物品跟踪、信息采集
RFID 架构
- 阅读器包括天线、射频模块和数字信号处理单元。
- 电子标签包括天线和芯片。
- 标签识别码保存在ROM中,用户数据区可以读写、覆盖和添加,容量从几字节(甚至1个比特)到几千字节。
RFID 分类
- 基于供电方式的不同
- 无源电子标签:没有内装电池,射频信号的传输都是通过磁场供电。
- 半无源电子标签:内装电池,但仅仅为电子芯片供电。
- 有源电子标签:内装有电池,射频信号的传输也可通过电池供电,可以传播较远的距离,严格来说并不是真正意义的电子标签。
- 按照是否能够修改
- 只读标签
- 可重写标签
- 依据封装形式的不同,可分为信用卡标签、线形标签、纸状标签、玻璃管标签、圆形标签及特殊用途的异形标签等。
- 依据所使用的频率的不同,分为低频、高频、超高频和微波电子标签。
- 根据阅读距离的远近,RFID系统也可以分为0~1cm的密耦合系统、0 ~1m的遥耦合和超过1m的远距离系统。
耦合方式
- 通过电子标签与阅读器之间的天线耦合而架起空间电磁波传输的通道。
- 近距离(1米以内)的电感耦合
- 阅读器一方的天线(相当于变压器的初级线圈)和射频标签一方的天线(相当于次级线圈)之间构成了一个交变闭合的耦合磁场。
- 低频和高频(阅读器发送信号的频率)RFID系统。
- 远距离(可达10米以上)的电磁耦合
- 阅读器的天线将阅读器产生的读写射频能量以电磁波的方式发送到定向的空间范围内。
- 位于有效阅读区域中的电子标签从电磁场中提取工作电源。
- 超高频和微波RFID系统。
数据传输方式
- 阅读器往电子标签的方向采用广播方式,通过调制一定频率的载波的参数(一般采用幅度调制ASK)来传递信息。
- 反向的电子标签往阅读器方向的数据传输仍然依赖于阅读器一直发送的射频信号。
- 电感耦合中类似于幅度调制,开关电子标签上的负荷电阻,而影响阅读器的电压来传递信息。
- 电磁耦合:基于雷达技术中电磁波会被直径超过其一半波长大小的物品反射。
- 通过负荷电阻的接通和断开来调制反射或者散射的射频载波,从而实现远距离的信号的幅度调制。
- 反射阅读器发送频率的次谐波。
标签防冲突机制
- 2004年EPC Global发布的EPC Gen2标准(2006年被OSI采纳为ISO 18000-6C)。
- 电子标签的传输由阅读器主导,基于S-ALOHA。
- 阅读器发送Query(Q)给出查询条件以及Q的取值。
- 符合条件的标签随机选择一个时槽[0,2Q-1]来响应。
- 首先通过RN16短帧来预约长标签的传输;
- 收到ACK后发送实际的EPC (Electronic Product Code)标签;
- 由阅读器通过QueryRep/ QueryAdjust(Q)来确定下一个时槽的开始。
- Q值的调整可采取类似二进制指数后退的策略。
- 多个时槽没有响应时减少Q值,出现冲突时增加Q值。