1.概述
1.1 计算机网络的定义
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路和通信设备连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
1.2 互联网的核心部分
(1)电路交换
从通信资源的分配角度来看,交换就是按照某种方式动态地分配传输线路的资源
这种必须经过“建立连接(占用通信资源)→通话(一直占用通信资源)→释放连接(归还通信资源)”三个步骤的交换方式称为电路交换
(2)分组交换
分组交换采用存储转发技术,表示把一个报文划分为几个分组后再进行传送。通常我们把要发送的整块数据称为一个报文,在发送报文之前,先把较长的报文划分为一个个更小的等长数据段,例如,每个数据段为1024bit。在每一个数据段前面,加上一些必要的控制信息组成的首部后,就构成了一个分组。分组又称为包,而分组的首部也可以称为包头。分组是在互联网中传送的数据单元。分组中的“首部”是非常重要的,正是由于分组的首部包含了诸如目的地址和源地址等重要控制信息,每一个分组才能在互联网中独立地选择传输路径,并被正确的交付到分组传输的终点。
分组交换的优点
1、高效,在分组传输的过程中动态分配传输带宽,对通信链路逐段占用
2、灵活,为每一个分组独立的选择最合适的转发路由
3、迅速,以分组作为传送单位,不先建立连接就能向其他主机发送分组
4、可靠,保证可靠性的网络协议;分布式多路由的分组交换网,使网络有很好的生存性
分组交换的缺点
1、分组在各路由器存储转发时需要排队,这就会造成一定的时延
2、由于分组交换不像电路交换那样通过建立连接来保证通信时所需的各种资源,因而无法确保通信时端到端所需的带宽
3、各分组必须携带的控制信息造成了一定的开销,整个分组交换网还需要专门的管理和控制机制
(3)三种交换的比较
若要连续传送大量的数据,且其传送时间远大于连接建立时间,则电路交换的传输速率较快。报文交换和分组交换不需要预先分配传输带宽,在传送突发数据是可提高整个网络的信道利用率。由于一个分组的长度往往远小于整个报文的长度,因此分组交换比报文交换的时延小,同时也具有更好的灵活性。注:从第四代蜂窝移动通信网开始,无论是话音通信还是数据通信,都要采用分组交换
1.3 计算机网络的性能
1.3.1 计算机网络的性能指标
1、速率
网络技术中的速率指的是数据的传送速率,它也被称为数据率或比特率。单位为bit/s。注意速率的单位换算,k=103,M=106,以此类推,另外要注意的是,当提到网络的速率时,往往指的是额定速率或标称速率而非网络实际运行的速率
2、带宽
(1)带宽本来是指某个信号具有的频带宽度。信号的带宽是指该信号所包含的各种不同频率成分所占据的频率范围。例如,在传统的通信线路上传送的电话信号的标准带宽是3.1kHz(从300Hz到3.4kHz,即话音的主要成分的频率范围)。这种意义的带宽的单位是赫。在过去的很长一段时间,通信的主干线路传送的是模拟信号(即连续变化的信号)因此,表示某信道允许通过的信号频带范围就称为该信道的带宽(或通频带)
(2)在计算机网络中,带宽用来表示网络中某通道传输数据的能力,因此网络带宽表示在单位时间内网络中某信道所能通过的“最高数据率”。这种意义的带宽的单位就是数据率的单位bit/s。
3、吞吐量
吞吐量表示在单位时间内通过某个网络(或信道、接口)的实际数据量。吞吐量更经常地用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。
4、时延
时延是指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。有时也称为延迟或迟延。网络中的时延是由以下几个不同的部分组成的:
(1)发送时延
发送时延是主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。因此发送时延也叫传输时延。发送时延的计算公式是:
发送时延
=
数据帧长度(
b
i
t
)
发送速率(
b
i
t
/
s
)
发送时延= \frac {数据帧长度(bit)}{ 发送速率(bit/s)}
发送时延=发送速率(bit/s)数据帧长度(bit)
(2)传播时延
传播时延是电磁波在信道中传播一定的距离需要花费的时间。传播时延的计算公式是:
传播时延
=
信道长度(
m
)
电磁波在信道上的传播速率(
m
/
s
)
传播时延=\frac{信道长度(m)}{电磁波在信道上的传播速率(m/s)}
传播时延=电磁波在信道上的传播速率(m/s)信道长度(m)
(3)处理时延
主机或路由器在收到分组时要花费一定的时间进行处理,例如分析分组的首部、从分组中提取数据部分、进行差错检验或查找转发表等,这就产生了处理时延。
(4)排队时延
分组在经过网络传输时,要经过许多路由器。但分组在进入路由器后要先在输入队列中排队等待处理。在路由器确定了转发接口后,还要在输出队列中排队等待转发。这就产生了排队时延。排队时延的长短往往取决于网络当时的通信量。当网络的通信量很大时会发生队列溢出,使分组丢失,这相当于排队时延为无穷大。
发送时延和传播时延的区别: 发送时延发生在机器内部的发送器中,与传输信道的长度(或信号传送的距离)没有任何关系。但传播时延则发生在机器外部的传输信道媒体上,而与信号的发送速率无关。信号传送的距离越远,传播时延就越大。
数据在网络中经历的总时延就是以上四种时延之和
总时延
=
发送时延
+
传播时延
+
处理时延
+
排队时延
总时延=发送时延+传播时延+处理时延+排队时延
总时延=发送时延+传播时延+处理时延+排队时延
5、时延带宽积
时延带宽积
=
传播时延
×
带宽
时延带宽积=传播时延×带宽
时延带宽积=传播时延×带宽
我们可以用圆柱形管道来表示时延带宽积,管道的长度是链路的传播时延(请注意,现在以时间作为单位来表示链路长度),而管道的截面积是链路的带宽。因此时延带宽积就表示这个管道的体积,表示这样的链路可容纳多少个比特。链路的时延带宽积又称为以比特为单位的链路长度
6、往返时间RTT
在许多情况下,互联网上的信息不仅仅单方向传输而是双向交互的。因此我们有时很需要知道双向交互一次所需的时间。例如,A向B发送数据。如果数据长度是100MB,发送速率是100Mbit/s,那么
发送时间
=
数据长度
发送速率
=
100
×
2
20
×
8
100
×
1
0
6
≈
8.39
发送时间=\frac{数据长度}{发送速率}=\frac{100×2^{20}×8}{100×10^6}≈8.39
发送时间=发送速率数据长度=100×106100×220×8≈8.39
假定B正确收完100MB的数据后,就立即向A发送确认。再假定A只有在收到B的确认信息后,才能继续向B发送数据。显然,这就要等待一个往返时间RTT(这里假定确认信息很短,可忽略B发送确认的发送时延)。如果RTT=2s,那么可以算出A向B发送数据的有效数据率。
有效数据率 = 数据长度 发送时间 + R T T = 100 × 2 20 × 8 8.39 + 2 ≈ 80.7 × 1 0 6 b i t / s ≈ 80.7 M b i t / s 有效数据率=\frac{数据长度}{发送时间+RTT}=\frac{100×2^{20}×8}{8.39+2}≈80.7×10^6bit/s≈80.7Mbit/s 有效数据率=发送时间+RTT数据长度=8.39+2100×220×8≈80.7×106bit/s≈80.7Mbit/s
比原来的数据率100Mbit/s小不少
在互联网中,往返时间还包括各中间节点的处理时延、排队时延以及转发数据时的发送时延。当使用卫星通信时,往返时间RTT相对较长,是很重要的性能指标。
7、利用率
利用率有信道利用率和网络利用率两种。信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道利用率是零。网络利用率则是全网络的信道利用率的加权平均值。信道利用率并非越高越好。这是因为,根据排队论的理论,当某信道的利用率增大时,该信道引起的时延也就迅速增加。信道利用率或网络利用率过高就会产生非常大的时延。
1.4计算机网络体系结构
1.4.1 具有五层协议的体系结构
OSI的七层协议体系结构,包含应用层、表示层、会话层、运输层、网络层、数据链路层、物理层。TCP/IP是一个四层的体系结构,它包含应用层、运输层、网际层和链路层(网络接口层)。综合OSI和TCP/IP的优点,采用五层协议的体系结构,它包括应用层、运输层、网络层、数据链路层、物理层
(1)应用层
应用层是体系结构中的最高层。应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则。这里的进程就是指主机中正在运行的程序。对于不同的网络应用需要有不同的应用层协议。互联网中应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议、支持电子邮件的SMTP协议等等,我们把应用层交互的数据单元称为报文。
(2)运输层
运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。所谓的“通用的”,是指并不针对某个特定网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。
运输层主要使用以下协议:
传输控制协议TCP—提供面向连接的、可靠的数据传输服务,其数据传输的单位是报文段
用户数据报协议UDP—提供无连接的尽最大努力的数据传输服务(不保证数据传输的可靠性),其数据传输的单位是用户数据报
(3)网络层
网络层负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系,由于网络层使用IP协议,因此分组也叫作IP数据报,或简称为数据报。
请注意:不要将运输层的“用户数据报协议UDP”和网络层的“IP数据报”弄混,此外,无论在哪一层传送的数据单元,都可笼统地用“分组”来表示。
网络层的具体任务有两个。第一个任务是通过一定的算法,在互联网中的每一个路由器上生成一个用来转发分组的转发表。第二个任务较为简单,就是每一个路由器在接收到一个分组时,依据转发表中指明的路径把分组转发到下一路由器。这样就可以使源主机运输层所传下来的分组,能够通过合适的路由最终到达目的主机。
互联网是由大量的异构网络通过路由器相互连接起来的。互联网使用的网络层协议是无连接的网际协议IP和许多中路由选择协议,因此互联网的网络层也叫作网际层或IP层。
(4)数据链路层
数据链路层简称为链路层。我们知道,两台主机间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)
控制信息的作用
① 在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束,这样,数据链路层在收到一个帧后,就可从中提取出部分数据,上交给网络层。
② 控制信息还使接收端能够检测到所收到的帧中有无差错。如发现有差错,数据链路层就简单地丢弃这个出了差错的帧,以免继续在网络中传送下去白白浪费网络资源。如果需要改正数据在数据链路层传输时出现的差错(这就是说,数据链路层不仅要检错,而且要纠错),那么就要采用可靠的传输协议来纠正出现的差错。这种方法会使数据链路层的协议复杂些。
(5)物理层
在物理层上所传数据的单位是比特。发送方发送1(或0)时,接收方应当收到1(或0)而不是0(或1)。因此物理层要考虑用多大的电压代表“1”或“0”,以及接收方如何识别出发送方发送的比特。物理层还要确定连接电缆的插头应当有多少根引脚以及各引脚应如何连接。请注意,传递信息所利用的一些物理传输媒体,如双绞线、同轴电缆、光缆、无线信道等,并不在物理层协议之内,而是在物理层协议的下面。因此也有人把物理层下面的物理传输媒体当作第0层。
该图为应用进程的数据在各层之间的传递过程中所经历的变化。为简单起见,假定两台主机通过一台路由器连接起来。
假定主机1的应用进程AP1向主机2的应用进程AP2传送数据。AP1先将其数据交给本主机的第5层(应用层)。第5层加上必要的控制信息 H5 就变成了下一层的数据单元。第4层(运输层)收到这个数据单元后,加上本层的控制信息H4,再交给第3层(网络层),成为第3层的数据单元。依此类推。不过到了第2层数据链路层之后,控制信息被分成了两部分,分别加到本层数据单元的首部(H2)和尾部(T2);而第1层(物理层)由于是比特流的传送,所以不再加上控制信息。请注意,传送比特流时应从首部开始传送。
当这一串的比特流离开主机1经网络的物理传输媒体传送到路由器时,就从路由器的第1层依次上升到第3层。每一层都根据控制信息进行必要的操作,然后将控制信息剥去,将该层剩下的数据单元交给更高的一层,当分组上升到了第3层网络层时,就根据首部中的目的地址查找路由器中的转发表,找出转发分组的接口,然后往下传送到第2层,加上新的首部和尾部后,再到最下面的第1层,然后在物理传输媒体上把每一个比特发送出去。
当这一串的比特流离开路由器到达目的站主机2时,就从主机2的第1层按照上面讲过的方式,依次上升到第5层。最后把应用进程AP1发送的数据交给目的站的应用进程AP2。
2.数据链路层
2.1数据链路层的几个共同问题
2.1.1三个基本问题
(1)封装成帧
封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。网络层的分组(IP数据报)传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,构成了一个完整的帧。这样的帧就是数据链路层的数据传送单元。每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传输单元MTU(Maximum Transfer Unit),如图所示,给出了帧的首部和尾部的位置以及帧的数据部分与MTU的关系。
(2)透明传输
由于帧的开始和结束的标记使用专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误
当传送的帧是文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。
但当数据部分是非ASCCI码的文本文件时(如二进制代码的计算机程序或图像等),情况就不同了。如果数据中的某个字节的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层就会错误地“找到帧的边界”,把部分帧收下(误以为是个完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制字符SOH)。如下图所示
我们可以通过字节填充或字符填充来解决透明传输问题,具体的方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B,二进制是00011011)。而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。如果转义字符也出现在数据当中,那么解决办法仍然是在转义字符的前面插入一个转义字符。如下图所示
(3)差错检测
现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这就叫作比特差错。比特差错是传输差错中的一种。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。例如,误码率为10-10时,表示每传送1010个比特就会出现一个比特的差错。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。
关于循环冗余检验CRC可以直接看到以下例题1:
例题1解答:
这个余数1110作为冗余码拼接在数据后面发送出去。这种为了进行检错而添加的冗余码常称为帧检验序列FCS(Frame Check Sequence)。如果改变了数据,则用相同的方法,将添加了冗余码的数据除以之前的除数,同样是作异或运算,若是最后的结果不为0,则说明发现了数据的改变。
2.2 以太网
2.2.1 以太网的MAC层
在局域网中,硬件地址又称为物理地址或MAC地址(因为这种地址在MAC帧中)
常见的MAC帧有两种格式,一种是DIX Ethernet V2标准(即以太网V2标准),另外一种是IEEE的802.3标准。本文简单介绍一下以太网V2的MAC帧格式(如下图所示)。图中假定网络层使用的是IP协议。
以太网V2的MAC帧较为简单,由五个字段组成。前两个字段分别为6字节长的目的地址和源地址字段。第三个字段是2字节的类型字段,用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。例如,当类型字段的值是0x0800时,就表示上层使用的是IP数据报。第四个字段是数据字段,其长度在46到1500字节之间(46字节是这样得出的:最小长度64字节减去18字节的首部(目的地址、源地址、类型)和尾部(FCS)就得出数据字段的最小长度)。最后一个字段是4字节的帧检验序列FCS(使用CRC检验)。当传输媒体的误码率为1×10-8时,MAC子层可使未检测到的差错小于1×10-14。FCS检验的范围就是整个MAC帧,从目的地址开始到FCS为止的这五个字段,但不包括物理层插入的8字节的前同步码和帧开始定界符。
2.2.2 以太网交换机
扩展以太网常用的方法是在数据链路层进行的。最初人们使用的是网桥(bridge)。网桥对对收到的帧根据其MAC地址帧的目的地址进行转发和过滤。当网桥收到一个帧时,并不是向所有的端口转发此帧,而是根据此帧的目的MAC地址,查找网桥中的地址表,然后确定将该帧转发到哪一个端口,或者时把它丢弃(即过滤)。1990年问世的交换式集线器(switching hub),很快就淘汰了网桥。交换式集线器常称为以太网交换机或第二层交换机,强调这种交换机工作在数据链路层。
以太网交换机实质上就是一个多端口的网桥,通常都有十几个或者更多的端口,和工作在物理层的转发器、集线器有很大的差别。以太网交换机的每个端口都直接与一个单台主机或另外一个以太网相连,并且一般都工作在全双工方式。以太网交换机还具有并行性,即能同时连通多对端口,使多对主机能同时通信(而网桥只能一次分析和转发一个帧)。相互通信的主机都独占传输媒体,无碰撞地传输数据。换句话说,每一个端口和连接到端口的主机构成了一个碰撞域,具有N个端口的以太网交换机的碰撞域共有N个。
以太网交换机的端口还有存储器,能在输出端口繁忙时把到来的帧进行缓存。因此,如果连接在以太网交换机上的两台主机,同时向另一台主机发送帧,那么当这台主机的端口繁忙时,发送帧的这两台主机的端口会把收到的帧暂存一下,以后再发送出去。
以太网交换机是一种即插即用设备,其内部的帧交换表(又称为地址表)是通过自学习算法自动地逐渐建立起来的。实际上,这种交换表就是一个内容可寻址存储器CAM(Content Addressable Memory)。以太网交换机由于使用了专用的交换结构芯片,用硬件转发收到的帧,其转发速率要比使用软件转发的网桥转发快很多。
关于以太网交换机自学习可以直接看到以下例题2:
例题2解答:
以上是一个单交换机的题,当某台主机向另外一台主机发送帧时,则会写入发送主机的地址和接口。当A发送帧给D的时候,交换表会写入(A,1),A是地址,1为接口,因为刚开始交换表是空的,没有D的地址,所以交换机不知道应该向何接口转发帧;当D发送帧给A时,交换表会写入(D,4),然后向A转发帧,因为交换表知道A连接在接口1上;同理,当E发送帧给A时,交换表会写入(E,5),然后向A转发帧;当A发送帧给E时,更新(A,1)的有效时间(这里还没懂有效时间是啥),向E转发帧。
5.运输层
5.1 TCP的拥塞控制方法
TCP的控制方法有四种,即慢开始,拥塞避免,快重传和快恢复。我们假定
(1)数据是单方向传输的,对方只传送确认报文
(2)接收方总是有足够大的缓存空间,因而发送窗口的大小有网络的拥塞程度来决定
拥塞控制也叫基于窗口的拥塞控制。为此,发送方维持一个叫作拥塞窗口cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且是动态变化着的。发送方让自己的发送窗口等于拥塞窗口。根据假定,对方的接收窗口足够大,发送方发送在发送数据时,只考虑发送方的拥塞窗口。
发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率。但只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便缓解网络出现的拥塞。
当网络发生拥塞时,路由器就要把来不及处理而排不上队的分组丢弃。因此只要发送方没有按时收到对方的确认报文,也就是说,只要出现了超时,就可以估计可能在网络某处出现了拥塞。现在通信线路的传输质量一般都很好,因传输差错而丢弃分组的概率是很小的(远小于1%)。因此发送方在超时重传计时器启动时,就判断网络出现了拥塞。
5.1.1 慢开始
慢开始算法的思路是这样的:当主机在已建立连接的TCP上开始发送数据时,并不清楚网络当前的负荷情况。如果把大量的数据字节注入到网络,那么就有可能引起网络发生拥塞。经验证明,较好的方法是先探测一下,即由小到大逐渐增大注入到网络的数据字节,也就是说,由小到大逐渐增大拥塞控制窗口数值。
具体而言,虽然实际上是TCP用字节数作为窗口大小的单位,但为方便起见,我们用报文段的个数作为窗口大小的单位。在一开始发送方先设置cwdn=1,发送第一个报文段,接收方收到后就发送确认。慢开始算法规定,发送方每收到一个对新报文段的确认(对重传的确认不算在内),就把发送方的拥塞窗口加1。因此,经过一个往返时延RTT后,发送方就增大拥塞窗口,使cwnd = 2,即发送方现在可连续发送两个报文段。接收方收到着两个报文段后,先后发回两个确认。现在发送方收到两个确认,根据慢开始算法,拥塞窗口就应加2,使拥塞窗口从cwnd = 2增加到cwnd = 4,即可连续发送4个报文段。发送方收到这4个确认后,就可以把拥塞窗口再加4,使cwdn = 8。
为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。
当 cwnd < ssthresh 时,使用上述的慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。
5.1.2 拥塞避免
拥塞避免算法的目的是让拥塞窗口cwnd缓慢地增大。执行算法的结果大约是这样的:每经过一个往返时间RTT,发送方的拥塞窗口cwnd的大小就加1,而不是像慢开始阶段那样加倍的增长。因此在拥塞避免阶段就称为“加法增大”AI(Additive Increase),表明在拥塞避免阶段,拥塞窗口cwnd 按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。
5.1.3 快重传
采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。如图所示,接收方收到了M1和M2后都分别及时发出了确认。现假定接收方没有收到M3但却收到了M4。按照快重传算法,接收方必须立即发送对M2的重复确认,以便让发送方及早知道接收方没有收到报文段M3。发送方接着发送M5和M6。接收方收到后也仍要再次分别发出对M2的重复确认。这样,发送方共收到了接收方的4个对M2的确认,其中后3个都是重复确认。快重传算法规定,发送方只要一连收到3个重复确认,就可知道现在并未出现网络拥塞,而只是接收方少收到一个报文段M3,因而立即进行重传M3(即“快重传”)
5.1.4 快恢复
有时,个别报文段会在网络中意外丢失,但实际上网络并未发生拥塞。如果发送方迟迟收不到确认,就会产生超时,并误认为网络发生了拥塞。这就导致发送方错误地启动慢开始,把拥塞窗口cwnd又设置为1,因而不必要地降低了传输效率。
因此在下图中的点4,发送方知道现在只是丢失了个别的报文段。于是不启动慢开始,而是执行快恢复算法,这时,发送方第2次调整门限值,使ssthresh = cwnd / 2 = 8,同时设置拥塞窗口cwnd = ssthresh = 8 并开始执行拥塞避免算法
在拥塞避免阶段,拥塞窗口是按照线性规律增大的,这就是前面提到过的“加法增大”AI,而一旦出现超时或3个重复的确认,就要把门限值设置为当前拥塞窗口值得一半,并大大减小拥塞窗口得数值。这常称为“乘法减小”MD。