admin 管理员组文章数量: 887021
文章目录
- 第一章: 概述
- 1. 计算机网络及其特点
- (1). 定义
- (2). 特点
- 2. 互联网概述
- (1). 互联网定义
- (2). 互联网(Internet)与互连网(internet)区别
- (3). 互联网基础结构发展的三个阶段
- (4). 互联网的标准化工作
- 3. 互联网的组成
- (1). 互联网的边缘部分
- (2). 互联网的核心部分
- -1-. 典型交换技术包括:
- -2-. 关于分组转发的知识
- -3-. 路由器三种交换的比较
- 4. 计算机网络在中国的发展
- 5. 计算机网络的类别
- (1). 计算机网络的定义
- (2). 几种不同的网络
- 6. 计算机网络的性能
- (1). 计算机网络的性能指标
- (2). 计算机网络的非性能指标
- 7. 计算机网络的体系结构
- (1). 计算机网络体系结构的形成
- (2). 协议划分层次
- -1-. 层次划分的核心概念
- -2-. 协议模块的结构样式
- -3-. 分层的优缺点
- -4-. 各层需要完成的主要功能
- (3). 具有五层协议的体系结构
- -1-. 五层协议的体系结构形成
- -2-. 主机1发送数据到主机2
- (4). TCP/IP的体系结构
- -1-. 沙漏计时器形状的TCP/IP协议族
- 第二章: 物理层
- 1. 物理层的基本概念
- (1). 物理层的主要任务
- 2. 有关信道的几个基本概念
- (1). 数据通信系统的模型
- (2). 有关信道的几个基本概念
- (3). 信道的极限容量
- -1-. 信道能够通过的频率范围
- -2-. 信噪比
- 3. 传输层下面的传输媒体
- (1). 引导性传输媒体
- (2). 非引导性传输媒体
- 4. 信道复用技术
- 5. 数字传输系统
- 6. 宽带接入技术
- 第三章: 数据链路层
- 1. 使用点对点信道的数据链路层
- (1)。 数据链路和帧
- (2). 三个基本问题
- 2. 点对点协议PPP
- 3. 使用广播信道的数据链路层
- (1). 局域网的数据链路层
- -1-. 以太网
- -2-. 数据局链路层的两个子层
- -3-. 适配器的作用
- (2). CSMA/CD 协议
- -1-. 如何避免同时发送产生的碰撞? 采用 CSMA/CD
- -2-. CSMA/CD 协议工作流程
- -3-. CSMA/CD 协议的重要特性
- -4-. CSMA/CD 协议的要点
- (3). 使用集线器的星型拓扑
- (4). 以太网的信道利用率
- (5). 以太网的MAC层
- 第四章: 网络层
- 1. 网络层提供的两种服务
- 2. 网络协议IP
- (1). 虚拟互联网络
- (2). 分类的IP地址
- -1-. IP 地址及其表示方法
- -2-. 常用的三种类别的 IP 地址
- (3). IP地址与硬件地址
- (4). 地址解析协议 ARP
- (5). IP数据报格式
- (6). IP层转发分组的流程
- 3. 划分子网和构造超网
- (1). 划分子网
- -1-. 子网掩码
- (2). 使用子网时分组的转发
- (3). 无分类编址CIDR
- -1-. 网络前缀
- -2-. 最长前缀匹配
- -3-. 使用二叉线索查找路由表
- 4. 网络控制报文协议ICMP
- (1). ICMP报文的种类
- (2). ICMP的应用
- 5. 互联网的路由选择协议
- (1). 有关路由选择协议的几个基本概念
- (2). 内部网关协议RIP
- -1-. 使用原理
- -2-. 距离向量算法
- -3-. RIP 协议的优缺点
- (3). 内部网关协议 OSPF
- -1-. OSPF协议的基本特点
- -2-. OSPF的五种分组类型
- (4). 外部网关协议BGP
- (5). 路由器的构成
- -1-. 路由器的结构
- -2-. 交换结构
- 6. IPv6
- (1). IPv6的基本首部
- (2). IPv6的地址
- (3) 从IPv4向IPv6过渡
- (4). ICMPv6
- 7. IP多播
- (1) IP多播的基本概念
- (2). 在局域网上进行硬件多播
- (3). 网际组管理协议IGMP和多播路由选择协议
- -1-. IP多播需要两种协议
- -2-. 网际组管理协议IGMP
- -4-. 多播路由选择
- 8. 虚拟专用网VPN和网络地址转换NAT
- (1). 虚拟专用网络VPN
- (2). 网络地址转换NAT
- 9. 多协议标记交换MPLS
- (1). MPLS的工作原理
- -1-. 基本工作过程
- -2-. 转发等价类FEC
- (2). MPLS首部的位置与格式
- 第五章: 运输层
- 1. 运输层协议概述
- (1). 进程之间的通信
- (2). 运输层的两个主要协议
- (3). 运输层端口
- 2. 用户数据报协议UDP
- (1). UDP概述
- (2). UDP的首部格式
- 3 传输控制协议TCP概述
- (1). TCP最主要的特点
- (2). TCP连接
- 4. 可靠传输的工作原理
- (1). 停止等待协议
- (2). 连续ARQ协议
- 5. TCP报文段的首部格式
- 6. TCP可靠传输的实现=
- (1). 以字节为单位的滑动窗口
- (2). 超时重传时间的选择
- (3). 选择确认SACK
- 7. TCP的流量控制
- (1). 利用滑动窗口实现流量控制
- (2). 必须考虑传输效率
- 8. TCP的拥塞控制
- (1). 拥塞控制的一般原理
- (2). TCP的拥塞控制方法
- (3). 主动队列管理AQM
- 9. TCP的运输连接管理
- (1). TCP的连接建立
- (2). TCP的连接释放
- (3). TCP的有限状态机
- 第六章: 应用层
- 1. 域名系统DNS
- (1). 域名系统概述
- (2). 互联网域名结构
- (3). 域名服务器
- 2. 文件传输协议
- (1). FTP概述
- (2). FTP的基本工作原理
- (3). 简单文件传送协议TFTP
- 3. 远程终端协议TELNET
- 4. 万维网WWW
- (1). 万维网概述
- (2). 统一资源定位符URL
- -1-. URL 的格式
- -2-. 使用 HTTP 的 URL
- (3). 超文本传送协议HTTP
- -1-. HTTP 的操作过程
- -2-. 代理服务器
- -3-. HTTP 的报文结构
- -4-. 在服务器上存放用户的信息
- (4). 万维网的文档
- (5). 万维网的信息检索系统
- 5. 电子邮件
- 6. 动态主机配置协议 DHCP
- 7. 简单网络管理协议SNMP
- (1). 网络管理的基本概念
- 8. 应用进程跨越网络的通信
- (1). 系统调用与应用编程接口
- 9. P2P应用
课程学习:我的网盘>我的资源>学习资料>计算机网络(谢希仁第七版)(方老师) >
PPT资源:我的网盘>来自: 本地电脑>资源>PPT类 >计算机网络
第一章: 概述
1. 计算机网络及其特点
(1). 定义
计算机网络主要是由一些通用的、可编程的硬件互连
而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。
(2). 特点
- 连通性 (Connectivity)
使上网用户之间都可以交换信息(数据,以及各种音频视频) ,好像这些用户的计算机都可以彼此直接连通一样。
注意,互联网具有虚拟的特点,无法准确知道对方是谁,也无法知道对方的位置。 - 共享 (Sharing)
指资源共享。
资源共享的含义是多方面的。可以是信息共享、软件共享,也可以是硬件共享。
由于网络的存在,这些资源好像就在用户身边一样,方便使用
。
2. 互联网概述
计算机网络的重量级部分
(1). 互联网定义
互联网,特指 Internet,它起源于美国,是由数量极大的各种计算机网络互连起来而形成的一个互连网络。它采用 TCP/IP 协议族作为通信\规则,是一个覆盖全球、实现全球范围内连通性和资源共享的计算机网络。
(2). 互联网(Internet)与互连网(internet)区别
任意把几个计算机网络互连起来(不管采用什么协议),并能够相互通信,这样构成的是一个互连网 (internet),而不是互联网 (Internet)。
(3). 互联网基础结构发展的三个阶段
- 第一阶段:从单个网络 ARPANET 向互联网发展的过程。
1983 年,TCP/IP 协议成为 ARPANET 上的标准协议,使得所有使用 TCP/IP 协议的计算机都能利用互连网相互通信。
人们把 1983 年作为互联网的诞生时间。
1990年,ARPANET 正式宣布关闭。 - 第二阶段:建成了三级结构的互联网。
它是一个三级计算机网络,分为主干网、地区网和校园网(或企业网)。 - 第三阶段:逐渐形成了多层次 ISP 结构的互联网。
出现了互联网服务提供者
ISP (Internet Service Provider)。
任何机构和个人只要向某个 ISP 交纳规定的费用,就可从该 ISP 获取所需 IP 地址的使用权,并可通过该 ISP 接入到互联网。
根据提供服务的覆盖面积大小以及所拥有的IP地址数目的不同,ISP 也分成为不同层次的 ISP:主干 ISP、地区 ISP和本地 ISP。
(4). 互联网的标准化工作
3. 互联网的组成
从互联网的工作方式上看,可以划分为两大块:
边缘部分:由所有连接在互联网上的主机
组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。
核心部分:由大量网络和连接这些网络的路由器
组成。这部分是为边缘部分提供服务的(提供连通性和交换)。
(1). 互联网的边缘部分
处在互联网边缘的部分就是连接在互联网上的所有的主机。这些主机又称为端系统
(end system)。例如:个人电脑 大型计算机 ISP(互联网服务提供商) 这些功能上都存在很大区别
-
端系统之间通信的含义
“主机 A 和主机 B 进行通信”实际上是指:“运行在主机 A 上的某个程序和运行在主机 B 上的另一个程序进行通信”。即“主机 A 的某个进程和主机 B 上的另一个进程进行通信”。简称为“计算机之间通信”。 -
端系统之间的两种通信方式
端系统之间的通信方式通常可划分为两大类:
(2). 互联网的核心部分
网络核心部分是互联网中最复杂
的部分。
网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一个主机都能够向其他主机通信(即传送或接收各种形式的数据)。
在网络核心部分起特殊作用的是路由器
(router)。
路由器是实现分组交换
(packet switching) 的关键构件,其任务是转发
收到的分组,这是网络核心部分最重要的功能。
-1-. 典型交换技术包括:
电路交换
分组交换
报文交换等。
互联网的核心部分采用了分组交换
技术。
-2-. 关于分组转发的知识
分组交换则采用存储转发
技术。
在发送端,先把较长的报文划分成较短的、固定长度的数据段。
发送端: 在每一个数据段前面添加上首部构成分组 分组的首部都含有分组地址信息,把分组转发到下一个结点交换机
接收端: 收到分组后剥去首部还原成报文
-3-. 路由器三种交换的比较
4. 计算机网络在中国的发展
5. 计算机网络的类别
(1). 计算机网络的定义
计算机网络主要是由一些通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件
能够用来传送多种不同类型的数据
,并能支持广泛的和日益增长的应用。
- 计算机网络所连接的硬件,并不限于一般的计算机,而是包括了智能手机等。
- 计算机网络并非专门用来传送数据,而是能够支持很多种的应用(包括今后可能出现的各种应用)。
可编程硬件: 这种硬件一定是包含中央处理器(CPU)
(2). 几种不同的网络
-
按照网络的作用范围进行分类
-
按照网络的使用者进行分类
-
用来把用户接入到互联网的网络
6. 计算机网络的性能
(1). 计算机网络的性能指标
速率
带宽
吞吐率
时延
时延带宽积
往返时间 RTT
利用率
(2). 计算机网络的非性能指标
一些非性能特征也很重要。它们与前面介绍的性能指标有很大的关系。主要包括:
费用
质量
标准化
可靠性
可扩展性和可升级性
易于管理和维护
7. 计算机网络的体系结构
(1). 计算机网络体系结构的形成
- 问题: 由于网络体系结构的不同,不同公司的设备很难互相连通。
- 解决方案: 他们提出了一个试图使各种计算机在世界范围内互连成网的标准框架,即著名的开放系统互连基本参考模型 OSI/RM (Open Systems Interconnection Reference Model),简称为 OSI。
- 好处: 只要遵循 OSI 标准,一个系统就可以和位于世界上任何地方的、也遵循这同一标准的其他任何系统进行通信。
- 结果: OSI 只获得了一些理论研究的成果,在市场化方面却失败了。
- 转机: 非国际标准 TCP/IP 却获得了最广泛的应用。TCP/IP 常被称为事实上的 (de facto) 国际标准。
(2). 协议划分层次
-1-. 层次划分的核心概念
-2-. 协议模块的结构样式
-3-. 分层的优缺点
-4-. 各层需要完成的主要功能
(3). 具有五层协议的体系结构
-1-. 五层协议的体系结构形成
-2-. 主机1发送数据到主机2
随后主机2的由下至上一层一层剥去对应数据的报文头最后交付给主机2的应用
(4). TCP/IP的体系结构
实际上,现在的互联网使用的 TCP/IP 体系结构有时已经发生了演变,即某些应用程序可以直接使用 IP 层,或甚至直接使用最下面的网络接口层
-1-. 沙漏计时器形状的TCP/IP协议族
-
客户进程和服务器进程使用 TCP/IP 协议栈进行通信
-
功能较强的计算机可同时运行多个服务器进程
第二章: 物理层
1. 物理层的基本概念
(1). 物理层的主要任务
主要任务:确定与传输媒体的接口的一些特性。
2. 有关信道的几个基本概念
(1). 数据通信系统的模型
常用术语:
(2). 有关信道的几个基本概念
信道 —— 一般用来表示向某一个方向传送信息的媒体。
单向通信(单工通信)——只能有一个方向的通信而没有反方向的交互。
双向交替通信(半双工通信)——通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。
双向同时通信(全双工通信)——通信的双方可以同时发送和接收信息。
基带信号(即基本频带信号)—— 来自信源的信号。像计算机输出的代表各种文字或图像文件的数据信号都属于基带信号。
基带信号往往包含有较多的低频成分,甚至有直流成分,而许多信道并不能传输这种低频分量或直流分量。因此必须对基带信号进行调制 (modulation)。
调制分为两大类:
基带调制:仅对基带信号的波形进行变换,使它能够与信道特性相适应。变换后的信号仍然是基带信号。把这种过程称为编码 (coding)。
带通调制:使用载波 (carrier)进行调制,把基带信号的频率范围搬移到较高的频段,并转换为模拟信号,这样就能够更好地在模拟信道中传输(即仅在一段频率范围内能够通过信道) 。
带通信号 :经过载波调制后的信号。
常用编码方式:
不归零制:正电平代表 1,负电平代表 0。
归零制:正脉冲代表 1,负脉冲代表 0。
曼彻斯特编码:位周期中心的向上跳变代表 0,位周期中心的向下跳变代表 1。但也可反过来定义。
差分曼彻斯特编码:在每一位的中心处始终都有跳变。位开始边界有跳变代表 0,而位开始边界没有跳变代表 1。
(3). 信道的极限容量
任何实际的信道都不是理想的,在传输信号时会产生各种失真以及带来多种干扰。
码元传输的速率越高,或信号传输的距离越远,或传输媒体质量越差,在信道的输出端的波形的失真就越严重。
- 从概念上讲,限制码元在信道上的传输速率的因素有以下两个:
信道能够通过的频率范围
信噪比
-1-. 信道能够通过的频率范围
具体的信道所能通过的频率范围总是有限的。信号中的许多高频分量往往不能通过信道。
1924 年,奈奎斯特 (Nyquist) 就推导出了著名的奈氏准则
。他给出了在假定的理想条件下,为了避免码间串扰
,码元的传输速率的上限值。
在任何信道中,码元传输的速率是有上限的,否则就会出现码间串扰的问题,使接收端对码元的判决(即识别)成为不可能。
如果信道的频带越宽,也就是能够通过的信号高频分量越多,那么就可以用更高的速率传送码元而不出现码间串扰。
-2-. 信噪比
香农公式表明:
请注意:
3. 传输层下面的传输媒体
(1). 引导性传输媒体
双绞线、光纤、
(2). 非引导性传输媒体
无线局域网使用的 ISM 频段
4. 信道复用技术
频分复用、时分复用、统计时分复用、波分复用、码分复用
5. 数字传输系统
6. 宽带接入技术
ADSL技术、光纤同轴混合网(HFC网)、FTTx技术
第三章: 数据链路层
网络中的主机、路由器和交换机等都必须实现数据链路层
数据链路层的作用:
数据链路层所采用的信道:
1. 使用点对点信道的数据链路层
(1)。 数据链路和帧
数据链路层传送的是帧
常常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单位是帧。
数据链路层不必考虑物理层如何实现比特传输的细节。甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方
(2). 三个基本问题
数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题是:
- 封装成帧
- 透明传输
- 差错控制
2. 点对点协议PPP
PPP 帧的首部和尾部分别为 4 个字段和 2 个字段。
标志字段 F = 0x7E (符号“0x”表示后面的字符是用十六进制表示。十六进制的 7E 的二进制表示是 01111110)。
地址字段 A 只置为 0xFF。地址字段实际上并不起作用。
控制字段 C 通常置为 0x03。
PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。
PPP协议的帧格式:
传输问题:
当 PPP 用在异步传输时,就使用一种特殊的字符填充法。
当 PPP 用在同步传输链路时,协议规定采用硬件来完成比特填充(和 HDLC 的做法一样)。
PPP协议的工作状态:
当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。
PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。
这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。
可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
3. 使用广播信道的数据链路层
(1). 局域网的数据链路层
- 局域网最主要的特点是:
- 网络为一个单位所拥有;
- 地理范围和站点数目均有限。
- 局域网具有如下主要优点:
- 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。
- 提高了系统的可靠性、可用性和残存性。
局域网的拓扑结构:
局域网的传输媒介:
共享信道带来的问题:
媒体共享技术:
- 静态划分信道
- 频分复用
- 时分复用
- 波分复用
- 码分复用
- 动态媒体接入控制(多点接入)
- 随机接入
- 受控接入 ,如多点线路探询 (polling),或轮询。
-1-. 以太网
DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约。
IEEE 802.3 是第一个 IEEE 的以太网标准。
DIX Ethernet V2 标准与 IEEE 的 802.3 标准只有很小的差别,因此可以将 802.3 局域网简称为“以太网”
。
严格说来,“以太网”应当是指符合 DIX Ethernet V2 标准的局域网 。
-2-. 数据局链路层的两个子层
- 为了使数据链路层能更好地适应多种局域网标准,IEEE 802 委员会就将局域网的数据链路层拆成两个子层:
- 逻辑链路控制 LLC (Logical Link Control)子层;
- 媒体接入控制 MAC (Medium Access Control)子层。
- 与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关。
- 不管采用何种协议的局域网,对 LLC 子层来说都是透明的。
局域网对 LLC 子层是透明的
一般不考虑LLC子层
由于 TCP/IP 体系经常使用的局域网是 DIX Ethernet V2 而不是 802.3 标准中的几种局域网,因此现在 802 委员会制定的逻辑链路控制子层 LLC(即 802.2 标准)的作用已经不大了。
很多厂商生产的适配器上就仅装有 MAC 协议而没有 LLC 协议
-3-. 适配器的作用
- 网络接口板又称为通信适配器 (adapter) 或网络接口卡 NIC (Network Interface Card),或“网卡”。
- 适配器的重要功能:
- 进行串行/并行转换。
- 对数据进行缓存。
- 在计算机的操作系统安装设备驱动程序。
- 实现以太网协议。
计算机通过适配器和局域网进行通信
(2). CSMA/CD 协议
最初的以太网是将许多计算机都连接到一根总线上。易于实现广播通信
。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。
为了实现一对一
通信,将接收站的硬件地址写入帧首部中的目的地址
字段中。仅当数据帧中的目的地址与适配器的硬件地址一致时,才能接收这个数据帧。
总线也有缺点。若多台计算机或多个站点同时发送时,会产生发送碰撞或冲突,导致发送失败。
以太网采取了两种重要的措施:
为了通信的简便,以太网采取了两种重要的措施:
(1) 采用较为灵活的无连接的工作方式
- 不必先建立连接就可以直接发送数据。
- 对发送的数据帧不进行编号,也不要求对方发回确认。
这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的
。
以太网提供的服务:
以太网提供的服务是不可靠的交付,即尽最大努力的交付。
- 当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。
差错的纠正由高层来决定
。 - 如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。
-1-. 如何避免同时发送产生的碰撞? 采用 CSMA/CD
以太网采取了两个重要的措施:
(1) 以太网发送的数据都使用曼彻斯特 (Manchester) 编码
(2) CSMA/CD
CSMA/CD 含义:载波监听多点接入 / 碰撞检测
(Carrier Sense Multiple Access with Collision Detection) 。
“多点接入”表示许多计算机以多点接入的方式连接在一根总线上。
“载波监听”是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。
“碰撞检测
”就是计算机边发送数据边检测信道上的信号电压大小。
当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。
当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。
所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”
。
检测到碰撞后:
- 在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。
- 每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要
立即停止发送
,免得继续浪费网络资源,然后等待一段
随机时间后再次发送。
-2-. CSMA/CD 协议工作流程
-3-. CSMA/CD 协议的重要特性
- 使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行
双向交替通信
(半双工通信)。 - 每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
- 这种
发送的不确定性
使整个以太网的平均通信量远小于以太网的最高数据率。
-4-. CSMA/CD 协议的要点
(3). 使用集线器的星型拓扑
- 传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。
- 采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)。
(4). 以太网的信道利用率
(5). 以太网的MAC层
-
MAC 层的硬件地址
-
MAC 帧的格式
第四章: 网络层
1. 网络层提供的两种服务
- 在计算机网络领域,网络层应该向运输层提供怎样的服务(“
面向连接
还是“无连接
”)曾引起了长期的争论。 - 争论焦点的实质就是:
在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
尽最大努力交付
虚电路服务与数据报服务的对比
2. 网络协议IP
网络层的IP协议及配套协议
(1). 虚拟互联网络
如何将异构的网络互相连接起来?
使用到的中间设备来进行互联
虚拟互联网络存在的意义
从网络层看IP数据包传输
如果我们只从网络层考虑问题,那么 IP 数据报就可以想象是在网络层中传送。
(2). 分类的IP地址
在 TCP/IP 体系中,IP 地址是一个最基本的概念。
-1-. IP 地址及其表示方法
- 我们把整个互联网看成为一个单一的、抽象的网络。
- IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是
唯一的 32 位的标识符
。 - IP 地址现在由
互联网名字和数字分配机构
ICANN (Internet Corporation for Assigned Names and Numbers)进行分配。
IP地址的编址方法:
- 分类的 IP 地址。这是最基本的编址方法,在1981年就通过了相应的标准协议。
- 子网的划分。这是对最基本的编址方法的改进,其标准[RFC 950]在1985年通过。
- 构成超网。这是比较新的无分类编址方法。1993年提出后很快就得到推广应用。
- 分类IP地址
将IP地址划分为若干个固定类。
每一类地址都由两个固定长度的字段组成,其中一个字段是网络号
net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号
host-id,它标志该主机(或路由器)。
主机号在它前面的网络号所指明的网络范围内必须是唯一的。
由此可见,一个 IP 地址在整个互联网范围内是唯一的
。
这种两级的 IP 地址结构如下:
这种两级的 IP 地址可以记为:
各类 IP 地址的网络号字段和主机号字段
A 类地址的网络号字段 net-id 为 1 字节 A 类地址的主机号字段 host-id 为 3 字节
B 类地址的网络号字段 net-id 为 2 字节 B 类地址的主机号字段 host-id 为 2 字节
C 类地址的网络号字段 net-id 为 3 字节 C 类地址的主机号字段 host-id 为 1 字节
D 类地址是多播地址
E 类地址保留为今后使用
点分十进制记法:
-2-. 常用的三种类别的 IP 地址
一般不使用的特殊的 IP 地址
IP 地址的一些重要特点
(1) IP 地址是一种分等级的地址结构。分两个等级的好处是:
第一,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
(2) 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口。
当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)。
由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址。
(3) 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
(4) 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
(3). IP地址与硬件地址
- IP 地址与硬件地址是不同的地址。
- 从层次的角度看,
- 硬件地址(或物理地址)是数据链路层和物理层使用的地址。
- IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(称 IP 地址是逻辑地址是因为 IP 地址是用软件实现的)。
(4). 地址解析协议 ARP
通信时使用了两个地址:
IP 地址(网络层地址)
MAC 地址(数据链路层地址)
地址解析协议ARP的作用
已经知道了一个机器(主机或路由器)的IP地址,如何找出其相应的硬件地址?
地址解析协议 ARP 就是用来解决这样的问题的。
地址解析协议 ARP 要点
- 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
- 每一个主机都设有一个
ARP 高速缓存
(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。 - 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。
- 如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
- 如没有, ARP 进程在本局域网上广播发送一个 ARP 请求分组。收到 ARP 响应分组后,将得到的 IP 地址到硬件地址的映射写入 ARP 高速缓存。
- ARP请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。
- 本地广播 ARP 请求(路由器不转发ARP请求)。
- ARP 响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。
- ARP 分组封装在物理网络的帧中传输。
ARP 高速缓存的作用 存放最近获得的 IP 地址到 MAC 地址的绑定,以减少 ARP 广播的数量。
- 为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。
- 当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。
(5). IP数据报格式
- 一个 IP 数据报由首部和数据两部分组成。
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
- 在首部的固定部分的后面是一些可选字段,其长度是可变的。
版本——占 4 位,指 IP 协议的版本。目前的 IP 协议版本号为 4 (即 IPv4)。
首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节。
区分服务——占 8 位,用来获得更好的服务。在旧标准中叫做服务类型,但实际上一直未被使用过。1998 年这个字段改名为区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段
总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。==总长度必须不超过最大传送单元MTU。 ==
标识(identification) ——占 16 位,它是一个计数器,用来产生 IP 数据报的标识。
标志(flag) ——占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF=1 表示后面“还有分片”。MF=0 表示最后一个分片。标志字段中间的一位是 DF (Don’t Fragment) 。只有当 DF=0 时才允许分片。
片偏移——占13 位,指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
(6). IP层转发分组的流程
假设:有四个 A 类网络通过三个路由器连接在一起。每一个网络上都可能有成千上万个主机。
可以想象,若按目的主机号来制作路由表,每一个路由表就有 4 万个项目,即 4 万行(每一行对应于一台主机),则所得出的路由表就会过于庞大。
但若按主机所在的网络地址来制作路由表,那么每一个路由器中的路由表就只包含 4 个项目(每一行对应于一个网络),这样就可使路由表大大简化。
3. 划分子网和构造超网
(1). 划分子网
从两级 IP 地址到三级 IP 地址
在 ARPANET 的早期,IP 地址的设计确实不够合理:
(1) IP 地址空间的利用率有时很低。
(2) 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
(3) 两级的 IP 地址不够灵活。
三级 IP 地址
从 1985 年起在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址
。
这种做法叫做划分子网
(subnetting) 。
划分子网已成为互联网的正式标准协议。
划分子网的基本思路
划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。
然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。
最后就将 IP 数据报直接交付目的主机。
当一个网络划分子网后对外任然是一个网络
划分子网的优点:
优点
- 减少了 IP 地址的浪费
- 使网络的组织更加灵活
- 更便于维护和管理
划分子网纯属一个单位内部的事情,对外部网络透明,对外仍然表现为没有划分子网的一个网络。
-1-. 子网掩码
从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。
使用子网掩码 (subnet mask) 可以找出 IP 地址中的子网部分。
规则:
子网掩码长度 = 32 位
子网掩码左边部分的一连串 1,对应于网络号和子网号
子网掩码右边部分的一连串 0,对应于主机号
IP 地址的各字段和子网掩码
(IP 地址) AND (子网掩码) =网络地址
默认子网掩码
子网掩码是一个重要属性
子网掩码是一个网络或一个子网的重要属性。
路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码。
(2). 使用子网时分组的转发
在不划分子网的两级 IP 地址下,从 IP 地址得出网络地址是个很简单的事。
但在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。
因此分组转发的算法也必须做相应的改动。
在划分子网情况下路由器转发分组的算法
- 从收到的分组的首部提取目的 IP 地址 D。
- 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
- 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行 (4)。
- 对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 (5)。
- 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 (6)。
- 报告转发分组出错。
(3). 无分类编址CIDR
-1-. 网络前缀
划分子网在一定程度上缓解了互联网在发展中遇到的困难。然而在 1992 年互联网仍然面临三个必须尽早解决的问题:
- B 类地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月全部分配完毕!
- 互联网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)。
- 整个 IPv4 的地址空间最终将全部耗尽
IP 编址问题的演进
- 1987 年,RFC 1009 就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码。
- 使用变长子网掩码 VLSM (Variable Length Subnet Mask)可进一步提高 IP 地址资源的利用率。
- 在 VLSM 的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。
CIDR 最主要的特点
- CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
- CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
- IP 地址从三级编址(使用子网掩码)又回到了两级编址。
无分类的两级编址
-
无分类的两级编址的记法是:
-
CIDR 使用“斜线记法”(slash notation),它又称为 CIDR 记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。例如: 220.78.168.0/24
CIDR 地址块
- CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。
- 128.14.32.0/20 表示的地址块共有 2^12 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。
- 这个地址块的起始地址是 128.14.32.0。
- 在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。
- 128.14.32.0/20 地址块的最小地址:128.14.32.0
- 128.14.32.0/20 地址块的最大地址:128.14.47.255
- 全 0 和全 1 的主机号地址一般不使用。
路由聚合 (route aggregation)
- 一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。
- 路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
- 路由聚合也称为构成超网 (supernetting)。
- CIDR 虽然不使用子网了,但仍然使用“掩码”这一名词(但不叫子网掩码)。
- 对于 /20 地址块,它的掩码是 20 个连续的 1。 斜线记法中的数字就是掩码中1的个数。
CIDR 记法的其他形式
-
10.0.0.0/10 可简写为 10/10,也就是把点分十进制中低位连续的 0 省略。
-
10.0.0.0/10 隐含地指出 IP 地址 10.0.0.0 的掩码是 255.192.0.0。此掩码可表示为:
-
网络前缀的后面加一个星号 * 的表示方法,如 00001010 00*,在星号 * 之前是网络前缀,而星号 * 表示 IP 地址中的主机号,可以是任意值。
构成超网 -
前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址。
-
这些 C 类地址合起来就构成了超网。
-
CIDR 地址块中的地址数一定是 2 的整数次幂。
-
网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
-
CIDR 的一个好处是:可以更加有效地分配 IPv4 的地址空间,可根据客户的需要分配适当大小的 CIDR 地址块。
CIDR 地址块划分举例
这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该 ISP 的路由器交换路由信息的每一个路由器的路由表中,就需要有 64 个项目。但采用地址聚合后,只需用路由聚合后的 1 个项目 206.0.64.0/18 就能找到该 ISP。
-2-. 最长前缀匹配
- 使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
- 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配 (longest-prefix matching)。
- 网络前缀越长,其地址块就越小,因而路由就越具体 (more specific) 。
- 最长前缀匹配又称为最长匹配或最佳匹配。
-3-. 使用二叉线索查找路由表
- 当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。
- 为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索 (binary trie)。
- IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
- 为了提高二叉线索的查找速度,广泛使用了各种压缩技术。
4. 网络控制报文协议ICMP
- 为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。
- ICMP 是互联网的标准协议。
- ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
- 但 ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议。
ICMP 报文的格式
(1). ICMP报文的种类
- ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。
- ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。
ICMP 差错报告报文共有 4 种
终点不可达
时间超过
参数问题
改变路由(重定向)(Redirect)
ICMP 差错报告报文的数据字段的内容
不应发送 ICMP 差错报告报文的几种情况
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
ICMP 询问报文有两种
回送请求和回答报文
时间戳请求和回答报文
- 下面的几种 ICMP 报文不再使用:
信息请求与回答报文
掩码地址请求和回答报文
路由器询问和通告报文
源点抑制报文
(2). ICMP的应用
PING (Packet InterNet Groper)
- PING 用来测试两个主机之间的连通性。
- PING 使用了 ICMP 回送请求与回送回答报文。
- PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。
用 PING 测试主机的连通性
Traceroute 的应用举例
- 在 Windows 操作系统中这个命令是 tracert。
- 用来跟踪一个分组从源点到终点的路径。
- 它利用 IP 数据报中的 TTL 字段和 ICMP 时间超过差错报告报文实现对从源点到终点的路径的跟踪。
用 tracert 命令获得到目的主机的路由信息
5. 互联网的路由选择协议
(1). 有关路由选择协议的几个基本概念
理想的路由算法
算法必须是正确的和完整的。
算法在计算上应简单。
算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。
算法应具有稳定性。
算法应是公平的。
算法应是最佳的。
关于“最佳路由”
- 不存在一种绝对的最佳路由算法。
- 所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
- 实际的路由选择算法,应尽可能接近于理想的算法。
- 路由选择是个非常复杂的问题
- 它是网络中的所有结点共同协调工作的结果。
- 路由选择的环境往往是不断变化的,而这种变化有时无法事先知道。
从路由算法的自适应性考虑
静态路由选择策略——即非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。
动态路由选择策略——即自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。
分层次的路由选择协议
互联网采用分层次的路由选择协议。这是因为:
(1) 互联网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使互联网的通信链路饱和。
(2) 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。
自治系统 AS (Autonomous System)
- 自治系统 AS 的定义:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。
- 现在对自治系统 AS 的定义是强调下面的事实:尽管一个 AS 使用了多种内部路由选择协议和度量,但重要的是一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。
互联网有两大类路由选择协议 - 内部网关协议 IGP (Interior Gateway Protocol)
- 在一个自治系统内部使用的路由选择协议。
- 目前这类路由选择协议使用得最多,如 RIP 和 OSPF 协议。
- 外部网关协议 EGP (External Gateway Protocol)
- 若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP。
- 在外部网关协议中目前使用最多的是 BGP-4。
互联网的路由选择协议
内部网关协议 IGP:具体的协议有多种,如 RIP 和 OSPF 等。
外部网关协议 EGP:目前使用的协议就是 BGP。
(2). 内部网关协议RIP
-1-. 使用原理
路由信息协议 RIP (Routing Information Protocol) 是内部网关协议 IGP 中最先得到广泛使用的协议。
RIP 是一种分布式的、基于距离向量的路由选择协议。
RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
“距离”的定义
从一个路由器到直接连接的网络的距离定义为 1。
从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。
RIP 协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加 1。
这里的“距离”实际上指的是“最短距离”。
RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。
RIP 允许一条路径最多只能包含 15 个路由器。
“距离”的最大值为 16 时即相当于不可达。可见 RIP 只适用于小型互联网。
RIP 不能在两个网络之间同时使用多条路由。RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
RIP 协议的三个特点
- 仅和相邻路由器交换信息。
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按固定的时间间隔交换路由信息,例如,每隔 30 秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
路由表的建立
路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为 1)。它的路由表是空的。
以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
RIP 协议的收敛 (convergence) 过程较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程。
-2-. 距离向量算法
路由器收到相邻路由器(其地址为 X)的一个 RIP 报文:
(1) 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。
(2) 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
若项目中的目的网络不在路由表中,则把该项目加到路由表中。
否则
若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目。
否则
若收到项目中的距离小于路由表中的距离,则进行更新,
否则,什么也不做。
(3) 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(表示不可达)。
(4) 返回。
距离向量算法的基础就是 Bellman-Ford 算法(或 Ford-Fulkerson 算法)。
这种算法的要点是这样的:
设X是结点 A 到 B 的最短路径上的一个结点。
若把路径 A→B 拆成两段路径 A→X 和 X→B,则每一段路径 A→X 和 X→B 也都分别是结点 A 到 X 和结点 X 到 B 的最短路径。
路由器之间交换信息与路由表更新
- RIP 协议让互联网中的所有路由器都和自己的相邻路由器不断交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)。
- 虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的。
-3-. RIP 协议的优缺点
优点:
实现简单,开销较小。
缺点:
RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
“坏消息传播得慢”,使更新过程的收敛时间过长。
(3). 内部网关协议 OSPF
开放最短路径优先 OSPF (Open Shortest Path First)是为克服 RIP 的缺点在 1989 年开发出来的。
OSPF 的原理很简单,但实现起来却较复杂。
-1-. OSPF协议的基本特点
“开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。
“最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法 SPF
采用分布式的链路状态协议 (link state protocol)。
注意:OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”
三个要点
向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法
。
发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。
只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
链路状态数据库 (link-state database)
由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。
这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。
OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。
OSPF 的更新过程收敛得快是其重要优点。
OSPF 的区域 (area)
为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫做区域。
每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。
区域也不能太大,在一个区域内的路由器最好不超过 200 个。
OSPF 划分为两种不同的区域
划分区域
划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。
OSPF 使用层次结构的区域划分。在上层的区域叫做主干区域 (backbone area)。
主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。
OSPF 直接用 IP 数据报传送
OSPF 不用 UDP 而是直接用 IP 数据报传送。
OSPF 构成的数据报很短。这样做可减少路由信息的通信量。
数据报很短的另一好处是可以不必将长的数据报分片传送。
但分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
OSPF 的其他特点
OSPF 对不同的链路可根据 IP 分组的不同服务类型 TOS 而设置成不同的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由。
如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫做多路径间的负载平衡。
所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。
支持可变长度的子网划分和无分类编址 CIDR。
每一个链路状态都带上一个 32 位的序号,序号越大状态就越新。
OSPF 分组
-2-. OSPF的五种分组类型
类型1,问候 (Hello) 分组。
类型2,数据库描述 (Database Description) 分组。
类型3,链路状态请求 (Link State Request) 分组。
类型4,链路状态更新 (Link State Update) 分组,用洪泛法对全网更新链路状态。
类型5,链路状态确认 (Link State Acknowledgment)分组。
OSPF 的基本操作
OSPF 的其他特点
OSPF 还规定每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态。
由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。
OSPF 没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于 100 ms。
指定的路由器
多点接入的局域网采用了指定的路由器 (designated router) 的方法,使广播的信息量大大减少。
指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息。
(4). 外部网关协议BGP
BGP 是不同自治系统的路由器之间交换路由信息的协议。
BGP 较新版本是 2006 年 1 月发表的 BGP-4(BGP 第 4 个版本),即 RFC 4271 ~ 4278。
可以将 BGP-4 简写为 BGP。
BGP 使用环境不同
- 互联网的规模太大,使得自治系统之间路由选择非常困难。对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。
- 当一条路径通过几个不同 AS 时,要想对这样的路径计算出有意义的代价是不太可能的。
- 比较合理的做法是在 AS 之间交换“可达性”信息。
- 自治系统之间的路由选择必须考虑有关策略。
- 因此,边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
BGP 发言人
- 每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“ BGP 发言人” (BGP speaker) 。
- 一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是 BGP 边界路由器。
BGP 交换路由信息
- 一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息。
- 使用 TCP 连接能提供可靠的服务,也简化了路由选择协议。
- 使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此成为对方的邻站(neighbor)或对等站(peer) 。
BGP 发言人和自治系统 AS 的关系
BGP 协议的特点
BGP 协议交换路由信息的结点数量级是自治系统数的量级,这要比这些自治系统中的网络数少很多。
每一个自治系统中 BGP 发言人(或边界路由器)的数目是很少的。这样就使得自治系统之间的路由选择不致过分复杂。
BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
BGP-4 共使用四种报文
- 打开 (OPEN) 报文,用来与相邻的另一个BGP发言人建立关系。
- 更新 (UPDATE) 报文,用来发送某一路由的信息,以及列出要撤消的多条路由。
- 保活 (KEEPALIVE) 报文,用来确认打开报文和周期性地证实邻站关系。
- 通知 (NOTIFICATION) 报文,用来发送检测到的差错。
BGP 报文具有通用首部
(5). 路由器的构成
- 路由器是一种典型的网络层设备。
- 路由器是互联网中的关键设备。
- 路由器的主要作用是:
- 连通不同的网络。
- 选择信息传送的线路。选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率,从而让网络系统发挥出更大的效益来。
-1-. 路由器的结构
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。
下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
路由器的转发分组正是网络层的主要工作。
典型的路由器的结构
典型的路由器的结构
- 整个的路由器结构可划分为两大部分:
- 路由选择部分
- 分组转发部分
- 路由选择部分
- 也叫做控制部分,其核心构件是路由选择处理机。
- 路由选择处理机的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。
- 分组转发部分由三部分组成:
- 交换结构 (switching fabric):又称为交换组织,其作用是根据转发表 (forwarding table) 对分组进行处理。
- 一组输入端口
- 一组输出端口
(请注意:这里的端口就是硬件接口)
“转发”和“路由选择”的区别
“转发”(forwarding) 就是路由器根据转发表将用户的 IP 数据报从合适的端口转发出去。
“路由选择”(routing) 则是按照分布式算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由。
路由表是根据路由选择算法得出的。而转发表是从路由表得出的。
在讨论路由选择的原理时,往往不去区分转发表和路由表的区别。
输入端口对线路上收到的分组的处理
路由器的输入端口里面装有物理层、数据链路层和网络层的处理模块。
数据链路层剥去帧首部和尾部后,将分组送到网络层的队列中排队等待处理。这会产生一定的时延。
输入端口中的查找和转发功能在路由器的交换功能中是最重要的
。
输出端口将交换结构传送来的分组发送到线路
输出端口里面装有物理层、数据链路层和网络层的处理模块。
输出端口从交换结构接收分组,然后把它们发送到路由器外面的线路上。
在网络层的处理模块中设有一个缓冲区(队列)。当交换结构传送过来的分组的速率超过输出链路的发送速率时,来不及发送的分组就必须暂时存放在这个队列中。
数据链路层处理模块将分组加上链路层的首部和尾部,交给物理层后发送到外部线路。
分组丢弃
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。
路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。
-2-. 交换结构
- 交换结构是路由器的关键构件。
- 正是这个交换结构把分组从一个输入端口转移到某个合适的输出端口。
- 实现交换有多种方法。常用交换方法有三种:
(1) 通过存储器
(2) 通过总线
(3) 通过纵横交换结构
通过存储器
(1) 当路由器的某个输入端口收到一个分组时,就用中断方式通知路由选择处理机。然后分组就从输入端口复制到存储器中。
(2) 路由器处理机从分组首部提取目的地址,查找路由表,再将分组复制到合适的输出端口的缓存中。
(3) 若存储器的带宽(读或写)为每秒 M 个分组,那么路由器的交换速率(即分组从输入端口传送到输出端口的速率)一定小于 M/2。
通过总线
(1) 数据报从输入端口通过共享的总线直接传送到合适的输出端口,而不需要路由选择处理机的干预。
(2) 因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽就受总线速率的限制。
(3) 现代的技术已经可以将总线的带宽提高到每秒吉比特的速率,因此许多的路由器产品都采用这种通过总线的交换方式。
通过纵横交换结构 (crossbar switch fabric)
(1) 这种交换结构常称为互连网络 (interconnection network)。
(2) 它有 2N 条总线,可以使 N 个输入端口和 N 个输出端口相连接。
(3) 当输入端口收到一个分组时,就将它发送到与该输入端口相连的水平总线上。
(4) 若通向所要转发的输出端口的垂直总线是空闲的,则在这个结点将垂直总线与水平总线接通,然后将该分组转发到这个输出端口。
(5) 但若该垂直总线已被占用(有另一个分组正在转发到同一个输出端口),则后到达的分组就被阻塞,必须在输入端口排队。
6. IPv6
IP 是互联网的核心协议。
互联网经过几十年的飞速发展,到 2011 年 2 月,IPv4 的 32 位地址已经耗尽。
ISP 已经不能再申请到新的 IP 地址块了。
我国在 2014 – 2015 年也逐步停止了向新用户和应用分配 IPv4 地址。
解决 IP 地址耗尽的根本措施就是采用具有更大地址空间的新版本的 IP,即 IPv6。
(1). IPv6的基本首部
- IPv6 仍支持无连接的传送,但将协议数据单元 PDU 称为分组。为方便起见,本书仍采用数据报这一名词。
- 所引进的主要变化如下:
- 更大的地址空间。IPv6 将地址从 IPv4 的 32 位 增大到了 128 位。
- 扩展的地址层次结构。
- 灵活的首部格式。 IPv6 定义了许多可选的扩展首部。
- 改进的选项。 IPv6 允许数据报包含有选项的控制信息,其选项放在有效载荷中。
- 允许协议继续扩充。
- 支持即插即用(即自动配置)。因此 IPv6 不需要使用 DHCP。
- 支持资源的预分配。 IPv6 支持实时视像等要求,保证一定的带宽和时延的应用。
- IPv6 首部改为 8 字节对齐。首部长度必须是 8 字节的整数倍。原来的 IPv4 首部是 4 字节对齐。
IPv6 数据报由两大部分组成:
- 基本首部 (base header)
- 有效载荷 (payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部 (extension header),再后面是数据部分。
IPv6 数据报的基本首部
IPv6 将首部长度变为固定的 40 字节,称为基本首部。
把首部中不必要的功能取消了,使得 IPv6 首部的字段数减少到只有 8 个。
IPv6 对首部中的某些字段进行了如下的更改:
版本(version)—— 4 位。它指明了协议的版本,对 IPv6 该字段总是 6。
通信量类(traffic class)—— 8 位。这是为了区分不同的 IPv6 数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
流标号(flow label)—— 20 位。 “流”是互联网络上从特定源点到特定终点的一系列数据报, “流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
有效载荷长度(payload length)—— 16 位。它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64 KB。
下一个首部(next header)—— 8 位。它相当于 IPv4 的协议字段或可选字段。
跳数限制(hop limit)—— 8 位。源站在数据报发出时即设定跳数限制。路由器在转发数据报时将跳数限制字段中的值减 1。当跳数限制的值为零时,就要将此数据报丢弃。
源地址—— 128 位。是数据报的发送站的 IP 地址。
目的地址—— 128 位。是数据报的接收站的 IP 地址。
IPv6 的扩展首部
IPv6 把原来 IPv4 首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理。
数据报途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部)。
这样就大大提高了路由器的处理效率。
六种扩展首部
在 RFC 2460 中定义了六种扩展首部:
- 逐跳选项
- 路由选择
- 分片
- 鉴别
- 封装安全有效载荷
- 目的站选项
(2). IPv6的地址
IPv6 数据报的目的地址可以是以下三种基本类型地址之一:
单播 (unicast):传统的点对点通信。
多播 (multicast):一点对多点的通信。
任播 (anycast):这是 IPv6 增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付其中的一个,通常是距离最近的一个。
结点与接口
- IPv6 将实现 IPv6 的主机和路由器均称为结点。
- 一个结点就可能有多个与链路相连的接口。
- IPv6 地址是分配给结点上面的接口的。
- 一个接口可以有多个单播地址。
- 其中的任何一个地址都可以当作到达该结点的目的地址。即一个结点接口的单播地址可用来唯一地标志该结点。
冒号十六进制记法
- 在 IPv6 中,每个地址占 128 位,地址空间大于 3.4 *1038 。
- 为了使地址再稍简洁些,IPv6 使用冒号十六进制记法(colon hexadecimal notation, 简写为 colon hex)。
- 每个 16 位的值用十六进制值表示,各值之间用冒号分隔。例如:
68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF - 在十六进制记法中,允许把数字前面的 0 省略。例如把 0000 中的前三个 0 省略,写成 1 个 0。
零压缩
冒号十六进制记法可以允许零压缩 (zero compression),即一连串连续的零可以为一对冒号所取代。
FF05:0:0:0:0:0:0:B3 可压缩为:
FF05::B3
注意:在任一地址中只能使用一次零压缩。
点分十进制记法的后缀
- 冒号十六进制记法可结合使用点分十进制记法的后缀,这种结合在 IPv4 向 IPv6 的转换阶段特别有用。
- 例如:0:0:0:0:0:0:128.10.2.1
再使用零压缩即可得出: ::128.10.2.1 - CIDR 的斜线表示法仍然可用。
- 例如:60 位的前缀 12AB00000000CD3 可记为:
12AB:0000:0000:CD30:0000:0000:0000:0000/60
或 12AB::CD30:0:0:0:0/60 (零压缩)
或 12AB:0:0:CD30::/60 (零压缩)
IPv6 地址分类
- 未指明地址
这是 16 字节的全 0 地址,可缩写为两个冒号“::”。
这个地址只能为还没有配置到一个标准的 IP 地址的主机当作源地址使用。
这类地址仅此一个。 - 环回地址
即 0:0:0:0:0:0:0:1(记为 ::1)。
作用和 IPv4 的环回地址一样。
这类地址也是仅此一个。 - 多播地址
功能和 IPv4 的一样。
这类地址占 IPv6 地址总数的 1/256。 - 本地链路单播地址 (Link-Local Unicast Address)
有些单位的网络使用 TCP/IP 协议,但并没有连接到互联网上。连接在这样的网络上的主机都可以使用这种本地地址进行通信,但不能和互联网上的其他主机通信。
这类地址占 IPv6 地址总数的 1/1024。 - 全球单播地址
IPv6 的这一类单播地址是使用得最多的一类。
曾提出过多种方案来进一步划分这 128 位的单播地址。
根据 2006 年发布的草案标准 RFC 4291 的建议, IPv6 单播地址的划分方法非常灵活。
(3) 从IPv4向IPv6过渡
- 向 IPv6 过渡只能采用逐步演进的办法,同时,还必须使新安装的 IPv6 系统能够向后兼容:IPv6 系统必须能够接收和转发 IPv4 分组,并且能够为 IPv4 分组选择路由。
- 两种向 IPv6 过渡的策略:
- 使用双协议栈
- 使用隧道技术
双协议栈
双协议栈 (dual stack) 是指在完全过渡到 IPv6 之前,使一部分主机(或路由器)装有两个协议栈,一个 IPv4 和一个 IPv6。
双协议栈的主机(或路由器)记为 IPv6/IPv4,表明它同时具有两种 IP 地址:一个 IPv6 地址和一个 IPv4 地址。
双协议栈主机在和 IPv6 主机通信时是采用 IPv6 地址,而和 IPv4 主机通信时就采用 IPv4 地址。
根据 DNS 返回的地址类型可以确定使用 IPv4 地址还是 IPv6 地址。
隧道技术
在 IPv6 数据报要进入 IPv4 网络时,把 IPv6 数据报封装成为 IPv4 数据报,整个的 IPv6 数据报变成了 IPv4 数据报的数据部分。
当 IPv4 数据报离开 IPv4 网络中的隧道时,再把数据部分(即原来的 IPv6 数据报)交给主机的 IPv6 协议栈。
(4). ICMPv6
IPv6 也不保证数据报的可靠交付,因为互联网中的路由器可能会丢弃数据报。
因此 IPv6 也需要使用 ICMP 来反馈一些差错信息。新的版本称为 ICMPv6。
地址解析协议 ARP 和网际组管理协议 IGMP 协议的功能都已被合并到 ICMPv6 中。
ICMPv6 报文的分类
CMPv6 是面向报文的协议,它利用报文来报告差错,获取信息,探测邻站或管理多播通信。
ICMPv6 还增加了几个定义报文的功能及含义的其他协议。
7. IP多播
(1) IP多播的基本概念
- IP 多播 (multicast,以前曾译为组播) 已成为互联网的一个热门课题。
- 目的:更好地支持一对多通信。
- 一对多通信:一个源点发送到许多个终点。
例如,实时信息的交付(如新闻、股市行情等),软件更新,交互式会议及其他多媒体通信。
多播可大大节约网络资源
IP 多播
在互联网上进行多播就叫做 IP 多播。
互联网范围的多播要靠路由器来实现。
能够运行多播协议的路由器称为多播路由器(multicast router)。当然它也可以转发普通的单播IP数据报。
从 1992 年起,在互联网上开始试验虚拟的多播主干网 MBONE (Multicast Backbone On the InterNEt)。 现在多播主干网已经有了相当大的规模。
多播 IP 地址
IP 多播所传送的分组需要使用多播 IP 地址。
在多播数据报的目的地址写入的是多播组的标识符。
多播组的标识符就是 IP 地址中的 D 类地址(多播地址)。
每一个 D 类地址标志一个多播组。
多播地址只能用于目的地址,不能用于源地址。
多播数据报
多播数据报和一般的 IP 数据报的区别就是它使用 D 类 IP 地址作为目的地址,并且首部中的协议字段值是 2,表明使用网际组管理协议 IGMP。
多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。
对多播数据报不产生 ICMP 差错报文。因此,若在 PING 命令后面键入多播地址,将永远不会收到响应。
(2). 在局域网上进行硬件多播
互联网号码指派管理局 IANA 拥有的以太网地址块的高 24 位为 00-00-5E。
因此 TCP/IP 协议使用的以太网地址块的范围是
从 00-00-5E-00-00-00
到 00-00-5E-FF-FF-FF
不难看出,在每一个地址中,只有23位可用作多播。
D 类 IP 地址可供分配的有 28 位,在这 28 位中的前 5 位不能用来构成以太网硬件地址。
D 类 IP 地址与以太网多播地址的映射关系
由于多播 IP 地址与以太网硬件地址的映射关系不是唯一的,因此收到多播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
(3). 网际组管理协议IGMP和多播路由选择协议
-1-. IP多播需要两种协议
- 为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP (Internet Group Management Protocol)。
- 连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。
IGMP 使多播路由器知道多播组成员信息
IGMP 的使用范围
IGMP 并非在互联网范围内对所有多播组成员进行管理的协议。
IGMP 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上。
IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
多播路由选择协议更为复杂
多播路由选择协议更为复杂
多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。请注意,单播路由选择通常是在网络拓扑发生变化时才需要更新路由。
多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去。
多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。
-2-. 网际组管理协议IGMP
1989 年公布的 RFC 1112(IGMPv1)早已成为了互联网的标准协议。
1997 年公布的 RFC 2236(IGMPv2,建议标准)对 IGMPv1 进行了更新。
2002 年 10 月公布了 RFC 3376(IGMPv3,建议标准),宣布 RFC 2236(IGMPv2)是陈旧的。
IGMP 是整个网际协议 IP 的一个组成部分
和 ICMP 相似,IGMP 使用 IP 数据报传递其报文(即 IGMP 报文加上 IP 首部构成 IP 数据报),但它也向 IP 提供服务。
因此,我们不把 IGMP 看成是一个单独的协议,而是属于整个网际协议 IP 的一个组成部分。
IGMP 工作可分为两个阶段
- 第一阶段:加入多播组。
- 当某个主机加入新的多播组时,该主机应向多播组的多播地址发送 IGMP 报文,声明自己要成为该组的成员。
- 本地的多播路由器收到 IGMP 报文后,将组成员关系转发给互联网上的其他多播路由器。
- 第二阶段:探询组成员变化情况。
- 因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。
- 只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。
- 但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。
IGMP 采用的一些具体措施
- 在主机和多播路由器之间的所有通信都是使用 IP 多播。
- 多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文。默认的询问速率是每 125 秒发送一次。
- 当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系。
- 在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10 秒)。当收到询问时,主机在 0 到 N 之间随机选择发送响应所需经过的时延。对应于最小时延的响应最先发送。
- 同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送响应了。
-4-. 多播路由选择
多播路由选择协议尚未标准化。
一个多播组中的成员是动态变化的,随时会有主机加入或离开这个多播组。
多播路由选择实际上就是要找出以源主机为根结点的多播转发树。
在多播转发树上的路由器不会收到重复的多播数据报。
对不同的多播组对应于不同的多播转发树。
同一个多播组,对不同的源点也会有不同的多播转发树。
多播路由选择协议在转发多播数据报时使用三种方法:
(1) 洪泛与剪除
(2) 隧道技术 (tunneling)
(3) 基于核心的发现技术
(1) 洪泛与剪除
这种方法适合于较小的多播组,而所有的组成员接入的局域网也是相邻接的。
一开始,路由器转发多播数据报使用洪泛的方法(这就是广播)。
为了避免兜圈子,采用了叫做反向路径广播 RPB
(Reverse Path Broadcasting) 的策略。
RPB 的要点
路由器收到多播数据报时,先检查它是否是从源点经最短路径传送来的。
若是,就向所有其他方向转发刚才收到的多播数据报(但进入的方向除外),否则就丢弃而不转发。
如果存在几条同样长度的最短路径,那么只能选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的 IP 地址最小。
最后就得出了用来转发多播数据报的多播转发树,以后就按这个多播转发树转发多播数据报。避免了多播数据报的兜圈子,同时每一个路由器也不会接收重复的多播数据报。
如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组的成员,就应把它和下游的树枝一起剪除。
当某个树枝有新增加的组成员时,可以再接入到多播转发树上。
(2) 隧道技术 (tunneling)
(3) 基于核心的发现技术
这种方法对于多播组的大小在较大范围内变化时都适合。
这种方法是对每一个多播组 G 指定一个核心(core) 路由器,给出它的 IP 单播地址。
核心路由器按照前面讲过的方法创建出对应于多播组 G 的转发树。
几种多播路由选择协议
距离向量多播路由选择协议 DVMRP (Distance Vector Multicast Routing Protocol)
基于核心的转发树 CBT (Core Based Tree)
开放最短通路优先的多播扩展 MOSPF (Multicast Extensions to OSPF)
协议无关多播-稀疏方式 PIM-SM (Protocol Independent Multicast-Sparse Mode)
协议无关多播-密集方式 PIM-DM (Protocol Independent Multicast-Dense Mode)
8. 虚拟专用网VPN和网络地址转换NAT
(1). 虚拟专用网络VPN
由于 IP 地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。
考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。
假定在一个机构内部的计算机通信也是采用 TCP/IP 协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其 IP 地址。
本地地址与全球地址
本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
全球地址——全球唯一的 IP 地址,必须向互联网的管理机构申请。
问题:在内部使用的本地地址就有可能和互联网中某个 IP 地址重合,这样就会出现地址的二义性问题。
解决:RFC 1918 指明了一些专用地址 (private address)。专用地址只能用作本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。
RFC 1918 指明的专用 IP 地址
专用网
采用这样的专用 IP 地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫做专用网。
因为这些专用地址仅在本机构内部使用。专用IP地址也叫做可重用地址 (reusable address)。
虚拟专用网 VPN
利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网VPN (Virtual Private Network)。
“专用网”是因为这种网络是为本机构的主机用于机构内部的通信,而不是用于和网络外非本机构的主机通信。
“虚拟”表示“好像是”,但实际上并不是,因为现在并没有真正使用通信专线,而VPN只是在效果上和真正的专用网一样。
虚拟专用网 VPN 构建
如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。
一个机构要构建自己的 VPN 就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的 VPN 系统都知道其他场所的地址。
用隧道技术实现虚拟专用网
内联网 intranet 和外联网 extranet
它们都是基于 TCP/IP 协议的。
由部门 A 和 B 的内部网络所构成的虚拟专用网 VPN 又称为内联网 (intranet),表示部门 A 和 B 都是在同一个机构的内部。
一个机构和某些外部机构共同建立的虚拟专用网 VPN 又称为外联网 (extranet)。
远程接入 VPN
远程接入 VPN (remote access VPN)可以满足外部流动员工访问公司网络的需求。
在外地工作的员工拨号接入互联网,而驻留在员工 PC 机中的 VPN 软件可在员工的 PC 机和公司的主机之间建立 VPN 隧道,因而外地员工与公司通信的内容是保密的,员工们感到好像就是使用公司内部的本地网络。
(2). 网络地址转换NAT
- 问题:在专用网上使用专用地址的主机如何与互联网上的主机通信(并不需要加密)?
- 解决:
- 再申请一些全球 IP 地址。但这在很多情况下是不容易做到的。
- 采用网络地址转换 NAT。这是目前使用得最多的方法。
网络地址转换 NAT
网络地址转换 NAT (Network Address Translation) 方法于1994年提出。
需要在专用网连接到互联网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球IP地址。
所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。
网络地址转换的过程
- 内部主机 A 用本地地址 IPA 和互联网上主机 B 通信所发送的数据报必须经过 NAT 路由器。
- NAT 路由器将数据报的源地址 IPA 转换成全球地址 IPG ,并把转换结果记录到NAT地址转换表中,目的地址 IPB 保持不变,然后发送到互联网。
- NAT 路由器收到主机 B 发回的数据报时,知道数据报中的源地址是 IPB 而目的地址是 IPG 。
- 根据 NAT 转换表,NAT 路由器将目的地址 IPG 转换为 IPA ,转发给最终的内部主机 A。
- 可以看出,在内部主机与外部主机通信时,在NAT路由器上发生了两次地址转换:
- 离开专用网时:替换源地址,将内部地址替换为全球地址;
- 进入专用网时:替换目的地址,将全球地址替换为内部地址;
- 当 NAT 路由器具有 n 个全球 IP 地址时,专用网内最多可以同时有 n 台主机接入到互联网。这样就可以使专用网内较多数量的主机,轮流使用 NAT 路由器有限数量的全球 IP 地址。
- 通过 NAT 路由器的通信必须由专用网内的主机发起。专用网内部的主机不能充当服务器用,因为互联网上的客户无法请求专用网内的服务器提供服务。
网络地址与端口号转换 NAPT
- 为了更加有效地利用 NAT 路由器上的全球IP地址,现在常用的 NAT 转换表把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用一个 NAT 路由器上的全球 IP 地址,因而可以同时和互联网上的不同主机进行通信。
- 使用端口号的 NAT 叫做网络地址与端口号转换NAPT (Network Address and Port Translation),而不使用端口号的 NAT 就叫做传统的 NAT (traditional NAT)。
- 为了更加有效地利用 NAT 路由器上的全球IP地址,现在常用的 NAT 转换表把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用一个 NAT 路由器上的全球 IP 地址,因而可以同时和互联网上的不同主机进行通信。
- 使用端口号的 NAT 叫做网络地址与端口号转换NAPT (Network Address and Port Translation),而不使用端口号的 NAT 就叫做传统的 NAT (traditional NAT)。
NAPT 地址转换表
NAPT把专用网内不同的源 IP 地址,都转换为同样的全球 IP 地址。但对源主机所采用的 TCP 端口号(不管相同或不同),则转换为不同的新的端口号。因此,当 NAPT 路由器收到从互联网发来的应答时,就可以从 IP 数据报的数据部分找出运输层的端口号,然后根据不同的目的端口号,从 NAPT 转换表中找到正确的目的主机。
9. 多协议标记交换MPLS
IETF于1997年成立了 MPLS 工作组,开发出一种新的协议——多协议标记交换 MPLS (MultiProtocol Label Switching)。
“多协议”表示在 MPLS 的上层可以采用多种协议,例如:IP,IPX;可以使用多种数据链路层协议,例如:PPP,以太网,ATM 等。
“标记”是指每个分组被打上一个标记,根据该标记对分组进行转发。
为了实现交换,可以利用面向连接的概念,
使每个分组携带一个叫做标记 (label) 的小整数。
当分组到达交换机(即标记交换路由器)时,
交换机读取分组的标记,并用标记值来检索分组转发表。
这样就比查找路由表来转发分组要快得多
MPLS 特点
- MPLS 并没有取代 IP,而是作为一种 IP 增强技术,被广泛地应用在互联网中。
- MPLS 具有以下三个方面的特点:
- 支持面向连接的服务质量;
- 支持流量工程,平衡网络负载;
- 有效地支持虚拟专用网 VPN。
(1). MPLS的工作原理
-1-. 基本工作过程
IP 分组的转发
(1) 在传统的 IP 网络中,分组每到达一个路由器后,都必须提取出其目的地址,按目的地址查找路由表,并按照“最长前缀匹配”的原则找到下一跳的 IP 地址(请注意,前缀的长度是不确定的)。
(2) 当网络很大时,查找含有大量项目的路由表要花费很多的时间。
(3) 在出现突发性的通信量时,往往还会使缓存溢出,这就会引起分组丢失、传输时延增大和服务质量下降。
MPLS 协议的基本原理
- 在 MPLS 域的入口处,给每一个 IP 数据报打上固定长度“标记”,然后对打上标记的 IP 数据报用硬件进行转发。
- 采用硬件技术对打上标记的 IP 数据报进行转发就称为标记交换。
- “交换”也表示在转发时不再上升到第三层查找转发表,而是根据标记在第二层(链路层)用硬件进行转发。
- MPLS 域 (MPLS domain) 是指该域中有许多彼此相邻的路由器,并且所有的路由器都是支持 MPLS 技术的标记交换路由器 LSR (Label Switching Router)。
- LSR 同时具有标记交换和路由选择这两种功能,
标记交换功能是为了快速转发,但在这之前LSR 需要使用路由选择功能构造转发表
。
MPLS 的基本工作过程
(1) MPLS 域中的各 LSR 使用专门的标记分配协议 LDP 交换报文,并找出标记交换路径 LSP。各 LSR 根据这些路径构造出分组转发表。
(2) 分组进入到 MPLS 域时, MPLS 入口结点把分组打上标记,并按照转发表将分组转发给下一个 LSR。给 IP 数据报打标记的过程叫做分类 (classification)。
(3) 一个标记仅仅在两个标记交换路由器 LSR 之间才有意义。分组每经过一个 LSR,LSR 就要做两件事:一是转发,二是更换新的标记,即把入标记更换成为出标记。这就叫做标记对换 (label swapping)。
(4) 当分组离开 MPLS 域时,MPLS 出口结点把分组的标记去除。再以后就按照一般分组的转发方法进行转发。
上述的这种“由入口 LSR 确定进入 MPLS 域以后的转发路径”称为显式路由选择 (explicit routing),它和互联网中通常使用的“每一个路由器逐跳进行路由选择”有着很大的区别。
-2-. 转发等价类FEC
- MPLS 有个很重要的概念就是转发等价类 FEC (Forwarding Equivalence Class)。
- “转发等价类”就是路由器按照同样方式对待的分组的集合。
“按照同样方式对待”表示:从同样接口转发到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级等。 - 划分 FEC 的方法不受什么限制,这都由网络管理员来控制,因此非常灵活。
- 入口结点并不是给每一个分组指派一个不同的标记,而是将属于同样 FEC 的分组都指派同样的标记。
- FEC 和标记是一一对应的关系。
FEC 用于负载平衡
流量工程
(1) 网络管理员采用自定义的 FEC 就可以更好地管理网络的资源。
(2) 这种均衡网络负载的做法也称为流量工程 TE (Traffic Engineering) 或通信量工程。
(2). MPLS首部的位置与格式
- MPLS 并不要求下层的网络都使用面向连接的技术。
- 下层的网络并不提供打标记的手段,而 IPv4 数据报首部也没有多余的位置存放 MPLS 标记。
- 这就需要使用一种封装技术:在把 IP 数据报封装成以太网帧之前,先要插入一个 MPLS 首部。
- 从层次的角度看,MPLS 首部就处在第二层和第三层之间。
MPLS 首部的格式
MPLS 首部共包括以下四个字段:
(1) 标记值(占 20 位)。可以同时容纳高达 220 个流(即 1048576 个流)。实际上几乎没有哪个 MPLS 实例会使用很大数目的流,因为通常需要管理员人工管理和设置每条交换路径。
(2) 试验(占 3 位)。目前保留用作试验。
(3) 栈S(占 1 位)。在有“标记栈”时使用。
(4) 生存时间TTL(占 8 位)。用来防止 MPLS 分组在 MPLS 域中兜圈子。
第五章: 运输层
计算机网络体系结构
1. 运输层协议概述
(1). 进程之间的通信
- 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,
它属于面向通信部分的最高层,同时也是用户功能中的最低层
。 - 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,
只有位于网络边缘部分的主机的协议栈才有运输层
,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。
运输层的作用
“逻辑通信”的意思是“好像是这样通信,但事实上并非真的这样通信”。
从IP层来说,通信的两端是两台主机。但“两台主机之间的通信”这种说法还不够清楚。
严格地讲,两台主机进行通信就是两台主机中的应用进程互相通信。
从运输层的角度看,通信的真正端点并不是主机而是主机中的进程
。也就是说,端到端的通信是应用进程之间的通信。
端系统之间通信的含义
“主机A和主机B进行通信”实际上是指:“运行在主机A上的某个程序和运行在主机B上的另一个程序进行通信”。端到端的通信是进程之间的通信。即“主机 A 的某个进程和主机 B 上的另一个进程进行通信”。
简称为“计算机之间通信”。
网络层与运输层有明显的区别
基于端口的复用和分用功能
屏蔽作用
运输层向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
两种不同的运输协议
- 但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别。
- 当运输层采用面向连接的
TCP
协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道
。 - 当运输层采用无连接的
UDP
协议时,这种逻辑通信信道是一条不可靠信道
。
可靠信道和不可靠信道
(2). 运输层的两个主要协议
TCP/IP 的运输层有两个主要协议:
- 用户数据报协议 UDP (User Datagram Protocol)
- 传输控制协议 TCP (Transmission Control Protocol)
TCP与UDP
两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。
TCP 传送的数据单位协议是 TCP 报文段(segment)。
UDP 传送的数据单位协议是 UDP 报文或用户数据报。
使用 UDP 和 TCP 的典型应用和应用层协议
需要解决的问题
主机上可能有多个进程同时技能型通信,进程是动态创建和撤销的
补充两点
- 运输层的 UDP 用户数据报与网际层的IP数据报有很大区别。
- IP 数据报要经过互连网中许多路由器的存储转发。
- UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。
- TCP 报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了 TCP 连接。
(3). 运输层端口
- 运行在计算机中的进程是用进程标识符来标志的。
- 但运行在应用层的各种应用进程却不应当让计算机操作系统指派它的进程标识符。这是因为在互联网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符。
- 为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对 TCP/IP 体系的应用进程进行标志。
需要解决的问题
由于进程的创建和撤销都是动态的,发送方几乎无法识别其他机器上的进程。
有时我们会改换接收报文的进程,但并不需要通知所有发送方。
我们往往需要利用目的主机提供的功能来识别终点,而不需要知道实现这个功能的进程。
端口号 (protocol port number)
解决这个问题的方法就是在运输层使用协议端口号 (protocol port number),或通常简称为端口 (port)。
虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由 TCP 来完成。
软件端口与硬件端口
两个不同的概念。
在协议栈层间的抽象的协议端口是软件端口。
路由器或交换机上的端口是硬件端口。
硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
TCP/IP 运输层端口
端口用一个 16 位端口号进行标志,允许有65,535个不同的端口号。
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在互联网中,不同计算机的相同端口号是没有联系的。
由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的端口号(为了找到对方计算机中的应用进程) ,而且还要知道对方的 IP 地址(为了找到对方的计算机)。
两大类端口
- 服务器端使用的端口号
- 熟知端口,数值一般为 0 ~ 1023。
- 登记端口号,数值为 1024 ~ 49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。
- 客户端使用的端口号
- 又称为短暂端口号,数值为 49152 ~ 65535,留给客户进程选择暂时使用。
- 当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
两大类、三种类型的端口
常用的熟知端口
2. 用户数据报协议UDP
(1). UDP概述
UDP 只在 IP 的数据报服务之上增加了很少一点的功能:
-
复用和分用的功能
-
差错检测的功能
UDP 的主要特点 -
UDP 是无连接的,发送数据之前不需要建立连接,,因此减少了开销和发送数据之前的时延。
-
UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
-
UDP 是面向报文的。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP 一次交付一个完整的报文。
-
UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很适合多媒体通信的要求。
-
UDP 支持一对一、一对多、多对一和多对多的交互通信。
-
UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。
面向报文的 UDP
- 发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
- 应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。
- 接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
- 应用程序必须选择合适大小的报文。
- 若报文太长,UDP 把它交给 IP 层后,IP 层在传送时可能要进行分片,这会降低 IP 层的效率。
- 若报文太短,UDP 把它交给 IP 层后,会使 IP 数据报的首部的相对长度太大,这也降低了 IP 层的效率。
UDP 是面向报文的
(2). UDP的首部格式
UDP 基于端口的分用
计算 UDP 检验和的例子
3 传输控制协议TCP概述
(1). TCP最主要的特点
TCP 是面向连接的运输层协议,在无连接的、不可靠的 IP 网络服务基础之上提供可靠交付的服务。为此,在 IP 的数据报服务基础之上,增加了保证可靠性的一系列措施。
- TCP 是面向连接的运输层协议。
- 每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。
- TCP 提供可靠交付的服务。
- TCP 提供全双工通信。
- 面向字节流
- TCP 中的“流”(stream) 指的是流入或流出进程的字节序列。
- “面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。
TCP 面向流的概念
TCP 不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。
但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
注 意
TCP 连接是一条虚连接而不是一条真正的物理连接。
TCP 对应用进程一次把多长的报文发送到 TCP 的缓存中是不关心的。
TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
TCP 可把太长的数据块划分短一些再传送。
TCP 也可等待积累有足够多的字节后再构成报文段发送出去。
(2). TCP连接
TCP 把连接作为最基本的抽象。
每一条 TCP 连接有两个端点。
TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字 (socket) 或插口。
端口号拼接到 (contatenated with) IP 地址即构成了套接字。
套接字 (socket)
TCP 连接,IP 地址,套接字
TCP 连接就是由协议软件所提供的一种抽象。
TCP 连接的端点是个很抽象的套接字,即(IP 地址:端口号)。
同一个 IP 地址可以有多个不同的 TCP 连接。
同一个端口号也可以出现在多个不同的 TCP 连接中。
Socket 有多种不同的意思
应用编程接口 API 称为 socket API, 简称为 socket。
socket API 中使用的一个函数名也叫作 socket。
调用 socket 函数的端点称为 socket。
调用 socket 函数时其返回值称为 socket 描述符,可简称为 socket。
在操作系统内核中连网协议的 Berkeley 实现,称为 socket 实现。
4. 可靠传输的工作原理
IP 网络所提供的是不可靠的传输
理想的传输条件特点
- 理想的传输条件有以下两个特点:
- 传输信道不产生差错。
- 不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。
- 在这样的理想传输条件下,不需要采取任何措施就能够实现可靠传输。
- 然而实际的网络都不具备以上两个理想条件。必须使用一些可靠传输协议,在不可靠的传输信道实现可靠传输。
(1). 停止等待协议
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
全双工通信的双方既是发送方也是接收方。
为了讨论问题的方便,我们仅考虑 A 发送数据,而 B 接收数据并发送确认。因此 A 叫做发送方,而 B 叫做接收方。
1. 无差错情况
2. 出现差错
- 在接收方 B 会出现两种情况:
- B 接收 M1 时检测出了差错,就丢弃 M1,其他什么也不做(不通知 A 收到有差错的分组)。
- M1 在传输过程中丢失了,这时 B 当然什么都不知道,也什么都不做。
-
在这两种情况下,B 都不会发送任何信息。
-
但A都必须重发分组,直到B正确接收为止,这样才能实现可靠通信。
-
问题:A如何知道 B 是否正确收到了 M1 呢?
-
解决方法:超时重传
- A 为每一个已发送的分组都设置了一个超时计时器。
- A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。
- 若A在超时计时器规定时间内没有收到B的确认,就认为分组错误或丢失,就重发该分组。
- 问题:若分组正确到达B,但B回送的确认丢失或延迟了,A未收到B的确认,会超时重发。B 可能会收到重复的 M1 。B如何知道收到了重复的分组,需要丢弃呢?
- 解决方法:编号
- A为每一个发送的分组都进行编号。若B收到了编号相同的分组,则认为收到了重复分组,丢弃重复的分组,并回送确认。
- B为发送的确认也进行编号,指示该确认是对哪一个分组的确认。
- A根据确认及其编号,可以确定它是对哪一个分组的确认,避免重发发送。若为重复的确认,则将其丢弃。
3. 确认丢失和确认迟到
- 确认丢失
- 若 B 所发送的对 M1 的确认丢失了,那么 A 在设定的超时重传时间内不能收到确认,但 A 并无法知道:是自己发送的分组出错、丢失了,或者 是 B 发送的确认丢失了。因此 A 在超时计时器到期后就要重传 M1。
- 假定 B 又收到了重传的分组 M1。这时 B 应采取两个行动:
第一,丢弃这个重复的分组 M1,不向上层交付。
第二,向 A 发送确认。不能认为已经发送过确认就不再发送,因为 A 之所以重传 M1 就表示 A 没有收到对 M1 的确认。
- 确认迟到
- 传输过程中没有出现差错,但 B 对分组 M1 的确认迟到了。
- A 会收到重复的确认。对重复的确认的处理很简单:收下后就丢弃。
- B 仍然会收到重复的 M1,并且同样要丢弃重复的 M1,并重传确认分组。
请注意:
- 在发送完一个分组后,必须暂时保留已发送的分组的副本,以备重发。
- 分组和确认分组都必须进行编号。
- 超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些。
自动重传请求 ARQ
- 通常 A 最终总是可以收到对所有发出的分组的确认。如果 A 不断重传分组但总是收不到确认,就说明通信线路太差,不能进行通信。
- 使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
- 像上述的这种可靠传输协议常称为自动重传请求 ARQ (Automatic Repeat reQuest)。意思是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。
4. 信道利用率
- 可以看出,当往返时间 RTT 远大于分组发送时间 TD 时,信道的利用率就会非常低。
- 若出现重传,则对传送有用的数据信息来说,信道的利用率就还要降低。
流水线传输
- 为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输。
- 流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不间断地传送。
- 由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率。
停止等待协议要点
停止等待。发送方每次只发送一个分组。在收到确认后再发送下一个分组。
编号。对发送的每个分组和确认都进行编号。
自动重传请求。发送方为每个发送的分组设置一个超时计时器。若超时计时器超时,发送方会自动重传分组。
简单,但信道利用率太低。
(2). 连续ARQ协议
基本思想:
发送方一次可以发出多个分组。
使用滑动窗口协议控制发送方和接收方所能发送和接收的分组的数量和编号。
每收到一个确认,发送方就把发送窗口向前滑动。
接收方一般采用累积确认的方式。
采用回退N(Go-Back-N)方法进行重传。
累积确认
- 接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
优点:容易实现,即使确认丢失也不必重传。
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。
Go-back-N(回退 N)
如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。
这就叫做 Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组。
可见当通信线路质量不好时,连续 ARQ 协议会带来负面的影响。
TCP 可靠通信的具体实现
TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口。
TCP 的可靠传输机制用字节的序号进行控制。TCP 所有的确认都是基于序号而不是基于报文段。
TCP 两端的四个窗口经常处于动态变化之中。
TCP连接的往返时间 RTT 也不是固定不变的。需要使用特定的算法估算较为合理的重传时间。
连续 ARQ 协议与停止等待协议
原理:
滑动窗口协议比较复杂,是 TCP 协议的精髓所在。
发送方维持的发送窗口,它的意义是:位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。这样,信道利用率就提高了。
连续 ARQ 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
滑动窗口协议
5. TCP报文段的首部格式
TCP 虽然是面向字节流的,但 TCP 传送的数据单元却是报文段。
一个 TCP 报文段分为首部和数据两部分,而 TCP 的全部功能都体现在它首部中各字段的作用。
TCP 报文段首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选项 (n 是整数)。因此 TCP 首部的最小长度是 20 字节
。
- 源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
- 序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
- 确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
- 数据偏移(即首部长度)——占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。
- 保留字段——占 6 位,保留为今后使用,但目前应置为 0。
- 紧急 URG —— 当 URG 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
- 确认 ACK —— 只有当 ACK =1 时确认号字段才有效。当 ACK =0 时,确认号无效。
- 推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
- 复位 RST (ReSeT) —— 当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
- 同步 SYN —— 同步 SYN = 1 表示这是一个连接请求或连接接受报文。
- 终止 FIN (FINish) —— 用来释放一个连接。FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
- 窗口字段 —— 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。
- 检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
- 紧急指针字段 —— 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
- 选项字段 —— 长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
- 填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。
注意:
MSS (Maximum Segment Size)
是 TCP 报文段中的数据字段的最大长度。
数据字段加上 TCP 首部才等于整个的 TCP 报文段。
所以,MSS是“TCP 报文段长度减去 TCP 首部长度”。
在计算检验和时,临时把 12 字节的“伪首部”和 TCP 报文段连接在一起。伪首部仅仅是为了计算检验和。
为什么要规定 MSS ?
MSS 与接收窗口值没有关系。
若选择较小的 MSS 长度,网络的利用率就降低。
若 TCP 报文段非常长,那么在 IP 层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的 TCP 报文段。当传输出错时还要进行重传。这些也都会使开销增大。
因此,MSS 应尽可能大些,只要在 IP 层传输时不需要再分片就行。
但最佳的 MSS 是很难确定的。
其他选项
窗口扩大选项 ——占 3 字节,其中有一个字节表示移位值 S。新的窗口值等于 TCP 首部中的窗口位数增大到 (16 + S),相当于把窗口值向左移动 S 位后获得实际的窗口大小。
时间戳选项——占 10 字节,其中最主要的字段时间戳值字段(4 字节)和时间戳回送回答字段(4 字节)。
选择确认选项——在后面的 5.6.3 节介绍。
6. TCP可靠传输的实现=
(1). 以字节为单位的滑动窗口
TCP 使用流水线传输和滑动窗口协议实现高效、可靠的传输。
TCP 的滑动窗口是以字节为单位的。
发送方 A 和接收方 B 分别维持一个发送窗口和一个接收窗口。
发送窗口表示:在没有收到确认的情况下,可以连续把窗口内的数据全部发送出去。
接收窗口表示:只允许接收落入窗口内的数据。
发送缓存
接收缓存
发送缓存与接收缓存的作用
- 发送缓存用来暂时存放:
- 发送应用程序传送给发送方 TCP 准备发送的数据;
- TCP 已发送出但尚未收到确认的数据。
- 接收缓存用来暂时存放:
- 按序到达的、但尚未被接收应用程序读取的数据;
- 不按序到达的数据。
需要强调三点
第一,A 的发送窗口并不总是和 B 的接收窗口一样大(因为有一定的时间滞后)。
第二,TCP 标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
第三,TCP 要求接收方必须有累积确认的功能,这样可以减小传输开销。
接收方发送确认
- 接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
- 但请注意两点:
- 第一,接收方不应过分推迟发送确认,否则会导致发送方不必要的重传,这反而浪费了网络的资源。。
- 第二,捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。
(2). 超时重传时间的选择
重传机制是 TCP 中最重要和最复杂的问题之一。
TCP 每发送一个报文段,就对这个报文段设置一次计时器。
只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。
重传时间的选择是 TCP 最复杂的问题之一。
往返时延的方差很大
TCP 超时重传时间设置
如果把超时重传时间设置得太短,就会引起很多报文段的不必要的重传,使网络负荷增大。
但若把超时重传时间设置得过长,则又使网络的空闲时间增大,降低了传输效率。
TCP 采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间 RTT。
加权平均往返时间
超时重传时间 RTO
往返时间 (RTT) 的测量相当复杂
TCP 报文段 1 没有收到确认。重传(即报文段 2)后,收到了确认报文段 ACK。
如何判定此确认报文段是对原来的报文段 1 的确认,还是对重传的报文段 2 的确认?
Karn 算法
- 在计算平均往返时间 RTT 时,只要报文段重传了,就不采用其往返时间样本。
- 这样得出的加权平均平均往返时间 RTTS 和超时重传时间 RTO 就较准确。
- 但是,这又引起新的问题。当报文段的时延突然增大了很多时,在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但根据 Karn 算法,不考虑重传的报文段的往返时间样本。这样,超时重传时间就无法更新。
(3). 选择确认SACK
问题:若收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,那么能否设法只传送缺少的数据而不重传已经正确到达接收方的数据?
答案是可以的。选择确认 SACK (Selective ACK) 就是一种可行的处理方法。
接收到的字节流序号不连续
RFC 2018 的规定
- 如果要使用选择确认,那么在建立 TCP 连接时,就要在 TCP 首部的选项中加上“允许 SACK”的选项,而双方必须都事先商定好。
- 如果使用选择确认,那么原来首部中的“确认号字段”的用法仍然不变。只是以后在 TCP 报文段的首部中都增加了 SACK 选项,以便报告收到的不连续的字节块的边界。
- 由于首部选项的长度最多只有 40 字节,而指明一个边界就要用掉 4 字节,因此在选项中最多只能指明 4 个字节块的边界信息。
7. TCP的流量控制
(1). 利用滑动窗口实现流量控制
一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
流量控制 (flow control) 就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。
利用可变窗口进行流量控制举例
可能发生死锁
B 向 A 发送了零窗口的报文段后不久,B 的接收缓存又有了一些存储空间。于是 B 向 A 发送了 rwnd = 400 的报文段。
但这个报文段在传送过程中丢失了。A 一直等待收到 B 发送的非零窗口的通知,而 B 也一直等待 A 发送的数据。
如果没有其他措施,这种互相等待的死锁局面将一直延续下去。
为了解决这个问题,TCP 为每一个连接设有一个持续计时器 (persistence timer)。
持续计时器
为了解决这个问题, TCP 为每一个连接设有一个持续计时器 (persistence timer) 。
只要 TCP 连接的一方收到对方的零窗口通知,就启动该持续计时器。
若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。
若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。
若窗口不是零,则死锁的僵局就可以打破了。
(2). 必须考虑传输效率
- 可以用不同的机制来控制 TCP 报文段的发送时机:
- 第一种机制是 TCP 维持一个变量,它等于最大报文段长度 MSS。只要缓存中存放的数据达到 MSS 字节时,就组装成一个 TCP 报文段发送出去。
- 第二种机制是由发送方的应用进程指明要求发送报文段,即 TCP 支持的推送 (push) 操作。
- 第三种机制是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过 MSS)发送出去。
- 如何控制 TCP 发送报文段的时机仍然是一个较为复杂的问题。
糊涂窗口综合症
糊涂窗口综合症:每次仅发送一个字节或很少几个字节的数据时,有效数据传输效率变得很低的现象。
发送方 TCP 每次接收到一字节的数据后就发送。
这样,发送一个字节需要形成 41 字节长的 IP 数据报。效率很低。
解决方法:使用 Nagle 算法。
Nagle算法
若发送应用进程把要发送的数据逐个字节地送到 TCP 的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都缓存起来。
当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存。
只有在收到对前一个报文段的确认后才继续发送下一个报文段。
当到达的数据已达到发送窗口大小的一半或已达到报文段的最大长度时,就立即发送一个报文段。
原理:
接收方糊涂窗口综合症
当接收方的 TCP 缓冲区已满,接收方会向发送方发送窗口大小为 0 的报文。
若此时接收方的应用进程以交互方式每次只读取一个字节,于是接收方又发送窗口大小为一个字节的更新报文,发送方应邀发送一个字节的数据(发送的 IP 数据报是 41 字节长),于是接收窗口又满了,如此循环往复。
解决方法:让接收方等待一段时间,使得或者接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。只要出现这两种情况之一,接收方就发出确认报文,并向发送方通知当前的窗口大小。
8. TCP的拥塞控制
(1). 拥塞控制的一般原理
在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种现象称为拥塞 (congestion)。
最坏结果:系统崩溃。
拥塞产生的原因
- 网络拥塞往往是由许多因素引起的。例如:
- 点缓存的容量太小;
- 链路的容量不足;
- 处理机处理的速率太慢;
- 拥塞本身会进一步加剧拥塞;
- 出现拥塞的原因:
∑ 对资源需求 > 可用资源
增加资源能解决拥塞吗?
- 不能。这是因为网络拥塞是一个非常复杂的问题。简单地采用上述做法,在许多情况下,不但不能解决拥塞问题,而且还可能使网络的性能更坏。
- 网络拥塞往往是由许多因素引起的。例如:
- 增大缓存,但未提高输出链路的容量和处理机的速度,排队等待时间将会大大增加,引起大量超时重传,解决不了网络拥塞;
- 提高处理机处理的速率会会将瓶颈转移到其他地方;
拥塞控制与流量控制的区别
拥塞控制所起的作用
拥塞控制的一般原理
拥塞控制的前提:网络能够承受现有的网络负荷。
实践证明,拥塞控制是很难设计的,因为它是一个动态问题。
分组的丢失是网络发生拥塞的征兆而不是原因。
在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化、甚至发生死锁的原因。
开环控制和闭环控制
闭环控制
属于闭环控制的有以下几种措施:
(1) 监测网络系统,以便检测到拥塞在何时、何处发生。
(2) 将拥塞发生的信息传送到可采取行动的地方。
(3) 调整网络系统的运行以解决出现的问题。
监测网络的拥塞
- 主要指标有:
- 由于缺少缓存空间而被丢弃的分组的百分数;
- 平均队列长度;
- 超时重传的分组数;
- 平均分组时延;
- 分组时延的标准差,等等。
- 上述这些指标的上升都标志着拥塞的增长。
传递拥塞通知
发送通知拥塞发生的分组;
在分组中保留表示拥塞状态的字段;
周期性地发出探测分组等。
采取行动的时机
过于频繁,会使系统产生不稳定的振荡;
过于迟缓地采取行动又不具有任何实用价值。
解决拥塞的两条思路
增加网络可用资源;
减少用户对资源的需求。
(2). TCP的拥塞控制方法
- TCP 采用基于窗口的方法进行拥塞控制。该方法属于闭环控制方法。
- TCP发送方维持一个拥塞窗口 cwnd (Congestion Window)
- 发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量。
- 发送窗口大小不仅取决于接收方窗口,还取决于网络的拥塞状况,所以真正的发送窗口值为:真正的发送窗口值 = Min (接收方窗口值,拥塞窗口值)
控制拥塞窗口的原则
只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率。
但只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便缓解网络出现的拥塞。
拥塞的判断
四种拥塞控制算法( RFC 5681) :
慢开始 (slow-start)
拥塞避免 (congestion avoidance)
快重传 (fast retransmit)
快恢复 (fast recovery)
(3). 主动队列管理AQM
TCP 拥塞控制和网络层采取的策略有密切联系。
若路由器对某些分组的处理时间特别长,那么这就可能使这些分组中的TCP报文段经过很长时间才能到达终点,结果引起发送方超时,对这些报文段进行重传。
重传会使 TCP 连接的发送端认为在网络中发生了拥塞,但实际上网络并没有发生拥塞。
对 TCP 拥塞控制影响最大的就是路由器的分组丢弃策略。
“先进先出”FIFO 处理规则
路由器的队列通常都是按照“先进先出”FIFO (First In First Out) 的规则处理到来的分组。
当队列已满时,以后再到达的所有分组(如果能够继续排队,这些分组都将排在队列的尾部)将都被丢弃。这就叫做尾部丢弃策略 (tail-drop policy)。
路由器的尾部丢弃往往会导致一连串分组的丢失,这就使发送方出现超时重传,使 TCP 进入拥塞控制的慢开始状态,结果使 TCP 连接的发送方突然把数据的发送速率降低到很小的数值。
先进先出规则与尾部丢弃策略
全局同步
- 更为严重的是,在网络中通常有很多的 TCP 连接,这些连接中的报文段通常是复用在网络层的 IP 数据报中传送的。
- 在这种情况下,若发生了路由器中的尾部丢弃,就可能会同时影响到很多条 TCP 连接,结果使这许多 TCP 连接在同一时间突然都进入到慢开始状态。这在 TCP 的术语中称为全局同步 (global syncronization)。
- 全局同步使得全网的通信量突然下降了很多,而在网络恢复正常后,其通信量又突然增大很多。
主动队列管理AQM - 1998 年提出了主动队列管理 AQM (Active Queue Management)。
- 所谓“主动”就是不要等到路由器的队列长度已经达到最大值时才不得不丢弃后面到达的分组,而是在队列长度达到某个值得警惕的数值时(即当网络拥塞有了某些拥塞征兆时),就主动丢弃到达的分组。
- AQM 可以有不同实现方法,其中曾流行多年的就是随机早期检测 RED (Random Early Detection)。
随机早期检测 RED
RED 将路由器的到达队列划分成为三个区域:
多年的实践证明,RED 的使用效果并不太理想。
2015 年公布的 RFC 7567 已经把 RFC 2309 列为“陈旧的”,并且不再推荐使用 RED。
对路由器进行主动队列管理 AQM 仍是必要的。
AQM 实际上就是对路由器中的分组排队进行智能管理,而不是简单地把队列的尾部丢弃。
现在已经有几种不同的算法来代替旧的 RED,但都还在实验阶段。
9. TCP的运输连接管理
- TCP 是面向连接的协议。
- TCP 连接有三个阶段:
- 连接建立
- 数据传送
- 连接释放
- TCP 连接的管理就是使 TCP 连接的建立和释放都能正常地进行。
TCP 连接建立过程中要解决的三个问题
要使每一方能够确知对方的存在。
要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)。
能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
客户—服务器方式
TCP 连接的建立采用客户服务器方式。
主动发起连接建立的应用进程叫做客户 (client)。
被动等待连接建立的应用进程叫做服务器 (server)。
TCP的三次握手和四次挥手
(1). TCP的连接建立
(2). TCP的连接释放
(3). TCP的有限状态机
- 箭头旁边的字,表明引起这种变迁的原因,或表明发生状态变迁后又出现什么动作。
- 图中有三种不同的箭头。
- 粗实线箭头表示对客户进程的正常变迁。
- 粗虚线箭头表示对服务器进程的正常变迁。
- 细线箭头表示异常变迁。
第六章: 应用层
应用层协议的特点
- 每个应用层协议都是为了解决某一类应用问题,而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。应用层的具体内容就是规定应用进程在通信时所遵循的协议。
- 应用层的许多协议都是基于客户服务器方式。客户 (client) 和服务器 (server) 都是指通信中所涉及的两个应用进程。客户服务器方式所描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。
1. 域名系统DNS
(1). 域名系统概述
- 许多应用层软件经常直接使用域名系统 DNS (Domain Name System),但计算机的用户只是间接而不是直接使用域名系统。
- 互联网采用层次结构的命名树作为主机的名字,并使用分布式的域名系统 DNS。
- 名字到 IP 地址的解析是由若干个域名服务器程序完成的。域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。
(2). 互联网域名结构
- 互联网采用了层次树状结构的命名方法。
- 任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。
- 域名的结构由标号序列组成,各标号之间用点隔开:
… . 三级域名 . 二级域名 . 顶级域名 - 各标号分别代表不同级别的域名。
域名只是个逻辑概念
- 域名只是个逻辑概念,并不代表计算机所在的物理地点。
- 变长的域名和使用有助记忆的字符串,是为了便于人来使用。而 IP 地址是定长的 32 位二进制数字则非常便于机器进行处理。
- 域名中的“点”和点分十进制 IP 地址中的“点”并无一一对应的关系。点分十进制 IP 地址中一定是包含三个“点”,但每一个域名中“点”的数目则不一定正好是三个。
顶级域名 TLD (Top Level Domain)
国家顶级域名 nTLD,例如:
表示中国,
.us 表示美国,
.uk 表示英国,等等。
通用顶级域名 gTLD
最早的顶级域名是:
(公司和企业)
(网络服务机构
(非赢利性组织)
.edu(美国专用的教育机构)
.gov(美国专用的政府部门)
.mil(美国专用的军事部门)
.int(国际组织)
.aero (航空运输企业)
.biz (公司和企业)
.cat (加泰隆人的语言和文化团体)
.coop(合作团体)
.info (各种情况)
.jobs (人力资源管理者)
.mobi(移动产品与服务的用户和提供者)
.museum (博物馆)
.name(个人)
.pro (有证书的专业人员)
.travel(旅游业)
基础结构域名 (infrastructure domain)
这种顶级域名只有一个,即 arpa,
用于反向域名解析,因此又称为反向域名。
互联网的域名空间
(3). 域名服务器
一个服务器所负责管辖的(或有权限的)范围叫做区 (zone)。
各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。
每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射。
DNS 服务器的管辖范围不是以“域”为单位,而是以“区”为单位。
树状结构的 DNS 域名服务器
域名服务器有以下四种类型
根域名服务器
顶级域名服务器
权限域名服务器
本地域名服务器
根域名服务器
- 根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。
- 不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。
- 在互联网上共有 13 个不同 IP 地址的根域名服务器,它们的名字是用一个英文字母命名,从 a 一直到 m(前 13 个字母)。9美 2欧 1日本
顶级域名服务器
- 顶级域名服务器(即 TLD 服务器)负责管理在该顶级域名服务器注册的所有二级域名。
- 当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的 IP 地址)。
权限域名服务器
- 负责一个区的域名服务器。
- 当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。
本地域名服务器
- 本地域名服务器对域名系统非常重要。
- 当一个主机发出 DNS 查询请求时,这个查询请求报文就发送给本地域名服务器。
- 每一个互联网服务提供者 ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,
- 这种域名服务器有时也称为默认域名服务器。
提高域名服务器的可靠性
DNS 域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器,其他的是辅助域名服务器。
当主域名服务器出故障时,辅助域名服务器可以保证 DNS 的查询工作不会中断。
主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。
域名的解析过程
- 主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。
- 本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。
名字的高速缓存
- 每个域名服务器都维护一个高速缓存,存放最近用过的名字以及从何处获得名字映射信息的记录。
- 可大大减轻根域名服务器的负荷,使互联网上的 DNS 查询请求和回答报文的数量大为减少。
- 为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器,并处理超过合理时间的项(例如,每个项目只存放两天)。
- 当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。
2. 文件传输协议
(1). FTP概述
文件传送协议 FTP (File Transfer Protocol) 是互联网上使用得最广泛的文件传送协议。
FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。
FTP 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。
RFC 959 很早就成为了互联网的正式标准。
文件传送并非很简单的问题
网络环境中的一项基本应用就是将文件从一台计算机中复制到另一台可能相距很远的计算机中。
初看起来,在两个主机之间传送文件是很简单的事情。
其实这往往非常困难。原因是众多的计算机厂商研制出的文件系统多达数百种,且差别很大。
(2). FTP的基本工作原理
网络环境下复制文件的复杂性:
- 计算机存储数据的格式不同。
- 文件的目录结构和文件命名的规定不同。
- 对于相同的文件存取功能,操作系统使用的命令不同。
- 访问控制方法不同。
FTP特点
- 文件传送协议 FTP 只提供文件传送的一些基本的服务,它使用 TCP 可靠的运输服务。
- FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
- FTP 使用客户服务器方式。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。
主进程的工作步骤
打开熟知端口(端口号为 21),使客户进程能够连接上。
等待客户进程发出连接请求。
启动从属进程来处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行。
两个连接
- 控制连接在整个会话期间一直保持打开,FTP 客户发出的传送请求通过控制连接发送给服务器端的控制进程,但控制连接不用来传送文件。
- 实际用于传输文件的是“数据连接”。服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后就创建“数据传送进程”和“数据连接”,用来连接客户端和服务器端的数据传送进程。
- 数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行。
FTP 使用的两个 TCP 连接
两个不同的端口号
- 当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口 (21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。
- 接着,服务器进程用自己传送数据的熟知端口 (20) 与客户进程所提供的端口号码建立数据传送连接。
- 由于 FTP 使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱。
使用两个不同端口号的好处
使协议更加简单和更容易实现。
在传输文件时还可以利用控制连接(例如,客户发送请求终止传输)。
NFS 采用另一种思路
- NFS 允许应用进程打开一个远地文件,并能在该文件的某一个特定的位置上开始读写数据。
- NFS 可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件。
- 例如,计算机 A 的 NFS 客户软件,把要添加的数据和在文件后面写数据的请求一起发送到远地的计算机 B 的 NFS 服务器。NFS 服务器更新文件后返回应答信息。
NFS 在网络上传送的只是少量的修改数据
。
(3). 简单文件传送协议TFTP
TFTP (Trivial File Transfer Protocol) 是一个很小且易于实现的文件传送协议。
TFTP 使用客户服务器方式和使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。
TFTP 只支持文件传输而不支持交互。
TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。
TFTP 的主要特点
每次传送的数据 PDU 中有 512 字节的数据,但最后一次可不足 512 字节。
数据 PDU 也称为文件块 (block),每个块按序编号,从 1 开始。
支持 ASCII 码或二进制传送。
可对文件进行读或写。
使用很简单的首部。
TFTP 的工作很像停止等待协议
发送完一个文件块后就等待对方的确认,确认时应指明所确认的块编号。
发完数据后在规定时间内收不到确认就要重发数据 PDU。
发送确认 PDU 的一方若在规定时间内收不到下一个文件块,也要重发确认 PDU。这样就可保证文件的传送不致因某一个数据报的丢失而告失败。
开始工作时,TFTP 客户进程发送一个读请求 PDU 或写请求 PDU 给 TFTP 服务器进程,其熟知端口号码为 69。
TFTP 服务器进程要选择一个新的端口和 TFTP 客户进程进行通信。
若文件长度恰好为 512 字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只含首部而无数据的数据 PDU。
若文件长度不是 512 字节的整数倍,则最后传送数据 PDU 的数据字段一定不满 512 字节,这正好可作为文件结束的标志。
3. 远程终端协议TELNET
- TELNET 是一个简单的远程终端协议,也是互联网的正式标准。
- 用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远地的另一个主机上(使用主机名或 IP 地址)。
- TELNET 能将用户的击键传到远地主机,同时也能将远地主机的输出通过 TCP 连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。
客户 - 服务器方式
现在由于 PC 的功能越来越强,用户已较少使用 TELNET 了。
TELNET 也使用客户服务器方式。在本地系统运行 TELNET 客户进程,而在远地主机则运行 TELNET 服务器进程。
和 FTP 的情况相似,服务器中的主进程等待新的请求,并产生从属进程来处理每一个连接。
TELNET 使用网络虚拟终端 NVT 格式
网络虚拟终端 NVT 格式
客户软件把用户的击键和命令转换成 NVT 格式,并送交服务器。
服务器软件把收到的数据和命令,从 NVT 格式转换成远地系统所需的格式。
向用户返回数据时,服务器把远地系统的格式转换为 NVT 格式,本地客户再从 NVT 格式转换到本地系统所需的格式。
4. 万维网WWW
(1). 万维网概述
万维网 WWW (World Wide Web) 并非某种特殊的计算机网络。
万维网是一个大规模的、联机式的信息储藏所。
万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。
这种访问方式称为“链接”。
万维网提供分布式服务
超媒体与超文本
- 万维网是分布式超媒体 (hypermedia) 系统,它是超文本 (hypertext) 系统的扩充。
- 一个超文本由多个信息源链接成。利用一个链接可使用户找到另一个文档。这些文档可以位于世界上任何一个接在互联网上的超文本系统中。超文本是万维网的基础。
- 超媒体与超文本的区别是文档内容不同。超文本文档仅包含文本信息,而超媒体文档还包含其他表示方式的信息,如图形、图像、声
音、动画,甚至活动视频图像。
万维网的工作方式
万维网以客户 - 服务器方式工作。
浏览器就是在用户计算机上的万维网客户程序。万维网文档所驻留的计算机则运行服务器程序,因此这个计算机也称为万维网服务器。
客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。
在一个客户程序主窗口上显示出的万维网文档称为页面 (page)。
万维网必须解决的问题
(1) 怎样标志分布在整个互联网上的万维网文档?
使用统一资源定位符 URL (Uniform Resource Locator) 来标志万维网上的各种文档。
使每一个文档在整个互联网的范围内具有唯一的标识符 URL。
(2) 用何协议实现万维网上各种超链的链接?
在万维网客户程序与万维网服务器程序之间进行交互所使用的协议,是超文本传送协议 HTTP (HyperText Transfer Protocol)。
HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。
(3) 怎样使各种万维网文档都能在互联网上的各种计算机上显示出来,同时使用户清楚地知道在什么地方存在着超链?
超文本标记语言 HTML (HyperText Markup Language) 使得万维网页面的设计者可以很方便地用一个超链从本页面的某处链接到互联网上的任何一个万维网页面,并且能够在自己的计算机屏幕上将这些页面显示出来。
(4) 怎样使用户能够很方便地找到所需的信息?
为了在万维网上方便地查找信息,用户可使用各种的搜索工具(即搜索引擎)。
(2). 统一资源定位符URL
-1-. URL 的格式
资源定位符 URL 是对可以从互联网上得到的资源的位置和访问方法的一种简洁表示。
URL 给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位。
只要能够对资源定位,系统就可以对资源进行各种操作,如存取、更新、替换和查找其属性。
URL 相当于一个文件名在网络范围的扩展。因此 URL 是与互联网相连的机器上的任何可访问对象的一个指针。
URL 的一般形式
由以冒号隔开的两大部分组成,并且在 URL 中的字符对大写或小写没有要求。
URL 的一般形式是:
现在有些浏览器为了方便用户,在输入 URL 时,可以把最前面的“http://”甚至把主机名最前面的“www”省略,然后浏览器替用户把省略的字符添上。
例如,用户只要键入 ctrip,浏览器就自动把未键入的字符补齐,变成http://www.ctrip。
-2-. 使用 HTTP 的 URL
使用 HTTP 的 URL 的一般形式
(3). 超文本传送协议HTTP
-1-. HTTP 的操作过程
为了使超文本的链接能够高效率地完成,需要用 HTTP 协议来传送一切必须的信息。
从层次的角度看,HTTP 是面向事务的 (transaction-oriented) 应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
万维网的工作过程
- 每个万维网网点都有一个服务器进程,它不断地监听 TCP 的端口 80,以便发现是否有浏览器向它发出连接建立请求。
- 一旦监听到连接建立请求并建立了 TCP 连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。
- 最后,TCP 连接就被释放了。
- 在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则就是超文本传送协议 HTTP。
- HTTP 规定在 HTTP 客户与 HTTP 服务器之间的每次交互,都由一个 ASCII 码串构成的请求和一个类似的通用互联网扩充,即“类 MIME (MIME-like)”的响应组成。
- HTTP 报文通常都使用 TCP 连接传送。
用户浏览页面的两种方法
1,在浏览器的地址窗口中键入所要找的页面的 URL。
2,在某一个页面中用鼠标点击一个可选部分,这时浏览器会自动在互联网上找到所要链接的页面。
HTTP 的主要特点
HTTP 使用了面向连接的 TCP 作为运输层协议,保证了数据的可靠传输。
HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。
HTTP 是面向事务的客户服务器协议。
HTTP 1.0 协议是无状态的 (stateless)。
请求一个万维网文档所需的时间
持续连接
- HTTP/1.1 协议使用持续连接 (persistent connection)。
- 万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。
- 这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。
- 目前一些流行的浏览器(例如,IE 6.0)的默认设置就是使用 HTTP/1.1。
持续连接的两种工作方式
- 非流水线方式:客户在收到前一个响应后才能发出下一个请求。这比非持续连接的两倍 RTT 的开销节省了建立 TCP 连接所需的一个 RTT 时间。但服务器在发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源。
- 流水线方式:客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。使用流水线方式时,客户访问所有的对象只需花费一个 RTT时间,使 TCP 连接中的空闲时间减少,提高了下载文档效率。
-2-. 代理服务器
代理服务器 (proxy server) 又称为万维网高速缓存 (Web cache),它代表浏览器发出 HTTP 请求。
万维网高速缓存把最近的一些请求和响应暂存在本地磁盘中。
当与暂时存放的请求相同的新请求到达时,万维网高速缓存就把暂存的响应发送出去,而不需要按 URL 的地址再去互联网访问该资源。
使用高速缓存可减少访问互联网服务器的时延
使用高速缓存的情况
-3-. HTTP 的报文结构
HTTP 有两类报文:
- 请求报文——从客户向服务器发送请求报文。
- 响应报文——从服务器到客户的回答。
- 由于 HTTP 是面向正文的 (text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而每个字段的长度都是不确定的。
HTTP 的报文结构(请求报文)
- “方法”是面向对象技术中使用的专门名词。所谓“方法”就是对所请求的对象进行的操作,因此这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采用的方法决定的。
HTTP 请求报文的一些方法
- “URL”是所请求的资源的 URL。
- “版本”是 HTTP 的版本。
- 响应报文的开始行是状态行。
状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语。
状态码都是三位数字
1xx 表示通知信息的,如请求收到了或正在进行处理。
2xx 表示成功,如接受或知道了。
3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
4xx 表示客户的差错,如请求中有错误的语法或不能完成。
5xx 表示服务器的差错,如服务器失效无法完成请求。
-4-. 在服务器上存放用户的信息
万维网站点可以使用 Cookie 来跟踪用户。
Cookie 表示在 HTTP 服务器和客户之间传递的状态信息。
使用 Cookie 的网站服务器为用户产生一个唯一的识别码。利用此识别码,网站就能够跟踪该用户在该网站的活动。
(4). 万维网的文档
HTML CSS
(5). 万维网的信息检索系统
最著名的全文检索搜索引擎:
Google(谷歌)(www.google)
百度 (www.baidu)
最著名的分类目录搜索引擎:
雅虎 (www.yahoo)
雅虎中国 (cn.yahoo)
新浪 (www.sina)
搜狐 (www.sohu)
网易 (www.163)
5. 电子邮件
电子邮件 (e-mail):指使用电子设备交换的邮件及其方法。
电子邮件是互联网上使用得最多的和最受用户欢迎的一种应用。
优点:使用方便,传递迅速,费用低廉,可以传送多种类型的信息(包括:文字信息,声音和图像等)。
电子邮件的重要标准
简单邮件发送协议:SMTP
互联网文本报文格式
通用互联网邮件扩充 MIME
邮件读取协议:POP3 和 IMAP
电子邮件的组成:三个主要构件
6. 动态主机配置协议 DHCP
- 在协议软件中,给协议参数赋值的动作叫做协议配置。
- 一个协议软件在使用之前必须是已正确配置的。
- 连接到互联网的计算机的协议软件需要配置的参数包括:
- IP 地址
- 子网掩码
- 默认路由器的 IP 地址
- 域名服务器的 IP 地址
7. 简单网络管理协议SNMP
(1). 网络管理的基本概念
网络管理包括对硬件、软件和人力的使用、综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制,这样就能以合理的价格满足网络的一些需求,如实时运行性能,服务质量等。网络管理常简称为网管。
网络管理并不是指对网络进行行政上的管理。
8. 应用进程跨越网络的通信
(1). 系统调用与应用编程接口
大多数操作系统使用系统调用 (system call ) 的机制在应用程序和操作系统之间传递控制权。
对程序员来说,每一个系统调用和一般程序设计中的函数调用非常相似,只是系统调用是将控制权传递给了操作系统。
9. P2P应用
P2P 工作方式概述
P2P 工作方式受到广大网民的欢迎。
在 P2P 工作方式下,所有的音频/视频文件都是在普通的互联网用户之间传输。
这种工作方式解决了集中式媒体服务器可能出现的瓶颈问题。
在互联网流量中,P2P 工作方式下的文件分发已占据了最大的份额,比万维网应用所占的比例大得多。
本文标签: 计算机网络
版权声明:本文标题:1、计算机网络 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729002846h1305599.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论