面试准备

第一章 基本概念

速率

速率是指:单位时间传输的比特数。单位为bit/s。

带宽

在计算机中,带宽是某通道的最高数据传输速率。单位是bit/s。

吞吐量

表示单位时间内通过某个网络的实际的数据量。

时延

指数据从网络的一端传输到另一端需要的时间。分为发送时延(传输时延),传播时延,处理时延和等待时延。

发送时延指:主机或路由器发送数据帧所需要的时间。也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。计算公式为:

\[发送时延= \frac{数据帧长度}{发送速率} \]

传播时延:电磁波在信道中传播一定距离需要花费的时间。与信道长度和电磁波在信道上的传播速率有关。

处理时延:主机或路由器在收到分组时需要花费一定的时间进行处理。例如分析首部,提取数据,查找路由等。

排队时延:分组在进入路由器后,要先在输入队列中排队等待。

总时延 = 发送时延+传播时延+排队时延+处理时延

往返时间RTT:从数据完全发出到接收到数据的时间。

五层协议

物理层、数据链路层、网络层、传输层、应用层。

七层协议

将应用层分解为会话层、表示层和应用层。

应用层:通过进程间的交互来完成特定的网络应用。应用层协议有:HTTP,DNS,SMTP等。

传输层:向两台主机中的进程直接的通信提供通用的数据传输服务。主要协议有:TCP和UDP。

网络层:为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层的报文段或用户数据报封装成分组或包进行传送。简称数据报。网络层的另一个任务是选择合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目的主机。

数据链路层:在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送帧。每一帧包括数据和必要的控制信息(同步信息,差错控制信息)。

只有物理层不加控制信息。

第 3 章 数据链路层

数据链路层使用的信道主要有:

  • 点对点信道
  • 广播信道

用于解决分组在一个网络中传输到另一个设备或者路由器的问题(局域网中传输)。

数据链路层的三个基本问题:封装成帧,透明传输和差错控制。

封装成帧:每个帧的组成包括:帧首部、帧的数据部分(IP数据报)、帧尾部。其中,帧的数据部分的最大长度称为最大传输单元 MTU。帧首部和帧尾部的字符称为控制字符,SOH,EOT。

透明传输:当数据部分存在和控制字符相同的字符时,就不是透明传输了,此时,数据链路层会自动在数据部分的字符前面插入转义字符ESC,对应的值为0X1B。此种方法称为字符填充。如果数据部分出现转义字符,则再插入一个转义字符。

差错控制:在传输过程中,一些比特的值被改变。数据链路层通过CRC 循环冗余校验码进行检错。

点对点协议PPP

设备要联网时,用ppp协议和ISP进行通信,获取ip地址,从而上网。

设备通过网卡或适配器与局域网连接。

集线器仅仅上物理上拓展了局域网规模,属于物理层设备。仅仅起到转发的作用,没有碰撞检测。当有两个接口同时接收到信号时,会产生碰撞。

MAC地址

占48位。可看作每台计算机的物理地址。是计算机的唯一标识。其实就是适配器的地址,或网卡地址。

mac帧最小长度为64位。其中 ip 数据报的最小长度为46位。

数据链路层扩展局域网的方法是使用交换机。交换机有一个地址表,里面存放的是MAC地址和端口之间的映射关系。交换机是通过自学习算法来建立地址表的。

第 4 章 网络层

网络层向传输层提供简单灵活的,无连接的尽最大努力交付的数据报服务。

网络再发送分组时不需要先建立连接。每一个分组独立发送,与前后的分组无关。

与 IP 协议配套使用的还有三个协议:

  • 地址解析协议 ARP
  • 网际报文控制协议 ICMP
  • 网际组管理协议 IGMP

网络中使用的中间设备有:

  1. 物理层的转发器,即中继器
  2. 数据链路层的网桥,即交换机,网卡
  3. 网络层的路由器
  4. 网络层以上使用的中间设备时网关。用网关连接两个不兼容的系统需要在高层进行协议转换。

当中间设备是转发器或网桥时,这仅仅是把一个网络扩大了,而从网络层的角度看,这仍然是一个网络,一般并不称之为网络互联。网关由于比较复杂,目前使用的较少。

