【TCP/IP】期末复习DAY6

写在前面:

我已经写都不想写了,但是本着做事就要做到底的原则,象征性的写一下吧。

本资料来源于学长的总结和我个人的整理,如果有侵权或者其他行为我会删掉的。

所以学长为什么是神

忘掉这无聊的tcpip去快乐的打派派吧

non terrae plus ultra!


目录

第四章 网络层简介

4.2.1电路交换(应用于物理层):

4.2.2分组交换

4.3网络层的分组交换:

4.3.1(网络层)无连接服务

4.3.2面向连接服务 

4.4 网络层的服务(无连接的服务)

4.4.2 逻辑地址

4.4.3 源计算机提供的服务。

4.4.4 各种路由器提供的服务

4.4.5 目的计算机提供的服务

4.5.1 差错控制

4.5.2 流量控制 

4.5.3拥塞控制

第五章 ipv4 地址(大题目)

5.1.1 地址空间

5.1.3 地址段计算

5.1.4 运算

5.2 分类编址  

5.2.1 分类 五类 A B C D E  地址类和地址块

5.2.2 地址类和地址块

 5.2.3 两级编址

5.2.5 三级编址 :子网划分

5.3 无分类编址

5.4 特殊地址块

5.4.2 每个地址块中的特殊地址

5.5 NAT 网络地址转换

第六章 IP分组的交付与转发

构件 输入端口,输出端口,路由选择处理器,交换结构

第七章 网络协议版本IPv4

7.2 数据报 

 7.3 分片 

7.3.1 最大传送单元 (MTU)

7.3.2 与分片有关的字段

第十一章:单播路由协议

11.1.3 路由选择协议

11.2域内和域间路由选择

11.2.2计数到无穷大

11.4 RIP路由信息协议

11.4.1 RIP报文格式

11.4.2 请求和响应

11.4.3 RIP的计时器

11.4.4 RIP版本2

11.4.5封装

11.5链路状态路由选择

11.5.1构造路由表

11.6 OSPF开放最短路径优先

11.6.1区域

11.6.2度量

11.6.3链路的类型

11.6.5 OSPF分组

11.6.6 链路状态更新分组(OSPF运行的核心)

11.6.7 其他分组

11.6.8封装

11.8 BDP:边界网关协议

11.8.1自治系统的类型:残桩AS、多归属AS、转接AS。

11.8.2路径属性:熟知属性和可选属性。

11.8.5分组的类型:BGP使用四种不同类型的报文:打开、更新、保活和通知

11.8.7封装

11.11本章小结

第十二章 多播和多播路由协议

12.1.1 单播

12.1.2 多播

12.1.3 广播

12.2 多播地址

12.2.3 数据链路层多播分组的交付

12.3 IGMP国际组管理协议

12.3.1 组管理

12.3.2 IGMP报文

12.3.3 在主机上应用IGMP协议

12.9 本章小结

第十三章 运输层简介

13.1.1 进程到进程的通信

13.1.2 编址:端口号

13.1.3 封装和解封

13.1.4 复用和分用

13.1.5 流量控制

13.1.6 差错控制

13.1.7 流量控制和差错控制的组合

13.1.8 拥塞控制

13.1.9 无连接的和面向连接的服务

13.2 运输层协议

13.2.1 简单协议

13.2.2 停止等待协议

13.2.3 返回N协议

13.2.4 选择重传协议

13.2.5 双向协议:捎带

13.5 本章小结


第四章 网络层简介

4.2.1电路交换(应用于物理层):

在电路交换中,完整的,没有被分割成分组的报文从源点发送到终点。

分组交换:目前因特网的网络层就是一个分组交换网。分组交换网为分组选择路由的方式 : 数据报方式 和虚电路方式

4.2.2分组交换

在分组交换网中,源点在传送之前先要将报文分割成便于管理的分组,这些分组再到终点后被重新组装。

4.3网络层的分组交换:

网络被设计为一个分组交换网,也就是说,报文在源点被分割成便于管理的分组,通常被称为数据报。

4.3.1(网络层)无连接服务

 网络层提供无连接服务时,在因特网中穿梭的每个分组都是一个独立的个体,属于同一个报文的两个分组之间没有任何关联。每个分组在选择路由时,都要依据包含再其首部的信息,源地址和目的地址。目的地址指明了它要到哪里去,而源地址指明了它来自哪里。路由器仅仅是根据其目的地址为它选择路由。源地址可用于该报文被丢弃的时候想源点发送差错消息。

在无连接的交换网络中,转发判决的依据是该分组的目的地址。

无连接的网络时延:

4.3.2面向连接服务 

属于同一个报文的所有分组之间是有关联的。

在一个报文的数据被发送之前,应当首先建立一条虚连接以指定这些数据报通过的路径,在这类型的服务中,分组不仅要包含源地址目的地址,还同时要包含流标号,也就是一个虚电路标识符,用来指定这些分组应当采取的虚路径。

要建立面向连接的服务必须要经过的三个阶段的处理过程: 建链,数据传送和拆链

在面向连接的交换网络中,转发判决的依据是该分组的标号

建链阶段 请求分组 确认分组

4.4 网络层的服务(无连接的服务)

4.4.2 逻辑地址

网络层提供了端到端的服务,所以两台想要通信的计算机必须要具有全球标识系统,称为网络层地址或逻辑地址

4.4.3 源计算机提供的服务。

四种: 1分组化处理

       2 查找下一跳的逻辑地址

       3 查找下一跳的物理地址

       4 对数据进行必要的分片,处理网络层接收来自上层的几个信息 数据,数据长度 ,逻辑目的地址,协议ID 以及服务类型。

4.4.4 各种路由器提供的服务

一个数据报要设计到路由器的两个接口:一个入接口一个出接口。路由器需要与两个数据链路层打交道,入接口的数据链路和出接口的数据链路。

4.4.5 目的计算机提供的服务

目的计算机在向终点交付这些数据之前需要重组数据报片。网络层要设置一个重组定时器,超时,则销毁并发送一个差错报文。

分片处理对上层来说是完全透明的。因为所有数据报片都到达并且并且被重组之前,网络层不会向上层交付任何不完整的数据。

4.5.1 差错控制

差错控制包括对损坏,丢失已经重复的数据进行检测的机制(数据链路层提供差错控制)

在路由器处理数据报时出现的差错,数据链路层是无法检测出来的。(因特网的网络层没有直接提供差错控制,但是使用了另外一个协议icmp)

4.5.2 流量控制 

用于调整源点发送的数据量以免接收方超载。

目前版本的因特网中,网络层不提供任何流量控制。

为什么在设计网络层会缺少流量控制?

1 这一次没有差错控制,接收方网络层的工作非常简单,以至于很少会出现超载现象。

2 网络层服务的上层协议也可以部署一些缓存

3绝多大数使用网络层服务的上层协议都会提供流量控制。

4.5.3拥塞控制

网络层的拥塞指的是这样一种状态,有过多的数据报出现在了因特网的某一个区域内

无连接网络中的拥塞控制

信令:

             反向信令 就是在运动方向和拥塞方向相反的数据报中设置一个比特,以通知发送方拥塞正在形成,发送发应当放慢发送分组的速度;

            前向信令,在运动方向与拥塞方向一致的分组中设置一个比特,用于向该分组的接收方发出拥塞警告。

在因特网中既没有使用前向信令,也没有使用反向信令。

无连接网络的拥塞控制还可以通过一个扼流分组来实现,它是在遇到拥塞是由路由器向发送发发送一个特殊的分组;将分组按其在整个报文中的重要程度划分等级

面向连接网络中的拥塞控制

方法:当某区域发生拥塞后就建立一条额外的虚电路。

路由选择 网络层非常重要的就是路由选择 可以分为两大类 单播 和多播

第五章 ipv4 地址(大题目)

Ipv4 地址的长度是32IPV4 地址是唯一的且全球统一的。

5.1.1 地址空间

地址空间就是协议所使用的地址总数

如果一个协议用b位来定义地址,那么它的地址空间就是

记法 二进制记法 点分十进制

 

 

