快速回顾 不断更新
概述
互联网的两个重要基本特点:连通性和共享性
1.2互联网概述
计算机网络由结点和链路组成
互联网基础结构发展的三个阶段
- 单个网络ARPANET向互联网发展的过程;
- 建成了三级结构的互联网:主干网,地区网和校园网;
- 形成了多层次ISP结构的互联网:主干 地区 本地
制定互联网的正式标准三个阶段
- 互联网草案
- 建议标准 RFC文档
- 互联网标准
1.3 互联网的组成
- 边缘部分:由各主机构成,用户直接进行信息处理和信息共享;核心部分:由各路由器连网,负责为边缘部分提供服务。
- 客户-服务器方式(服务请求方 服务提供方);对等连接方式P2P
- 电路交换(建立连接-通话-释放连接)的主要特点:在通话的全部时间内,通话的两个用户始终占用端到端的通信资源。效率低。
分组交换(使用存储转发技术)的主要特点:
- 概念:报文(要发送的整块数据)—划分—->数据段 —加上含必要控制信息的首部—->分组(在互联网中传送的数据单元)
- 路由器用来转发分组(分组交换):收分组->存储->检查首部->查找转发表->(根据首部中的目的地址找到合适的接口)转发出去
- 特点:分组交换在传送数据之前不必先占用一条端到端的链路的通信资源,分组在哪段链路上传送才占用这段链路的通信资源。(分组带来的新问题:时延和资源开销)
- 电路交换、报文交换和分组交换的主要优缺点。
- 电路交换:端对端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高。
- 报文交换:无须预约传输带宽,动态逐段利用传输带宽对突发式数据通信效率高,通信迅速。
- 分组交换:具有报文交换之高效、迅速的要点,且各分组小,路由灵活,网络生存性能好。
1.5 计算机网络的类别
- 按作用范围分类:广域网、城域网、局域网、个人区域网
- 按使用者分类:公用网、专用网
- 接入网:让用户能够与互联网连接
1.6 计算机网络的性能
- 性能指标:
- 速率
- 带宽(本指某个信号具有的频带宽度,后又指网络中某通道传送数据的能力)
- 吞吐量
- 时延(包括发送时延[帧长/发送速率]、传播时延[信道长度/电磁波信道传播速率]、处理时延、排队时延)
- 时延带宽积(传播时延*带宽)
- 往返时间RTT(收方收到数据,给送方发送确认才可继续得到数据,等待的这段时间即往返时间)
- 利用率(信道利用率和网络利用率。注意利用率过高会产生很大的时延)
- 非性能特征:费用、质量、标准化、可靠性、可扩展性可升级性、易于管理维护
- 注意:对于高速网络链路,提高的仅是数据的发送速率而非比特在链路上的传播速率
1.7 计算机网络体系结构
- 开放系统互连基本模型OSI/RM,TCP/IP
- 网络协议主要由 语法(数据与控制信息的结构或格式)、语义(需要发出何种控制信息,完成何种动作以及做出何种响应)、同步(事件实现顺序的详细说明) 三个要素组成
- TCP/IP
- 应用层(任务:通过应用进程间的交互来完成特定网络应用;数据单元为报文)
- 传输层(任务:向两台主机中进程之间的通信提供通用的数据传输服务;复用和分用功能;两种协议:传输控制协议TCP[报文段]、用户数据报协议UDP[用户数据报])
- 网络层(任务:为分组交换网上的不同主机提供通信服务;数据单元为数据报封装成的分组/包)
- 数据链路层(数据报封装成的帧)
- 物理层(比特)
物理层
物理层要解决的主要问题:
- 物理层要尽可能地屏蔽掉物理设备和传输媒体,通信手段的不同,使数据链路层感觉不到这些差异,只考虑完成本层的协议和服务
- 给数据链路层在一条物理的传输媒体上传送和接收比特流的能力,为此物理层应该解决物理连接的建立、维持和释放问题
- 在两个相邻系统之间唯一地标识数据电路
一个数据通信系统可划分为三大部分:源系统(源点、发送器、接收器、终点)、传输系统、目的系统
概念
- 数据:是运送信息的实体。
- 信号:则是数据的电气的或电磁的表现。
- 模拟数据:运送信息的模拟信号。
- 模拟信号:连续变化的信号。
- 数字信号:取值为有限的几个离散值的信号。
- 数字数据:取值为不连续数值的数据。
- 码元(code):在使用时间域(或简称为时域)的波形表示数字信号时,代表不同离散数值的基本波形。
- 单工通信:即只有一个方向的通信而没有反方向的交互。
- 半双工通信:即通信和双方都可以发送信息,但不能双方同时发送接收。
- 全双工通信:即通信的双方可以同时发送和接收信息。
- 基带信号(即基本频带信号)——来自信源的信号。像计算机输出的代表各种文字或图像文件的数据信号都属于基带信号。
- 带通信号——把基带信号经过载波调制后,把信号的频率范围搬移到较高的频段以便在信道中传输(即仅在一段频率范围内能够通过信道)。
调制分两大类:1.仅仅对基带信号的波形进行变换的基带调制(编码);2.把基带信号的频率范围搬移到较高的频段,并转换为模拟信号成为带通信号的叫做带通调制
常用编码方式
- 归零制/不归零制 正1负0
- 曼彻斯特编码:中心向上跳变为0,向下跳变为1(可反)
- 差分曼彻斯特编码:中心处都有跳变。边界有跳变为0,无跳变为1
基本的带通调制方法:调幅、调频、调相
信道的极限容量
- 码间串扰:信号中的高频分量在传输时受到衰减,接收端收到的信号波形失去了码元之间的清晰界限
- 奈氏准则:在任何信道中,码元传输的速率有上限。超过上限就会出现码间串扰的问题。(注意:如果信道的频带越宽,能通过的信号高频分量则越多,则速率上限可以更高)
- 信噪比(信号的平均功率和噪声的平均功率之比):信噪比(dB)=10log10(S/N)
- 香农公式:指出信道的极限信息传输速率 C=Wlog2(1+S/N) (bit/s) (W为信道的带宽Hz,S为信道内所传信号的平均功率,N为信道内部的高斯噪声功率) 表明:信道的带宽或信道中的信噪比越大,信息的极限传输速率就越高
物理层下的传输媒体
- 分为两大类:导引型传输媒体(电磁波沿固体媒体传播)和非导引型传输媒体(自由空间中电磁波的传输)
信道复用技术
- 频分复用:同样时间占用不同的带宽资源
- 时分复用:不同时间占用同样的频带宽度
- 统计时分复用:改进的时分复用。用户有了数据就随时发往集中器的输入缓存,然后集中器按顺序依次扫描输入缓存,把缓存中的输入数据放入STDM帧中
- 波分复用:光的频分复用
码分复用
- 每一个用户可以在同样的时间使用同样的频带进行通信,由于各用户使用经过特殊挑选的不同码型,因此不会造成干扰
- 工作原理
- 每一个比特时间再划分为m个短间隔(码片)
- 使用CDMA的每一个站被指派一个唯一的m bit码片序列
- 一个站如果要发送比特1,则发送自己的m bit码片序列;0则该序列的二进制反码;
- 注意:1.每一个站分配的码片序列不同切正交;2.任何一个码片向量和该码片向量自己的规格化内积都是1
码分复用例题
- 共有4个站进行码分多址通信。4个站的码片序列为
A:(-1-1-1+1+1-1+1+1)
B:(-1-1+1-1+1+1+1-1)
C:(-1+1-1+1+1+1-1-1)
D:(-1+1-1-1-1-1+1-1)
现收到这样的码片序列S:(-1+1-3+1-1-3+1+1)。问哪个站发送数据了?发送数据的站发送的是0还是1? - 解:
S·A=(+1-1+3+1-1+3+1+1)/8=1, A发送1;
S·B=(+1-1-3-1-1-3+1-1)/8=-1, B发送0;
S·C=(+1+1+3+1-1-3-1-1)/8=0, C无发送;
S·D=(+1+1+3-1+1+3+1-1)/8=1, D发送1
数据链路层
- 数据链路层使用的信道主要有两种:点对点信道(一对一);广播信道(一对多)
- 数据链路与链路的区别在于数据链路除链路外,还必须有一些必要的规程来控制数据的传输,因此,数据链路比链路多了实现通信规程所需要的硬件和软件。
- 数据链路层的三个基本问题:封装成帧(帧定界)、透明传输(指输入可以放在帧中完整地传输过去;解决办法:用转义字符进行字节/符填充)、差错检测
差错检测
- 传输差错分为两类:1. 比特差错(解决:CRC) 2. 帧丢失、帧重复、帧失序(解决:帧编号、确认和重传机制)
- 使用循环冗余检验CRC:
- 商议除数P(n+1位)
- 在要发送的数据后增加冗余码n位0
- 增加了位数的数据/P得出余数
- 余数=0无差错
- 注意:用多项式表达除数 如P(X)=X3+X2+1=1101
- 仅仅使用CRC只能做到对帧的无差错接受(凡接收到的帧均无差错)。
点对点协议PPP
- 三个组成部分
- 一个将IP数据报封装到串行链路的方法
- 一个用来建立、配置和测试数据链路连接的链路控制协议LCP
- 一套网络控制协议NCP
- PPP协议的状态图
- 局域网优点:
- 具有广播功能
- 便于系统的扩展和逐渐演变,各设备的位置可灵活调整和改变
- 提高了系统的可靠性、可用性和生存性
- 局域网按网络拓扑分类:星形网、环形网、总线网
共享信道的两种技术方法
静态划分信道:频分复用、时分复用、波分复用和码分复用
动态媒体接入控制(多点接入):特点是信道并非在用户通信时固定分配给用户
- 随即接入:特点是所有的用户可随机地发送信息,产生碰撞时都失败
- 受控接入:特点是用户不能随机地发送信息而必须服从一定的控制。例如:令牌环局域网和集中控制的多点线路探询/轮询
以太网的两个标准:1. DIX Ethernet V2 标准 2. IEEE 的 802.3 标准
适配器(即网卡)来实现数据链路层和物理层这两层的协议的硬件和软件, 网络适配器工作在TCP/IP协议中的网络接口层(OSI中的数据链里层和物理层)
适配器重要功能
- 进行数据串行/并行转换
- 对数据进行缓存
- 在计算机的操作系统安装设备驱动程序
- 实现以太网协议
为了通信简便,以太网采取的措施
- 采用较为灵活的无连接的工作方式(不建立连接直接发送数据,数据帧不进行编号,也不要求对方发回确认,不可靠交付)
- 以太网发送的数据都使用曼彻斯特编码的信号。最大的问题是:出现一长串的连1或连0时,接收端无法从收到的比特流中提取同步信号。使用差分解决的话,其所占的频带宽度比原始的基带信号增加了一倍
比特时间:发送一比特所需的时间
CSMA/CD 协议(载波监听多点接入/碰撞检测)要点
- 多点接入:说明这是总线型网络
- 载波监听:用电子技术检测总线上有没有其他计算机也在发送
- 碰撞检测(冲突检测):边发送边监听
- 争用期(碰撞窗口):经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
- 截断二进制指数退避算法:发生碰撞时,发送站推迟一个随机时间再发送
- 规定了基本退避时间为争用期512比特时间
- int K=min(重传次数,10),从[0~2k-1]中随机取一个数r
- 推后r倍争用期的时间重传
- 如果重传16次仍不成功,丢弃帧并报告
概念
- 强化碰撞:一旦发现发生了碰撞时,立即停止发送数据并继续发送人为干扰信号
- CSMA/CD协议过程
- 准备发送
- 检测信道:空闲则发
- 边发送变监听
4.1 发送成功:争用期无碰撞
4.2 发送失败:重传
以太网信道利用率
- 极限信道利用率Smax=$\frac{发送帧所需时间}{发送帧所需时间+传输帧所需时间(即\frac{1}{2}争用期)}$=$\frac{1}{1+a}$,其中a为$\frac{传输帧所需时间}{发送帧所需时间}$;只有当a远小于1才能得到尽可能高的极限信道利用率
扩展的以太网
- 在物理层扩展以太网:(优)跨系通信、扩大以太网覆盖范围;(缺)数据碰撞、不同以太网技术不能互连
- 在数据链路层扩展以太网:无碰撞、自学习(避免兜圈子:生成树协议STP主机之间无环路的树状结构)
网络层
4.1 网络层提供的两种服务
网络层提供的两种服务
- 虚拟电路服务
- 数据报服务
互联网采用的设计思路:网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
网络层不提供服务质量的承诺
4.2 网际协议IP
与IP协议配套使用的还有三个协议:
- 地址解析协议ARP(Address Resolution Protocol);
- 网际控制报文协议ICMP(Internet Control Message Protocol);
- 网际组管理协议IGMP(Internet Group Management Protocol)
由于网际协议IP是用来使互连起来的许多计算机网络能够进行通信的,因此TCP/IP体系中的网络层常常被称为网际层或IP层
4.2.1 虚拟互连网络
因为用户的需求是多种多样的,没有一种单一的网络能够适应所有用户的需求
将网络互相连接起来要使用一些中间设备
- 物理层:转发器
- 数据链路层:网桥或桥接器
- 网络层:路由器
- 网络层以上:网关
当中间设备是转发器或网桥时,这仅仅是把一个网络扩大了,一般并不称之为网络互连
由于历史原因,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关
虚拟互连网:也就是逻辑互连网络,就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用IP协议的虚拟互连网络可简称为IP网。
互联网可以由多种异构网络互连组成
4.2.2 分类的IP地址
整个互联网就是一个单一的、抽象的网络
IP地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32位的标识符
IP地址现在由互联网名字和数字分配机构ICANN进行分配
IP地址的编址方法共经过了三个历史阶段
- 分类的IP地址
- 子网的划分
- 构成超网
分类的IP地址:将IP地址划分为若干个固定类,每一类地址都由两个固定长度的字段自称,其中第一个字段是网络号,(它标志主机或路由器所连接到的网络,一个网络号在整个互联网范围内必须是唯一的。)第二个字段是主机号。(它标志该主机或路由器,一台主机号在它前面的网络号所指明的网络范围内必须是唯一的。)由此可见,一个IP地址在整个互联网范围内是唯一的。
这种两级IP地址可以记为:IP地址 ::={<网络号>,<主机号>}
由图中可以看出:
- A类、B类和C类地址的网络号字段分别为1个、2个和3个字节长,而在网络号字段的最前面有1-3位的类别位,其数值分别规定为0,10和110
- A类、B类和C类地址的主机号字段分别为3个、2个和1个字节长
从IP地址的结构来看,IP地址并不仅仅指明一台主机,还指明了主机所连接到的网络。
点分十进制:把32位的IP地址中的每8位插入一个空格,为了便于书写,可用等效的十进制数字表示。
A类网络号字段占1个字节,只有7位可供使用,但可指派的网络号是2^7-2=126。(减2:网络号字段为全0的IP地址是保留地址,意为本网络;网络号为127即01111111保留作为本地软件环回测试)
A类主机号占3个字节,每一个A类网络中的最大主机数为2^24-2(减2原因:全0的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址;而全1的主机号字段表示该网络上的所有主机)
A类地址空间共有2^31个地址,占IP地址空间2^32的50%
B类网络号字段有2个字节,B类可指派的网络数为2^14-1(减1原因:B类网络128.0.0.0不指派,最小可指派128.1.0.0)
B类地址的每一个网络上的最大主机数是2^16-2(减2:要扣除全0和全1主机号)
B类地址空间共有2^30个地址,占IP地址空间2^32的25%
C类地址有3字节的网络号字段,可指派网络总数2^21-1(减1原因:C类网络192.0.0.0不指派,最小可指派192.0.1.0)
C类最大主机数2^8-2
C类地址空间共有2^29个地址,占IP地址空间2^32的12.5%
IP地址具有的重要特点:
- IP地址是一种分等级的地址结构。分等级的好处是:
- IP地址管理机构在分配IP地址时只分配网络号(第一级),而剩下的主机号(第二级)则由得到该网络号的单位自行分配。这样就方便了IP地址的管理。
- 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目标主机号),这样就可以使路由表中的项目数大幅度减少,从而减少了路由表所占的存储空间以及查找路由表的时间。
- 实际上IP地址是标志一台主机(或路由器)和一条链路的接口。
- 用转发器或网桥连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络号。
- 在IP地址中,所有分配到网络号的网络都是平等的。(互联网平等对待每一个IP地址)
需要注意:
- 在同一个局域网上的主机或路由器的IP地址中的网络号必须是一样的
- 用网桥互连的网段仍然是一个局域网,只能有一个网络号
- 路由器总是具有两个或两个以上的IP地址
- 当两个路由器直接相连时(例如通过一条租用线路),在连线两端的接口处,可以分配也可以不分配IP地址。
4.2.3 IP地址与硬件地址
IP地址和硬件地址的区别:
- 物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧的首部中。只有在剥去MAC帧的首部和尾部后把MAC层的数据上交给网络层后,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。
- IP地址放在IP数据报的首部,而硬件地址放在MAC帧的首部。所以在数据链路层看不见数据报的IP地址。
注意:
- 在IP层抽象的互联网上只能看到IP数据报
- 虽然在IP数据报首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择。
- 在局域网的链路层,只能看见MAC帧
- 尽管互连在一起的网络的硬件地址体系各不相同,但IP层抽象的互联网却屏蔽了下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或路由器之间的通信。
4.2.4 地址解析协议ARP
ARP协议(网络层)用途:为了从网络层使用的IP地址,解析出在数据链路层使用的硬件地址。
ARP协议要点:
- 网络层使用的是IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址。ARP解决这个问题的方法是:在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新。
- 每一台主机都设有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。当主机要向本局域网上的某台主机B发送IP数据报时,先查找ARP高速缓存中有无B的IP地址:
- 找得到:找出其对应的硬件地址,将其写入MAC帧,然后通过局域网发送MAC帧。
- 找不到:
- ARP进程在本局域网上广播发送一个ARP请求分组
- 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组
- 主机B的IP地址与请求分组中要查询的一致。B收下这个ARP请求分组,向主机A发送ARP响应分组,同时在响应分组中写入自己的硬件地址。
- A收到ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
生存时间:ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间,反超过时间的项目就从高速缓存中删除掉
注意:ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。
ARP的四种典型情况:
- 主机-同网络上的主机
- 主机-另一网络上的主机 (找同网上的路由器)
- 路由器-同网上主机
- 路由器-另一网络上的主机 (找同网上的路由器)
为什么我们还要使用抽象的IP地址,而不直接使用硬件地址进行通信:全世界存在各式各样的网络,它们使用不同的硬件地址,要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事。
4.2.5 IP数据报的格式
4.2.6 IP层转发分组的流程
- 在互联网上转发分组时,是从一个路由器转发到下一个路由器。
- 对每一条路由最主要的是以下两个信息:(目的网络地址,下一跳地址)
- 根据目的网络地址来确定下一跳路由器,可得出结果:
- IP数据报最终一定可以找到目的主机所在目的网络上的路由器
- 只有到达最后一个路由器时,才试图向目的主机进行直接交付
- 特定主机路由:虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例——对特定的目的主机指明一个路由,即特定主机路由。
- 默认路由:以减小路由表所占用的空间和搜索路由表所用的时间。
- 既然IP数据报中没有下一跳路由器的IP地址,那么待转发的数据报又怎样能够找到下一跳路由器呢:当路由器收到一个待转发的数据报,在从路由表得出的下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而是送交数据链路层的网络接口软件。网络接口软件负责把下一跳路由器的IP地址转换成硬件地址(必须使用ARP),并将此硬件地址放在链路层的MAC帧的首部。
- 分组转发算法如下:
- 从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N
- 若N就是与此路由器直接相连的某个网络地址,则进行直接交付。否则继续
- 若路由表中有目的地址为D的特定主机路由,则传送。
- 若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器。
- 若路由器中有一个默认路由,则把数据报传送给它。
- 否则报告转发分组出错。
4.3 划分子网和构造超网
4.3.1 划分子网
IP地址设计不合理处:
- IP地址空间的利用率有时很低
- 给每一个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏
- 两级IP地址不够灵活
为了解决上述问题,在IP地址中又增加了一个子网号字段,变成了三级IP地址。
划分子网的基本思路:
- 一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网
- 划分子网的方法是从网络的主机号借用若干位作为子网号,主机号也就相应减少了同样的位数。(IP地址::={<网络号>,<子网号>,<主机号>})
- 凡是从其他网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付目的主机。
使用子网掩码的好处是:不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位的“与”运算,就立即得出网络地址来。
在不划分子网时,既然没有子网,为什么还要使用子网掩码:为了便于查找路由表。
默认子网掩码:
- A类地址:255.0.0.0 或0xFF000000
- B类地址:255.255.0.0 或0xFFFF0000
- C类地址:255.255.255.0 或0xFFFFFF00
子网掩码是一个网络或一个子网的重要属性
子网数是根据子网号计算出来的。若子网号有n位,则共有2^n种可能的排列。除去全0或全1这两种情况,就得出子网数。
若使用较少位数的子网号,则每一个子网上可连接的主机数就较多。所以,划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。
[例4-2]已知IP地址是141.14.72.24,子网掩码是255.255.192.0,试求其网络地址?
- IP地址转化为2进制:10001101 00001110 01001000 00011000
- 子网掩码转为2进制:11111111 11111111 11000000 00000000
- 网络地址将这两个按位相与:10001101 00001110 01000000 000000
- 转为十进制为:141.14.64.0 即为网络地址
4.3.2 使用子网时分组的转发
- 注意:使用子网划分后,路由表必须包含三项内容:目的网络地址,子网掩码和下一跳地址
- 路由器转发分组的算法如下:
- 从收到的数据报的首部提取目的IP地址D
- 先判断是否直接交付:对路由器直接相连的网络逐个进行检查,用各网络的子网掩码和D逐位相与,看是否和相应的网络地址匹配,
- 否则,若路由表中有目的地址为D的特定主机路由,则传送
- 否则,对路由表中的每一行(三项内容),用其中的子网掩码和D逐位相与,结果为N,若N与该行目的网络地址匹配,则传送
- 否则,若路由表中有一个默认路由,则传送
- 否则,报告转发分组出错
4.3.3 无分类编址CIDR(构造超网)
- 使用变长子网掩码VLSM(Variable Length Subnet Mask)可进一步提高IP地址资源利用率,在其基础上又进一步研究出无分类编址方法,正式名字为:无分类域间路由选择
- CIDR最主要的特点为
- CIDR消除了传统的A类、B类和C类地址以及划分子网的概念。IP地址::={<网络前缀>,<主机号>};CIDR还使用斜线记法(CIDR记法):在IP地址后面加上斜线’/‘,然后写上网络前缀所占的位数
- CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”,我们只需要知道地址块中的任何一个地址,就可以知道这个地址块的起始地址和最大地址。如128.14.35.7/20= 10000000 00001110 00100011 00000111; 其最小地址为10000000 00001110 00100000 00000000 = 128.14.32.0; 其最大地址为10000000 00001110 00101111 11111111 = 128.14.47.255;
- 为了更方便地进行路由选择,CIDR使用32位的地址掩码。其中1的个数就是网络前缀的长度。如/20地址块的地址掩码(子网掩码)是:11111111 11111111 11110000 00000000 (20个连续的1)斜线记法中,斜线后面的数字就是地址掩码中1的个数
- 注意:“CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为子网字段。但分配到一个CIDR地址块的单位,仍然可以划分出子网。如:分配到地址块/20 可以继续划分为8个子网(即需要从主机号中借来3位),这时每一个子网的网络前缀就变成23位
- 由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络,这种地址的聚合常称为路由聚合(构成超网),它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由。
- CIDR记法有多种形式,如地址块10.0.0.0/10 可简写为10/10,也就是把点分十进制中低位连续的0省略。另一种简化表示方法是在网络前缀的后面加一个星号 如:00001010 00*(在星号之前是网络前缀,而星号表示IP地址种的主机号,可以是任意值)
- 网络前缀越短,其地址块所包含的地址数就越多。在三级结构的IP地址中,划分子网是使网络前缀变长。
- 由于采用了网络前缀这种记法,路由表种每个项目则由“网络前缀”和“下一跳地址”组成,但可能得到不止一个匹配结果,这时应从匹配结果中选择具有最长网络前缀的路由。叫做“最长前缀匹配”,又称最长匹配/最佳匹配
- 使用二叉线索查找路由器:可以先找出对应于每一个IP地址的唯一前缀。所谓唯一前缀就是在表中所有IP地址中,该前缀是卫衣的。这样就可以用这些唯一前缀来构造二叉线索。(P146)
4.4 网际控制报文协议ICMP
- ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告
- ICMP是互联网的标准协议,但不是高层协议,而是IP层的协议。(ICMP报文装在IP数据报中,作为其中的数据部分)
4.4.1 ICMP报文的种类
- ICMP差错报告报文
- 终点不可达
- 时间超过
- 参数问题
- 改变路由(重定向)
- ICMP询问报文
- 回送请求和回答
- 时间戳请求和回答
4.4.2 ICMP应用举例
- 分组网间探测PING。用来测试两台主机之间的连通性。使用了ICMP回送请求和回送回答报文。
- tracetoute/tracert 用来跟踪一个分组从源点到终点的路径。使用了ICMP时间超过差错报告报文
4.5 互联网的路由选择协议
4.5.1 有关路由选择协议的几个基本概念
理想的路由算法
- 算法必须是正确的和完整的
- 算法在计算上应简单
- 算法应能适应通信量和网络拓扑的变化(自适应性/稳健性)
- 算法应具有稳定性
- 算法应是公平的
- 算法应是最佳的
最佳只能是相对于某一种特定要求下得出的较为合理的选择而已
如果从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则有两大类
- 静态路由选择策略(又称非自适应路由选择,用人工配置每一条路由)
- 动态路由选择策略(自适应路由选择)
自治系统AS是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。
一个AS对其他AS表现出的是一个单一的和一致的路由选择策略
互联网把路由选择协议划分为两大类:
- 内部网关协议IGP,如RIP和OSPF
- 外部网关协议EGP,如BGP
自治系统之间的路由选择也叫做域间路由选择,而在自治系统内部的路由选择叫做域内路由选择
4.5.2 内部网关协议RIP
1.工作原理
RIP是一种分布式的基于距离向量的路由选择协议
RIP协议要求网络中每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
RIP将距离定义为:从一路由器到直接连接的网络的距离定义为1;从一路由器到非直接相连的网络的距离定义为所经过的路由器数+1
RIP协议的距离也称为跳数,因为每经过一个路由器,跳数就+1
RIP认为好的路由就是它通过的路由器数目少,即距离短
距离等于16时即相当于不可达,可见RIP只适用于小型互联网
三个要点:1. 和哪些路由器交换信息?交换什么信息?在什么时候交换信息?
RIP协议的特点是:
- 仅和相邻路由器交换信息
- 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表
- 按固定的时间间隔交换路由信息
路由器在刚刚开始工作时路由表是空的,每个路由器也只和数目非常有限的相邻路由器交换并更新路由信息
路由表更新的原则是找出每个目的网络的最短距离,这种更新算法又称为距离向量算法
2.距离向量算法
- 对每一个响铃路由器发送过来的RIP报文进行以下步骤:
- 对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为X,并把所有的“距离”字段都+1.
- 对修改后的RIP报文中的每一个项目做出修改:
1 | if(原来的路由表中没有目的网络N){ |
若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,把距离置为16
- RIP协议让一个自治系统中的所有路由器都和自己相邻路由器定期交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)
3.RIP协议的报文格式
- RIP存在的一个问题是:当网络出现故障时,要经过较长时间才能将此信息传送到所有的路由器
- RIP的这一特点叫做:好消息传播得快,坏消息传播得慢
- RIP协议最大的优点就是:实现简单,开销较少
4.5.3 内部网关协议OSPF
1.OSPF协议的基本特点
开放最短路径优先Open Shortest Path First
OSPF只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径”
OSPF最主要的特征就是使用分布式的链路状态协议,而不是像RIP那样的距离向量协议
OSPF的三个要点和RIP都不一样:
- 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息;对于RIP协议,发送的信息是“到所有网络的距离和下一跳路由器”
- 只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息,不像RIP定期交换路由表
由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库,这个数据库实际上就是全网的拓扑结构图。这个拓扑结构图在全网范围内是一致的(这称为连路状态数据库的同步)。而RIP协议的每一个路由器虽然知道到所有的网络的距离以及下一跳路由器,但却不知道全网的拓扑结构
OSPF的更新过程收敛得快是其重要特点
为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域。好处:把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
为了使每一个区域能够和本区域以外的区域进行通信,OSPF使用层次结构的区域划分。在上层的区域叫做主干区域。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。从其他区域来的信息都由区域边界路由器进行概括。
在主干区域的路由器叫做主干路由器。
在主干区域内还要有一个路由器专门和本自治系统外的其他自治系统交换路由信息,这样的路由器叫做自治系统边界路由器
OSPF不用UDP而直接用IP数据报传送,OSPF构成的数据报很短,这样做可减少路由信息的通信量;数据报很短的另一好处是可以不必将长的数据报分片传送
2.OSPF的五种分组类型
OSPF的五种分组类型:
- 问候分组,用来发现和维持邻站的可达性
- 数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 链路状态请求分组,向对方请求发送某些链路状态项目的详细信息
- 链路状态更新分组,用洪泛法对全网更新链路状态
- 链路状态确认分组,对链路更新分组的确认
OSPF规定,每两个相邻路由器每隔10秒要交换一次问候分组,若有40秒没有收到某个相邻路由器发来的问候分组,则可认为该相邻分组路由器是不可达的,应立即修改链路状态数据库,并重新计算路由表
其他4种分组都是用来进行链路状态数据库的同步,同步即是指不同路由器的链路状态数据库的内容是一样的。
两个同步的路由器叫做“完全邻接的”路由器
OSPF让每一个路由器用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息。经过与相邻路由器交换数据库描述分组后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。通过一系列的这种分组交换,全网同步的链路数据库就建立了。
OSPF使用的是可靠的洪泛法,在收到更新分组后要发送确认
为了确保链路状态数据库与全网的状态保持一致,OSPF规定每隔一段时间要刷新一次数据库中的链路状态
OSPF没有“坏消息传播得慢”的问题
OSPF对多点接入的局域网采用了指定的路由器的方法,使广播的信息量大大减少。指定的路由器代表该局域网上所有的链路向连接到该网路上的各路由器发送状态信息
4.5.4 外部网关协议BGP
为什么在不同自治系统AS之间的路由选择不使用内部网关协议而使用BGP?
- 互联网的规模太大,使得自治系统AS之间路由选择非常困难。比较合理的做法是在自治系统之间交换“可达性”信息(例如,告诉相邻路由器:“到达目的网络N可经过自治系统ASx”)
- 自治系统AS之间的路由选择必须考虑有关策略
边界网关协议BGP只能是力求寻找一条能够达到目的网络且比较好的路由(不能兜圈子),而并非寻找一条最佳路由。
BGP采用了路径向量路由选择协议,它与距离向量协议(如RIP)和链路状态协议(如OSPF)都有很大的区别
在配置BGP时,每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”。一般来说,两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器,但也可以不是BGP边界路由器
一个BGP发言人与其他AS的BGP发言人要交换路由信息,就要先建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话。使用TCP连接交换路由信息的两个BGP发言人,彼此成为对方的邻站或对等站
BGP协议交换路由信息的结点数量级是自治系统个数的量级,这要比这些自治系统中的网络数少很多
要在许多自治系统之间寻找一条较好的路径,就是要寻找正确的BGP发言人(或边界路由器)
BGP支持无分类域间路由器选择CIDR
在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表,但以后只需要在发生变化时更新有变化的部分
4.5.5 路由器的构成
1.路由器的结构
- 路由器是一种具有多个输入输出端口的专用计算机,其任务是转发分组
- 整个的路由器结构可划分为两大部分:路由选择部分和分组转发部分
- 路由选择部分也叫控制部分,其核心构件是路由选择处理机
- 分组转发部分由三部分组成:交换结构、一组输入端口和一组输出端口
- 交换结构又称为交换组织,它的作用是根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去
- 转发和路由选择是有区别的:转发就是路由器根据转发表把收到的IP数据报从路由器合适的端口转发出去,仅仅涉及到一个路由器;但路由选择涉及到很多路由器,这些路由器按照复杂的路由算法,得出整个网络的拓扑变化情况,因而能够动态地改变所选择的路由,并由此构造出整个的路由表
- 转发表是从路由表得出的,在讨论路由选择的原理时,往往不去区分转发表和路由表的区别,而可以笼统地都使用路由表这一名词
- 一个路由器的输入端口和输出端口就做在路由器的线路接口卡上
- 输入端口中的查找和转发功能在路由器的交换功能中是最重要的。为了使交换功能分散化,往往把复制的转发表放在每一个输入端口中,路由选择处理机负责对各转发表的副本进行更新。这些副本常称为“影子副本”
- 路由器必须以很高的速率转发分组,最理想的情况是输入端口的处理速率能够跟得上线路把分组传送到路由器的速率。这种速率称为线速
- 当一个分组正在查找转发表时,后面又紧跟着从这个输入端口收到另一个分组,这个后到的分组就必须在队列中排队等待,因为产生了一定的时延
- 输出端口从交换结构接收分组,然后把她们发送到路由器外面的线路上。在网络层的处理模块中设有一个缓冲区,实际上它就是一个队列
- 分组在路由器的输入输出端口都可能会在队列中排队等待处理。若分组处理的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到0.这就使后面再进入路由器中的分组由于没有存储空间而只能被丢弃
2.交换结构
- 把分组从一个输入端口转移到某个合适的输出端口
- 现代路由器和早期路由器的区别就是:目的地址的查找和分组再存储器中的缓存都是在输入端口中进行的
- 通过总线进行交换:数据报从输入端口通过共享的总线直接传送到合适的输出端口,而不需要路由选择处理机的干预。路由器的转发带宽受总线速率的限制
- 通过纵横交换结构进行交换。这种交换机构常称为互连网络。当输入端口收到一个分组时,就将它发送到与该输入端口相连的水平总线上。若通过所要转发的输出端口的垂直总线是空闲的。则在这个结点将垂直总线和水平总线接通,然后将该分组转发到这个输出端口。但若该垂直总线已被占用,则后达的分组就被阻塞,必须再输入端口排队。
4.6 IPv6
4.6.1 IPv6的基本首部
IPv6仍支持无连接的传送,但将协议数据单元PDU称为分组,而不是IPv4的数据报
IPv6所引进的主要变化如下
- 更大的地址空间
- 扩展的地址层次结构
- 灵活的首部格式
- 改进的选项 IPv6的首部长度是固定的
- 允许协议继续扩充
- 支持即插即用(即自动配置)
- 支持资源的预分配
- IPv6首部改为8字节对齐
IPv6数据报由两大部分组成,即基本首部和后面的有效载荷(也称为净负荷,允许有0或多个扩展首部,在后面是数据部分)
4.6.2 IPv6的地址
一个IPv6数据报的目的地址可以是以下三种基本类型地址之一:
- 单播
- 多播
- 任播 任播的终点是一组计算机,但数据报只交付其中的一个,通常是距离最近的一个
IPv6把实现IPv6的主机和路由器均称为结点
IPv6使用冒号十六进制记法,它把每个16位的值用十六进制值表示,各值之间用冒号分隔
冒号十六进制记法可以允许零压缩,即一连串连续的0可以为一对冒号所替代 FF05:0:0:0:0:0:0:B3 -> FF05::B3 规定再任一地址中只能使用一次零压缩
见P175表4-10 IPv6的地址分类
4.7 IP多播
4.7.1 IP多播的基本概念
- 能够运行多播协议的路由器称为多播路由器,多播路由器当然也可以转发普通的单播IP数据报
- 在互联网上进行多播就叫IP多播,IP多播所传送的分组需要使用IP多播地址
- 其实多播组的标识符就是IP地址中的D类地址,多播数据报和一般的IP数据报的区别就是它使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明使用网络组管理协议IGMP
- 显然,多播地址只能用于目的地址,而不能用于源地址。此外,对多播数据报不产生ICMP差错报文。因此,在PING命令后面键入多播地址,将永远不会收到响应
- IP多播可以分为两种,一种是只在本局域网上进行硬件多播,另一种则是在互联网的范围进行多播
4.7.2 在局域网上进行硬件多播
- P180图4-54 D类IP地址与以太网多播地址的映射关系
4.7.3 国际组管理协议IGMP和多播路由选择协议
1.IP多播需要两种协议
- IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格来说是主机上的某个进程)参加或推出了某个多播组
- 连接在局域网上的多播路由器还必须和互联网上其他多播路由器协同工作,以便把数据报用最小代价传送给所有的组成员,这就需要使用多播路由选择协议
- 多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化);单播路由选择通常是在网络拓扑发生变化时才需要更新路由
- 多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要这个多播数据报从什么地方来和要到什么地方去
- 多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员的网络
2.国际组管理协议IGMP
IGMP使用IP数据报传递其报文(即IGMP报文加上IP首部构成IP数据报),但它也向IP提供服务。因此我们不把IGMP看成是一个单独的协议,而是属于整个网际协议IP的一个组成部分
从概念上将,IGMP的工作可分为两个阶段
- 第一阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员。本地多播路由器收到之后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其他多播路由器
- 第二阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机,一边知道这些主机是否还继续是组的成员
IGMP设计得很仔细,避免了多播控制信息给网络增加大量的开销。IGMP采用的一些具体措施如下:
- 在主机和多播路由器之间的所有通信都是使用IP多播
- 多播路由器在探询组员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文
- 当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系
- 在IGMP的询问报文中有个数值N,它指明一个最长响应时间,对应于最小时延的响应最先发送
- 同一个组内的每一台主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送了
3.多播路由选择协议
- 多播路由选择实际上就是要找出以源主机为根节点的多播转发树
- 在转发多播数据报时使用了以下三种方法
- 洪泛与剪除:适用于较小的多播组,而所有的组成员接入的局域网也是相邻接的。采用了叫做反向路径RPB(每一个路由器在收到一个多播数据报时,先检查数据报是否是从源点经最短路径传送来的)策略
- 隧道技术:适用于多播组的位置在地理上很分散的情况,两个路由器之间的网络不支持多播,其中一个路由器就对多播数据报进行再次封装,加上普通数据报首部,使之成为向单一目的站发送的单播数据报,然后通过“隧道”发送
- 基于核心的发现技术:对于多播组的大小在较大范围内变化时都适合。这种方法是对每一个多播组G指定一个核心路由器,给出它的IP单播地址。
4.8 虚拟专用网VPN和网络地址转换NAT
4.8.1 虚拟专用网VPN
- 专用地址只用于一个机构的内部通信,而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。采用这样的专用IP地址的互连网络成为专用互联网或本地互联网(或专用网),专用IP地址也叫做可重用地址
- 利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网有称为虚拟专用网VPN
- 由场所A和B的内部网络所构成的虚拟专用网VPN又成为内联网VPN,表示AB属于同一个机构
- 有时一个机构的VPN需要有某些外部机构参加进来,这样的VPN就称为外联网VPN
- 远程接入VPN:在外地工作的员工通过拨号接入互联网,而驻留在员工个人电脑中的VPN中的VPN软件可以在员工的个人电脑和公司的主机之间建立VPN隧道
4.8.2 网络地址转换NAT
- 所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和互联网连接
- 通过NAT路由器的通信必须由专用网内的主机发起
- 使用端口号的NAT也叫做网络地址和端口号转换NAPT,NAPT把源IP地址和TCP端口号都进行转换(如果使用UDP则对UDP端口号进行转换)
运输层
5.1 运输层协议概述
5.1.1 进程之间的通信
从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它是面向通信部分的最高层,同时也是用户功能中的最底层
两台主机进行通信就是两台主机中的应用进程互相通信。通信的真正端点并不是主机而是主机中的进程->端到端的通信是应用进程之间的通信
运输层有一个很重要的功能:复用(指在发送方不同的应用进程都可以使用同一个运输层协议传输数据,当然需要加上适当首部)和分用(指接收方的运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程)
运输层提供应用进程间的逻辑通信:好像这种通信就是沿水平方向直接传送数据。但事实上这两个运输层之间没有一条水平方向的物理连接。数据的传送是经过多个层次传送的
网络层和运输层的明显区别:
- 网路层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信
- 运输层还要对收到的报文进行差错检测。在网络层,IP数据报首部中的检验和字段,只检验首部是否出现差错而不检查数据部分
运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP
运输层向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别:当运输层采用面相连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道
5.1.2 运输层的两个主要协议
- 用户数据报协议UDP
- 传输控制协议TCP
- 两个对等运输实体在通信时传送的数据单位叫做运输协议数据单位TPDU。但在TCP/IP体系中,则根据所使用的协议是TCP或UDP,分别称之为TCP报文段或UDP用户数据报
- UDP在传送数据之前不需要先建立连接,远地主机的运输层在收到UDP报文后,不需要给出任何确认
- TCP则提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放链接。TCP不提供广播或多播服务
5.1.3 运输层的端口
- 运输层使用协议端口号(端口)。虽然通信的终点是应用进程,但只要把所传送的报文交到目的主机的某个合适的目的端口,剩下的工作就由TCP或UDP来完成
- 硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址
- 端口号只具有本地意义,它只是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口
- 两个计算机中的进程要互相通信,不仅必须知道对方的IP地址,而且要知道对方的端口号
- 运输层的端口号分为两大类:
- 服务器端使用的端口号:熟知端口号(系统端口号)数值为0-1023;登记端口号,数值1024-49151,这类端口号是为没有熟知端口号的应用程序使用的
- 客户端使用的端口号:数值49152-65535.由于这类端口号仅在客户进程运行时才动态选择,因此又叫做短暂端口号
5.2 用户数据报协议UDP
5.2.1 UDP概述
- 用户数据报协议UDP只在IP的数据报服务之上增加了很少一点的功能,这就是复用分用的功能以及差错检测的功能
- UDP主要特点:
- UDP是无连接的。即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延
- UDP使用尽最大努力交付。即不保证可靠交付,因此主机不需要维持复杂的连接状态表
- UDP是面向报文的。应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。保留这些报文的边界
- UDP没有拥塞机制,因此网络出现的拥塞不会使源主机的发送速率降低
- UDP支持一对一,一对多,多对一和多对多的交互通信
- UDP的首部开销小
5.2.2 UDP的首部格式
5.3 传输控制协议TCP概述
5.3.1 TCP最主要的特点
TCP特点
- TCP是面向连接的运输层协议
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
- TCP提供可靠交付的服务
- TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据
- 面向字节流。虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。TCP中的“流”指的是流入到进程或从进程流出的字节序列
TCP报文段先要传送到IP层,加上IP首部后,再传送到数据链路层。再加上数据链路层的首部和尾部后,才离开主机发送到物理链路。
TCP并不关心应用进程一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥塞程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)
5.3.2 TCP的连接
- TCP把连接作为最基本的抽象
- 每一条TCP连接有两个端点,TCP连接的端点叫套接字socket或插口。(端口号拼接到IP地址即构成了套接字)
- 套接字socket=(IP地址:端口号)
- 每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定,即:TCP连接::={socket1,socket2}={(IP地址1:端口号1),(IP地址2:端口号2)}
5.4 可靠传输的工作原理
- 理想的传输条件有以下两个特点:
- 传输信道不产生差错
- 不管发送方以多块的速度发送数据,接收方总是来得及处理收到的数据
5.4.1 停止等待协议
- “停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组
1.无差错情况
发送方收到了接收方对分组的确认后就再发送下一个分组
2.出现差错
- 超时重传:发送方只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组
- 要实现超时重传,就要在每发送完一个分组时设置一个超时计时器,如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器
- 注意三点:
- 发送方在发送完一个分组后,必须暂时保留已发送的分组的副本
- 分组和确认分组都必须进行编号
- 超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些
3.确认丢失和确认迟到
发送方没有收到确认采取重传,接收方收到重传的分组应采取两个行动:
- 丢弃这个重复的分组,不向上层交付
- 向A发送确认
采取了确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信,这类可靠传输协议常称为自动重传请求ARQ
4.信道利用率
- 停止等待协议的优点是简单,缺点是信道利用率太低
- 信道利用率U=发送方发送分组需要的时间Td/(Td+往返时间+接收方发送确认分组需要的时间Ta) 其中Td等于分组长度除以数据率
- 为了提高传输速率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输(发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认)。
5.4.2 连续ARQ协议
- 连续ARQ协议规定,发送方每收到一个确认,就把发送窗口(位于发送窗口的分组的都可以连续发送出去,而不需要等待对方的确认)向前滑动一个分组的位置。
- 接收方一般都是采用累积确认(接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认)的方式。
- 累积确认的优点:容易实现,即使确认丢失也不必重传。缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息
5.5 TCP报文段的首部格式
5.6 TCP可靠传输的实现
5.6.1 以字节为单位得滑动窗口
发送窗口表示:在没有收到接收方的确认的情况下,发送方可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。
窗口越大,发送方就可以在收到对方确认之前连续发送更多的数据,因而可能获得更高的传输效率。
发送窗口前沿通常是不断向前移动,但也有可能不动。这对应于两种情况:
- 没有收到新的确认,对方通知的窗口大小也不变
- 收到了新的确认但对方通知的窗口缩小了
发送窗口前沿也有可能向后收缩,这发生在对方通知的窗口缩小了
注意:
- 缓存空间和序号空间都是有限的,并且都是循环使用的。最好是把它们画成圆环状的
- 发送缓存用来暂时存放:1.发送应用程序传送给发送方TCP准备发送的数据 2.TCP已发送但尚未收到确认的数据; 接收缓存用来暂时存放:1.按序到达的、但尚未被接收应用程序读取的数据 2.未按序到达的数据
再注意:
- 虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和B的接收窗口一样大
- 对于不按序到达的数据应如何处理,TCP标准并无明确规定,通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程
- TCP要求接收方必须有累积确认的功能,这样可以减少传输开销
TCP的通信是全双工通信。通信的每一方都在发送和接收报文段,因此,每一方都有自己的发送窗口和接收窗口
5.6.2 超时重传时间的选择
- TCP采用了自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT,TCP保留了RTT的一个加权平均往返时间RTTs(平滑往返时间)每当第一次测量到RTT样本时,RTTs取值为所测量到的RTT样本值,但之后的:
新的RTTs=(1-a)*(旧的RTTs)+a*(新的RTT样本)
a=0.125 - 显然,超时计时器设置的超时重传时间RTO应略大于加权平均往返时间RTTs
RTO=RTTs+4*RTTd
其中RTTd是RTT的偏差的加权平均值,第一次测量时,RTTd取值为RTT样本值的一半,之后新的RTTd=(1-b)*旧的RTTd+b*|RTTs-新的RTT样本|
b=0.25 - 如何判定此确认报文段是对先发送的报文段的确认,还是对后来重传的报文段的确认?解决:报文段每重传一次,就要把超时重传时间RTO增加一些(两倍)。
5.6.3 选择确认SACK
- 若收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,能否设法只传送缺少的数据而不重传已经正确到达接收方的数据?选择确认就是一种可行的处理办法
- 在TCP报文段的首部中都增加了SACK选项,以便报告收到的不连续的字节块的边界
5.7 TCP的流量控制
5.7.1 利用滑动窗口实现流量控制
- 流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收
- 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制
- 利用可变窗口进行流量控制举例
- 发送方的发送窗口不能超过接收方给出的接收窗口的数值
- TCP的窗口单位是字节,不是报文段
- TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,久启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段,而对方就在确认这个探测报文段时给出了现在的窗口值。如果窗口仍然是0,那么收到这个报文段的一方就重新设置持续计时器。如果不是0,那么死锁的僵局就可以打破了。
5.7.2 TCP的传输效率
可以用不同的机制来控制TCP报文段的发送时机:
- TCP维持一个变量,它等于最大报文长度MSS,只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去
- 由发送方的应用进程指明要求发送报文段,即TCP支持的推送操作
- 发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过MSS)发送出去
在TCP的实现中广泛使用Nagle算法:
- 若发送应用进程要把发送的数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都缓存起来。
- 当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存。
- 只有在收到对前一个报文段的确认后菜继续发送下一个报文段。
- 当到达的数据已达到发送窗大小的一半或已达到报文段的最大长度时,就立即发送一个报文段
糊涂窗口综合征的解决:让接收方等待一段时间,使得或者接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。只要出现两种情况之一,接收方就发出确认报文,并向发送方通知当前的窗口大小。
5.8 TCP的拥塞控制
5.8.1 拥塞控制的一般原理
- 拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏
- 拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程。
- 作为对比,流量控制往往是指点对点通信量的控制,是个端到端的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收
- 进行拥塞控制需要付出代价。这首先需要获得网络内部流量分布的信息。在实施拥塞控制时,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制
- 当网络的吞吐量明显地小于理想的吐槽量时,网络就进入了轻度拥塞的状态;当提供的负载达到某一数值时,网络的吞吐量反而随提供的负载的增大而下降,网络进入拥塞状态;当提供的负载继续增大到某一数值时,网络的吞吐量就下降到0,网络已无法工作,进入死锁
- 分组的丢失是网络发生瑟雍的征兆而不是原因。在许多情况下,甚至正是拥塞控制机制本身成为引起网络性能恶化甚至发生死锁的原因
- 可以从控制理论的角度来看拥塞控制这个问题,从大的方面看,可以分为开环控制和闭环控制两种方法
- 开环控制就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。但一旦整个系统运行起来,就不再中途改正了。
- 闭环控制是基于反馈环路的概念,主要有三种措施:1.监测网络系统以便检测到拥塞在何时何处发生;2.把拥塞发生的信息传送到可采取行动的地方 3.调整网络系统的运行以解决出现的问题
5.8.2 TCP的拥塞控制方法
- 有四种:慢开始、拥塞避免、快重传、快恢复
慢开始和拥塞避免
- 也叫给予窗口的拥塞控制。发送方维持一个叫做拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地变化。发送方让自己的发送窗口等于拥塞窗口
- 判断网络拥塞的依据就是出现了超时
- 慢开始算法:当主机开始发送数据时,由于并不清楚网络的负荷情况,所以先探测以下,由小到大逐渐增大发送窗口,即由小到大逐渐增大拥塞窗口数值
- 慢开始规定,每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个SMSS的数值,即
拥塞窗口cwnd每次的增加量=min(N,SMSS)
其中N是原先未被确认的、但现在被刚收到的确认报文段所确认的字节数 - 使用慢开始算法后,每经过一个传输轮次(一个传输轮次所经历的时间其实就是往返时间RTT),拥塞窗口cwnd就加倍。
- 慢开始门限ssthresh:当cwnd超过ssthresh时,从慢开始算法开始该用拥塞避免算法
- 拥塞避免算法的思路:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是像慢开始阶段那样加倍增长。(具有加法增大的特点)。这表明在拥塞避免阶段,拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多
- 采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。
- 快重传算法首先要求接收方不要等待自己发送数据才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
- 快重传算法规定,发送方只要一连收到3个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传(即快重传),这样就不会出现超时,发送方也不会误认为出现了网络拥塞
- 发送方知道现在只是丢失了个别的报文段,于是不启动慢开始,而是执行快恢复算法
- 在拥塞避免阶段,拥塞窗口是按照线性规律增大的,这常称为加法增大AI。而一旦出现超时或3个重复的确认,就要把门限值设置为当前拥塞窗口值的一半,并大大减小拥塞窗口的数值。这常称为乘法减小MD,两者合在一起就是AIMD算法
- P236 图TCP的拥塞控制的流程图
- 接收方窗口又称为通知窗口,发送方的发送窗口一定不能超过对方给出的接收方窗口值rwnd。
发送方窗口=min(接收方窗口rwnd,拥塞窗口cwnd)
5.8.3 主动队列管理AQM
- 网络层的策略对TCP拥塞控制影响最大的是路由器的分组丢弃策略。路由器的队列通常按照先进先出的规则处理到来的分组,当队列已满时,之后的分组都将被丢弃,叫做尾部丢弃策略
- 路由器的尾部丢弃往往会导致一连串分组的丢失。1.这就使发送方出现超时重传,使TCP进入拥塞控制的慢开始状态,结果使TCP连接的发送方突然把数据的发送速率降低到很小的数值。2.在网络中通常有很多的TCP连接,这些连接中的报文段通常是复用在网络层的IP数据报中传达。尾部丢弃可能会同时影响到很多条TCP连接,结果使这许多TCP连接在同一时间突然都进入到慢开始状态,这种称为全局同步
- 为了避免全局同步现象,提出主动队列管理AQM:应当在队列长度达到某个值得警惕的数值时,就主动丢弃到达的分组。这样就提醒了发送方放慢发送的速率,因而有可能使网络拥塞的程度减轻,甚至不出现网络拥塞。
- 随机早期监测RED是AQM其中的一种方法,它使路由器维持两个参数:队列最小门限和最大门限:若平均队列长度超过最大门限,把新到达的分组丢弃;若在最小门限和最大门限之间,则按照某一丢弃概率P把新到达的分组丢弃
5.9 TCP的运输连接管理
运输连接有三个阶段:连接简历、数据传送和连接释放
TCP连接建立的过程中要解决三个问题:
- 要使每一方能够确知对方的存在
- 要允许双方协商一些参数
- 能够对运输实体资源进行分配
主动发起连接建立的应用进程叫做客户,被动等待连接建立的应用进程叫做服务器
5.9.1 TCP的连接建立
- TCP建立连接的过程叫做握手
- A主动打开连接(运行TCP客户程序),B被动打开连接(运行TCP服务器程序),三报文握手:
- B的TCP服务器进程先创建传输控制块TCB,准备接受用户进程的连接请求。服务器进程处于LISTEN状态
- A的TCP客户进程也是首先创建传输控制模块TCB。在打算建立TCP连接时,向B发出连接请求报文段,TCP客户进程进入SYN-SENT状态
- B收到连接请求报文段后,如同意建立连接,则向A发送确认报文段,TCP服务器进程进入SYN-RCVD状态
- TCP客户进程收到B的确认后,还要向B给出确认报文段。这时TCP连接已建立,A进入ESTABLISHED状态
5.9.2 TCP的连接释放
TCP连接释放的过程:
- A的应用进程先向其TCP发出连接释放报文段,并停止发送数据,主动关闭TCP连接。A进入FIN-WAIT-1状态
- B收到连接释放报文段后即发出确认报文段,进入CLOSE_WAIT状态。这时TCP连接处于半关闭状态
- A收到来自B的确认报文段后,进入FIN-WAIT-2状态,等待B发出的连接释放报文段
- 若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接,发出释放链接报文段。B进入LAST-ACK状态
- A在收到B的连接释放报文段后,必须对此发出确认报文段,然后进入TIME-WAIT状态。
- 注意现在TCP连接还没有释放掉,必须经过时间等待计时器设置的时间2MSL(MSL最长报文段寿命)后,A才进入到CLOSE状态
- 当A撤销相应的传输控制块TCB后,就结束了这次的TCP连接
为什么A在TIME-WAIT状态必须等待2MSL的时间呢?
- 为了保证A发送的最后一个ACK报文段能够到达B
- 防止上一节提到的“已失效的连接请求报文段”出现在本连接中
B只要收到了A发出的确认,就进入CLOSED状态。同样,B在撤销相应的传输控制块TCB后,就结束了这次的TCP连接。B结束TCP连接的时间要比A早一些
初时间等待计时器外,TCP还设有一个保活计时器
5.9.3 TCP的有限状态机
应用层
- 每个应用层协议都是为了解决某一类应用问题,而问题的解决又必须通过位于不同主机中的多个应用进程之间的通信和协同工作来完成。应用进程之间的这种通信必须遵循严格的规则。应用层的具体内容就是精确定义这些通信规则。
- 应用层的许多协议都是基于客户服务器方式,客户是服务请求方,服务器是服务提供方
6.1 域名系统DNS
6.1.1 域名系统概述
- 域名系统DNS是互联网使用的命名系统,用来把便于人们使用过的机器名字转换为IP地址
- 互联网的域名系统DNS被设计称为一个联机分布式数据库系统,并采用客户服务器方式。DNS使大多数名字都在本地进行解析,仅少量解析需要在互联网上通信
- 域名到IP地址的解析是由分布在互联网上的许多域名服务器程序(可简称为域名服务器)共同完成的
- 域名到IP地址的解析过程要点如下:应用进程调用解析程序,并成为DNS的一个客户,把带解析的域名放在DNS请求报文中,以UDP用户数据报方式(为了减小开销)发给本地域名服务器;本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回
6.1.2 互联网的域名结构
互联网采用了层次树状结构的命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字(即域名)。域是名字空间中一个可被管理的划分
每一个域名都由标号序列组成,而各标号之间用点隔开
域名只是个逻辑概念,并不代表计算机所在的物理地点
顶级域名TLD共分为三大类:
- 国家顶级域名nTLD
- 通用顶级域名gTLD
- 基础结构域名:这种顶级域名只有一个,即arpa,用于反向域名解析,因此又称为反向域名
我国把二级域名划分为类别域名和行政区域名两大类
6.1.3 域名服务器
一个服务器所负责管辖的范围叫做区,在一个区中的所有节点必须是能够联通的,每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。DNS服务器的管辖范围不是以域为单位,而是区。区一定不大于域
根据域名服务器所起的作用,可以把域名服务器划分为四种不同的类型
- 根域名服务器:在互联网中是由13套装置构成这13组根域名服务器。根域名服务器采用任播技术,因此当DNS客户向某个根域名服务器的IP地址发出查询报文时,互联网上的路由器就能找到离客户最近的一个根域名服务器。根域名服务器不直接把待查询的域名直接转换成IP地址,而是告诉本地域名服务器下一步应当找那一个顶级域名服务器查询
- 顶级域名服务器(即TLD服务器):负责管理在该顶级域名服务器注册的所有二级域名
- 权限域名服务器:负责一个区的域名服务器
- 本地域名服务器:不属于域名服务器层次结构,但它对域名系统非常重要,有时也称为默认域名服务器
为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器,其他的是辅助域名服务器
在域名的解析过程中注意两点:
- 主机向本地域名服务器的查询一般都是采用递归查询
- 本地域名服务器向根域名服务器的查询通常是采用迭代查询
为了提高DNS查询效率,并减轻根域名服务器的负荷和减少互联网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录
不但在本季域名服务器中需要高速缓存,在主机中也很需要
6.2 文件传送协议
6.2.1 FTP概述
- 文件传输协议FTP适合于在异构网络中任意计算机之间传送文件
- 基于TCP的FTP和基于UDP的简单文件传送协议TFTP,它们都是文件共享协议中的一大类:复制整个文件。(特点:若要修改文件,只能对文件的副本进行修改)
- 文件共享协议中的另一大类是联网访问,意味着允许多个程序同时对一个文件进行存取。例:网络文件系统NFS
6.2.2 FTP的基本工作原理
FTP使用客户服务器方式,一个FTP服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:一个主进程(负责接受新的请求);若干个从属进程(负责处理单个请求)
主进程的工作步骤:
- 打开熟知端口(端口号21)使客户进程能够连接上
- 等待客户进程发出连接请求
- 启动从属进程处理客户进程发来的请求
- 回到等待状态,继续接受其他客户进程发来的请求
服务器有两个从属进程:控制进程和数据传送进程和数据传送过程
在进行文件传输时,FTP的客户和服务器之间要建立两个并行的TCP连接:“控制连接”和“数据连接”。控制连接在整个会话期间一直保持打开,实际用于传输文件的是“数据连接”
FTP的控制信息是带外传送的
网络文件系统NFS允许应用进程打开一个远地文件,并能在该文件的某一个特定的位置上开始读写数据,在网络上传送的只是少量的修改数据
6.2.3 简单文件传送协议TFTP
简单文件传送协议TFTP是一个很小且易于实现的文件传送协议,使用UDP数据报,因此TFTP需要有自己的差错改正措施。TFTP只支持文件传输而不支持交互。没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别
TFTP的优点:
- TFTP可用于UDP环境
- TFTP代码所占的内存较小
TFTP的工作很像停止等待协议:发送完一个文件块后就等待对方的确认,确认时应指明所确认的块编号。发完数据后在规定时间内收不到确认就要重发数据PDU。发送确认PDU的一方若在规定时间内收不到下一个文件块,也要重发确认PDU
6.3 远程终端协议TELNET
- TELNET是一个简单的远程终端协议,能将用户的击键传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕。TELNET又称为终端仿真协议
- TELNET也使用客户服务器方式,和FTP的情况相似,服务器中过的主进程等待新的请求,并产生丛书进程来处理每一个连接
- TELNET能适应很多计算机和操作系统的差异,为了适应这种差异,TELNET定义了数据和命令应怎样通过互联网,这些定义就是所谓的网络虚拟终端NVT