IP 地址

IPv4地址有32位,分为4段,每段8位。IP地址的编址方法共经历过三个历史阶段。

  • 分类的IP地址.A、B、C类地址,网络号分为占1,2,3字节。且在网络号字段的最前面有1~3 位的类别位,数值分别规定位0,10和110。
  • 子网的划分
  • 构成超网

A,B和C类IP地址的主机号可取值不能为全0和全1,全0主机号为本主机,全1主机号位表示本网络号中的所有主机,广播地址。

A类地址的网络号不能为全0和全1。全0为本网络,全1为回环测试。

B类的网络号不能为128.0.0.0;最小的网络号为128.1.0.0。所以网络号要减1。

C类的网络号可取的21位也不能为全0.网络号也要减1。

路由器仅根据目的主机所连接的网络号来转发分组,这样可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间和查找路由表的时间。

ip地址是标记一台主机和一条链路的接口。当一台主机同时连接到两个网络上时,该主机必须具备两个相应的ip地址,其网络号必须不同。由于路由器至少连接到两个网络,因此一个路由器至少应当有两个不同的ip地址。同时具备两个mac地址。

数据在网络中传输时,数据中的源ip和目的IP不会改变,但是源MAC和目的MAC会一直改变。

地址解析协议ARP

由 ip 地址查询 MAC 地址。由于 ip 协议使用 arp 协议,所以,通常将 arp协议划归为网络层。但 ARP 协议的用途是为了从网络层使用的 ip 地址,解析出在数据链路层使用的MAC 地址。

每一台主机有一个 ARP高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。下面是主机如何建立映射表的过程。

当主机A要向本局域网上的主机 B 发送数据时,先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就在 ARP 高速缓存中查出对应的 MAC 地址,再把这个硬件地址写入 MAC 帧。通过局域网把 MAC 帧发往主机B。

当无法查到 B的 MAC 地址时,主机A自动运行ARP:

  1. ARP进程再本局域网上广播一个ARP请求分组。分组内容包括源MAC,源IP,目的IP。
  2. 再本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。
  3. 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就手下这个ARP请求分组,并向主机A发送ARP响应分组,再分组中写入自己的MAC地址。
  4. ARP请求时广播发送,但是ARP响应时普通的单播,即从一个源地址发送到一个目的地址。
  5. 主机收到ARP响应后,就将B的Mac地址写入ARP高速缓存中。
  6. ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间。凡超过生存时间的项目就从高速缓存中删掉。

请注意,ARP时解决同一个局域网中的主机或路由器的IP地址和MAC地址的映射问题。如果要找的主机和源主机不再同一个局域网上,就无法解析出另一个局域网中主机的MAC地址。此时,主机会将第一跳路由的MAC地址作为目的MAC。写入ARP高速缓存

下面归纳出ARP的四种典型情况:

  1. 发送方是主机,要把IP数据报发送到同一个网络上的另一台主机。这时,源主机发送ARP请求分组,找到目的主机的MAC地址。
  2. 发送方是主机,要把数据报发送到另一个网络上的主机。这时发送方发送ARP请求分组,找到同网络上的一个路由器的MAC地址。剩余的工作由路由器来完成。
  3. 发送方是路由器,要把数据报转发到同一个网络中的主机,这时,路由器发送 ARP 请求分组,找到目的主机的 MAC 地址。
  4. 发送方是路由器,要把数据报发送到另一个网络上的主机。这时,路由器发送 ARP 请求分组,找到连接在同一个网络上的另一个路由器的 MAC地址。剩余工作由目的路由器来完成。

互联网使用ip而不是mac地址进行通信的原因是mac地址结构不同,要进行通信,需要非常负责的转换。

IP数据报格式

1

一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分之和是一些可选字段,其长度可变。下面介绍首部各字段的含义。

  1. 版本:占4位,指IP协议的版本通信双方使用的IP协议的版本必须一直。
  2. 首部长度:占4位,可表示的最大十进制数是15。但是,首部长度字段所表示数的单位是32位字。因为IP首部的固定长度为20字节,因此首部长度字段的最小值为5.而当首部长度为最大值时,就表明首部长度达到最大值15个32位字长,即60个字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此IP数据报的数据部分永远在4字节的整数倍时开始。
  3. 区分服务:8位,一般不使用。
  4. 总长度:指首部长度和数据长度之和,单位为字节。总长度字段为16位,因此数据报的最大长度为65535个字节。现实中很少有这么长的数据报。

数据链路层的最大传送单元,MTU(mac帧数据部分的最大长度)。以太网中MTU为1500字节。IP协议规定,数据报最大长度不超过576字节。从而IP层接收到的数据最大长度不超过512字节,这是假定IP首部为最大长度60字节,外加4字节冗余。就得到576字节。否则,要进行分片。在进行分片时,数据报首部的总长度字段是指分片后每一个分片的首部长度与该分片的数据长度的总和。

  1. 标识:占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1。当数据报需要分片时,此标识会复制给所有的数据报片的标识字段。相同的标识字段的值使分片后的各数据报片最后能正确地重装为原来的数据报。
  2. 标志:占3位,但只有两位有意义。
    • 最低位MF。MF = 1 表示后面还有分片。MF = 0 表示这是若干数据报片的最后一个。
    • 中间一位记为 DF,意思是不能分片。只有当 DF = 0时才允许分片。
  3. 片偏移:占13位。片偏移指出;较长的分组在分片后,某片在原分组中的相对位置。也就是说,片偏移以8字节为偏移单位。也就是说,每片的长度一定是8字节的整数倍。值当当前片第一个字节在整个数据部分的序号。序号从0开始。
  4. 生存时间:占8位,缩写位TTL,表明数据报在网络中的寿命。由发出数据报的源点设置这个字段。目前该字段表示跳数限制。路由器在每次转发数据报之前就把TTL值减1.若TTL值减小到0,就丢弃这个数据报。
  5. 协议:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便目的主机的IP层应将数据部分上交给哪个协议进行处理。
  6. 首部校验和:占16位。这个字段只检验数据报的首部,不包括数据部分。因为数据报没经过一个路由器,路由器都要重新计算首部检验和(一些字段,如生存时间,标志,片偏移可能发生变化)。

IP层转发分组的流程

分组转发算法如下:

  1. 从数据报的首部提取目的主机的IP地址 D,得到目的网络地址为N。
  2. 若N就是此路由器直接相连的某个网络地址,则进行直接交付,不需要经过其他的路由器,直接把数据交付目的主机(这里包括把目的主机D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧)。否则就是间接交付。执行下一步。
  3. 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中指明的下一条路由;否则执行下一步。
  4. 若路由表中有到达网络N的路由,则把数据报传送给路由表中指明的下一跳路由,否则执行下一步。
  5. 若路由表中有默认路由,则把数据报传送给路由表中指明的默认路由,否则执行下一步。
  6. 报告转发分组出错。

划分子网

二级IP地址到三级IP地址

A类网络包含的主机号太多,A类网络中的路由器的路由表太庞大。且很多A、B、C类网络的主机号利用率不高。

给IP地址增加一个子网号字段,使两级IP地址变为三级IP地址。提高IP的利用率。这种做法叫做划分子网。

划分子网的思路如下:

  1. 一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网。划分子网是网络内部的事,对外仍然表现为一个网络。
  2. 划分子网的方法是从网络的主机号借用若干位作为子网号,当然主机号也就相应减少了同样的位数。于是两级IP地址在本单位内部变成了三级IP地址:网络号、子网号和主机号。
  3. 反射从其他网络发送给本单位某台主机的IP数据报,仍然根据IP数据报的目的网络号找到连接本单位网络的路由其。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付给目的主机。
子网掩码

路由器中为了提取出子网的网络地址,需要再路由表中插入一列,对应各自目的IP地址的子网掩码。从而不管是否采用了子网,都能正确的提取出网络地址。

无分类编址CIDR(构造超网)

CIDR 消除了传统的A、B、C类地址以及划分子网的概念,因而能更加有效地分配ipv4的地址空间。CIDR把32位的IP地址分为前后两个部分。前面部分是网络前缀,用来指明网络,后面部分用来指明主机。即IP分为网络前缀和主机号。

  • CIDR使用斜线记法,即再IP地址后面加上斜线"/",然后写上网络前缀所占的位数。
  • CIDR把网络前缀都相同的连续的IP地址组成一个CIDR地址块。但是,一般主机号为全0或者全1的地址不使用。

CIDR不使用子网是指CIDR并没有在32位地址中指明若干位作为子网字段。但分配到一个CIDR地址块的单位,仍然可以在本单位内根据需要划分子网。

网际控制报文协议 ICMP

ICMP 工作于网络层。ICMP的报文是封装在IP数据报中,作为数据报的数据部分发送。

ICMP 报文分为差错报告报文和询问报文(ping)。

  1. 差错报告报文分为四种:
    • 终点不可达:当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。
    • 时间超时:当路由器收到生存时间为0的数据报时,除丢弃该数据报外,还要向源点发送时间超时报文。当终点在预定时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片丢弃,并向源点发送时间超时报文。
    • 参数问题:当路由器或目的主机收到的数据报的首部中有的字段值不正确时,就丢弃该报文,并向源点发送时间超时报文。
    • 改变路由(重定向) :路由器把改变路由报文发送给主机,让主机知道下次应该将数据报发送给另外的路由器。

路由选择协议

路由选择协议分为两大类:内部网关协议IGP 和外部网关协议EGP。分别称为域内路由选择和域间路由选择。内部网关协议具体的有:RIP和OSPF。外部网关协议时BGP。

第 5 章 传输层

通信的真正断电并不是主机而是主机中的进程。也就是说,端到端的通信时应用进程之间的通信。而网络层只能将数据传输到目的主机,不能交付给目的进程,这需要传输层通过识别端口号来完成。

网络层为主机之间提供逻辑通信。运输层为应用进程之间提供端到端的逻辑通信。

传输层的协议有两种:面向连接的传输控制协议 TCP 和无连接的用户数据报协议 UDP。

TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP 不提供广播或多播服务。

常见的应用层协议中:HTTP、FTP、SMTP、TELENT是采用TCP进行传输的,其他采用UDP进行传输。

TCP 中使用 16 位的端口号来标识不同的进程。端口号只具有本地意义,只是为了标识本计算机应用层中的各个进程。

UDP

UDP 的主要特点是:

  • 无连接的。发送数据之前不需要建立连接。因此,减少了开销和发送数据前的时延。
  • 尽最大努力交付,即不保证可靠的交付。
  • 面向报文的。发送方的UDP 对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,二十保留这些报文的边界。因此,UDP一次交付一个完整的报文。
  • UDP 没有拥塞控制。
  • UDP支持一对一、一对多、多对一、多对多的交互通信。
  • UDP的首部开销小。

UDP中也有校验字段。把首部和数据都进行校验。

TCP

TCP的特点

  • 面向连接的运输层协议。应用在使用TCP 之前必须先建立 TCP 连接。在传送数据完毕后,必须释放建立的 TCP 连接。
  • 每一条 TCP 连接只能有两个端点,每一条 TCP 连接都只能是点对点的。
  • TCP 提供可靠交付的服务。通 TCO 连接传送的数据,无差错、不丢失、不重复,并且按序到达。
  • TCP 提供全双工通信。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。在发送时,应用程序在把数据传送给 TCP 的缓存后,就做自己的事了。TCP 在合适的时候把数据发送出去。在接收时,TCP 把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据。
  • 面向字节流。TCP 中的流指的是流入到进程或从进程流出的字节序列。"面向字节流"的含义是:虽然应用程序和TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。TCP 并不知道所传送的字节流的含义。

TCP 连接的端点是 IP 和端口号构成的套接字 socket。每一条 TCP 连接唯一的被通信两端的两个端点(即两个套接字)所确定。

可靠传输的原理

停止等待协议

发送方每次发送一个分组,等收到对方的应答后,再发送下一个分组。如果在有限时间内没有收到对方应答,就超时重发。当收到对方的重复应答,就丢掉第二个应答。接收方在收到重复数据时,丢掉重复分组。并返回收到应答信号。这种可靠传输协议称为自动重传请求 ARQ。

停止等待协议的信道利用率不高,为了提高利用率,可以一次连续发送多个分组。等前面的分组收到后,再滑动发送窗口,持续发送。

接收方采用累计确认的方式。接收方不必对收到的每个分组逐个发送确认,而是再收到几个分组后,对按序到达的最后一个分组发送确认,这就标识:到这个分组为止的所有分组都已正确收到了。

累计确认的优点是:容易实现,即使确认丢失也不必重传。但缺点是不能向发送方反映出接收方已经正确收到的所有分组的信息。例如接收方已经收到1,2,4,5分组,缺失分组3,此时,接收方只能返回2,表示前两个分组已经收到,此时发送方需要重新发送后3个分组。称作回退N。

TCP 报文格式包括:

  • 源端口
  • 目的端口
  • 序号:在TCP连接中传送的字节流中每个字节都按序编号。首部中的序号字段值指的是本报文段所发送数据的第一个字节的序号。
  • 确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号位 = N,则表明:到序号 N - 1为止的所有数据都已正确收到。
  • 数据偏移:指出TCP 报文段的数据起始处距离TCP报文段开头的距离,即TCP 首部的长度。
  • 确认ACK标志位:仅当ACK = 1 时,确认号字段才有效。TCP规定,在连接建立后所有传送的报文段都必须把 ACK 置1.
  • 同步 SYN:在连接建立时用来同步序号。当 SYN = 1,ACK = 0时,表示这是一个连接请求报文段。对方若同意建立连接,则应响应的报文段中,SYN = 1, ACK = 1。因此,SYN = 1表示这是一个连接请求或连接接受报文。
  • 终止 FIN :用来释放一个连接。当 FIN = 1时,表明此报文段的发送方的数据已发送完毕,并要求释放传输连接。
  • 窗口:占2字节。窗口指的是发送本报文段的乙方的接收窗口(而不是自己的发送窗口)。窗口值作为接收方让发送方设置其发送窗口的依据。
  • 检验和:检验和检验的范围包括首部和数据两部分。

TCP可靠传输的实现

以字节为单位的滑动窗口

TCP的滑动窗口以字节为单位。发送方根据接收方发过来的响应报文中的确认号和窗口大小,调整自己的发送窗口。发送方还可能根据当时的网络拥塞情况适当减小自己的发送窗口数值。

对于不是按序到达的数据,接收方先临时存放在接收窗口中,等字节流中所缺少的字节收到后,再按序交付上层的应用进程。

接收方有累计确认的功能,这样可以减小传输开销,接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息捎带上,但不经常发生。

再强调一次:TCP 的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。

超时重传的选择

超时时间是依据当前报文的RTT时间动态调整的。

TCP 流量控制

一般来说,总希望数据传输的越快越好。但是如果发送方把数据发送的过快,接收方就可能来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。

利用滑动窗口机制可以很方便地在 TCP 连接上实现对发送方的流量控制。

  • 接收方可以通过将窗口字段的值设为0,来通知发送方暂停发送。
  • 等待接收方有接收缓存后,会向发送方发送一个非零窗口的通知。
  • 但是为了防止接收方的非零窗口通知丢失,发送方在接收到对方发过来的零窗口报文后,设置一个持续计时器。
  • 当持续计时器超时时,发送方会发送一个探测报文给接收方。接收方收到探测报文后,返回当前的窗口值。
  • 如果接收方返回的窗口值仍然为0,那么,发送方再收到应答报文后,会重置持续计时器。直到接收方发送一个非零窗口值。

TCP的发送时机

应用进程把数据传送到 TCP 的发送缓存后,剩下的发送任务就由 TCP 来控制了。可以用不同的机制来控制 TCP 报文段的发送时机。例如:

  • TCP 维持一个遍历,等于最大报文段。只要缓存中存放的数据达到 最大报文段长度时,就组装成一个 TCP 报文段发送出去。
  • 第二种机制:由发送方的应用程序指明要求发送报文段。
  • 第三种机制是发送方设置一个计时器,当计时器超时时,就把当前已有的缓存数据装入报文段,发送出去。

TCP 实现中广泛使用的是 Nagle 算法。算法如下:若发送应用进程把要发送的数据逐个字节地送到 TCP 的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节先缓存起来。当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成第一个报文段发送出去,同时继续对随后到达的数据进行缓存。只有再收到对前一个报文段的确认后才继续发送下一个报文段。Nagle 算法还规定,当到达的数据已达到发送窗口大小的一半或已达到报文段的最大长度时,就立即发送一个报文段,这样做,可以有效提高网络的吞吐量。

TCP 的拥塞控制

在计算机网络中的链路容量(带宽)、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞。

拥塞控制是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,设计到所有的主机、路由器以及降低网络传输性能相关的所有因素。

流量控制往往是指点对点通信量的控制,是个端到端的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便接收端来得及接收。

当网络的实际吞吐量明显地小于理想的吞吐量时,网络进入了轻度拥塞的状态。当提供的负载达到某一数值时,网络的吞吐量反而随提供的负载的增大而下降,这时网络就进入了拥塞状态。当提供的负载继续增大时,网络的吞吐量下降到零,网络无法工作,这就是所谓的死锁。

TCP 的拥塞控制方法

TCP 进行拥塞控制的算法是;慢开始、拥塞避免、快重传和快恢复。

1.慢开始和拥塞避免

下面讨论的拥塞控制也叫做基于窗口的拥塞控制。为此,发送方维持一个叫做拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞成都,并且动态地变化。发送方让自己的发送窗口等于拥塞窗口。

发送方依据是否存在分组数据超时,来判断网络有没有拥塞。当发送方按时收到分组应答时,就缓慢增大发送窗口。当分组计数器超时时,发送方认为网络存在拥塞,减小发送窗口的大小。

慢开始的思路是:初始时,先发送一个报文段,收到确认后,将窗口加倍。重复此过程,直到网络拥塞,或者达到慢开始门限

慢开始有门限。当窗口大小超过慢开始门限时,就改为拥塞避免算法。

拥塞避免算法:当窗口大小达到慢开始门限后,窗口不再加倍的扩大窗口大小,而是每次加1。

快重传算法是为了尽早让发送方知道发生了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是立即发送确认,即使收到了时许的报文段,也要立即发送对已收到报文段的重复确认。例如,当接收方收到了第 1和2个报文段后,都分别及时发出了确认。现假设接收方没有收到第3个报文段,却收到了第4个报文段。本来接收方可以什么都不做。但是按照快重传算法,接收方必须立即发送对 第2个报文段的重复确认,以便让发送方及早知道自己没有收到第3个报文段。这样,发送方总共收到了接收方的4个对第 2个报文段的确认,其中后 3个都是重复确认。快重传算法规定,发送方只要一连收到3个重复确认,就知道接收方确实没有收到第 3 个报文段,因而立即进行重传,称为快重传,这样就不会出现超时,发送方就不会误认为网络拥塞。

当某个分组出现超时时,发送方执行快恢复算法,立即将发送窗口减半,减小拥塞窗口大小,并执行拥塞避免算法。

发送窗口的门限值为接收窗口大小和拥塞窗口的较小值。

TCP 传输的连接管理

传输连接分为三个阶段:连接建立、数据传送和连接释放。

TCP 连接的建立采用客户服务器方法。主动发起连接建立的应用进程称为客户,而被动等待连接建立的应用进程叫做服务器。

TCP 的连接建立

TCP 建立连接的过程称为握手,握手需要在客户和服务器之间交换三个 TCP 报文。

  1. 客户端先发送一个同步请求报文,请求建立连接,报文中,SYN = 1,同时需要消耗一个初始字节序号x。SYN 报文段不能携带数据。
  2. 服务端收到同步请求后,返回一个同步应答,表示同意建立请求,报文内容为SYN = 1,ACK = 1,ack = x + 1,同时,服务端也要消耗一个字节序号 y。
  3. 发送方收到同步应答后,返回一个应答,应答内容为ACK = 1,ack = y = 1,如果此应答中包含数据,则需要有字节序号,否则不消耗字节序号。注意由于同步已经建立,所以此处没有SYN值。客户端发送完应答后,进入连接阶段。服务端收到应答后也进入连接阶段。

进行第三次握手的原因是:可能客户端发送完一个同步请求后,应某种原因,传送时延非常大,发送端超时,于是又重新发送同步请求,并传输数据。直到传输完成,断开连接后,第一次的同步请求才发送到服务端,此时,服务端会误认为客户端想要建立连接,于是,打开连接等待客户端传输数据。而客户端此时已关闭连接。从而占用了服务端的连接,导致服务端浪费资源。加入第三次握手后,就不会出现这种问题。

TCP 连接释放

数据传输结束后,通信双方都可释放连接。现在 A 和 B 都处于连接建立阶段。

  • A进程先向 B发送连接释放报文,并停止发送数据,主动关闭 TCP 连接。连接释放报文内容为 FIN = 1,seq = u,u等于前面已传输的数据的最后一个字节加1。这时 A 进入 FIN-WAIT-1(终止等待1)状态,等待 B的确认。注意,FIN报文段即使不携带数据,也要消耗一个序号。
  • B 收到连接释放报文段后,发送确认报文,报文内容为 FIN = 1,ACK = 1,ack = u + 1,seq = w,w为B前面已传送过的数据的最后一个字节的序号加1。然后B 进入 关闭等待状态。此时 从A 到 B方向的连接就释放了。这时 TCP 处于半关闭状态,即 A 已经没有数据要发送了,但 B 若要发送数据,A仍要接收。即从B 到 A 这个方向的连接并未关闭。
  • A 收到 B的关闭确认后,进入 关闭-等待-2 状态,等待 B发出的连接释放报文段。
  • 若B 已经没有要向A 发送的数据,其应用进程就通知 TCP 释放连接,这时 B 发出的连接释放报文内容为:FIN = 1,seq = v,ack = u + 1,此时,B必须重复上次已发送过的确认号,这时,B进入最后确认阶段,等待A确认。
  • A 收到 B的连接释放报文段后,必须对此发出确认。在确认报文段中 ACK = 1,ack = w + 1,seq = u + 1。然后进入时间等待状态。请注意,现在的 TCP 连接还未释放掉,必须经过时间等待计时器设置的两个最大报文段寿命后,A才进入关闭状态。这是为了保证A的确认报文能到达B,如果B端没有及时收到确认报文,会重新发送关闭连接的请求报文。A能在关闭前收到,并返回应答,同时重置等待计时器。
  • B 收到 A的 响应报文后,立即关闭连接。

进程间通信方式:管道、信号量、消息队列、共享存储、socket。

死锁产生的四个必要条件:

  • 互斥条件
  • 不可剥夺:一个进程在所获得的资源未使用完毕时,不可被剥夺,只能自己释放。
  • 请求和保持:进程在请求新资源时,保持已有资源。
  • 循环等待。

破坏死锁的四个必要条件:

  • 破坏不可剥夺条件:进程资源得不到满足时,会释放所有资源。
  • 破坏请求和保持:静态分配每个进程执行时,就申请需要的全部资源。动态分配即每个进程在申请需要的资源时,本身不占用系统资源。
  • 破坏循环等待条件:采用资源有序分配,将系统资源按序编号,稀缺资源序号较大。申请资源时,必须按编号顺序进行,一个进程只有获得较小编号的资源才能申请较大编号的资源。

垃圾回收算法:

  • 标记清楚算法。内存碎片比较多。
  • 复制算法。浪费部分内存
  • 标记整理算法。

新生代采用复制算法。老年代采用标记清楚或标记整理算法。

分代回收时间:

  • 新生代:minor gc在新生代没有足够的空间满足java对象分配请求时或者full gc也会出发minor gc。
  • 老年代:当每次晋升到老年代对象的平均大小大于老年代的剩余空间时。新生代存活的大对象超出了老年代的剩余空间,会触发full gc。
  • 当永生代或老年代空间不足触发full gc时,永生代、老年代和新生代后会进行垃圾回收。
  • 永生代主要回收字符串常量和类对象。
posted @ 2018-09-14 01:03  Echie  阅读(123)  评论(0编辑  收藏  举报