5.1.3 地址段计算

给出首地址和末地址,末地址减去首地址,得到的数字

5.1.4 运算

位非运算 是一种单操作数运算 它的输入只有一个。 取反

位与运算 是一种双操作数 运算 输入有两个

与运算 就是将输入的每一个分别进行比较,选择比较小的,如果相等,则任选一个。

位或运算 也是双操作数 选择大的 同理位与

  

5.2 分类编址  

5.2.1 分类 五类 A B C D E  地址类和地址块

辨认类别

A  0     0-127      前一个字节定义网络标识 后三个字节定义主机标识

B  10    128-191    前两个字节定义网络标识  后两个字节定义主机标识

C  110    192-223   前三个字节定义网络标识,后一个字节定义主机标识

D  1110   224-239  D类地址用来进行多播,这类地址只有一个地址块

E  1111   240-255  E类地址仅有一个地址块为将来使用而保留

A B C 类IP 可划分为网络标识和主机标识  D E 不划分。

 

5.2.2 地址类和地址块

 5.2.3 两级编址

Ipv4作用为因特网中的一个分组指明其终点(网络层)

分类编址时,同一个网络中的所有的地址都属于同一个地址块,每个地址都包括 网络标识和主机标识。

某类地址用了n位定义网络,那么就有32-n位定义了主机 n取决于A B C类地址分别是8,16,24

获取一个地址块的信息

贴个可可爱爱的辛烷!

 

 

网络地址就是对一个网络的标识

网络掩码 A类地址 255.0.0.0 B类地址 255.255.0.0  C类地址  255.255.255.0

5.2.5 三级编址 :子网划分

子网地址

当一个网络划分子网后,子网的首地址就是它的子网标识符,也是路由器在为分组选择路由使之达到正确的子网时要用到的。

超网掩码 与子网掩码相反 

C类子网掩码中1的个数要比C类默认掩码的个数多

C类超网掩码中1的个数比C类默认掩码的个数少

5.3 无分类编址

可变长度地址块  

两级编址 (五分类编址,前缀指明了网络,后缀指明了主机)前缀长度取决改地址类别

在无分类编址中,前缀长度是1-32之间。

例 地址块中地址数目与前缀长度的值n成反比,n的值越小意味着地址块越大,n值越大则地址块越小。

斜线记法 正式名称 无分类域间路由选择

获取地址块信息

子网划分 (子网设计)

每个子网络的起始地址应当能够被它的地址数整除。

为子网络分配地址时受到的限制与为网络分配地址时收到的限制是一致的。

 

 

 

 

 

 

5.4 特殊地址块

全0地址 

地址块 0.0.0.0/32 仅含有一个地址。

主机为了找出自己的地址,就向引导服务器发送一个IPV4分组,并以这种全0的地址作为源地址,而用受限广播地址作为目的地址。

全1 地址:受限广播地址

地址块255.255.255.255/32 仅含有一个地址,它被保留作为网络的受限广播地址

环回地址

地址块12.0.0.0/8 被用作环回地址,这个地址用来测试机器上的软件。

专用地址 不会在全球被识别

10.0.0.0/8        16777216

172.12.0.0/12     10047584

192.168.0.0/16    65536

169.254.0.0 /16   65536

5.4.2 每个地址块中的特殊地址

网络地址  一个地址块的首地址定义为网络地址。实际上,这个地址指的就是网络本身,而不是那一台主机。

直接广播地址 一个地址块的末地址(后缀全为1 )可用作直接广播地址。

5.5 NAT 网络地址转换

转换表 如果一个专用网络使用了NAT技术,那么她就不能运行服务器程序来为网络之外的客户端提供服务。

交付 是指在网络层的控制下,底层各网络对分组的处理方式。

转发指的是吧分组交付到下一站的方式。(给予分组目的地址的转发和基于附加在分组上的标记的转发

交付方法 :直接交付和间接交付

直接交付:分组的源点和终点在同一个物理网络上 或者 是在最后一个路由器与目的主机之间践行交付

间接交付:分组经过了一个又一个路由器,最后到达与终点连接在同一个网络上的路由器。

最后的交付都是直接交付

转发 也就是将分组交付给下一跳

当IP地址作为无连接的协议是,转发的基础就是IP数据报的目的地址

下一跳方法 减少路由表中的内容 ,路由表中只保留下一跳地址,不保留完整路由信息

特定网络方法 能使路由表长度变下且简化查找过程的第二技术

特定主机方法 在使用时,目的主机的地址在路由表中要给出。

默认方法 简化路由选择

使用分类编址时的转发 无子网划分的转发 有子网划分的转发

分类编址的路由表可以设计为3列,无分类地址的路由表至少需要4列

基于标记的转发

在一个无连接的网络中,路由器根据分组首部的目的地址来转发该分组,另一方面在一个面向连接的网络,交换机则根据附加在分组上的标记来转发该分组

路由选择基于对路由表内容的搜索,而交换则涉及用一个索引访问交换表来完成

MPLS 多协议标记交换 当MPLS被当做路由器使用时,它可以根据目的地址来转发分组,而当它被当做交换机使用时,有能够基于标记来转发分组。

第六章 IP分组的交付与转发

构件 输入端口,输出端口,路由选择处理器,交换结构

输入端口 执行路由器的物理层和数据链路层的功能  从接收信号中得到比特流,然后把帧拆装得到分组,同时进行差错的检测和纠正,分组准备就绪后,可以通过网络层进行转发。

输出端口 与输入顺序相反

路由器选择处理器 执行网络层功能 用目的地址找出下一跳的地址

交换结构  纵横交换结构 榕树交换结构

Batcher榕树交换结构

第七章 网络协议版本IPv4

网际协议是TCP/IP协议族在网络层使用的传输机制

IP是一种不可靠的无连接数据报协议     

一种尽最大努力交付的服务 (尽最大努力的意思是IP分组有可能损坏,丢失,失序或者延迟)

IP也是分组交换网络中使用数据报方式的一种无连接协议

7.2 数据报 

网络层的分组称为数据报 

数据报是一个可变长度的分组 ,它由两部分组成:首部数据

首部长度是20-60 字节,包含有关路由选择和交付的重要信息。

版本VER:4位字段定义了IP协议版本目前版本是4 。

首部长度 HLEN:4个字段定义了数据报首部的总长度。首部长度是可变的,在没有选项时,首部长度是20,且这个字段的值为5 ,选项字段值为最大的时候,这个字段值是15(15x4=60)

服务类型 指明了应当如何处理数据报。一部分定义数据报的优先级,剩下定义服务类型。

           总长度 这个16位字段定义了以字节为单位的数据报总长度(首部加数据)

数据长度 =总长度-首部长度

总长度字段定义了包括首部在内的数据报总长度

标识

标志

分片偏移 

生存时间字段 第九个字节 协议字段 是下一字节 

协议 这个8位字段定义了使用此IP层服务的高层协议

校验和

源地址 这个32位字段定义了源点的IP地址 (在IP数据报从源主机发送到目的主机的过程中,这个字段始终保持不变)

目的地址 这个32位字段定义了终点IP地址   

高层协议 值  1 ICMP  2 IGMP  6 TCP 17UDP  89 OSPF

 7.3 分片 

对于物理网络 ,分割数据报,使它能通过网络

7.3.1 最大传送单元 (MTU)

对于不同的物理网络协议,MTU的值是不同的 以太网的值是1500字节 FDDI局域网是4353字节 PPP是296字节

对数据报进行分片的主机或路由器必须改变三个字段的值 :标志,分片偏移和总长度。其余的各字段必须被复制。不管是否进行分片,校验和的值总是要重新计算的,只有数据报中的数据是分片的

7.3.2 与分片有关的字段

标识 16位字段标志了从源主机发送的一个数据报。

标志 这是3位的字段,第一位保留 第二位称为“不分片“位,如果这个值是1 ,机器就不能对该数据报进行分片;如果值为0,则可在必要时对这个数据报进行分片。第三位 “还有分片“位,若值为1 ,则表示这个数据报不是最后的分片,在这个分片之后还有更多的分片;若值为1 ,则表示已是最后的或唯一的分片

分片偏移

第十一章:单播路由协议

11.1.3 路由选择协议

需要动态的路由表,所以产生路由选择协议

路由选择协议:一些规则和过程的集合,使互联网中的各个路由器能够彼此互相通知变化信息。可以是内部协议(处理域内路由选择),可以说外部协议(处理路由选择)

11.2域内和域间路由选择

自治系统(AS):在管理机构管辖下的一组网络和路由器

每一个自治系统可以选择一个或多个域内路由选择协议处理内部,处理自治系统间的路由选择只能使用一种域间路由选择

域内路由选择协议:距离向量和链路状态

域间路由选择协议:路径向量

路由信息协议(RIP)是对距离向量协议的实现。开放最短路径优先(OSPF)协议是对链路状态协议的实现。边界网关协议(BGP)是对路径向量协议的实现。RIP和OSPF是内部路由选择协议,而 BGP是外部路由选择协议。

例11.1

不是所有的路由表都是在同一时间创建的,每个路由器会在启动时各建各的路由表

11.2.2计数到无穷大

距离向量路由选择存在的问题:任何有关代价下降的消息(好消息)都扩散得非常快,但是任何有关代价上升的消息(坏消息)扩散的非常慢。此问题称为计数到无穷大,通过多次更新才能使路由器把这段条中断链路的代价记录为无穷大。

二结点循环:B在收A的路由表之前,已经先发送自己的路由表给A,这个系统就会不稳定。分组会在A与B之间来回传送,产生二结点循环问题。

解决二结点不稳定性的办法:定义无穷大(距离向量协议大多数实现把16定位无穷大,意味着距离向量不能用于大系统中。各个方向,网络大小都不超过15跳)/分割范围

分割范围和毒性逆转:结点B在他给A的通告中删除了到X的路由,结点A不知道是由于分割范围策略(信息来源使A)还是由于B最近一直都没有收到有关X的任何信息。(距离向量协议使用一个计时器,长时间没有某个路由的信息,就会删去这个路由器。

三结点的不稳定性:二结点不稳定性可以用分割范围加上毒性逆转的方法避免,但是在三结点的不稳定性就不能保证。

11.4 RIP路由信息协议

在一个自治系统中使用的域内(内部)路由选择协议。基于距离向量路由选择的协议。

RIP直接实现距离向量路由选择,并有如下的一些考虑:

1.在一个自治系统中,我们打交道的是路由器和网络(链路),它们被表示为结点。

2.在路由表中,终点是一个网络,也就是说路由表的第一列定义的是一个网络地址。

3.RIP使用的度量非常简单。距离定义为到达终点所需通过的链路(网络)数。正是由于这个原因,RIP的度量称为跳数(hop count)。

4.无穷大被定义为16,这表示在一个使用RIP的自治系统中,任何路由都不能超过15跳。

5.“下一个结点”这一列定义分组为了到达终点而要发往的路由器的地址。

11.4.1 RIP报文格式

11.4.2 请求和响应

请求当路由器刚刚接入到网络上,或者路由器有一些表项超时了,它就要发送请求报文。请求报文可以询问某些特定的表项或者所有表项。

响应可以是询问的或非询问的。询问的响应仅在回答请求时才发出,它包含了在对应的请求中指明的终点的信息。而非询问的响应则是定期发送,如每隔30秒或当路由表中有变化时。这种响应有时称为更新分组。

11.4.3 RIP的计时器

RIP使用三个计时器来支持它的操作。定期(25~35秒)计时器控制报文的发送,截止期(180秒)计时器管理路由的有效性,而无用信息收集(120秒)计时器则通知某个路由出了故障。

定期计时器控制更新报文的定期发送。虽然协议指明这个计时器必须设置为30秒,但得到应用的模型使用的是25~35秒之间的一个随机数。是为了避免路由器因同时更新而可能会引起的同步操作,从而导致互联网过载。

每个路由器都有一个定期计时器,设置为25~35秒之间的一个随机数。它是一个倒数计时器,当计时到零时就发送出更新报文,然后把计时器再随机地设置一次。

截止期计时器管理路由的有效性。当路由器收到路由更新信息时,截止期计时器就为这个特定的路由设置到180秒。每当收到该路由的一个新的更新时,截止期计时器就要复位。在正常情况下,每隔30秒发生一次复位。但是,如果互联网中出了问题,并且在分配的180秒内没有收到任何更新报文,那么这个路由就被认为是过期了,而路由的跳数就被设置为16,这表示终点不可达。每一条路由有它自己的截止期。

无用信息收集计时器当某一条路由的信息变成无效时,路由器并不立即在路由表中清除这条路由。相反,路由器继续通告这个路由的度量为16。与此同时,一个称为无用信息收集计时器( garbage collection timer)的计时器就为该路由设置为120秒。当计数倒数到零时,相应的路由就从路由表中清除掉。这个计时器使得邻站在某个路由被清除之前能够了解该路由是无效的。

11.4.4 RIP版本2

目的:为了克服版本1的某些缺点。

版本2没有增加报文中每个表项的长度,只是把版本1中那些对TCP/IP协议填入0的那些字段改为一些新的字段。

无分类编址RIP的这两个版本之间的最重要的区别,可能是分类编址还是无分类编址。RIPv1使用分类编址。报文格式中只有一个表项用于网络地址(掩码是默认的)。RIPv2为子网掩码增加了一个字段,它可用来定义网络前缀的长度(我们可以使用无分类编址。一组网络可以合并为一个前缀,也可以合起来一并通知)

鉴别增加鉴别是为了保护报文防止未授权的通告。分组没有增加新的字段,但是报文的第一个表项被用于鉴别信息。为了指出这个表项是鉴别信息而不是路由选择信息,在系列字段中放入了FFFF16。第二个字段是鉴别类型,定义了鉴别所使用的协议,而第三个字段则包含真正的鉴别数据。

多播RIP版本1使用广播方式把RIP报文发送给每一个邻站(网络上的所有路由器都会接收到这些分组,而且所有的主机也都会接收这些分组)。但RIP版本2使用全路由器多播地址把RIP报文仅发送给这个网络上的RIP路由器。

11.4.5封装

RIP报文被封装在UDP用户数据报中。RIP报文不包括指示报文长度的字段。这可以从UDP分组来确定。在UDP中,指派给RIP的是熟知端口520。

11.5链路状态路由选择

使用链路状态路由选择时,如果某个域的每一个结点都有这个域的完整拓扑,也就是说具有这个域的结点和链路的列表并知道它们是怎样连接起来的,包括类型、代价(度量)和链路的状态(正常工作或故障),那么这个结点就能够使用Dijkstra算法构造一个路由表。

图中描绘了一个简单的有五个结点的域。每个结点都是利用相同的拓扑来创建路由表,但是每个结点的路由表却是独一无二的,因为路由表的计算是基于对这个拓扑的不同解释。

这个拓扑必须是动态的,它代表了每一个结点和每一条链路的最新状况。如果网络中的某处出现了变化(例如,一条链路出故障),那么每一个结点所知的拓扑必须更新。

没有哪个结点能够在一开始就知道这个拓扑,或者在网络中的某处发生变化后就立即知道。链路状态路由选择基于的假定:虽然没有这个拓扑的全局知识,但每一个结点知道其中的一部分。每个结点都知道它自己的链路的状态(类型、状态及代价)。换言之,整体拓扑可以从每一个结点的部分知识汇集而成。图11.18中描绘的是与前图一样的域,图中指出了属于每一个结点的部分知识。

结点A知道它以度量5连接到结点B,以度量2连接到C,以度量3连接到D。结点C知道它以度量2连接到结点A,以度量4连接到B,以度量4连接到E。结点D知道它仅以度量3连接到结点A。依此类推。虽然这些知识有重叠部分,但这种重叠能够保证产生一个公共的拓扑:给每一个结点提供一个完整域的图。

11.5.1构造路由表

链路状态路由选择中,需要四组动作来确保每一个结点的路由表能给出到达其他各结点的最小代价结点。

1.每个结点先创建一个有关链路状态的分组,称为链路状态分组或LSP。

2.以可靠和有效的方法向其他各个结点散发LSP,称之为洪泛。

3.为每个结点形成一个最短路径树。

4.基于这个最短路径树计算路由表。

链路状态分组的创建链路状态分组(LSP)可以携带大量的信息。但目前我们假定它携带了最少量的数据:结点标识、链路列表、一个序号以及寿命。其中前两个(结点标识和链路列表)是为构造拓扑所必需的。第三个(序号)是洪泛要用到的,并且可以把新的LSP和旧的LSP区分开。第四个(寿命)用来防止旧的LSP长时间在域中逗留。以下两种场合会产生LSP。

1.当这个域的拓扑发生变化时。

2. 基于定期更新(定期散发计时器通常1或2小时,为了确保洪泛不会产生太大信息量)

LSP的洪泛在结点准备好一个LSP后,它必须向其他所有结点散发。

1.产生LSP的结点把LSP的副本从它的每一个接口发送出去。

2.结点把收到的LSP和可能已经有的副本进行比较。如果新到达的LSP比原有的还旧(检查序号即可知道),就丢弃这个LSP。如果它比较新,这个结点就进行以下操作。

a.丢弃旧的LSP,保留新的。

b.除了这个分组到达的那个接口外,从其他所有接口发送这个LSP副本。这就保证了洪泛会在这个区域的某处(只有一个接口的结点)停止。

形成最短路径树:Dijkstra算法

在收到所有的LSP后,各个结点就会有一个完整拓扑的副本。但是我们还需要使用最短路径树找出到其他所有结点的最短路径。

树就是由结点和链路构成的图,其中有一个结点称为根。可以从这个根经过仅一条路径到达所有的其他结点。最短路径树就是这样的树,从根到每一个其他结点之间的路径都是最短的。Dijkstra算法可用来从一个给定的图产生一个最短路径树。这个算法使用了以下步骤。

1.初始化:选择作为树的根的结点,并把它加到路径中。为根的所有邻站设置从根到这些邻站之间的最短距离。设计根到它自己的最短距离为零。

2.循环:重复下面两个步骤,直至所有结点都被加入到路径中。

a.加入下一个结点到路径中:搜索不在路径中的结点。选择一个具有最小的最短距离的结点,把它加入到路径中。

b.更新:用刚才在第2步中移到路径中的结点来更新所有剩余结点的最短距离。

11.6 OSPF开放最短路径优先

11.6.1区域

一个区域( area)就是包含在自治系统中的一些网络、主机和路由器的集合。

在一个区域内的路由器使用洪泛法传送路由选择信息。区域边界路由器有关本区域的信息汇总起来发送到其他区域。在自治系统中的其他所有区域必须连接到主干上。在主干中的路由器称为主干路由器。主干路由器同时也可以是一个区域边界路由器。

若在主干和区域之间的连通性被破坏了,那么管理员必须在路由器之间创建一条虚链路,以使得作为一级区域的主干的各种功能能够继续下去。

每个区域都有一个区域标识。主干的区域标识是零。

11.6.2度量

OSPF 协议允许管理员给每条路由指派一个代价,称之为度量。度量可以基于服务的类型。一个路由器可以有多个路由表,而每一个路由表基于不同的服务类型。

11.6.3链路的类型

在OSPF术语中,一个连接称为一条链路。已定义了四种类型的链路:点对点链路穿越链路残桩链路虚拟链路

点对点链路直接连接两个路由器,中间没有任何其他的主机或路由器。

穿越链路连接了若干个路由器的一个网络。数据可以从任何一个路由器进入网络,并从任何一个路由器离开网络。具有两个或更多路由器的局域网和一些广域网都属于此种类型。

残桩链路仅连接了一个路由器的网络。数据分组通过这个路由器进入网络,而离开网络也是通过相同的路由器。是穿越网络的一种特例。我们可以用一个结点来表示这个路由器,并用指定路由器代表网络。这条链路是单向的,即只能从路由器到网络。

虚拟链路当两个路由器之间的链路断开时,管理员就要在它们之间用一条更长的路径来创建一条虚拟链路,这可能要经过好几个路由器。

11.6.5 OSPF分组

OSPF使用五种不同类型的分组:问候分组、数据库描述分组、链路状态请求分组、链路状态更新分组、链路状态确认分组

最重要的是链路状态更新分组,它本身就有五个不同的种类:路由器链路、网络链路、汇总链路到网络、汇总链路到AS边界路由器、外部链路

11.6.6 链路状态更新分组(OSPF运行的核心)

路由器用它来通告自己的链路状态。每个更新分组可包含几个不同的LSA(链路状态通告:路由器链路、网络链路、汇总链路到网络、汇总链路到边界路由器、外部链路)。五种LSA具有相同的通用首部。

路由器链路LSA定义的是连接真路由器的一条链路。真路由器使用这个通告来宣布它的链路的相关信息,以及链路的另一端是什么(邻站)。

路由器链路LSA通告了路由器(真路由器)的所有链路。

路由器链路LSA的字段:链路标识、链路数据

链路标识︰值取决于链路的类型。

链路数据:给出关于该链路的附加信息。它的值也取决于这条链路的类型

网络链路LSA定义的是连接网络的一条链路。一个指定的路由器代表穿越网络来发布这种类型的LSP。这个分组宣布了连接到本网络上的所有路由器的存在。

网络链路LSA的各字段如下:网络掩码连接的路由器

网络掩码:定义了网络掩码。

连接的路由器:这个重复出现的字段定义了所有相连路由器的P地址。

汇总链路到网络LSA在一个区域内部,路由器链路和网络链路都是通过洪泛的方法来通告有关路由器链路和网络链路的信息。但是,路由器还必须知道它的区域以外的网络情况,而区域边界路由器则能够提供这个信息。区域边界路由器是活跃在多个区域的路由器。它接收路由器链路和网络链路通告,并为每一个区域创建一个路由表。区域边界路由器使用汇总链路到网络LSA来宣布在这个区域以外的其他网络的存在。

汇总链路到网络LSA的各字段如下:

网络掩码:定义了网络掩码。

TOS:定义了服务类型。

度量:定义了在TOS字段中定义的服务类型的度量。

汇总链路到AS边界路由器LSA提供如何到达自治系统的一个边界路由器的路由的信息。区域边界路由器用洪泛方法传播此信息

外部链路LSA向自治系统内的路由器提供在自治系统外的哪一个网络是可用的的信息。

11.6.7 其他分组

问候报文OSPF使用问候报文建立邻站关系,并测试邻站的可达性。

数据库描述报文在路由器连接到系统之后,它就发送问候报文,向自己的邻站打招呼。若这些邻站是第一次收到这个路由器的信息,它们会发送数据库描述报文。

链路状态请求分组由需要一条或多条特定路由信息的路由器所发送出的分组。对它的回答则是链路状态更新分组。

链路状态确认分组OSPF强制路由器对所收到的每一个链路状态更新分组进行确认,这就使得路由选择更加可靠。

11.6.8封装

OSPF分组被封装成IP数据报。这些数据报包括确认机制以实现流量控制和差错控制。它们不需要通过运输层协议来提供这些服务。

11.8 BDP:边界网关协议

11.8.1自治系统的类型:残桩AS、多归属AS、转接AS。

11.8.2路径属性:熟知属性和可选属性。

11.8.5分组的类型:BGP使用四种不同类型的报文:打开、更新、保活和通知

11.8.7封装

BGP报文封装成TCP报文段,并使用熟知端口179。这表示不需要使用差错控制和流量控制。在TCP连接被打开后,就不停地交换着更新报文、保活报文和通知报文,直到发出停止类型的通知报文为止。

11.11本章小结

度量是对分组途经的网络通路指派的一个代价。路由器通过咨询其路由表来为分组决定一条最佳路径。

自治系统(AS)是在一个管理机构管辖之下的一组网络和路由器。RIP和OSPF都是流行的域内路由选择协议(也称为内部路由选择协议),用来在自治系统内部更新路由表。RIP基于距离向量路由选择,即每一个路由器定期与它的邻站共享关于整个自治系统的知识。OSPF 则把AS划分为一些区域,区域的定义是一些网络、主机和路由器的集合。OSPF基于链路状态路由选择,即每一个路由器向区域内的其他所有路由器发送其邻站的状态。

BGP是用来更新路由表的域间路由选择协议(也称为外部路由选择协议)。BGP所基于的路由选择方法称为路径向量路由选择。在这个协议中,分组必须经过的一些自治系统应当显式列出。路径向量路由选择没有距离向量路由选择的不稳定性,也没有环路问题。共有四种类型的BGP报文:打开、更新、保活以及通知。

第十二章 多播和多播路由协议

12.1.1 单播

在单播通信中,只有一个源点网络和一个终点网络。源点网络和终点网络的关系是一对一的。数据报途经的每一个路由器都要将这个分组仅从一个接口转发出去。

12.1.2 多播

在多播通信中,有一个源点和一组终点。这是一对多的关系。在这种类型的通信中,源地址是一个单播地址,而目的地址则是一个组地址,在这个组中包含了一个或多个目的网络,且在这些目的网络中至少含有一个有兴趣接收该多播数据报的组成员。组地址定义了组的成员

多播与多个单播的比较

多播是由源点发送单个分组,然后一路上由各个路由器复制这个分组。所有分组副本的目的地址都是一样的。在两个路由器之间只有一个分组副本在传送。

在多个单播中,从源点开始就发出多个分组。每个分组具有不同的单播终点。在两个路由器之间可能会有多个副本在传送。

用单播对多播进行仿真

可以用单播来模拟多播,但还需要一个单独的多播机制的原因:

1.多播比多个单播更加有效。在多个单播中,有些链路必须要处理多个副本。

2.在多个单播中,源点在产生这些分组时彼此之间会存在时延。在多播中,因为源点仅产生一个分组,所以不存在这种时延。

多播应用:访问分布式数据库、信息传播、电视会议、远程学习。

12.1.3 广播

在广播通信中,源点和终点的关系是一对所有。源点只有一个,但其他所有的主机都是终点。

12.2 多播地址

参加了多播组的一群主机的目的地址。用多播地址作为目的地址的分组能够被该组的所有成员都收到,除非接收方有某种过滤限制。

12.2.3 数据链路层多播分组的交付

不支持多播的网络:绝大多数广域网都不支持物理多播地址。要通过这样的网络发送一个多播分组就需要使用称之为隧道的处理过程。在使用隧道时,多播分组被封装成单播分组并通过网络传送,而当它出现在隧道的另一端时再转换为一个多播分组

12.3 IGMP国际组管理协议

多播路由器需要收集组成员的相关信息并与其他多播路由器共享。此类信息的收集工作分为两级:本地的和全球的。连接着某一个网络的多播路由器负责在本地收集此类信息,而收集到的信息可以传播到全球的其他路由器。前一个任务是通过IGMP协议完成的,而后一个任务则由多播路由选择协议完成。

网际组管理协议(IGMP)负责收集和解释一个网络中的组成员信息。IP层协议之一

12.3.1 组管理

IGMP不是一个多播路由选择协议,它是管理组成员关系的协议。GMP协议把连接到网络上的主机(路由器)的成员关系状态信息交给多播路由器。

IGMP是个组管理协议。它帮助多播路由器创建和更新与每一个路由器接口有关的忠实成员的列表。

IGMP经历了三个版本的发展。版本1和版本2提供的是任意源多播,不管是从哪来的多播报文,组成员都会接收。IGMP版本3则提供特定源多播( SSM),就是说接收者可以选择只接收来自预先定义好的源列表中的某个源的多播报文。

12.3.2 IGMP报文

IGMPv3有两种类型的报文:成员关系查询报文、成员关系报告报文。第一种类型有三种不同的格式:一般的格式、特定组的格式、特定组和源的格式

成员关系查询报文格式路由器为了找出网络中活跃的组成员而发送的报文。

成员关系查询报文的三个格式的不同作用:

a.在一般的查询报文中,发起查询的路由器探询每个邻站,使之报告组成员关系的完整列表(对任何多播组都感兴趣)。

b.在特定组的查询报文中,发起查询的路由器探询每个邻站,使之报告是否仍然对某个特定的多播组感兴趣。

c.在特定组和源的查询报文中,发起查询的路由器探询每个邻站,使之报告是否仍然对来自N个源之一的且到特定多播组的多播分组感兴趣,这些源的单播地址在分组中指明。

12.3.3 在主机上应用IGMP协议

接口状态套接字的记录中可能有重叠信息。两个或多个套接字可能具有同一个多播组的记录。为了提高效率,组管理要求将主机连接到网络的接口也要保存一个接口状态。合并记录存在的唯一问题就是对源列表的处理。

如果同一个多播组的记录具有两个或多个源列表,那么在合并源列表时需要遵守以下两个规则:

1.如果被合并的记录之中有某个记录具有exclude过滤模式,那么结果得到的接口记录也将具有exclude过滤模式,且源地址列表的生成方法如下:

a.对用exclude过滤的所有地址列表进行交集操作。

b.把a部分得出的结果与用include 过滤的所有地址列表进行差集操作。

2.如果被合并的所有记录都是include过滤模式,那么结果得到的接口记录也是include过滤模式,且新的源地址列表就是对所有地址列表的并集操作。

当任何一个套接字记录发生变化时,接口状态就要采用上述规则进行修改。

发送改变状态的报告不管接口状态有任何变化,主机都需要立即用相应的组记录为该多播组发送一个成员关系报告报文。

计时器到期当计时器到期时,主机就发送成员报告报文。不过,这个报文中包含的组记录的类型和数量都取决于到期的计时器。

报告抑制在IGMP前面的两个版本中,如果一台主机接收到了由另一台主机发送的报告,它就会取消接口状态中对应的计时器,也就是说抑制了正在等待发送的报告。而在 IGMPv3中,基于某些在RFC 3376中描述的原因,这个机制被从协议中被删除了。

12.9 本章小结

多播就是向多个接收者同时发送相同的报文。多播有很多应用,包括分布式数据库、信息发布、电视会议、远程学习。

在无分类编址中,地址块224.0.0.0/4被用作多播地址。这个地址块有时也称为多播地址空间,并且根据不同的用途被划分为几个小地址块。

在收集本地的组成员状态信息时要涉及到因特网组管理协议(IGMP)。IGMP最新的版本是IGMPv3,它使用了两种类型的报文:查询和报告。

第十三章 运输层简介

13.1.1 进程到进程的通信

运输层协议的首要任务是提供进程到进程的通信。进程是指使用了运输层服务的一个应用层实体(正在运行的程序)。

主机到主机的通信和进程到进程的通信之间的区别网络层负责计算机级的通信(主机到主机的通信)。网络层协议只能把报文交付给目的计算机,但这还不算是完整的交付,报文必须要交付到正确的进程,而这正是运输层协议所要做的事。运输层协议负责把报文交付给合适的进程。

传输层协议在应用进程之间提供逻辑通信服务。使得运行在不同主机上的应用进程可以相互联系。在发送方,传输层协议把应用进程发来的信息分割成报文段,并将报文段交给网络层去传递。在接收方,传输层协议把从网络层接收到的报文段组合起来交给应用进程。

13.1.2 编址:端口号

完成进程到进程的通信最常用的方法是通过客户-服务器范式。位于本地主机上的进程称为客户,它通常需要远程主机上的一个称为服务器的进程所提供的服务。

这两个进程(客户和服务器)应当具有相同的名称。

对通信来说,我们必须定义:本地主机本地进程远程主机远程进程

本地主机和远程主机都是通过IP地址来定义的。要定义进程,我们需要第二种标识,称为端口号。在TCP/IP协议族中,端口号是0~65535之间的整数。

客户程序通过一个端口号来定义自己,这种端口号称为临时端口号。建议为临时端口号取一个大于1023的整数,这样可使一些客户/服务器程序能正常工作。

服务器进程也必须用一个端口号来定义自己。但是这个端口号不能随机选取。

TCP/IP决定让服务器使用全球通用端口号,它们称为熟知端口号。Daytime服务器进程则必须使用熟知(永久的)端口号13。

在选择数据最后的终点时,IP地址和端口号起着不同的作用。目的IP地址定义了全世界无数台主机之中的某一台主机,而当这台主机被选定后,端口号则定义了在这台特定主机上运行的多个进程之中的某一个

ICANN定义的范围段:ICANN把端口号划分为三个范围段:熟知端口、注册端口和动态(或专用)端口

熟知端口0~1023的端口,由ICANN指派和控制

注册端口1024~49151的端口,ICANN既不指派也不控制,但它们必须在ICANN处注册以防止重复。

动态端口49152~65535的端口,既不用指派也不用注册。它们可被用作临时的或专用的端口号。最初的建议是客户使用的临时端口号应当在这个范围之内选择。但是,大多数系统并没有遵循这个建议。

熟知端口号小于1024

套接字地址TCP协议族的运输层协议在建立连接时,需要在连接的两端同时使用P地址和端口号。IP地址和端口号的组合就称为套接字地址。客户套接字地址唯一地定义了一个客户进程,正如服务器套接字地址唯一地定义了一个服务器进程一样。

要在因特网中使用运输层的服务,我们需要有一对套接字地址:客户套接字地址和服务器套接字地址。这四个信息是网络层分组首部和运输层分组首部中的一部分。前一套接字地址

个首部中包含了IP地址,而后一个首部中则包含了端口号。

13.1.3 封装和解封

为了把报文从一个进程发送到另一个进程,运输层协议要对报文进行封装和解封。

封装发生在发送方。当进程想要发送一个报文时,就把这个报文递交给运输层,随之一起递交的还包括一对套接字地址和其他一些信息,其具体内容取决于运输层协议。运输层接收数据并为之添加运输层首部。在因特网中,运输层的分组也称为用户数据报、数据段或分组。

解封发生在接收方。当报文到达目的运输层后,首部被拆除,然后运输层将报文交付给在应用层运行的进程。如果接收方需要对收到的报文进行

13.1.4 复用和分用

当一个实体接受来自多个源的输入时,就称为复用(多到一),而当一个实体将数据交付到多个源时,就称为分用(一到多)。源点的运输层执行的是复用,而终点的运输层执行的是分用

13.1.5 流量控制

当一个实体产生数据而另一个实体消耗这些数据时,数据的产生速度和消耗速度之间应当达到某种平衡。如果数据产生的速度比消耗的速度快,那么消耗方就会因来不及处理而被迫丢弃一些数据。如果数据产生的速度比消耗的速度慢,消耗方就需要等待,从而使得整个系统的效率降低。我们需要防止的是发生在消耗端的数据丢失

推送或拉取从生产者到消耗者的数据交付可以通过两种方式:推送或者拉取。如果发送方只要数据一产生就发送出去,不管消耗方之前是否请求过这些数据,这样的交付方式就称为推送。如果发送方只有在消耗方请求之后才发送这些数据,那么这样的交付方式就称为拉取。

当生产者推送数据时,消耗者可能会因数据太多而来不及处理,所以就需要在反方向上进行流量控制,以防止数据被丢弃。当消耗者拉取数据时,它是在自己准备好的情况下才会提出请求,因而此时不需要流量控制。

运输层的流量控制在运输层的通信中,我们需要与四个实体打交道:发送方进程、发送方运输层、接收方运输层、接收方进程。

应用层的发送进程仅仅是一个生产者。它产生报文块并将其推送到运输层。

发送方的运输层要扮演两个角色:它既是消耗者也是生产者。它要消耗被生产者推送过来的报文,同时还要将这些报文封装成分组,并推送给接收方的运输层。

接收方的运输层也要扮演两个角色:它既是消耗者,因为它要消耗来自发送方的报文,也是生产者,因为它要将报文解封后交付到应用层。不过,最后的交付通常是一种拉取交付,也就是说运输层会等待应用层的进程过来索取这些报文。

至少需要两种情况下的流量控制:从发送方的运输层到发送方的应用层以及从接收方的运输层到发送方的运输层。

缓存流量控制最常见的一种解决方法是使用两个缓存。一个位于发送方的运输层,而另一个位于接收方的运输层。此处的缓存是指可以在发送方和接收方用来保存分组的一组存储器。而对于流量控制的通信则可以通过从消耗者向生产者发送信号来实现。

当发送方的运输层缓存满溢时,它就通知应用层停止传递报文块,而当它又有了空位置时,就通知应用层可以再次传递报文块了。

当接收方的运输层缓存满溢时,它就通知发送方的运输层停止发送分组,而当它又有了空位置时,就通知发送方的运输层可以再次发送分组了。

13.1.6 差错控制

负责从发送方运输层向接收方运输层运送分组的网络层(IP)是不可靠的,如果应用程序要求可靠性,那么我们就必须让运输层变得可靠。在运输层中加入差错控制来实现其可靠性。运输层的差错控制负责:

1.检测并丢弃损坏的分组。

2.跟踪丢失和丢弃的分组并重传它们。

3.识别重复的分组并丢弃它们。

4.保存失序到达的分组,直至缺失的分组全部抵达。

差错控制只涉及到发送方的运输层和接收方的运输层。与流量控制一样,在大多数时间都是由接收方的运输层来管理差错控制,它会通知发送方的运输层出现了什么问题。

序号差错控制要求发送方的运输层知道哪个分组应当被重传,而接收方的运输层则要了解如果分组的首部中有m位用于序号,那么这个序号的范围就是从0到(的m次方)一1。例如,如果m是4,那么序号就只能是在0到15之间。

·对于差错控制,序号是模2(的m次方)的,其中m是序号字段的位数。

确认:用正信号或者负信号来实现差错控制。只要一个或一组分组安全且完好地到达了,那么接收方就可以为它们发送一个确认(ACK)。

13.1.7 流量控制和差错控制的组合

流量控制要求使用两个缓存,一个在发送方,另一个在接收方。差错控制要求双方使用序号和确认号。如果使用了两个带编号的缓存,一个在发送方,另一个在接收方,那么这两个需求就可以合二为一。

在发送方,当为分组的发送而做准备时,可以使用缓存中下一个空位的编号x作为该分组的序号。当该分组被发送时,它的一个副本就保存在该存储器中的rx位置上,直至收到来自另一端的确认。当与已发送分组相关的确认到达时,存储器中该分组的副本就被清除,从而使该存储位置变为空闲。

在接收方,当序号y的分组到达时,就将其保存在存储器的y位置上,直到应用层准备好接收它,同时可以发送一个确认以声明分组y已经到达。

滑动窗口序号是模2(的m次方)的,从0至(的m次方)-1的序号可以表示为一个环。

缓存被表示为一组小格子,称为滑动窗口,在任何时候它们都占据了圆的一部分。

13.1.8 拥塞控制

一个网络中的负载(也就是发送到网络上的分组数量)大于网络的容量(也就是网络能够处理的分组数量),这个网络就有可能发生拥塞拥塞控制指的是用来控制拥塞,以使负载保持低于容量的机制和技术。

只要是涉及到等待的系统都会发生拥塞。

网络或者互联网中的拥塞是由于路由器或交换机中有一些队列,也就是在分组被处理之前或之后用来保存这些分组的缓存。分组被放入合适的外出队列并等待轮到自己被发送。这些队列空间是有限的,因此到达路由器的分组数量有可能会大于路由器能够保存的分组数量。

拥塞控制指的是能够在拥塞发生之前预防它,或者在拥塞发生之后消除它的技术和机制。

开环拥塞控制:在拥塞发生之前使用一些策略来预防拥塞。在此类机制中,拥塞控制可以由源点也可以由终点来处理。

重传策略有时重传是不可避免的。发送方觉得一个发送出去的分组丢失或损坏了,那么这个分组就需要重传。重传可能会加重网络的拥塞,但好的重传策略可以预防拥塞。这就需要将重传策略以及重传计时器设计得能够优化效率,同时还能够预防拥塞。

窗口策略发送方窗口的类型也可能会影响到拥塞。对于拥塞控制来说选择重传窗口就要比返回N窗口好。

确认策略由接收方实施的确认策略也有可能会影响拥塞。如果接收方不是对每一个收到的分组都进行确认,那么也能够使发送方放慢发送速率,因而有助于预防拥塞。在这种情况下可以使用几种方式。接收方可以仅仅在自己有分组要发送时,或者在一个特殊的计时器到期时才发送一个确认。接收方也可以决定一次为N个分组发送确认。发送的确认越少,给网络带来的负担也越轻。

闭环拥塞控制闭环拥塞控制机制试图在拥塞发生后缓解拥塞的程度。我们要描述的是在运输层中使用的机制。发送方的窗口大小可以是灵活的。决定发送方窗口大小的一个因素就是因特网的拥塞状况。发送方的运输层可以通过观察分组的丢失情况来监视因特网的拥塞状况,如果拥塞状况恶化,就用一种策略来减小窗口大小,反之亦然。

13.1.9 无连接的和面向连接的服务

运输层协议也可以提供两种类型的服务:无连接的服务和面向连接的服务。不过这两种服务在本质上与网络层的不同。在网络层,无连接的服务意味着属于同一报文的多个数据报采取了不同的路径。而在运输层,我们并不关心分组采取什么物理路径(我们假设在两个运输层之间有一条逻辑连接),运输层的无连接服务表示分组和分组之间是互相独立的,而面向连接的服务则意味着它们相互之间有联系。

无连接的服务在使用无连接的服务时,源进程(应用程序)需要将它的报文分割成大小可被运输层接受的数据块,并将这些数据块逐个地交付到运输层。运输层视这些数据块为独立的数据单元,块和块之间没有联系。当来自应用层的一个数据块到达后,运输层就把它封装到一个分组中,然后发送这个分组。

在无连接服务的情况下,没有哪种流量控制、差错控制或拥塞控制策略能够有效实施。

面向连接的服务在使用面向连接的服务时,客户和服务器首先要在它们之间建立一条连接。数据的交换只能是在连接建立之后发生。在数据交换完成后,该连接需要被拆除。运输层面向连接的服务与网络层面向连接的服务有所不同。在网络层,面向连接的服务意味着两端的主机及其中间的路由器之间的协调一致。而在运输层,面向连接的服务仅涉及两个主机,也就是说服务是端对端的。不管是无连接的网络层协议,还是面向连接的网络层协议,我们都能在上面使用面向连接的运输层协议

能够在面向连接的协议中实施流量控制、差错控制和拥塞控制。

有限状态机不管是提供无连接的服务,还是面向连接的服务,一个运输层协议的行为可以很好地用一个有限状态机(FSM)来表示。图13.15就是用FSM表示的运输层协议。有限状态机总是处在某一种状态中,直到有一个事件发生。

13.2 运输层协议

13.2.1 简单协议

·简单协议是一个无连接协议,既没有流量控制,也没有差错控制。

13.2.2 停止等待协议

面向连接的协议,称为停止等待协议,它使用了流量控制和差错控制。

发送方和接收方都使用了大小为1的滑动窗口。发送方一次发送一个分组,然后在发送下一个分组之前要先等待一个确认。为了检测损坏的分组,我们需要在每个数据分组中增加一个检验和,并在分组到达接收方后检查它。如果检验和不正确,就说明分组损坏了,这个分组被悄无声息地丢弃掉接收方的沉默对发送方来说就是一个信号,说明分组不是损坏了就是丢失了。发送方在每发送一个分组时要启动一个计时器。如果在计时器到期之前确认到达了,计时器就停止计时,发送方继续发送下一个分组(如果它还有分组要发送的话)。如果该计时器超时,那么发送方就假定分组丢失或者损坏了,因而重传前一个分组。这就意味着发送方需要保存分组的副本直至它的确认到达为止

在任何时候信道中都只有一个分组和一个确认

停止等待协议是一种面向连接的协议,它提供了流量控制和差错控制。

·在停止等待协议中,流量控制通过迫使发送方等待确认来实现,差错控制通过丢弃损坏的分组并让发送方在计时器超时后重传未确认的分组来实现

序号为了防止重复的分组,协议使用了序号和确认号。

·在停止等待协议中,我们可以使用1位字段来为分组编号。这个序号基于模2运算。

确认号:因为序号必须既适合数据分组,又适合确认,所以我们有以下约定:确认号总是声明了接收方准备接收的下一个分组的序号。

在停止等待协议中,确认号总是声明了模2运算的下一个希望接收的分组序号

发送方有一个控制变量,我们称之为S ,它指向发送窗口中唯一的空格。接收方也有一个控制变量,我们称之为R,它指向接收窗口中唯一的空格。

·在停止等待协议中,所有的计算都是模2的。

FSM

停止等待协议的FSM。

阻塞状态 当发送方处于此状态时,可能会发生的事件有三个:

1.如果一个无差错的ACK到达,且它的确认号指向下一个要发送分组,也就是说ackNo=(S+ 1) mod 2,那么计时器停止计时,窗口滑动使S=(S+ 1) mod2。最后发送方进入准备好状态。

2.如果一个损坏的ACK到达,或者虽无差错但ackNo≠(S+ 1) mod 2的ACK到达,这个ACK被丢弃。

3.如果计时器超时,发送方重新传送那个唯一的待确认分组,并重启计时器。

接收方︰接收方总是在准备好状态。变量R的初始值为0。有三个事件可能会发生:

1.如果一个seqNo=R的无差错分组到达,那么这个分组中的报文被交付给应用层。然后窗口滑动到R=(R+ 1 ) mod 2,最后发送一个ackNo=R的ACK。

2.如果一个seqNo ≠R的无差错分组到达,这个分组被丢弃,但是要发送ackNo = R的一个ACK。

3.如果一个损坏的分组到达,这个分组被丢弃。

停止等待协议的优点是简单,缺点是信道利用率太低。

效率如果我们的信道又粗又长,那么停止等待协议是非常低效率的。所谓粗是指我们的信道有较大的带宽(高数据率),而所谓长是指往返时延较长。它们俩的乘积被称为带宽时延积。带宽时延积是对发送方在等待接收方确认的同时能够通过系统传送的比特数的度量。

例13.5

假设在一个停止等待系统中,线路带宽是1 Mbps,且1比特的往返时间是20毫秒。它的带宽时延积是多少?如果这个系统的数据分组长度是1000比特,这条线路的利用率是百分之几?

一个协议能够一次最多发送15个分组,然后再停下来等待它们的确认,此时线路的利用率的百分比是多少?

它的带宽时延积是(1×10的六次方)×(20×10的负三次方)=20000比特。利用率仅为1000/20000或5%。系统能够在一个往返时间内发送15个分组或者说15000 比特。这就意味着利用率可以达到15000/20000或75%。当然,如果其中有损坏的分组,这个利用率会因为分组的重传而大大降低。

流水线方式在组网或其他领域内,一个任务通常会在它的前一个任务结束之前就已经开始了。停止等待协议中不使用流水线方式,因为发送方必须等待前一个分组到达它的终点并被确认之后才能发送下一个分组。但是,在我们要介绍的下面两个协议中都使用了流水线方式,因为发送方在接收到对前几个分组的反馈之前还可以再发送几个分组。因为相对于固定的带宽时延积,传送的比特数量变大了,流水线方式提高了传输的效率。

13.2.3 返回N协议

为了提高传输的效率(填满管道),在发送方等待确认时应当有多个分组正在传送中。第一个协议称为返回N(GBN)。返回N协议的关键是我们在收到确认之前能够发送多个分组,但接收方只能缓存一个分组。发送方为发送出去的分组保存副本直至确认到达。在信道中同时可存在多个数据分组和确认。

序号:m是序号字段的长度,单位比特

·返回N协议中,序号必须是模2(的m次方)的,其中m是序号字段的长度,以比特为单位。

确认号一个累计值,定义了下一个希望接收的分组的序号。如果确认号(ackNo)是7,就表示一直到序号6之前的所有分组都已安全完好地到达了,并且接收方正在期盼的是序号为7的分组。

·在返回N协议中,确认号是一个累积值,定义了希望下一个到达的分组的序号。

发送窗口一个想象的方框,它覆盖了正在传送的或可以传送的数据分组的序号。窗口的最大值是2的m次方一1。我们令这个窗口大小固定,并设置为最大值,但有一些协议可能使用可变的窗口大小。

Sf(发送窗口,第一个待确认的分组),Sn(发送窗口,下一个要发送的分组),Ssize(发送窗口,大小)。变量Sf定义了第一个(最老的)待确认分组的序号。变量Sn保存的是分配给下一个将要发送的分组的序号。最后,变量Ssize定义了窗口大小,在我们的这个协议中是它固定的。

·发送窗口是一个抽象化的概念,它定义了一个想象的方框,最大窗口为2(的m次方)➖1,且具有三个变量:Sf、Sn和Ssize.

·当ackNo在Sf和Sn之间(采用模运算)的一个无差错的ACK到达后,发送窗口就向前滑动一格或多格。

接收窗口保证了正确的数据分组被接收,且正确的确认分组被发送。在返回N协议中,接收窗口大小总是1。只有序号与Rn的值相匹配的那一个分组才能被接收和确认。接收窗口也要滑动,但一次只滑动一格。当一个正确的分组被接收后,窗口就滑动到Rn=(Rn+1 ) mod 2的m次方。

·接收窗口是一个抽象概念,定义了一个大小为1且只有一个变量R,的想象的方框。当一个正确的分组到达后,这个窗口就滑动,且一次只滑动一格.

计时器:虽然每个发送出去的分组都可以有一个计时器,但在我们的协议中总共只使用了一个计时器。原因是第一个待确认的分组总是会最先超时。当这个计时器超时后,我们就重传所有待确认的分组。

重传分组:当计时器超时后,发送方重传所有待确认的分组。例如,假设发送方已经发送了分组6 (Sn= 7),但唯一的那个计时器超时了。如果Sf=3,那就是说分组3、4、5和6都尚未被确认,发送方返回到前面,重传分组3、4、5和6。这就是为什么这个协议叫做返回N的原因。一旦超时,发送方就返回到N位置并重传所有分组。

FSM:

GBN的FSM:

在选择重传协议中,确认号定义了无差错地接收到的那一个分组的序号。

★例13.8

图13.29所示为在一个分组丢失后发生的情况。分组0、1、2和3被发送。但是分组1丢失了。接收方收到分组2和3,但它们因失序到达而被丢弃(期盼的是分组1)。当接收方收到分组2和3时,它会发送ACK1来表示自己期盼分组1。但是这些ACK对于发送方没有起到什么作用,因为这个ackNo等于S,而不是大于S,因此发送方丢弃它们。当超时事件发生后,发送方重传分组1、2和3,然后它们被确认。

返回N与停止等待的比较

读者可能发现在返回N协议与停止等待协议之间有相似之处。停止等待协议实际上就是一种返回N协议,不过它只有两个序号且发送窗口大小为1。换言之就是m=1且2的m次方-1=1。在返回N协议中,我们说计算都是模2的m次方的,在停止等待协议中计算都是模2的,当m=1时模2和模2的m次方是一样的。

13.2.4 选择重传协议

返回N协议具有一种雪崩效应并有可能导致网络完全崩溃。

选择重传(SR)协议,只重传选择的分组,也就是真正丢失的分组。

窗口:两个窗口:一个发送窗口和一个接收窗口。但是这个协议中的两个窗口与返回N协议中的两个窗口有所不同。发送窗口的最大值要小得多,是2的m次方―1;其次,它的接收窗口与发送窗口一样大。

发送窗口的最大值可以是2的m次方-1。例如,如果m = 4,那么序号就是从0到15,但窗口的最大值只能是8(在返回N协议中,这个值是15)。

选择重传的接收窗口与返回N协议的接收窗口完全不同。它的接收窗口与发送窗口一样大(最大为2的m次方-1)。选择重传协议允许与接收窗口大小一样多的分组失序到达并且保存这些分组直到连续的一组分组被交付给应用层。因为发送窗口大小与接收窗口的相同,所以发送出来的所有分组都可以失序到达,而且会被保存直到交付为止。在一个可靠的协议中,接收方是永远不会把分组失序地交付给应用层的。

计时器:GBN将所有待确认的分组当作一个整体对待,而SR则分别对待每一个分组。但是,大多数应用了SR的运输层协议仅使用了一个计时器。因此我们也只使用一个计时器。

确认:这两个协议之间还存在其他一些区别。在GBN中,ackNo是累计的,它定义了下一个希望接收的分组的序号,同时也证实了在此之前的所有分组都已经安全完好地被接收了。在SR中,ackNo只定义了安全完好地收到的那一个分组的序号,并不反馈任何其他分组的信息。

在选择重传协议中,确认号定义了无差错地接收到的那一个分组的序号。

例13.9

假设发送方发送了6个分组:分组0、1、2、3、4和5。发送方接收到一个ackNo为3的ACK。如果这个系统使用的是GBN或者是SR,它的含义各是什么?

如果系统使用的是GBN,它就表示分组0、1和2都已被接收且无损坏,接收方现在期盼的是分组3。如果系统使用的是SR,它就表示分组3已经被接收且无损坏,这个分组没有说有关其他分组的任何事。

FSM:

选择重传协议(SR)的FSM

在选择重传协议中,发送窗口和接收窗口的最大值只能是2(的m次方)的一半。

13.2.5 双向协议:捎带

在这一节我们讨论的四种协议全部都是单向的:数据分组仅在一个方向流动,而确认从另一个方向传过来。但是在现实生活中数据分组通常都是双向流动的:从客户到服务器,并且从服务器到客户。这就意味着确认也需要双向流动。一种称为捎带的技术可用于提高双向协议的效率。

利用捎带实现双向GBN协议。客户和服务器各使用两个独立的窗口:发送窗口和接收窗口。

13.5 本章小结

运输层协议的主要任务是提供进程到进程的通信。要定义进程,我们就需要端口号。

客户进程用一个临时端口号来定义自己。服务器用一个熟知端口号来定义自己。为了把报文从一个进程发送到另一个进程,运输层协议要对报文进行封装和解封。

封装发生在发送端,解封发生在接收端。

源点的运输层执行报文的复用,就是从多个进程那里收集报文并传输。终点的运输层执行分用,就是把报文交付给不同的进程。

流量控制用于平衡生产者和消耗者之间数据的交换。在运输层,当消耗者尚未准备好接收分组时,我们就用缓存来保存这些分组。运输层的可靠性通过加入差错控制来实现,包括检测损坏的分组,重传丢失的以及损坏的分组,丢弃重复的分组,并为失序到达的分组重新排序。要管理流量控制和差错控制,我们使用了序号来为分组编号,并使用确认号指向编号的分组。

运输层能够提供两种类型的拥塞控制:开环的和闭环的。在开环拥塞控制中,协议试图避免拥塞的发生。在闭环拥塞控制中,协议试图在拥塞发生之后检测并解除拥塞。

运输层协议能够提供两种类型的服务:无连接的和面向连接的。在无连接的服务中,发送方不用建立任何连接就可以向接收方发送分组。在面向连接的服务中,客户和服务器首先要在它们之间建立一条连接。只有在连接建立后才能交换数据。而当数据交换完毕后,连接需要被拆除。

简单无连接协议既不提供流量控制,也不提供差错控制。面向连接的停止等待协议提供了流量控制和差错控制,但是效率很低。返回N协议是停止等待协议的效率较高的一个版本,它利用了流水线方式。选择重传协议是对返回N协议的改进,它在处理分组丢失上更具优势。所有这些协议都能通过捎带技术实现双向传输。

猜你喜欢

转载自blog.csdn.net/m0_45863636/article/details/121786443