计算机网络
第一章、概述
internet(互连网):局部范围之间连成的计算机网络
Internet(互联网,因特网):覆盖全球,数量极大的各种计算机网络互连起来
1.1 互联网的概述
计算机网络:由若干节点和连接这些节点的链路组成
主机:与网络相连的计算机
互联网的三阶段
-
第一阶段:从单个网络(ARPANET:1990关闭)向互联网发展的过程(1969-1983) 1983:Internet诞生(TCP/IP标准确立)
-
第二阶段:建成了三级结构的互联网:主干网,地区网,校园网(企业网)
-
第三阶段:逐渐形成了多层次ISP结构的网络(互联网服务提供者)
根据服务覆盖面积大小分为:主干ISP,地区ISP,本地ISP
1.2 互联网的组成
1.2.1 边缘部分
边缘部分:由所有连接在互联网上的主机组成(用户使用)
端系统:处在互联网边缘部分的所有主机(小到网络摄像头,大到单位计算机)
AB主机通信:AB上的两个进程通信
1.2.2 核心部分
核心部分:由大量网络和路由器组成,完成数据传输互联互通
核心作用:向网络边缘的大量主机提供数据传递功能
路由器:实现分组交换
1.电路交换
交换的含义:动态地分配传输资源
电路交换的三个阶段
- 建立连接:建立一条专用的物理通路,保证通信时不会被其他用户占用
- 通信:主叫和被叫实现互通
- 释放连接:释放刚才被占用的通信资源(物理通路)
特点:资源的独享性
缺点:计算机数据具有突发性,通用线路的利用率低
2.分组交换
分组交换:采用存储转发技术(存储->查表->转发)
-
在发送端将数据分割,加上首部进行分组
-
首部包含地址信息(包头)
-
在接收端还原报文(message)
-
节点交换机(路由器):解析地址信息,转发到下一个节点
-
到达接收端可能乱序
-
路由器先存储再转发
-
资源不具备独享性
分组交换的优点:
- 高效:在分组传输的过程中动态分配传输带宽,对通信链路是逐段占用。
- 灵活:为每一个分组独立地选择最合适的转发路由
- 迅速:以分组作为传送单位,可以不先建立连接就能向其他主机发送分组
- 可靠:保证可靠性的网络协议;分布式多路由的分组交换网,使网络有很好的生存性。
缺点:
- 分组在各结点存储转发时需要排队,这就会造成一定的时延。(内部消息队列的存在)
- 分组必须携带的首部(里面有必不可少的控制信息)也造成了一定的开销。
1.2.3 路由器
在路由器中的输入和输出端口之间没有直接连线。
路由器处理分组的过程是:
- 把收到的分组先放入缓存(暂时存储);
- 查找转发表,找出到某个目的地址应从哪个端口转发;
- 把分组送到适当的端口转发出去。
- 主机是为用户进行信息处理的,并向网络发送分组,从网络接收分组.
- 路由器对分组进存储转发,最后把分组交付目的主机。
1.2.4 三种交换的比较
- 若要连续传送大量的数据,且其传送时间远大于连接建立时间,则电路交换的传输速率较快。
- 报文交换和分组交换不需要预先分配传输带宽,在传送突发数据时可提高整个网络的信道利用率。
- 由于一个分组的长度往往远小于整个报文的长度,因此分组交换比报文交换的时延小,同时也具有更好的灵活性。
1.3 计算机网络的类别
1.3.1 计算机网络的定义
较好的定义:
计算机网络主要是由一些通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用
1.3.2 从网络的作用范围进行分类
- 广域网 WAN :作用范围通常为几十到几千公里。
- 城域网 MAN :作用距离约为5 ~ 50 公里。
- 局域网 LAN :局限在较小的范围(如 1 公里左右)。
- 个人区域网 PAN :范围很小,大约在10 米左右
若中央处理机之间的距离非常近(如仅1米的数量级甚至更小些),则一般就称之为多处理机系统,而不称它为计算机网络。
1.3.3 从网络的使用者进行分类
-
公用网 :按规定交纳费用的人都可以使用的网络。因此也可称为公众网。
-
专用网 :为特殊业务工作的需要而建造的网络。
公用网和专用网都可以传送多种业务。如传送的是计算机数据,则分别是公用计算机网络和专用计算机网络。
1.3.4 用户接入到互联网的网络
接入网 AN,它又称为本地接入网或居民接入网。
接入网是一类比较特殊的计算机网络,用于将用户接入互联网。
接入网本身_既_不属于互联网的核心部分,_也_不属于互联网的边缘部分。
接入网是从某个端系统到另一个端系统的路径中,由这个端系统到第一个路由器(也称为边缘路由器)之间的一些物理链路所组成的。
1.4 计算机网络的性能
速率,带宽,吞吐量,时延,时延带宽积,往返时间 RTT,利用率
(1) 速率
比特是计算机中数据量的单位,也是信息论中使用的信息量的单位。比特是1 或 0。
速率是计算机网络中最重要的一个性能指标,指的是数据的传送速率,它也称为数据率或比特率。
速率的单位是 bit/s,或 kbit/s、Mbit/s、 Gbit/s 等。例如 4X10^10 bit/s 的数据率就记为 40 Gbit/s。k=103
速率往往是指额定速率或标称速率,非实际运行速率。 MB,M=220,Mbit,M=106
(2) 带宽
两种不同意义:
- “带宽”本来是指信号具有的频带宽度,其单位是赫(或千赫、兆赫、吉赫等)。
- 在计算机网络中,带宽用来表示网络中某通道传送数据的能力。表示在单位时间内网络中的某信道所能通过的“最高数据率”。单位是 bit/s ,即 “比特每秒”。
在“带宽”的上述两种表述中,前者为频域称谓,而后者为时域称谓,其本质是相同的。也就是说,一条通信链路的“带宽”越宽,其所能传输的“最高数据率”也越高。
(3) 吞吐量
吞吐量 表示在单位时间内通过某个网络(或信道、接口)的数据量。
吞吐量更经常地用于对现实世界中的网络的一种测量,以便知道实际上到底有多、少数据量能够通过网络。
吞吐量受网络的带宽或网络的额定速率的限制,吞吐量的最大值是带宽
(4) 时延
时延是指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。有时也称为延迟或迟延。
网络中的时延由以下几个不同的部分组成:
-
发送时延(传输时延)
发送数据时,数据帧从结点进入到传输媒体所需要的时间。
也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。 -
传播时延
电磁波在信道中需要传播一定的距离而花费的时间。
发送时延与传播时延有本质上的不同。
信号发送速率和信号在信道上的传播速率是完全不同的概念。 -
处理时延
主机或路由器在收到分组时,为处理分组(例如分析首部、提取数据、差错检验或查找路由)所花费的时间
-
排队时延
分组在路由器输入输出队列中排队等待处理所经历的时延。
排队时延的长短往往取决于网络中当时的通信量。
总时延是四者之和
(5) 时延带宽积
(6) 往返时间 RTT
互联网上的信息不仅仅单方向传输,而是双向交互的。因此,有时很需要知道双向交互一次所需的时间。
往返时间表示从发送方发送数据开始,到发送方收到来自接收方的确认,总共经历的时间。
在互联网中,往返时间还包括各中间结点的处理时延、排队时延以及转发数据时的发送时延。
当使用卫星通信时,往返时间 RTT 相对较长,是很重要的一个性能指标。
(7) 利用率
分为信道利用率和网络利用率。
信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道的利用率是零。
网络利用率则是全网络的信道利用率的加权平均值。
信道利用率并非越高越好。当某信道的利用率增大时,该信道引起的时延也就迅速增加
1.5 计算机网络的体系结构(架构)
1.5.1 协议和划分层次
网络协议,简称为协议,是为进行网络中的数据交换而建立的规则、标准或约定。
网络协议的三个组成要素考:语法,语义,同步
- 语法:数据与控制信息的结构或格式 。
- 语义:需要发出何种控制信息,完成何种动作以及做出何种响应。
- 同步:事件实现顺序的详细说明。
协议的两种形式:
一种是使用便于人来阅读和理解的文字描述。
另一种是使用让计算机能够理解的程序代码。
ARPANET 的研制经验表明,对于非常复杂的计算机网络协议,其结构应该是层次式的。
通过网络发送文件:
1.两个主机交换文件
2.再设计一个通信服务模块
3.再设计一个网络接入模块
优点(具体见P30):
- 各层之间是独立的。
- 灵活性好。
- 结构上可分割开。
- 易于实现和维护。
- 能促进标准化工作。
缺点:
- 降低效率。
- 有些功能会在不同的层次中重复出现,因而产生了额外开销。
层数太少,就会使每一层的协议太复杂。
层数太多,又会在描述和综合各层功能的系统工程任务时遇到较多的困难。
计算机网络的体系结构是计算机网络的各层及其协议的集合。
体系结构就是这个计算机网络及其部件所应完成的功能的精确定义。
实现是遵循这种体系结构的前提下用何种硬件或软件完成这些功能的问题。
体系结构是抽象的,而实现则是具体的,是真正在运行的计算机硬件和软件。
1.5.2 具有五层的体系结构
(1) 应用层
应用层是体系结构的最高层。应用层的任务是通过应用之间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互规则。如(DNS,HTTP,SMTP)将应用层交互的数据单元称为报文。
应用层的具体内容就是精确定义上面的通信规则。具体来说,应用层协议应当定义:
- 应用进程交换的报文类型,如请求报文和响应报文
- 各种报文类型的语法,如报文中的各个字段及其详细描述
- 字段的语义,即包含在字段中的信息的含义。
- 进程何时、如何发送报文,以及对报文进行响应的规则。
应用层有什么功能?
- 文件传输、访问和管理
- 电子邮件
- 虚拟终端
- 查询服务和远程作业登录
- ……
(2) 运输层
运输层:通信的最高层
运输层的任务就是向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。
所谓通用的并不是针对某个网络应用,二十多种应用可以使用同一个运输层服务
运输层有分用和复用的功能。复用就是多个应用层进程可同时使用下面运输层的服务,分用与复用相反,是运输层把受得到的消息分别交付到上面应用层的相应进程
运输层主要使用两种协议:
- 传输控制协议TCP——提供面向连接的,可靠的数据传输服务,其传输的单位是报文段
- 用户数据报协议UDP——提供无连接的尽最大努力的数据传输服务(不保证可靠性),其数据传输的单位是用户数据报
● 运输层为应用进程之间提供端到端的逻辑通信
(但网络层是为主机之间提供逻辑通信) 。
● 运输层还要对收到的报文进行差错检测
。
(3) 网络层
网络层负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或数据报封装成分组或包进行传送。
在TCP/IP协议中,分组也叫IP数据报,或简称数据报。
无论哪一层的数据单元都可以笼统地用分组表示
网络层介于传输层和数据链路层之间,其主要作用是实现两个不同网络系统之间的数据透明传送,具体包括路由选择,拥塞控制和网际互连等。网络层负责在不同的网络之间(基于数据包的IP地址)尽力转发数据包,不负责丢包重传和接收顺序。
在网络体系中,每一层都是服务于对应的上下层的。网络层也是服务于上层的传输层和下层的数据链路层。
网络层的功能就是让我们在茫茫人海中,能够找到另一台计算机在哪里,是否属于同一个子网等
(4) 数据链路层
在两个相邻节点之间传输数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制消息(如同步信息,地址信息,差错控制等)
如果发现有差错,就丢弃,避免浪费资源
(5) 物理层
- 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流
- 物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么
OSI 参考模型把对等层次之间传送的数据单位称为该层的协议数据单元PDU 。这个名词现已被许多非 OSI 标准采用。
任何两个同样的层次把数据(即数据单元加上控制信息)通过水平虚线直接传递给对方。这就是所谓的“对等层”之间的通信。
各层协议实际上就是在各个对等层之间传递数据时的各项规定。
协议数据单元PDU是指对等层次之间传递的数据单位。协议数据单元物理层的PDU是数据位,数据链路层的PDU是数据帧,网络层的PDU是数据包,传输层的 PDU是数据段,其他更高层次的PDU是数据。
1.5.3 实体,协议,服务和服务访问点
- 实体表示任何可发送或接收信息的硬件或软件进程。
- 协议是控制两个对等实体进行通信的规则的集合。
-
在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。
-
要实现本层协议,还需要使用下层所提供的服务。
协议和服务概念不同:
- 协议的实现保证了能够向上一层提供服务。
- 本层的服务用户只能看见服务而无法看见下面的协议。即下面的协议对上面的服务用户是透明的。 (只能看见支持具体服务的服务)
- 协议是“水平的”,即协议是控制对等实体之间通信的规则。
- 服务是“垂直的”,即服务是由下层向上层通过层间接口提供的。
- 上层使用服务原语获得下层所提供的服务。
服务访问点:(上下层交互信息的接口)
同一系统相邻两层的实体进行交互的地方,称为服务访问点 SAP。
-
服务访问点SAP是一个抽象的概念,它实际上就是一个逻辑接口。
-
OSI把层与层之间交换的数据的单位称为服务数据单元 SDU 。
SDU 可以与 PDU 不一样,例如,可以是多个 SDU 合成为一个 PDU,也可以是一个 SDU 划分为几个 PDU。
pdu与sdu的区别:
-
SDU:服务数据单元,表示由上一层传递到本层还未被处理的数据。
-
PDU:协议数据单元,表示将本层SDU经过特定格式处理后将传递到下一层的数据。
简单的理解就是:
本层的PDU为下层的SDU;
本层的SDU为上层的PDU
(n+1的协议靠下层服务提供)
协议必须把所有不利的条件事先都估计到,而不能假定一切都是正常的和非常理想的。
看一个计算机网络协议是否正确,不能光看在正常情况下是否正确,还必须非常仔细地检查这个协议能否应付各种异常情况
协议举例:
没有一种协议能够使蓝军 100% 获胜。
这个例子告诉我们,看似非常简单的协议,设计起来要考虑的问题还是比较多的。
1.5.4 TCP/IP 的体系结构
路由器在转发分组时最高只用到网际层而没有使用运输层和应用层。
IP层:建立通信的路径
第二章、物理层
2.1 物理层的基本概念
物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。
物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。
用于物理层的协议也常称为物理层规程。
2.2 数据通信的基本知识
2.2.1 数据通信系统的模型
源系统:
- 源点(信源,源站):产生要传输的数据(汉字,比特流等)
- 发送器:源点生成的数字比特流经过发送器编码后才能在传输系统中传输(调制解调器)
目的系统:
- 接收器:接收传来的信号转换为能够处理的信号,还原比特流(解调器)
- 终点(目的站,信宿):接收设备(汉字在电脑上打出)
通信的目的是传送消息
几个概念:
-
数据 —— 运送消息的实体。
-
信号 —— 数据的电气的或电磁的表现。
-
模拟信号 —— 代表消息的参数的取值是连续的。
-
数字信号 —— 代表消息的参数的取值是离散的。
-
码元 —— 在使用时间域(或简称为时域)的波形表示数字信号时,代表不同离散数值的基本波形。
码元是数字信号,以0,1传送消息
2.2.2 信道的几个基本概念
-
信道 —— 一般用来表示向某一个方向传送信息的媒体。
-
单向通信(单工通信)——只能有一个方向的通信而没有反方向的交互。[bb机]
-
双向交替通信(半双工通信)——通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。[保安的喊话机]
-
双向同时通信(全双工通信)——通信的双方可以同时发送和接收信息。 [电话等等]
-
基带信号(即基本频带信号)—— 来自信源的信号。像计算机输出的代表各种文字或图像文件的数据信号都属于基带信号。
基带信号往往包含有较多的低频成分,甚至有直流成分,而许多信道并不能传输这种低频分量或直流分量。因此必须对基带信号进行调制 。
调制分为两大类:
- 基带调制:仅对基带信号的波形进行变换,使它能够与信道特性相适应。变换后的信号仍然是基带信号。把这种过程称为编码。
- 带通调制:使用载波进行调制,把基带信号的频率范围搬移到较高的频段,并转换为模拟信号,这样就能够更好地在模拟信道中传输(即仅在一段频率范围内能够通过信道)。[调幅,调频,调相]
(1) 编码
带通信号 :经过载波调制后的信号。
- 不归零制:正电平代表 1,负电平代表 0。
- 归零制:正脉冲代表 1,负脉冲代表 0。
- 曼彻斯特编码:位周期中心的向上跳变代表 0,位周期中心的向下跳变代表 1。但也可反过来定义。
- 差分曼彻斯特编码:在每一位的中心处始终都有跳变。位开始边界有跳变代表 0,而位开始边界没有跳变代表 1。
(2) 带通调制
基带信号往往包含有较多的低频成分,甚至有直流成分,而许多信道并不能传输这种低频分量或直流分量。对信号进行调制 。
最基本的二元制调制方法有以下几种:
- 调幅(AM):载波的振幅随基带数字信号而变化。
- 调频(FM):载波的频率随基带数字信号而变化。
- 调相(PM) :载波的初始相位随基带数字信号而变化(初始相位)
2.2.3 信道的极限容量
任何实际的信道都不是理想的,在传输信号时会产生各种失真以及带来多种干扰。
码元传输的速率越高,或信号传输的距离越远,或传输媒体质量越差,在信道的输出端的波形的失真就越严重。
带宽受限:传输材质决定(如铜)
从概念上讲,限制码元在信道上的传输速率的因素有以下两个:信道能够通过的频率范围,信噪比.
(1) 信道能通过的频率范围
具体的信道所能通过的频率范围总是有限的。信号中的许多高频分量往往不能通过信道。
1924 年,奈奎斯特就推导出了著名的奈氏准则。他给出了在假定的理想条件下,为了避免码间串扰,码元的传输速率的上限值
结论:在带宽为W(Hz)的低通信道中,若不考虑噪声影响,码元传输最高速率为2W(码元/秒),超过上限,就会出现严重的码间串扰问题,识别困难。例如,信道带宽为4000Hz,那么最高码元传输速率是每秒8000个码元。
如果信道越宽,能通过的信号高频分量越多,更高速率传送码元。
实际生活中都是有噪声的,必须知道信噪比
(2) 信噪比
1984年,香农用信息论的理论推导出了带宽受限且有高斯白噪声干扰的信道的极限、无差错的信息传输速率(香农公式)。
信噪比 ( d B ) = 10 l o g 10 ( S / N ) 信噪比(dB)=10log10(S/N) 信噪比(dB)=10log10(S/N)
信道的极限信息传输速率 C 可表达为:
C
=
W
l
o
g
2
(
1
+
S
/
N
)
(
b
i
t
/
s
)
C = W log2(1+S/N) (bit/s)
C=Wlog2(1+S/N)(bit/s)
其中:
W 为信道的带宽(以 Hz 为单位);
S 为信道内所传信号的平均功率;
N 为信道内部的高斯噪声功率。
香农公式表明:
-
信道的带宽或信道中的信噪比越大,则信息的极限传输速率就越高。
-
只要信息传输速率低于信道的极限信息传输速率,就一定可以找到某种办法来实现无差错的传输。
-
若信道带宽 W 或信噪比 S/N 没有上限(当然实际信道不可能是这样的),则信道的极限信息传输速率 C 也就没有上限。
-
实际信道上能够达到的信息传输速率要比香农的极限传输速率低不少。
注意:
对于频带宽度已确定的信道,如果信噪比不能再提高了,并且码元传输速率也达到了上限值,那么还有办法提高信息的传输速率。
这就是:用编码的方法让每一个码元携带更多比特的信息量。
假定基带信号为101011000110111010…
直接传送每一个码元携带的信息量是1bit,现将每3个bit编成码元即,101,011,000,110…3个bit有8种排列,18个码元的信号,用6个码元表示 。也就是说传输速率能提升到原来的8倍,但有时例如8bit传输信息,识别难度加大,不能简单的认为,为了提高速率,可以让一个码元表示任意多个bit
同时,奈氏准则和香农公式的意义不同,奈氏准则激励人员不段探索先进的编码技术,让一个码元携带更多信息。
香农公式告诉,无论何种先进的编码技术,在实际信道上,都不可能突破公式的极限值。
2.3 物理层下面的传输媒体
传输媒体可分为两大类,即导引型传输媒体和非导引型传输媒体。
2.3.1 导引型传输媒体
(1) 双绞线
越密,抗干扰越强,减少自身能量消失(减少I)
C
=
W
l
o
g
2
(
1
+
S
/
(
N
+
I
)
)
(
b
i
t
/
s
)
C = W log2(1+S/(N+I)) (bit/s)
C=Wlog2(1+S/(N+I))(bit/s)
最常用的传输媒体。模拟传输和数字传输都可以使用双绞线,其通信距离一般为几到十几公里。
屏蔽双绞线 STP:带金属屏蔽层
无屏蔽双绞线 UTP
方法:增加绞合度,增加屏蔽层
(2) 同轴电缆
同轴电缆具有很好的抗干扰特性,被广泛用于传输较高速率的数据。同轴电缆的带宽取决于电缆的质量。
同轴做到将I减到0
(3) 光缆
光纤是光纤通信的传输媒体。
由于可见光的频率非常高,约为108 MHz的量级,因此一个光纤通信系统的传输带宽远远大于目前其他各种传输媒体的带宽。
多模光纤
可以存在多条不同角度入射的光线在一条光纤中传输。这种光纤就称为多模光纤。
单模光纤
若光纤的直径减小到只有一个光的波长,则光纤就像一根波导那样,它可使光线一直向前传播,而不会产生多次反射。
(自看)优点:
- 通信容量非常大
- 传输损耗小,中继距离长。
- 抗雷电和电磁干扰性能好。
- 无串音干扰,保密性好。
- 体积小,重量轻。
2.3.2 非导引型传输媒体
将自由空间称为“非导引型传输媒体”。无线传输所使用的频段很广。
短波通信(即高频通信,不高)主要是靠电离层的反射,但短波信道的通信质量较差,传输速率低。
微波在空间主要是直线传播。(手机)
传统微波通信有两种方式:
- 地面微波接力通信
- 卫星通信
ISM(工业科学医药,wifi最后一段频谱)
2.4 信道复用技术
2.4.1 三个基本复用
复用是通信技术中的基本概念。它允许用户使用一个共享信道进行通信,降低成本,提高利用率。
(1) 频分复用 FDM
将整个带宽分为多份,用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。
频分复用的所有用户在同样的时间占用不同的带宽资源(请注意,这里的“带宽”是频率带宽而不是数据的发送速率)。
(2) 时分复用 TDM
时分复用则是将时间划分为一段段等长的时分复用帧(TDM 帧)。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙。
每一个用户所占用的时隙是周期性地出现(其周期就是 TDM 帧的长度)。
TDM 信号也称为等时信号。
时分复用的所有用户是在不同的时间占用同样的频带宽度。
使用时分复用系统传送计算机数据时,由于计算机数据的突发性质,用户对分配到的子信道的利用率一般是不高的。
(3) 统计时分复用 STDM
2.4.2 波分复用 WDM
例如:每一路的数据率为40Gbit/s.复用64路,获得2.56Tbit/s的数据率(64x2.64=40G)
2.4.3 码分复用 CDMA
常用的名词是码分多址 CDMA
各用户使用经过特殊挑选的不同码型,因此彼此不会造成干扰。
这种系统发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。 s/n,s>n扩频通信
2.5 数字传输系统
在早期电话网中,从市话局到用户电话机的用户线是采用最廉价的双绞线电缆,而长途干线采用的是频分复用 FDM 的模拟传输方式。
FDM不能传递数字信号
与模拟通信相比,数字通信无论是在传输质量上还是经济上都有明显的优势。
目前,长途干线大都采用时分复用 PCM 的数字传输方式。
**脉码调制 **PCM 体制最初是为了在电话局之间的中继线上传送多路的电话。对频率进行抽样
最初在数字传输系统使用的传输标准是脉冲编码调制(PCM)。现在使用同步光纤网SONET(美国标准)或同步数字系列SDH(国际标准)
速率标准不统一
由于历史上的原因,PCM 有两个互不兼容的国际标准:
-
北美的 24 路 PCM(简称为 T1)
-
欧洲的 30 路 PCM(简称为 E1)
我国采用的是欧洲的 E1 标准。
不是同步传输
在过去相当长的时间,为了节约经费,各国的数字网主要是采用准同步方式。
当数据传输的速率很高时,收发双方的时钟同步就成为很大的问题。 例如时分复用靠时间
解决方式:同步光纤网 SONET 的各级时钟都来自一个非常精确的主时钟。
第三章、数据链路层
3.1 点对点信道的数据链路层
查错
数据链路层使用的信道主要有以下两种类型:
-
点对点信道:这种信道使用一对一的点对点通信方式。
-
广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。
不是直接起点到终点
3.1.1 数据链路和帧
链路(物理链路):是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。
一条链路只是一条通路的一个组成部分。
数据链路(逻辑链路):除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。
一般的适配器都包括了数据链路层和物理层这两层的功能
在数据链路层,规程和协议是同义语。
3.1.2 三个基本问题
实现差错检测
数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题是:
- 封装成帧
- 透明传输
- 差错控制
(1) 封装成帧
封装成帧就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。
首部和尾部的一个重要作用就是进行帧定界。
帧定界可以使用特殊的帧定界符。控制字符 SOH放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT表示帧的结束。
MTU帧的数据最大长度:给网络层看的
(2) 透明传输
不能因为封装成帧带来额外的错误
如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地“找到帧的边界”。
解决方法:字节填充或字符填充。
发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC” (其十六进制编码是 1B)。
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
(3) 差错检测
逻辑运算,模2运算,逻辑运算
在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER。
误码率与信噪比有很大的关系。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC的检错技术。
先选择:
一个用于在接收端进行校验时,对接收的帧进行除法运算的除数首先把生成多项式转换成二进制数,由G(X) = X4 + X3 + 1可以知道它
一共是5位(总位数等于最高位的幂次加1,即4+1=5),然后根据多项式各项的含义(多项式只列出二进制值为1的位,也就是这个二进
制的第4位、第3位、第0位的二进制均为1,其它位均为0)很快就可得到它的二进制比特串为11001。
方法:
- 在发送端,先把数据划分为组。假定每组 k 个比特。
- 假设待传送的一组数据 M = 101001(现在 k = 6)。我们在 M 的后面再添加供差错检测用的 n 位冗余码一起发送。
- 用二进制的模 2 运算进行 2nxM 的运算,这相当于在 M 后面添加 n 个 0。
- 得到的 (k + n) 位的数除以事先选定好的长度为 (n + 1) 位的除数 P,得出商是 Q 而余数是 R,余数 R 比除数 P 少 1 位,即R 是 n 位。
- 将余数 R 作为冗余码拼接在数据 M 后面发送出去。
例:
- 现在 k = 6, M = 101001。
- 设 n = 3, 除数 P = 1101(事先约定)
- 被除数是 2nM = 1 0100 1000。
- 模 2 运算的结果是:商 Q = 11 0101,
- 余数 R = 001。
- 把余数 R 作为冗余码添加在数据 M 的后面发送出去。发送的数据是:2nM + R 即:101001001,共 (k + n) 位。
模二运算:0-0=0,1-1=0,0-1=1,1-0=1
发送端发送:
在数据后面添加上的冗余码称为帧检验序列 FCS。
接收端接收校验:
(1) 若得出的余数 R = 0,则判定这个帧没有差错,就接受。
(2) 若余数 R≠0,则判定这个帧有差错,就丢弃。
-
但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。
-
只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。
循环冗余检验 CRC 和帧检验序列 FCS 并不等同。
-
CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
-
FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。
仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受 。
“无差错接受”是指:凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错。
也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。
要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。
应当明确,“无比特差错”与“无传输差错”是不同的概念。
在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输。
本章介绍的数据链路层协议都不是可靠传输的协议。
传输错误:bit错误,帧错误
- 帧丢失:收1,3少了2
- 帧重复:1223,多了2
- 帧失序:收到321
OSI(可靠传输)在CRC上添加了:帧编号,确认,重传机制
3.2 点对点协议 PPP
3.2.1 PPP 协议的特点
对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP。
用户使用拨号电话线接入互联网时, 用户计算机和 ISP 进行通信时所使用的数据链路层协议就是 PPP 协议。
PPP实现的功能:
- 简单 —— 这是首要的要求。(不提供可靠传输,提供无差错传输)
- 封装成帧 —— 必须规定特殊的字符作为帧定界符。
- 透明性 —— 必须保证数据传输的透明性。
- 多种网络层协议 —— 能够在同一条物理链路上同时支持多种网络层协议。
- 多种类型链路 —— 能够在多种类型的链路上运行。
- 差错检测 —— 能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。
- 检测连接状态 —— 能够及时自动检测出链路是否处于正常工作状态。
- 最大传送单元 —— 必须对每一种类型的点对点链路设置最大传送单元 MTU 的标准默认值,促进各种实现之间的互操作性。
- 网络层地址协商 —— 必须提供一种机制使通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址。
- 数据压缩协商 —— 必须提供一种方法来协商使用数据压缩算法
不实现的功能:纠错 流量控制 序号 多点线路 半双工或单工链路
PPP 协议有三个组成部分:
- 一个将 IP 数据报封装到串行链路的方法。
- 链路控制协议 LCP。
- 网络控制协议 NCP。
3.2.2 PPP 协议的帧格式
PPP 帧的首部和尾部分别为 4 个字段和 2 个字段。
- 标志字段 F = 0x7E (符号“0x”表示后面的字符是用十六进制表示。十六进制的 7E 的二进制表示是 01111110)。
- 地址字段 A 只置为 0xFF。地址字段实际上并不起作用。
- 控制字段 C 通常置为 0x03。
PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。
PPP 有一个 2 个字节的协议字段。其值
- 若为 0x0021,则信息字段就是 IP 数据报。
- 若为 0x8021,则信息字段是网络控制数据。
- 若为 0xC021,则信息字段是 PPP 链路控制数据。
- 若为 0xC023,则信息字段是鉴别数据。
透明传输问题:
当 PPP 用在同步传输链路时,协议规定采用硬件来完成比特填充。 当 PPP 用在异步传输时,就使用一种特殊的字符填充法。
字符填充
- 将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列 (0x7D, 0x5E)。
- 若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列 (0x7D, 0x5D)。
- 若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变
零比特填充
PPP 协议用在 SONET/SDH 链路时,使用同步传输(一连串的比特连续传送)。这时 PPP 协议采用零比特填充方法来实现透明传输。
- 在发送端,只要发现有 5 个连续 1,则立即填入一个 0。
- 接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
PPP 协议之所以不使用序号和确认机制是出于以下的考虑:
- 在数据链路层出现差错的概率不大时,使用比较简单的 PPP 协议较为合理。
- 在因特网环境下,PPP 的信息字段放入的数据是 IP 数据报。数据链路层的可靠传输并不能够保证网络层的传输也是可靠的。
- 成本高,帧序号,重传确认机制
- 帧检验序列 FCS 字段可保证无差错接受。
3.3 使用广播信道的数据链路层
3.3.1 局域网的数据链路层
局域网最主要的特点是:
- 网络为一个单位所拥有;
- 地理范围和站点(主机🖥)数目均有限。
局域网具有如下主要优点:
- 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。
- 提高了系统的可靠性、可用性和残存性。
局域网拓扑结构:星形,总线,环形
媒体共享技术
- 静态划分信道:频分复用,时分复用,波分复用,码分复用
- 动态媒体接入控制(多点接入):1. 随机接入 2.受控接入:如多点线路探询,或轮询。
(1) 以太网的两个标准
DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约。
IEEE 802.3 是第一个 IEEE 的以太网标准。
DIX Ethernet V2 标准与 IEEE 的 802.3 标准只有很小的差别,因此可以将 802.3 局域网简称为“以太网”。
严格说来,“以太网”应当是指符合 DIX Ethernet V2 标准的局域网
数据链路层的两个子层 :
为了使数据链路层能更好地适应多种局域网标准,IEEE 802 委员会就将局域网的数据链路层拆成两个子层:
- 逻辑链路控制 LLC子层(逐渐消失);
- 媒体接入控制 MAC子层。
与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关。
不管采用何种协议的局域网,对 LLC 子层来说都是透明的。
(2) 适配器的作用
网络接口板又称为通信适配器或网络接口卡 NIC,或“网卡”。(网线和cpu之间)
适配器的重要功能:
- 进行串行(网线)/并行转换(CPU)。
- 对数据进行缓存。
- 在计算机的操作系统安装设备驱动程序。
- 实现以太网协议。
- 串行化封装成帧交给物理层,物理层在适配器实现,把信号变成01比特流
计算机通过适配器和局域网进行通信:
3.3.2 CSMA/CD 协议
最初的以太网是将许多计算机都连接到一根总线上。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件
总线上的每一个工作的计算机都能检测到 B 发送的数据信号。
由于只有计算机 D 的地址与数据帧首部写入的地址一致,因此只有 D 才接收这个数据帧。
其他所有的计算机(A, C 和 E)都检测到不是发送给它们的数据帧,因此就丢弃这个数据帧而不能够收下来。
在具有广播特性的总线上实现了一对一的通信。
为了通信的简便,以太网采取了两种重要的措施:
-
采用较为灵活的无连接的工作方式
- 不必先建立连接就可以直接发送数据。
- 对发送的数据帧不进行编号,也不要求对方发回确认。
这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的。 无差错接收
以太网提供的服务是不可靠的交付,即尽最大努力的交付。
当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。差错的纠正由高层来决定。
如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。 -
以太网发送的数据都使用曼彻斯特编码
曼彻斯特编码缺点是:它所占的频带宽度比原始的基带信号增加了一倍。
CSMA/CD协议(重点)
CSMA/CD 含义:载波监听多点接入 / 碰撞检测,主机进行在适配器进行载波监听
- “多点接入”表示许多计算机以多点接入的方式连接在一根总线上。
- “载波监听”指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,若有,则暂时不要发送数据,以免发生碰撞。
总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号
碰撞检测
“碰撞检测(CD)”就是计算机边发送数据边检测信道上的信号电压大小。
- 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。
- 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。
- 所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”。
检测到碰撞后:
在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。
每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段时间后再次发送。
为什么要进行碰撞检测?
由于电磁波在总线上的传播速率是有限的,当某个站监听到总线是空闲时,也可能总线并非真正是空闲的。
A 向 B 发出的信息,要经过一定的时间后才能传送到 B。
B 若在 A 发送的信息到达 B 之前发送自己的帧 (因为这时 B 的载波监听检测不到 A 所发送的信息),则必然要在某个时间和 A 发送的帧发生碰撞。
A需要单程传播时延的 2 倍的时间,才能检测到与 B 的发送产生了冲突
CSMA/CD 重要特性
使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。
每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。
争用期
最先发送数据帧的站,在发送数据帧后至多经过时间 2¢ (两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。
以太网的端到端往返时延 2¢ 称为争用期,或碰撞窗口。
经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
二进制指数类型退避算法
适配器不具有记忆性
发生碰撞的站在停止发送数据后,要推迟(退避)一个随机时间才能再发送数据。
-
10 Mbit/s 以太网取 51.2 μs 为争用期的长度。对于 10 Mbit/s 以太网,在争用期内可发送 512 bit,即 64 字节。这意味着:以太网在发送数据时,若前 64 字节没有发生冲突,则后续的数据就不会发生冲突。
-
从整数集合 [0, 1, … , (2k-1)] 中随机地取出一个数,记为 r。重传所需的时延就是 r 倍的基本退避时间。
k = M i n ( 重传次数 , 10 ) k=Min(重传次数,10) k=Min(重传次数,10) -
当重传达16次仍不能成功时即丢弃该帧,并向高层报告
最短有效帧长
如果发生冲突,就一定是在发送的前 64 字节之内。
由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节。
以太网规定了最短有效帧长为 64 字节,凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧。
强化碰撞
当发送数据的站一旦发现发生了碰撞时:
- 立即停止发送数据;
- 再继续发送若干比特的人为干扰信号 ,以便让所有用户都知道现在已经发生了碰撞
CSMA/CD协议的要点
- 准备发送。但在发送之前,必须先检测信道。
- 检测信道。若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在 96 比特时间内信道保持空闲(保证了帧间最小间隔),就发送这个帧。
- 检查碰撞。在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:
- 发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。发送完毕后,其他什么也不做。然后回到 (1)。
- 发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待 r 倍 512 比特时间后,返回到步骤 (2),继续检测信道。但若重传达 16 次仍不能成功,则停止重传而向上报错。
3.3.3 以太网的信道利用率
以太网总的信道利用率并不能达到 100%。
假设 ε 是以太网单程端到端传播时延。则争用期长度为 2ε,即端到端传播时延的两倍。
设帧长为 L (bit),数据发送速率为 C (bit/s),则帧的发送时间为 T0 = L/C (s)。
一个站在发送帧时出现了碰撞。经过一个争用期 2 ε 后,可能又出现了碰撞。这样经过若干个争用期后,一个站发送成功了。假定发送帧需要的时间是 T0。
注意到,成功发送一个帧需要占用信道的时间是 T0 + ε,比这个帧的发送时间要多一个单程端到端时延 ε。
这是因为当一个站发送完最后一个比特时,这个比特还要在以太网上传播。
在最极端的情况下,发送站在传输媒体的一端,而比特在媒体上传输到另一端所需的时间是 ε 。
参数α与利用率
要提高以太网的信道利用率,就必须减小 ε 与 T0 之比。
在以太网中定义了参数 α,它是以太网单程端到端时延 ε 与帧的发送时间 T0 之比:
α →0,表示一发生碰撞就立即可以检测出来, 并立即停止发送,因而信道利用率很高。
α 越大,表明争用期所占的比例增大,每发生一次碰撞就浪费许多信道资源,使得信道利用率明显降低。
对以太网参数 α 的要求
为提高利用率,以太网的参数a的值应当尽可能小些。
对以太网参数 α 的要求是:
-
当数据率一定时,以太网的连线的长度受到限制,否则 ε 的数值会太大。
-
以太网的帧长不能太短,否则 T0 的值会太小,使 α 值太大。
3.3.4 以太网的 MAC 层
(1) MAC层的硬件地址
在局域网中,硬件地址又称为物理地址,或 MAC 地址。
请注意,如果连接在局域网上的主机或路由器安装有多个适配器,那么这样的主机或路由器就有多个“地址”。更准确些说,这种 48 位“地址”应当是某个接口的标识符。
- IEEE 802 标准规定 MAC 地址字段可采用 6 字节 ( 48位) 或 2 字节 ( 16 位) 这两种中的一种。
- IEEE 的注册管理机构 RA 负责向厂家分配地址字段 6 个字节中的前三个字节 (即高位 24 位),称为组织唯一标识符。
- 地址字段 6 个字节中的后三个字节 (即低位 24 位) 由厂家自行指派,称为扩展唯一标识符,必须保证生产出的适配器没有重复地址。
适配器从网络上每收到一个 MAC 帧就首先用硬件检查 MAC 帧中的 MAC 地址。
- 如果是发往本站的帧则收下,然后再进行其他的处理。
- 否则就将此帧丢弃,不再进行其他的处理。
“发往本站的帧”包括以下三种帧:
- 单播帧(一对一)
- 广播帧(一对全体)
- 多播帧(一对多)
(2) MAC 帧的格式
常用的以太网 MAC 帧格式有两种标准 :
- DIX Ethernet V2 标准
- IEEE 的 802.3 标准
最常用的 MAC 帧是以太网 V2 的格式。
类型字段用来标志上一层使用的是什么协议,以便把收到的 MAC 帧的数据上交给上一层的这个协议。
数据字段的正式名称是 MAC 客户数据字段。最小长度 64 字节 - 18 字节的首部和尾部 = 数据字段的最小长度 (46字节)
检测电压大小来判断开始与结束
不存在透明传输问题(没有帧定界符)
无效的 MAC 帧
- 数据字段的长度与长度字段的值不一致;
- 帧的长度不是整数个字节;
- 用收到的帧检验序列 FCS 查出有差错;
- 数据字段的长度不在 46 ~ 1500 字节之间。
- 有效的 MAC 帧长度为 64 ~ 1518 字节之间。
对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧。
帧间最小间隔
- 帧间最小间隔为 9.6 μs,相当于 96 bit 的发送时间。
- 一个站在检测到总线开始空闲后,还要等待 9.6 μs 才能再次发送数据。
- 这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。
第四章、网络层
本章重点:
- 虚拟互连网络的概念
- IP 地址与物理地址的关系
- 传统的分类的 IP 地址(包括子网掩码)
- 路由选择协议的工作原理
如何让主机使用这个IP地址实现跨网络的通信,就是网络层的主要内容
4.1 网络层的几个重要概念
4.1.1 网络层提供的两种服务
在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。
争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
一种观点:让网络负责可靠交付
-
这种观点认为,应借助于电信网的成功经验,让网络负责可靠交付,计算机网络应模仿电信网络,使用面向连接的通信方式。
通信之前先建立虚电路VC(连接),以保证双方通信所需的一切网络资源。
如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
请注意,电路交换的电话通信是先建立了一条真正的连接。
因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。按序到达,可靠传输简单
另一种观点:网络提供数据报服务:
-
互联网的先驱者提出了一种崭新的网络设计思路。
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。- 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉。
- 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责可靠交付(包括差错处理、流量控制等) 。
- 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
4.1.2 网络层的两个层面
转发表由路由表导出,路由表又是由互联网中许多的路由器,按照选定的路由选择协议,通过许多次相互交换路由信息产生的。由此可见,在路由器之间传送的信息有两大类:
- 第一类是转发源主机和目的主机之间所传送的数据,把源主机发送的分组,像接力赛跑那样从一个路由器转发到下一个路由器,最后把分组传送到目的主机
- 第二类是传送路由信息,是根据路由协议所使用的路由算法,彼此不断的交换路由信息分组,目的是为了在路由器中创建路由表,并由此导出转发分组而用的转发表,这类信息是为第一类信息服务的
由此把网络层抽象的分为控制层面和数据层面
网络层分控制层面和数据层面,数据层面主要是负责转发,而控制层面负责路由选择。
数据层面:路由器根据本路由器生成的转发表,把收到的分组从查找到的对应接口转发出去。独立工作。采用硬件进行转发,快。
控制层面:根据路由选择协议所用的路由算法计算路由,创建出本路由器的路由表。许多路由器协同动作。采用软件计算,慢。
举个例子,我要从成都自驾去北京,那么高德地图就是我的控制层面,它告诉我怎么走;车就是我的转发层面,它把我带到那里。
4.2 网际协议 IP
4.2.1 虚拟互连网络
将网络互相连接起来要使用一些中间设备。
中间设备又称为中间系统或中继系统。
有以下五种不同的中间设备:
- 物理层中继系统:转发器 (repeater)。
- 数据链路层中继系统:网桥 或 桥接器 (bridge)。
- 网络层中继系统:路由器 (router)。
- 网桥和路由器的混合物:桥路器 (brouter)。
- 网络层以上的中继系统:网关 (gateway)。
ps:当中继系统是转发器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。
TCP/IP 体系在网络互连上的做法是在网络层(IP层)采用了统一的标准化协议
从效果上看,这些使用相同的网际协议IP进行互连的网络又构成了一个更大的通信网络,称为虚拟互连网络
如果我们只从网络层考虑问题,那么 IP 数据报就可以想象是在网络层中传送
4.2.2 分类的 IP 地址
IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。
IP 地址 ::= { <网络号>, <主机号>}
::= 代表“定义为”
网络类别 | 最大网络数 | 第一个可用的网络号 | 最后一个可用的网络号 | 每个网络中最大的主机数 |
---|---|---|---|---|
A | 126 (27 – 2) | 1 | 126 | 16,777,214(224 - 2) |
B | 16,383(214 - 1) | 128.1 | 191.255 | 65,534(216 - 2) |
C | 2,097,151 (221 - 1) | 192.0.1 | 223.255.255 | 254(28 - 2) |
分类的 IP 地址的优点和缺点
- 管理简单;使用方便;转发分组迅速;划分子网,灵活地使用。
- 设计上不合理:大地址块,浪费地址资源;即使采用划分子网的方法,也无法解决 IP 地址枯竭的问题。
无分类编址 CIDR
CIDR :无分类域间路由选择。
消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,可以更加有效地分配 IPv4 的地址空间,但无法解决 IP 地址枯竭的问题。
要点:
- 网络前缀
- 地址块
- 地址掩码
128.14.35.7/20 | 是 IP 地址,同时指明了网络前缀为 20 位。 该地址是 128.14.32.0/20 地址块中的一个地址。 |
---|---|
128.14.32.0/20 | 是包含有多个 IP 地址的地址块,同时也是这个地址块中主机号为全 0 的 IP 地址。 |
128.14.35.7 | 是 IP 地址,但未指明网络前缀长度,不知道其网络地址。 |
128.14.32.0 | 不能指明一个网络地址,因为无法知道网络前缀是多少。 |
默认地址掩码
网络前缀长度 | 点分十进制 | 包含的地址数 | 相当于包含分类的网络数 |
---|---|---|---|
/13 | 255.248.0.0 | 512 K | 8 个 B 类或 2048 个 C 类 |
/14 | 255.252.0.0 | 256 K | 4 个 B 类或 1024 个 C 类 |
/15 | 255.254.0.0 | 128 K | 2 个 B 类或 512 个 C 类 |
/16 | 255.255.0.0 | 64 K | 1 个 B 类或 256 个 C 类 |
/17 | 255.255.128.0 | 32 K | 128 个 C 类 |
/18 | 255.255.192.0 | 16 K | 64 个 C 类 |
/19 | 255.255.224.0 | 8 K | 32 个 C 类 |
/20 | 255.255.240.0 | 4 K | 16 个 C 类 |
/21 | 255.255.248.0 | 2 K | 8 个 C 类 |
/22 | 255.255.252.0 | 1 K | 4 个 C 类 |
/23 | 255.255.254.0 | 512 | 2 个 C 类 |
/24 | 255.255.255.0 | 256 | 1 个 C 类 |
/25 | 255.255.255.128 | 128 | 1/2 个 C 类 |
/26 | 255.255.255.192 | 64 | 1/4 个 C 类 |
/27 | 255.255.255.224 | 32 | 1/8 个 C 类 |
构造超网
每一个 CIDR 地址块中的地址数一定是 2 的整数次幂。
除最后几行外,CIDR 地址块都包含了多个 C 类地址(是一个 C 类地址的 2n 倍,n 是整数)。
因此在文献中有时称 CIDR 编址为“构造超网”。
路由聚合
网络前缀长度 | 点分十进制 | 说明 |
---|---|---|
/32 | 255.255.255.255 | 就是一个 IP 地址。这个特殊地址用于主机路由 |
/31 | 255.255.255.254 | 只有两个 IP 地址,其主机号分别为 0 和 1。 这个地址块用于点对点链路 |
/0 | 0.0.0.0 | 同时 IP 地址也是全 0,即 0.0.0.0/0。用于默认路由。 |
CIDR地址块划分举例
这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该 ISP 的路由器交换路由信息的每一个路由器的转发表中,需要有 64 行。采用地址聚合后,转发表中只需要用 1 行来指出到 206.0.64.0/18 地址块的下一跳。
在 ISP 内的路由器的转发表中,也仅需用 206.0.68.0/22 这 1 个项目,就能把外部发送到这个大学各系的所有分组,都转发到大学的路由器。
IP地址的特点:
-
每个 IP 地址都由网络前缀和主机号两部分组成。
IP 地址是一种分等级的地址结构。
方便了 IP 地址的分配和管理。
实现路由聚合,减小了转发表所占的存储空间,以及查找转发表的时间。 -
IP 地址是标志一台主机(或路由器)和一条链路的接口。
当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号必须是不同的。这种主机称为多归属主机
一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的 IP 地址。 -
转发器或交换机连接起来的若干个局域网仍为一个网络
按照互联网的观点,一个网络(或子网)是指具有相同网络前缀的主机的集合。
转发器或交换机连接起来的若干个局域网都具有同样的网络号,它们仍为一个网络。
具有不同网络号的局域网必须使用路由器进行互连。 -
在 IP 地址中,所有分配到网络前缀的网络都是平等的。
互联网同等对待每一个 IP 地址,不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网
- 同一个局域网上的主机或路由器的IP 地址中的网络号必须一样。
- 路由器的每一个接口都有一个不同网络号的 IP 地址。
- 两个路由器直接相连的接口处,可指明也可不指明 IP 地址。
如指明 IP 地址,则这一段连线就构成了一种只包含一段线路的特殊“网络” 。这种网络仅需两个 IP 地址,可以使用 /31 地址块。主机号可以是 0 或 1。
4.2.3 IP 地址与MAC地址
IP 地址与硬件地址是不同的地址。
MAC地址:
- 固化在网卡上的 ROM 中。
- 硬件地址、物理地址。
- 数据链路层使用。
- 放在 MAC 帧的首部。
IP地址:
- 虚拟地址、软件地址、逻辑地址。
- 网络层和以上各层使用。
- 放在 IP 数据报的首部。
IP 地址与硬件地址的作用范围:
-
IP 地址放在 IP 数据报的首部,而硬件地址则放在 MAC 帧的首部
-
IP数据报交给链路层后,成为数据帧的数据部分,因此在链路层看不到IP地址
-
只有当接收端的链路层将收到的数据帧里的数据(即IP数据报)交给上面的网络层之后,接收端才能看到IP地址,并根据这个地址,对IP数据报进行处理
从协议栈的层次上看数据的流动
从虚拟的 IP 层上看 IP 数据报的流动:
在链路上看 MAC 帧的流动
在 IP 层抽象的互联网上只能看到 IP 数据报。
图中的 IP1 → IP2 表示从源地址 IP1 到目的地址 IP2 。
两个路由器的 IP 地址并不出现在 IP 数据报的首部中。路由器只根据目的站的 IP 地址的网络号进行路由选择
在具体的物理网络的链路层只能看见 MAC 帧而看不见 IP 数据报
IP 层抽象的互联网屏蔽了下层很复杂的细节。在抽象的网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或主机和路由器之间的通信 。
4.2.4 地址解析协议 ARP
通信时使用了两个地址:
- IP 地址(网络层地址)
- MAC 地址(数据链路层地址)
地址解析协议 ARP 的作用:已经知道了一个机器(主机或路由器)的IP地址,如何找出其相应的硬件地址?
ARP协议的要点:
1、ARP进程在本局域网上广播发出一个ARP请求分组。ARP请求分组的组要内容是:“我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18 。我想知道IP地址为209.0.0.6 的主机的硬件地址。”
2、在本局域网上的所有主机上运行的ARP进程都收到此ARP的请求分组。
3、主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送响应分组,并在这个ARP相应分组中写入自己的硬件地址。由于其余的所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组。
4、主机A收到主机B的ARP相应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
ARP 作用:从网络层使用的 IP 地址,解析出在数据链路层使用的硬件地址。
地址解析协议 ARP 要点:
-
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
-
每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
-
当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。
- 如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
- 如没有, ARP 进程在本局域网上广播发送一个 ARP 请求分组。收到 ARP 响应分组后,将得到的 IP 地址到硬件地址的映射写入 ARP 高速缓存
ARP 高速缓存要点
-
- 存放 IP 地址到 MAC 地址的映射表。
- 映射表动态更新(新增或超时删除)。
IP 地址 MAC 地址 生存时间 (Age) 类型 其他 10.4.9.2 0030.7131.abfc 00:08:55 Dynamic 10.4.9.1 0000.0c07.ac24 00:02:55 Dynamic 10.4.9.99 0007.ebea.44d0 00:06:12 Dynamic 超过生存时间的项目都从高速缓存中删除,以适应网络适配器变化。
-
本局域网上广播发送 ARP 请求(路由器不转发 ARP 请求)。
ARP 请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。
单播 ARP 响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。
ARP 分组封装在以太网帧中传输。
ARP 高速缓存的作用
- 存放最近获得的 IP 地址到 MAC 地址的绑定,以减少 ARP 广播的数量。
- 为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。
- 当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。
应当注意的问题:
- ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
- 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
- 从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
- 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。
两台主机不在一个局域网:
使用 ARP 的四种典型情况
- 发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。
为什么要使用两种地址:IP 地址和 MAC 地址?
使用不同的 MAC 地址。MAC 地址之间的转换非常复杂。
对以太网 MAC 地址进行寻址也是极其困难的。
IP 编址把这个复杂问题解决了。
- 连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,即使必须多次调用 ARP
- 来找到 MAC 地址,但这个过程都是由计算机软件自动进行的,对用户来说是看不见的。
因此,在虚拟的 IP 网络上用 IP 地址进行通信非常方便。
4.2.5 IP 数据报的格式
-
IP 数据报由首部和数据两部分组成
-
首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
-
可选字段,其长度是可变的
-
版本——占 4 位,指 IP 协议的版本。目前的 IP 协议版本号为 4 (即 IPv4)。
-
首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节。(20-60)
-
区分服务——占 8 位,用来获得更好的服务。只有在使用区分服务时,这个字段才起作用。在一般的情况下都不使用这个字段
-
总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。
-
标识 ——占 16 位,它是一个计数器,用来产生 IP 数据报的标识。
-
标志 ——占 3 位,目前只有前两位有意义。
标志字段的最低位是 MF 。
MF=1 表示后面还有分片,MF=0 表示最后一个分片。
标志字段中间的一位是 DF 。
只有当 DF=0 时才允许分片。
-
片偏移——占 13 位,指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
p137
-
生存时间——占 8 位,记为 TTL (Time To Live),指示数据报在网络中可通过的路由器数的最大值。
-
协议——占 8 位,指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给那个处理过程
总长度 标识 MF DF 片偏移 原始数据报 3820 12345 0 0 0 数据报片1 1420 12345 1 0 0 数据报片2 1420 12345 1 0 175 数据报片3 1020 12345 0 0 350 协议名 ICMP IGMP IP TCP EGP IGP UDP IPv6 ESP AH ICMP-IPv6 OSPF 协议字段值 1 2 4 6 8 9 17 41 50 51 58 89 -
首部检验和——占 16 位,只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
数据报每经过一个路由器,路由器都要重新计算一下首部检验和
-
源地址和目的地址都各占 32 位。
可变部分
IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
长度可变:从 1 个字节到 40 个字节不等,取决于所选择的项目。
4的倍数
增加了 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的,增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。
4.3 互连网的路由选择协议
4.3.1 几个基本概念
路由算法分类(自适应)
静态路由选择策略:
- 非自适应路由选择;
- 不能及时适应网络状态的变化;
- 简单,开销较小。
动态路由选择策略:
- 自适应路由选择;
- 能较好地适应网络状态的变化;
- 实现较为复杂,开销较大。
路由算法分类(自适应)
互联网:
- 采用自适应的(即动态的)、分布式路由选择协议。
- 把整个互联网划分为许多较小的自治系统 AS,采用分层次的路由选择协议。
分为 2 个层次:
- 自治系统之间的路由选择 或 域间路由选择 ;
- 自治系统内部的路由选择 或 域内路由选择 ;
2 大类路由选择协议
内部网关协议 IGP
- 在一个自治系统内部使用的路由选择协议
- 常用:RIP,OSPF
外部网关协议 EGP
- 在不同自治系统之间进行路由选择时使用的协议
- 使用最多:BGP-4
4.3.2 内部网关协议 RIP
路由信息协议 RIP 是一种分布式的、基于距离向量的路由选择协议。
互联网的标准协议。
最大优点:简单。
要求网络中的每个路由器都要维护从它自己到其他每一个目的网络的距离记录。
RIP“距离”的定义
- 路由器到直接连接的网络的距离 = 1。
- 路由器到非直接连接的网络的距离 = 所经过的路由器数 + 1。
- RIP 协议中的“距离”也称为“跳数”,每经过一个路由器,跳数就加 1。
- 好路由 = “距离短”的路由。最佳路由 = “距离最短”的路由。
- 一条路径最多只能包含 15 个路由器。
- “距离”的最大值为 16 时即相当于不可达。
- RIP 不能在两个网络之间同时使用多条路由,只选择距离最短”的路由。
RIP 协议的三个特点(要素):
- 仅和相邻路由器交换信息
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按固定时间间隔交换路由信息,例如,每隔 30 秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息
路由表的建立
- 路由器在刚刚开始工作时,路由表是空的。
- 然后,得到直接连接的网络的距离(此距离定义为 1)。
- 之后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
- 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
- RIP 协议的收敛过程较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程。
路由表主要信息:
目的网络 | 距离(最短) | 下一跳地址 |
---|---|---|
路由表更新规则:使用距离向量算法找出到达每个目的网络的最短距离。
2. 距离向量算法
对每个相邻路由器(假设其地址为 X)发送过来的 RIP 报文,路由器:
(1) 修改 RIP 报文中的所有项目(即路由):把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。
(2) 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
若路由表中没有目的网络N,则把该项目添加到路由表中。否则
若路由表中网络 N 的下一跳路由器为 X,则用收到的项目替换原路由表中的项目。否则
若收到项目中的距离小于路由表中的距离,则用收到项目更新原路由表中的项目。否则
什么也不做。
(3) 若 3 分钟还未收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(表示不可达)。
(4) 返回。
RIP2 报文
组成:首部和路由 2 个部分。
路由部分:由若干个路由信息组成。每个路由信息共 20 个字节。
**地址族标识符(地址类别)**字段用来标志所使用的地址协议。
路由标记填入自治系统的号码。
后面为具体路由,指出某个网络地址、该网络的子网掩码、下一跳路由器地址以及到此网络的距离。
一个 RIP 报文最多可包括 25 个路由,因而 RIP 报文的最大长度是 4+20 x25=504 字节。如超过,必须再用一个 RIP 报文来传送。
RIP2 具有简单的鉴别功能。
RIP 协议特点:好消息传播得快,坏消息传播得慢。
问题:坏消息传播得慢(慢收敛)。
当网络出现故障时,要经过比较长的时间才能将此信息(坏消息)传送到所有的路由器。
正常情况:
错误情况:
这就是好消息传播得快,而坏消息传播得慢。这是 RIP 的一个主要缺点。
优点:
实现简单,开销较小。
缺点:
-
网络规模有限。最大距离为 15(16 表示不可达)。
-
交换的路由信息为完整路由表,开销较大。
-
坏消息传播得慢,收敛时间过长。
第五章、运输层
5.1 运输层协议概述
5.1.1 进程之间的通信
从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
严格地讲,两台主机进行通信就是两台主机中的应用进程互相通信。
从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。
网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。
这表明运输层有一个很重要的功能——复用和分用。
根据应用程序的不同需求,运输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP 。
当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。
当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道。
5.1.2 运输层的两个主要协议
TCP/IP 的运输层有两个主要协议:
-
用户数据报协议 UDP ,UDP 传送的数据单位协议是 UDP 报文或用户数据报。
UDP:一种无连接协议
- 提供无连接服务。
- 在传送数据之前不需要先建立连接。
- 传送的数据单位协议是 UDP 报文或用户数据报。
- 对方的运输层在收到 UDP 报文后,不需要给出任何确认。
- 虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。
-
传输控制协议 TCP ,TCP 传送的数据单位协议是 TCP 报文段。
TCP:一种面向连接的协议
- 提供面向连接的服务。
- 传送的数据单位协议是 TCP 报文段 。
- TCP 不提供广播或多播服务。
- 由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU 。
5.1.3 运输层的端口
运行在计算机中的进程是用进程标识符来标志的。
但运行在应用层的各种应用进程却不应当让计算机操作系统指派它的进程标识符。这是因为在互联网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符。
为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对 TCP/IP 体系的应用进程进行标志。
由于进程的创建和撤销都是动态的,发送方几乎无法识别其他机器上的进程。
有时我们会改换接收报文的进程,但并不需要通知所有发送方。
我们往往需要利用目的主机提供的功能来识别终点,而不需要知道实现这个功能的进程。
解决这个问题的方法就是在运输层使用协议端口号,或通常简称为端口 (port)。
虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由 TCP 来完成。
两个不同的概念。
- 在协议栈层间的抽象的协议端口是软件端口。
- 路由器或交换机上的端口是硬件端口。
硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
-
端口用一个 16 位端口号进行标志。
-
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
-
在互联网中,不同计算机的相同端口号是没有联系的。
由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的 IP 地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。
5.2 用户数据报协议 UDP
UDP 只在 IP 的数据报服务之上增加了很少一点的功能:
- 复用和分用的功能
- 差错检测的功能
虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。
- UDP 是无连接的,发送数据之前不需要建立连接,,因此减少了开销和发送数据之前的时延。
- UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
- UDP 是面向报文的。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP 一次交付一个完整的报文。
- UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很适合多媒体通信的要求。
- UDP 支持一对一、一对多、多对一和多对多的交互通信。
- UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。
发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。
接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
应用程序必须选择合适大小的报文。
- 若报文太长,UDP 把它交给 IP 层后,IP 层在传送时可能要进行分片,这会降低 IP 层的效率。
- 若报文太短,UDP 把它交给 IP 层后,会使 IP 数据报的首部的相对长度太大,这也降低了 IP 层的效率。
5.3 传输控制协议 TCP 概述
5.3.1 TCP 最主要的特点
TCP 是面向连接的运输层协议。
- 每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)。
- TCP 提供可靠交付的服务。
- TCP 提供全双工通信。
面向字节流
-
TCP 中的“流”(stream) 指的是流入或流出进程的字节序列。
-
“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。
TCP 不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。
但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
TCP 连接是一条虚连接而不是一条真正的物理连接。
TCP 对应用进程一次把多长的报文发送到 TCP 的缓存中是不关心的。
TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
TCP 可把太长的数据块划分短一些再传送。
TCP 也可等待积累有足够多的字节后再构成报文段发送出去。
5.3.2 TCP 的连接
TCP 把连接作为最基本的抽象。每一条 TCP 连接有两个端点。
TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字 (socket) 或插口。
端口号拼接到 IP 地址即构成了套接字。
TCP 连接就是由协议软件所提供的一种抽象。
TCP 连接的端点是个很抽象的套接字,即(IP 地址:端口号)。
同一个 IP 地址可以有多个不同的 TCP 连接。
同一个端口号也可以出现在多个不同的 TCP 连接中。
5.4 可靠传输的工作原理
理想的传输条件有以下两个特点:
-
传输信道不产生差错。
-
不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。
在这样的理想传输条件下,不需要采取任何措施就能够实现可靠传输。
然而实际的网络都不具备以上两个理想条件。必须使用一些可靠传输协议,在不可靠的传输信道实现可靠传输。
5.4.1 停止等待协议
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
1. 无差错情况
2. 出现差错
在接收方 B 会出现两种情况:
-
B 接收 M1 时检测出了差错,就丢弃 M1,其他什么也不做(不通知 A 收到有差错的分组)。
-
M1 在传输过程中丢失了,这时 B 当然什么都不知道,也什么都不做。
在这两种情况下,B 都不会发送任何信息。
如何保证 B 正确收到了 M1 呢?
解决方法:超时重传
-
A 为每一个已发送的分组都设置了一个超时计时器。
-
A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。
3. 确认丢失和确认迟到
确认丢失
若 B 所发送的对 M1 的确认丢失了,那么 A 在设定的超时重传时间内不能收到确认,但 A 并无法知道:是自己发送的分组出错、丢失了,或者 是 B 发送的确认丢失了。因此 A 在超时计时器到期后就要重传 M1。
假定 B 又收到了重传的分组 M1。这时 B 应采取两个行动:
-
丢弃这个重复的分组 M1,不向上层交付。
-
向 A 发送确认。不能认为已经发送过确认就不再发送,因为 A 之所以重传 M1 就表示 A 没有收到对 M1 的确认。
确认迟到
传输过程中没有出现差错,但 B 对分组 M1 的确认迟到了。
A 会收到重复的确认。对重复的确认的处理很简单:收下后就丢弃。
B 仍然会收到重复的 M1,并且同样要丢弃重复的 M1,并重传确认分组。
在发送完一个分组后,必须暂时保留已发送的分组的副本,以备重发。
分组和确认分组都必须进行编号。
超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些。
5.4.2 连续 ARQ 协议
滑动窗口协议
发送方维持的发送窗口,它的意义是:位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。这样,信道利用率就提高了。
连续 ARQ 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
-
优点:容易实现,即使确认丢失也不必重传。
-
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。
如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。
这就叫做 Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组。
可见当通信线路质量不好时,连续 ARQ 协议会带来负面的影响。
TCP 可靠通信的具体实现
- TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口。
- TCP 的可靠传输机制用字节的序号进行控制。TCP 所有的确认都是基于序号而不是基于报文段。
- TCP 两端的四个窗口经常处于动态变化之中。
- TCP连接的往返时间 RTT 也不是固定不变的。需要使用特定的算法估算较为合理的重传时间
5.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 —— 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
- 复位 RST —— 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
- 同步 SYN —— 同步 SYN = 1 表示这是一个连接请求或连接接受报文。
- 终止 FIN (FINish) —— 用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
- 窗口字段 —— 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。
5.6 TCP 可靠传输的实现
5.6.1 以字节为单位的滑动窗口
A 的发送窗口内的序号都已用完,但还没有再收到确认,必须停止发送。
发送缓存
发送方的应用进程把字节流写入 TCP 的发送缓存。
接收缓存
接收方的应用进程从 TCP 的接收缓存中读取字节流。
发送缓存用来暂时存放:
- 发送应用程序传送给发送方 TCP 准备发送的数据;
- TCP 已发送出但尚未收到确认的数据。
接收缓存用来暂时存放:
- 按序到达的、但尚未被接收应用程序读取的数据;
- 不按序到达的数据。
5.6.2 超时重传时间的选择
重传机制是 TCP 中最重要和最复杂的问题之一。
TCP 每发送一个报文段,就对这个报文段设置一次计时器。
只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。
由于 TCP 的下层是一个互联网环境,IP 数据报所选择的路由变化很大。因而运输层的往返时间 (RTT) 的方差也很大。
如果把超时重传时间设置得太短,就会引起很多报文段的不必要的重传,使网络负荷增大。
但若把超时重传时间设置得过长,则又使网络的空闲时间增大,降低了传输效率。
TCP 采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间 RTT。
加权平均往返时间
TCP 保留了 RTT 的一个加权平均往返时间 RTTS(这又称为平滑的往返时间)。
第一次测量到 RTT 样本时,RTTS 值就取为所测量到的 RTT 样本值。以后每测量到一个新的 RTT 样本,就按下式重新计算一次 RTTS:
式中,0<=α<1。若 α 很接近于零,表示 RTT 值更新较慢。若选择 α 接近于 1,则表示 RTT 值更新较快。
RFC 2988 推荐的 α 值为 1/8,即 0.125。
超时重传时间 RTO
RTO应略大于上面得出的加权平均往返时间 RTTS。
RFC 2988 建议使用下式计算 RTO:
RTTD 是 RTT 的偏差的加权平均值。
RFC 2988 建议这样计算RTTD。第一次测量时,RTTD值取为测量到的 RTT 样本值的一半。在以后的测量中,则使用下式计算加权平均的 RTTD:
β 是个小于 1 的系数,其推荐值是 1/4,即 0.25。
附加知识:
发送出一个报文段,设定的重传时间到了,还没有收到确认,于是重传报文段。经过了一段时间后,收到了确认报文段。现在的问题是:如何判定此确认报文段是对先发送的报文段的确认,还是对后来重传的报文段的确认?由于重传的报文段和原来的报文段完全一样,因此源主机在收到确认后,就无法做出正确的判断,而正确的判断对确定加权平均RTTs的值关系很大。
若收到的确认是对重传报文段的确认,但却被源主机当成是对原来的报文段的确认,则这样计算出的 RTTs和超时重传时间RTO就会偏大。若后面再发送的报文段又是经过重传后才收到确认报文段,则按此方法得出的超时重传时间RTO就越来越长。
同样,若收到的确认是对原来的报文段的确认,但被当成是对重传报文段的确认,则由此计算出的RTTs和 RTO 都会偏小。这就必然导致报文段过多地重传。这样就有可能使RTO越来越短。
根据以上所述,Karn提出了一个算法:在计算加权平均RTTs时,只要报文段重传了,就不采用其往返时间样本。这样得出的加权平均RTTS和RTO就较准确。
但是,这又引起新的问题。设想出现这样的情况:报文段的时延突然增大了很多。因此在原来得出的重传时间内不会收到确认报文段,于是就重传报文段。但根据Karn算法,不考虑重传的报文段的往返时间样本。这样,超时重传时间就无法更新。
因此要对Karn 算法进行修正。方法是:报文段每重传一次,就把超时重传时间RTO增大一些。典型的做法是取新的重传时间为旧的重传时间的2倍。当不再发生报文段的重传时,才根据上面给出的式(5-5)计算超时重传时间。实践证明,这种策略较为合理。
5.7 TCP 的流量控制
5.7.1 用滑动窗口实现流量控制
流量控制就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。
TCP的窗口单位是字节,不是报文段
死锁:
B 向 A 发送了零窗口的报文段后不久,B 的接收缓存又有了一些存储空间。于是 B 向 A 发送了 rwnd = 400 的报文段。
但这个报文段在传送过程中丢失了。A 一直等待收到 B 发送的非零窗口的通知,而 B 也一直等待 A 发送的数据。
如果没有其他措施,这种互相等待的死锁局面将一直延续下去。
为了解决这个问题,TCP 为每一个连接设有一个持续计时器 。
5.8 TCP 的拥塞控制
5.8.1 拥塞控制的一般原理
在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种现象称为拥塞 。
若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。
∑对资源需求 > 可用资源
增加资源不能解决拥塞,不但不能解决拥塞问题,而且还可能使网络的性能更坏。
如果一个路由器没有足够的缓存空间,它就会丢弃一些新到的分组。
但当分组被丢弃时,发送这一分组的源点就会重传这一分组,甚至可能还要重传多次。这样会引起更多的分组流入网络和被网络中的路由器丢弃。可见拥塞引起的重传并不会缓解网络的拥塞,反而会加剧网络的拥塞。
拥塞控制与流量控制的区别
- 拥塞控制就是防止过多的数据注入到网络中,使网络中的路由器或链路不致过载。
拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。
拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。 - 流量控制往往指点对点通信量的控制,是个端到端的问题(接收端控制发送端)。
流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
拥塞控制和流量控制之所以常常被弄混,是因为某些拥塞控制算法是向发送端发送控制报文,并告诉发送端,网络已出现麻烦,必须放慢发送速率。这点又和流量控制是很相似的。
当前网络正朝着高速化的方向发展,这很容易出现缓存不够大而造成分组的丢失。但分组的丢失是网络发生拥塞的征兆而不是原因。
- 开环控制方法就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。
- 闭环控制方法是基于反馈环路的概念。属于闭环控制的有以下几种措施:
(1) 监测网络系统以便检测到拥塞在何时、何处发生。
(2) 将拥塞发生的信息传送到可采取行动的地方。
(3) 调整网络系统的运行以解决出现的问题。
主要指标有:
- 由于缺少缓存空间而被丢弃的分组的百分数;
- 平均队列长度;
- 超时重传的分组数;
- 平均分组时延;
- 分组时延的标准差,等等。
上述这些指标的上升都标志着拥塞的增长。
5.8.2 TCP 的拥塞控制方法
TCP 采用基于窗口的方法进行拥塞控制。该方法属于闭环控制方法。TCP发送方维持一个拥塞窗口 CWND
拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。
发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量。
所以,发送窗口大小不仅取决于接收方公告的接收窗口,还取决于网络的拥塞状况,所以真正的发送窗口值为:
只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率。
但只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便缓解网络出现的拥塞。
拥塞的判断:重传定时器超时,只要出现了超时,就可以猜想网络可能出现了拥塞
TCP拥塞控制算法(四种):
- 慢开始
- 拥塞避免
- 快重传
- 快恢复
慢开始
用来确定网络的负载能力。
算法的思路:由小到大逐渐增大拥塞窗口数值。
初始拥塞窗口 cwnd 设置:
- 旧的规定:在刚刚开始发送报文段时,先把初始拥塞窗口cwnd 设置为 1 至 2 个发送方的最大报文段 SMSS 的数值。
- 新的 RFC 5681 把初始拥塞窗口 cwnd 设置为不超过2至4个SMSS 的数值。
慢开始门限 ssthresh(状态变量):防止拥塞窗口cwnd增长过大引起网络拥塞。
拥塞窗口 cwnd 控制方法:在每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个 SMSS 的数值。
其中 N 是原先未被确认的、但现在被刚收到的确认报文段所确认的字节数。当 N < SMSS 时,拥塞窗口每次的增加量要小于 SMSS。
用这样的方法逐步增大发送方的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。
慢在初始值的设计
慢开始门限 ssthresh 的用法如下:
- 当 cwnd < ssthresh 时,使用慢开始算法。
- 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
- 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。
拥塞避免算法
思路:让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长。
当网络出现拥塞时
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(重传定时器超时):
- ssthresh = max(cwnd/2,2)
- cwnd = 1
- 执行慢开始算法
这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕.
当拥塞窗口cwnd = 16时(图中的点4),出现了一个新的情况,就是发送方一连收到 3 个对同一个报文段的重复确认(图中记为3-ACK)。发送方改为执行快重传和快恢复算法。
快重传算法
采用快重传FR算法可以让发送方尽早知道发生了个别报文段的丢失。
快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传(即“快重传”),这样就不会出现超时,发送方也不就会误认为出现了网络拥塞。
使用快重传可以使整个网络的吞吐量提高约20%。
快恢复算法
当发送端收到连续三个重复的确认时,由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是执行快恢复FR算法
- 慢开始门限 ssthresh = 当前拥塞窗口 cwnd / 2 ;
- 新拥塞窗口 cwnd = 慢开始门限 ssthresh ;
- 开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大。
加法增大,乘法减小 (AIMD)
发送方的发送窗口的上限值应当取为接收方窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定:
在何时、何处发生。
(2) 将拥塞发生的信息传送到可采取行动的地方。
(3) 调整网络系统的运行以解决出现的问题。
主要指标有:
- 由于缺少缓存空间而被丢弃的分组的百分数;
- 平均队列长度;
- 超时重传的分组数;
- 平均分组时延;
- 分组时延的标准差,等等。
上述这些指标的上升都标志着拥塞的增长。
5.8.2 TCP 的拥塞控制方法
TCP 采用基于窗口的方法进行拥塞控制。该方法属于闭环控制方法。TCP发送方维持一个拥塞窗口 CWND
拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。
发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量。
所以,发送窗口大小不仅取决于接收方公告的接收窗口,还取决于网络的拥塞状况,所以真正的发送窗口值为:
只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率。
但只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便缓解网络出现的拥塞。
拥塞的判断:重传定时器超时,只要出现了超时,就可以猜想网络可能出现了拥塞
TCP拥塞控制算法(四种):
- 慢开始
- 拥塞避免
- 快重传
- 快恢复
慢开始
用来确定网络的负载能力。
算法的思路:由小到大逐渐增大拥塞窗口数值。
初始拥塞窗口 cwnd 设置:
- 旧的规定:在刚刚开始发送报文段时,先把初始拥塞窗口cwnd 设置为 1 至 2 个发送方的最大报文段 SMSS 的数值。
- 新的 RFC 5681 把初始拥塞窗口 cwnd 设置为不超过2至4个SMSS 的数值。
慢开始门限 ssthresh(状态变量):防止拥塞窗口cwnd增长过大引起网络拥塞。
拥塞窗口 cwnd 控制方法:在每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个 SMSS 的数值。
其中 N 是原先未被确认的、但现在被刚收到的确认报文段所确认的字节数。当 N < SMSS 时,拥塞窗口每次的增加量要小于 SMSS。
用这样的方法逐步增大发送方的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。
慢在初始值的设计
慢开始门限 ssthresh 的用法如下:
- 当 cwnd < ssthresh 时,使用慢开始算法。
- 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
- 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。
拥塞避免算法
思路:让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长。
当网络出现拥塞时
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(重传定时器超时):
- ssthresh = max(cwnd/2,2)
- cwnd = 1
- 执行慢开始算法
这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕.
当拥塞窗口cwnd = 16时(图中的点4),出现了一个新的情况,就是发送方一连收到 3 个对同一个报文段的重复确认(图中记为3-ACK)。发送方改为执行快重传和快恢复算法。
快重传算法
采用快重传FR算法可以让发送方尽早知道发生了个别报文段的丢失。
快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传(即“快重传”),这样就不会出现超时,发送方也不就会误认为出现了网络拥塞。
使用快重传可以使整个网络的吞吐量提高约20%。
快恢复算法
当发送端收到连续三个重复的确认时,由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是执行快恢复FR算法
- 慢开始门限 ssthresh = 当前拥塞窗口 cwnd / 2 ;
- 新拥塞窗口 cwnd = 慢开始门限 ssthresh ;
- 开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大。
加法增大,乘法减小 (AIMD)
发送方的发送窗口的上限值应当取为接收方窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定: