面试准备

第一章 基本概念

速率

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

带宽

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

吞吐量

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

时延

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

发送时延指:主机或路由器发送数据帧所须要的时间。也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。计算公式为:
\[ 发送时延= \frac{数据帧长度}{发送速率} \]
传播时延:电磁波在信道中传播必定距离须要花费的时间。与信道长度和电磁波在信道上的传播速率有关。网络

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

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

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

往返时间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支持一对1、一对多、多对1、多对多的交互通讯。
  • 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时,永生代、老年代和新生代后会进行垃圾回收。
  • 永生代主要回收字符串常量和类对象。
相关文章
相关标签/搜索