计算机网络起源: 从技术范畴来看,计算机网络是计算机技术与(通信)技术相互融合的产物。
计算机网络的定义: 计算机网络是互连的、自治的计算机的集合。
“自治”:指互连的计算机系统彼此独立,不存在主从或者控制与被控制的关系。
“互连”:指利用通信链路连接相互独立的计算机系统。
计算机:计算机设备。
协议: 协议是网络通信实体之间在数据交换过程中需要遵循的规则或约定,是计算机网络有序运行的重要保证。
协议三要素:语义、语法、时序。
- 语法,语法是定义实体之间交换信息的格式与结构;
- 语义,语义就是定义实体之间交换的信息中需要发送控制信息;
- 时序,时序也称为同步,定义实体之间交换信息的顺序以及如何匹配或适应彼此的速度。
计算机网络的功能:
硬件资源共享:云计算,云存储
软件资源共享:SaaS
信息资源共享:信息检索
计算机网络的分类:
按覆盖范围分类:
按拓扑结构分类:
优点:易于监控与管理,故障诊断与隔离容易;
缺点:中央结点是网络的瓶颈,一旦故障,全网瘫痪,网络规模受限于中央结点的端口数量。
优点:结构简单,所需电缆数量少,易于扩展;
缺点:是通信范围受限,故障诊断与隔离较困难,容易产生冲突。
优点:所需电缆长度短,可以使用光纤,易于避免冲突;
缺点:某结点的故障容易引起全网瘫痪,新结点的加入或撤出过程比较麻烦,存在等待时间问题。
网状拓扑结构
优点:网络可靠性高,一条或多条链路故障时,网络仍然可联通;
缺点:网络结构复杂,造价成本高,选路协议复杂。
树形拓扑结构
优点:易于扩展,故障隔离容易;
缺点:对根结点的可靠性要求高,一旦根结点故障,则可能导致网络大范围无法通信。
优点:易于扩展,可以构建不同规模网络,并可根据需要优选网络结构;
缺点:网络结构复杂,管理与维护复杂。
按交换方式分类:
电路交换网络
报文交换网络
分组交换网络
按网络用户属性分类:
大规模现代计算机网络的结构包括网络边缘
、接入网络
与网络核心
3 部分。
一、网络边缘:连接到网络上的计算机、服务器、智能手机、智能传感器、智能家电等称为主机或端系统。
二、接入网络
三、网络核心
一、电路交换
电路交换是最早出现的一种交换方式,电话网络则是最早、最大的电路交换网络。
利用电路交换进行通信包括建立电路、传输数据和拆除电路 3 个阶段。
特点: 在通信时需要先建立电路连接,在通信过程中独占一个信道,通信结束后拆除电路连接。
优点: 实时性高,时延较小;
缺点: 对于突发性数据传输,信道利用率低,且传输速率单一。电路交换主要适用于语音和视频这类实时性强的业务。
二. 报文交换
报文交换也称为消息交换。存储-转发式交换方式。适用于电报通信。
三. 分组交换
是目前计算机网络广泛采用的技术,也称包交换。分组交换需要将待传输数据(即报文)分割成较小的数据块,每个数据块附加上地址、序号等控制信息构成数据分组,每个分组独立传输到目的地,目的地将收到的分组重新组装,还原为报文。采取存储-转发交换方式。
优点:
缺点: 有效传输效率降低
分组长度的确定:
分组长度与延迟时间:在其他条件相同的情况下,分组长度越长,延迟时间越长,所以,对于实时交互通信,要求延迟时间段,分组长度应该尽可能短;对于诸如文件传送类的非实时数据通信,延迟要求不高,即使分组长度较长,也不致影响正常通信,分组长度可以适当长些。
分组长度与误码率:分组数据交换的规格和标准已由国际电信联盟以建议的形式制定出,分组长度以 16B(1B=8bit)到4096B 之间的 2^n B 为标准分组长度,如 32B、64B、256B、512B 和 1024B等。
速率: 是指网络单位时间内传送的数据量,用以描述网络传输数据的快慢,也称为数据传输速率或数据速率。计算机网络传输的数据是以位为信息单位的二进制数据,速率的基本单位是 bit/s(位每秒),因此有时也称速率为比特率(bit rate)。
带宽: 带宽原本是指信号具有的频带宽度,即信号成分的最高频率与最低频率之差,单位为 Hz (赫兹)。
在计算机网络中,当描述一条链路或信道的数据传输能力时,经常使用“带宽”一词表示链路或信道的最高数据速率,单位也是 bit/s。由于带宽具有不同的含义与单位,所以有时需要明确说明或者根据上下文判断其具体含义和单位。
时延是评价计算机网络性能的另一个重要的性能指标,也称为延迟。时延是指数据从网络中的一个结点(主机或交换设备等)到达另一结点所需要的时间。
在计算机网络中,通常将连接两个结点的直接链路称为一个“跳步”,简称“跳”。
分组的每跳传输过程主要产生 4 类时间延迟:结点处理时延、排队时延、传输时延和传播时延。
结点处理时延 : 每个分组到达交换结点时,交换设备通常可能需要验证分组是否有差错,根据分组携带的信息检索转发表,确定如何转发该分组,还有可能修改分组的部分控制信息等。针对分组进行这些操作所消耗的时间总和,构成了结点处理时延,记为 dc 。
排队时延 : 分组在缓存中排队等待的时间就是排队时延,记为 d q 。
传输时延 : 当一个分组在输出链路发送时,从发送第一位开始,到发送完最后一位为止,所用的时间,称为传输时延,也称为发送时延,记为 d t 。假设分组长度为 Lbit,链路带宽(即速率)为Rbit/s,则分组的传输时延为 d t =L/R。
传播时延 : 信号从发送端发送出来,经过一定距离的物理链路到达接收端所需要的时间,称为传播时延,记为 d p 。显然,若物理链路长度为 D(m),信号传播速度为 V(m/s),则传播时延为 d p =D/V
跳步时间 : 一个分组经过一个跳步所需时间d h =d c +d q +d t +d p 。 如果一个分组从源主机到达目的主机经过n个交换结点,即经过的跳步数为(n+1)
一段物理链路的传播时延与链路带宽的乘积,称为时延带宽积,记为 G,于是 G=d p *R,G的单位是位。
时延带宽积的物理意义在于:如果将物理链路看作一个传输数据的管道的话,时延带宽积表示一段链路可以容纳的数据位数,也称为以位为单位的链路长度。
当网络拥塞特别严重时,新到达的分组甚至已无缓存空间暂存该分组,此时交换结点会丢弃分组,就会发生“丢包”现象。丢包率常被用于评价和衡量网络性能的指标,在很大程度上可以反映网络的拥塞程度,因为引发网络丢包的主要因素是网络拥塞。
吞吐量表示在单位时间内源主机通过网络向目的主机实际送达的数据量,单位为 bit/s 或 B/s(字节每秒),记为 Thr。吞吐量经常用于度量网络的实际数据传送(通过)能力,即网络实际可以达到的源主机到目的的主机的数据传送速率。吞吐量受网络链路带宽、网络连接复杂性、网络协议、网络拥塞程度等因素影响。
OSI 参考模型
和 TCP/IP 参考模型
两种。负责制定国际标准的国际标准化组织 ISO 参考了 IBM 的 SNA 和其他计算机厂商的网络体系结构,提出了开放系统互连参考模型,简称 OSI 参考模型,按照这个标准设计建成的计算机网络中的设备都可以相互通信。
OSI 参考模型采用分层结构化技术,将整个计算机网络的通信功能分为 7 层,由低至高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
OSI 参考模型的物理层、数据链路层和网络层称为结点到结点层,传输层、会话层、表示和应用层称为端到端层。
物理层: 物理层的主要功能是在传输介质上实现无结构比特流传输。物理层的另一项主要任务就是规定数据终端设备(DTE)与数据通信设备(DCE)之间接口的相关特性,主要包括机械、电气、功能和规程 4 个方面的特性。
数据链路层: 数据链路层的主要功能是实现相邻结点之间数据可靠而有效的传输。
网络层: 网络层解决的核心问题是如何将分组通过交换网络传送至目的主机,因此,网络层的主要功能是数据转发与路由。
传输层: 传输层的功能主要包括复用/分解(区分发送和接收主机上的进程)、端到端的可
靠数据传输、连接控制、流量控制和拥塞控制机制等。
会话层: 会话层是指用户与用户的连接,通过在两台计算机间建立、管理和终止通信来完成对话。会话层的主要功能:在建立会话时核实双方身份是否有权参加会话;确定双方支付通信费用;双方在各种选择功能方面取得一致;在会话建立以后,需要对进程间的对话进行管理与控制。
表示层: 表示层主要用于处理应用实体间交换数据的语法,其目的是解决格式和数据表示的差别,从而为应用层提供一个一致的数据格式,使字符、格式等有差异的设备之间相互通信,表示层还可以实现文本压缩/解压缩、数据加密/解密、字符编码的转换等功能。
应用层: 应用层与提供给用户的网络服务相关,这些服务非常丰富,包括文件传送、电子邮件、P2P 应用等。
数据单元: 在层的实体之间传送的比特组称为数据单元。
服务访问点: 相邻层间的服务是通过其接口面上的服务访问点(SAP)进行的,N 层 SAP 就是(N+1)层可以访问 N 层的地方。每个 SAP 都有一个唯一的地址号码。
服务原语
请求: 用户实体请求服务做某种工作。
指示: 用户实体被告知某件事发生。
响应: 用户实体表示对某件事的响应。
证实: 用户实体收到关于它的请求的答复。
面向连接的服务和无连接的服务
在分层的体系结构中,下层向上层提供服务通常有两种形式:面向连接的服务和无连接的服务。
面向连接的服务以电话系统最为典型。
无连接的服务没有建立和拆除链路的过程。
作为最大、最重要的计算机网络——因特网的体系结构则可以用TCP/IP参考模型进行描述。
应用层:TCP/IP 参考模型将 OSI 参考模型中会话层和表示层的功能合并到了应用层来实现。用户通过应用层来使用 Internet 提供的各种服务。每一种应用都使用了相应的协议来将用户的数据按照协议定义的格式进行封装,以便达到对应的控制功能,然后再利用下一层即传输层的协议进行传输,例如 WWW 服务的应用层协议为 HTTP、文件传输是 FTP、电子邮件包括 SMTP 和 POP3 等。每一个应用层协议一般都会使用到两个传输层协议之一进行数据传输:面向连接的传输控制协议 TCP 和无连接的用户数据报协议 UDP。
传输层:传输层的协议为运行在不同主机上的进程提供了一种逻辑通信机制。TCP/IP参考模型的传输层主要包括面向连接、提供可靠数据流传输的传输控制协议 TCP 和无连接不提供可靠数据传输的用户数据报协议 UDP。
网络互联层:网络互联层是整个 TCP/IP 参考模型的核心,主要解决把数据分组发往目的网络或主机的问题。在 TCP/IP 参考模型中,网络互联层的核心协议是 IP,负责定义分组的格式和传输。 网络互联层还包括互联网控制报文协议ICMP、互联网多播组管理协议IGMP以及路由协议,如 BGP、OSPF 和 RIP 等。
网络接口层:实际上,TCP/IP 参考模型没有真正描述这一层的实现,只是要求能够提供给其上层——网络互联层一个访问接口,以便在其上传递 IP 分组。由于这一层未被定义,所以其具体的实现方法将随着网络类型的不同而不同。实际上,这一层对应 OSI 参考模型中的数据链路层和 物理层,网络层IP分组在这一层被封装到底层网络的链路层数据帧中,并最终以比特流的形式在物理介质上进行传输。
五层参考模型包括物理层、数据链路层、网络层、传输层与应用层,各层功能基本与 OSI参考模型对应,这是近年来,在描述计算机网络中最常用、最接近实际网络的参考模型。
作为 Kleinrock 同事的 Lawrence Roberts 领导了美国高级研究计划部署(ARPA)的一项计算机科学计划,并于 1967 年发布了一个称为 ARPAnet 的总体计划。ARPAnet 是第一个分组交换计算机互连的网络,也是当今因特网的祖先。得到美国国防部高级研究计划署(DARPA)支持的 Vinton Cerf 与 Robert Kahn 提出了互联网体系结构,即构建网络之网络,并发展了 3 个因特网核心协议,即 TCP、UDP 和 IP,奠定了因特网的协议基础。
计算机网络应用是运行在计算机网络环境下的分布式软件系统,计算机网络应用很多,从体系结构角度可以分为:客户/服务器(C/S)结构、纯 P2P(Peer to Peer)结构和混合结构 3 种类型。
客户/服务器结构的网络应用是最典型的、最基本的网络应用。
C/S 网络应用最主要的特征是通信只在客户端与服务器之间进行,客户与客户之间不进行直接通信。事实上,在现代计算机网络中,网络应用程序之间通信的基本模式就是 C/S 方式通信。在 C/S 通信过程中,主动发起通信的一方就是客户,被动接受通信的一方就是服务器。
显然,服务器为了能被动接受通信,必须先运行,做好通信准备。
P2P 网络应用是近年来网络上发展比较快,并且表现出许多优良性能,深受用户青睐的一类网络应用,在文件分发、文件共享、视频流服务等应用中,P2P 表现出优越的性能。
在纯 P2P 网络应用中,没有一直在运行的传统服务器,所有通信都是在对等的通信方之间直接进行,通信双方没有传统意义上的客户与服务器之分,“地位”对等。
对等端软件通常运行在普通用户的计算设备上,可以动态地直接与其他对等端进行通信。
任何一个对等端既可以主动发起请求另一个对等端的服务,也可以被动地为其他对等端提供服务。因此,P2P 应用中的每个对等端都同时具备 C/S 应用的客户与服务器的特征,是一个服务器与客户的结合体。事实上,P2P 应用中的对等端软件包括服务器软件与客户端软件。
混合结构网络应用将 C/S 应用于 P2P 应用相结合,既有中心服务器的存在,又有对等端间的直接通信。
在混合结构网络应用中,存在客户(即对等端)与服务器之间的传统 C/S 结构的通信,也存在客户之间的直接通信。
网络应用的本质是运行在不同主机上的应用进程之间的通信。无论哪种类型的网络应用,基本通信方式都是 C/S 通信,因此,网络应用的基本通信过程就是运行在不同主机上的应用进程间以 C/S 方式进行的通信。
无论是服务器进程还是客户进程无论是服务器进程还是客户进程,当其遵循应用层协议组织好应用层报文后,需要通过层间接口(如应用编程接口 API)将报文传递给相邻的传输层,请求传输层协议提供的端到端传输服务,如图所表示的报文 M 通过接口传递给传输层(或从传输层接收 M)。
典型的网络应用编程接口是套接字(Socket)。应用进程可以通过创建套接字实现与底层协议接口,并可以进一步通过套接字实现应用进程与底层协议之间的报文交换。因此,套接字是每个应用进程与其他应用进程进行网络通信时,真正收发报文的通道。
一个应用进程可以创建多个套接字与同一个或不同的传输层协议进行接口,对于一个传输层协议,需要为与其接口的每个套接字分配一个编号,标识该套接字,该编号称为端口号(port number)。通常服务器进程套接字会分配特定的端口号,而客户进程的套接字会绑定一个随机的唯一端口号。
一个主机上可能同时运行多个网络应用进程,每个应用进程通过一个或多个套接字与传输层协议进行接口,因此,通过进程运行的主机 IP 地址以及其套接字所绑定的端口号可以标识应用进程。IP 地址是 Internet 的网络层地址,用于唯一标识一个主机或路由器接口。
DNS 是一个重要的基础应用,因为任何一个需要使用域名进行通信的网络应用,在应用通信之前首先需要请求 DNS 应用,将域名映射为 IP 地址。实现将域名映射为 IP 地址的过程,称为域名解析。DNS 为了实现域名解析,需要建立分布式数据库,存储网络中域名与 IP 地址的映射关系数据,这些数据库存储在域名服务器,域名服务器根据用户的请求提供域名解析服务。
DNS 为了实现域名的有效管理与高效查询,DNS 服务器按层次结构进行组织,并且该层次结构与域名的结构相对应。
1、国家顶级域名 nTLD:如 cn 表示中国,us 表示美国,uk 表示英国等。
2、通用顶级域名 gTLD:最早的顶级域名是 com(公司和企业)、net(网络服务机构)、org(非盈利性组织)、edu(专用的教育机构)、gov(专用的政府部门)、mil(专用的军事部门)、int(国际组织)。
3、基础结构域名:这种顶级域名只有一个,即 arpa,用于反向域名解析,因此又称为反向域名。
一个服务器所负责管辖的(或有权限的)范围叫做区。每个区设置相应的权威域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射。
域名服务器根据其主要保存的域名信息以及在域名解析过程中的作用等,可以分为根域名服务器、顶级域名服务器、权威域名服务器、中间域名服务器 4 类。
1、根域名服务器:根域名服务器是最重要的域名服务器,是主机进行域名查询过程中首先被查询的域名服务器。
2、顶级域名服务器:即 TLD 服务器,负责管理在该顶级域名服务器注册的所有二级域名。
3、权威域名服务器:负责一个区的域名服务器,保存该区中的所有主机的域名到 IP 地址的映射。
4、中间域名服务器:在层次域名结构中,有时还存在一些既不是根域名服务器,又不是顶级域名服务器,也不是权威域名服务器的域名服务器,这些域名服务器通常称为中间域名服务器。
域名解析分为递归解析和迭代解析。提供递归查询服务的域名服务器,可以代替查询主机或其他域名服务器,进行进一步的域名查询,并将最终解析结果发送给查询主机或服务器;
提供迭代查询的服务器,不会代替查询主机或其他域名服务器,进行进一步的查询,只是将下一步要查询的服务器告知查询主机或服务器(当然,如果该服务器拥有最终解析结果,则直接响应解析结果)。
HTTP 是 Web 应用的应用层协议,定义浏览器如何向 Web 服务器发送请求以及 Web 服务器如何向浏览器进行响应。目前以 HTTP/1.1 为主流。
HTTP 基于传输层的 TCP 传输报文。浏览器在向服务器发送请求之前,首先需要建立 TCP连接,然后才能发送 HTTP 请求报文,并接收 HTTP 响应报文。根据 HTTP 在使用 TCP 连接的策略不同,可以分为非持久连接的 HTTP 和持久连接的 HTTP。
1.非持久连接
非持久连接是指 HTTP 客户端与 HTTP 服务器建立 TCP 连接后,通过该连接发送 HTTP 请求报文,接收 HTTP 响应报文,然后断开连接。
请求传输过程如下:
(1)HTTP 客户进程向服务器 www.abc.edu.cn 的 80 号端口,请求建立 TCP 连接。
(2)HTTP 客户进程基于已建立的 TCP 连接向服务器发送一个 HTTP 请求报文。
(3)HTTP 服务器进程接收该请求报文,从指定的路径中检索出 index.html 文件,并封装到一个 HTTP 响应报文中,发送给客户进程。
(4)HTTP 服务器进程通知 TCP 断开该 TCP 连接。
(5)HTTP 客户接收响应报文,断开 TCP 连接。浏览器从响应报文中提出 HTML 文件,进行解析显示,并获知还有 3 个 JPEG 图片的引用。
(6)对每个引用的 JPEG 图片,重复前 4 个步骤。
典型优化技术包括以下两种:
并行连接,通过建立多条并行的 TCP 连接,并行发送 HTTP 请求和并行接收 HTTP 响应。
持久连接,重用已建立的 TCP 连接发送新的 HTTP 请求和接收 HTTP 响应,从而消除新建TCP 连接的时间开销。
客户端请求了 Web 页后,继续传输引用的图像文件,这些图像文件多数情况下位于与 Web页所在的服务器相同的服务器,即具有站点局部性特点。这种情况下,可以不断建立的 TCP连接,而是利用该连接继续请求传输后续的 JPEG 小图像,这种 TCP 连接称为持久连接。
根据使用持久连接传输多个对象的策略不同,持久连接又分为两种工作方式:非流水方式持久连接和流水方式持久连接。
(1) 非流水方式持久连接:也称为非管道方式持久连接,客户端在通过持久连接一个响应报文后,才能发出对下一个对象的请求报文。
(2) 流水方式持久连接:也称为管道方式持久连接,客户端在通过持久连接收到前一个对象的响应报文之前,连续依次发送对后续对象的请求报文,然后再通过该连接依次接收服务器发回的响应报文。
使用持久连接的主要约束与规则如下:
(1) 如果客户端不期望在连接上发送其他请求,则应该在最后一条请求报文中包含connection:close 首部行。
(2) 如果客户端在收到的响应报文中包含 connection:close 首部行,则客户端不能再在这条连接上发送更多的请求。
(3) 每个持久连接只适用于一跳传输,HTTP/1.1 代理必须能够分别管理与客户端和服务器的持久连接。
(4) HTTP/1.1 代理服务器不应该与 HTTP/1.0 客户端建立持久连接。
HTTP 报文由 4 个部分组成:起始行、首部行、空白行和实体主体。
HTTP 报文可以分为两类:请求报文和响应报文,请求报文由浏览器(客户端)发送给 Web服务器,响应报文由 Web 服务器发送给浏览器。
请求报文与响应报文最主要的区别是起始行不同
请求报文起始行为
方法
URL
协议版本
响应报文起始行为
协议版本
状态码
短语
每部分之间由空格分离,起始行最后是 CRLF。
HTTP 典型的请求方法有 GET、HEAD、POST、OPTION、PUT 等。
1、GET:请求读取由 URL 所标识的信息,是最常见的方法。
2、HEAD:请求读取由 URL 所标识的信息的首部,即无须再响应报文中包含对象。
3、POST:给服务器添加信息(例如,注释)
4、OPTION:请求一些选项的信息。
5、PUT:在指明的 URL 下存储一个文档。
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
分类 | 分类描述 |
---|---|
1xx | 信息,服务器收到请求,需要请求者继续执行操作 |
2xx | 成功,操作被成功接收并处理 |
3xx | 重定向,需要进一步的操作以完成请求 |
4xx | 客户端错误,请求包含语法错误或无法完成请求 |
5xx | 服务器错误,服务器在处理请求的过程中发生了错误 |
1、Cookie 中文名称为小型文本文件,指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据。
2、Cookie 技术主要包括 4 部分内容。
HTTP 响应报文中的 Cookie 头行:Set-Cookie。
用户浏览器在本地存储、维护和管理的 Cookie 文件。
HTTP 请求报文中的 Cookie 头行:Cookie。
网站在后台数据库中存储、维护 Cookie 信息,包括已分配给用户 ID、每个 ID 用户在本网站的访问特征等。
电子邮件系统主要包括邮件服务器、简单邮件传输协议、用户代理和邮件读取协议等。
邮件服务器的功能是发送和接收邮件,同时还要向发信人报告邮件传送的情况(已交付、被拒绝、丢失等),是电子邮件体系结构的核心。
SMTP 是 Internet 电子邮件中核心应用层协议,实现邮件服务器之间或用户代理到邮件服务器之间的邮件传输。SMTP 使用传输层 TCP 实现可靠数据传输,从发送方向接收方发送邮件。在发送邮件时,SMTP 客户端首先请求与服务器端的 25 号端口建立 TCP 连接,连接一旦建立,便开始进行 SMTP 应用层交互,实现邮件的发送。当 TCP 连接建立成功后,SMTP通过 3 个阶段的应用层交互完成邮件的传输,分别是握手阶段、邮件传输阶段和关闭阶段。SMTP 客户首先主动请求与 SMTP 服务器(25 号端口)建立 TCP 连接,一旦 TCP 连接建立成功,就开始了下列交互过程。
1、SMTP 只能传送 7 位 ASCⅡ码文本内容,包括 SMTP 命令、应答消息以及邮件内容。
2、SMTP 传送的邮件内容中不能包含“CRLF.CRLF”,因为该信息用于标识邮件内容的结束。
3、SMTP 是“推动”协议。当客户端有邮件发送给服务器时,客户主动与服务器请求建立 TCP连接,然后将邮件“推送”给服务器。
4、SMTP 使用 TCP 连接是持久的。
大部分邮件本身并不是一段文本内容,而是按着一定格式结构进行组织的。一份邮件包括首部、空白行、主体 3 部分。
由于 SMTP 只能传输 7 位 ASCⅡ码文本内容,所以在传输非 7 位 ASCⅡ码文本内容时,必须依据一个标准将非 7 位ASCⅡ码文本内容转换为 7 位 ASCⅡ码文本内容,然后再利用SMTP 进行传输。解决这一问题的具体方案就是多用途互联网邮件扩展(MIME)。MIME 已经广泛应用于互联网的邮件之中。
MIME 主要包括 3 个部分:
1、5 个 MIME 邮件首部字段,可包含在邮件首部中。这些字段提供了有关邮件主体的信息。
2、定义了多种邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
3、定义了邮件传送编码,可对任何内容格式进行转换,从而适合通过 SMTP 进行传送。
POP3
POP3 是一个简单的邮件读取协议,因此其功能很有限。为了保证读取邮件过程的可靠性,POP3 协议使用传输层 TCP。POP3 客户端运行在用户代理中,POP3 服务器运行在邮件服
务器上,默认熟知端口号为 110。用户读取邮件中的邮件时,用户代理中的 POP3 客户首先请求与 POP3 服务器进行交互,实现对邮箱的操作。POP3 协议交互过程可以分为 3 个阶段:授权、事务处理和更新。
IMAP
IMAP 服务器将每个邮件与一个文件夹进行关联,当邮件第一次到达服务器时,与收件人的INBOX 文件夹相关联。通过 IMAP,收件人可以在服务器上创建新的文件夹,并可以对邮
件进行移动、查询、阅读、删除等操作。
HTTP
HTTP 是 Web 应用的应用层协议。当使用基于 Web 的邮件时,HTTP 便被用于邮件的读取,此时,HTTP 也作为邮件读取协议使用。
1、文件传送协议是在互联网的两个主机间实现文件互传的网络应用,其应用层也称为 FTP。FTP 的服务器进程由两大部分组成:一部分为主进程,负责接受新的客户请求;另一部分为若干从属进程,负责处理单个客户请求,与具体客户进行交互。
2、FTP 的特点
(1)FTP 在传输文件内容时,需要新建一个数据连接,专用于文件传输,文件传输结束后,数据连接即关闭。也就是说,FTP 应用使用两个“并行”的 TCP 连接:控制连接和数据连接。
(2)FTP 服务器必须在整个会话期间保留用户的状态,即 FTP 是有状态的。
(3)FTP 会话形式是客户向服务器发送命令,服务器发送状态码和短语作为应答。
P2P 体系结构对服务器的依赖很小,甚至对于纯 P2P 来说,整个应用几乎不依赖某个集中服务器,应用都是动态地在对等方之间进行。在 P2P 应用中,对等方随时可能加入应用,也可能随时离开应用,具有很强的应用规模伸缩性。P2P 应用充分聚集利用了端系统(对等方主机)的计算能力以及网络传输带宽,代表了全新的网络应用架构与理念。
1、网络应用进程通信时需要通过 API 接口请求底层协议的服务,如传输层服务,目前在Internet 中应用最广泛的网络应用编程接口就是 Socket API。无论是客户进程还是服务器进程,都需要创建 Socket,实现与底层协议接口,从而可以通过 Socket 将数据发送出去或接收进来。
2、网络应用进程可以创建 3 种类型的 Socket:数据报类型套接字 SOCK_DGRAM、流式套接字 SOCK_STREA 和原始套接字 SOCK_RAM。
3、Socket API 函数调用过程
传输层的核心任务是为应用进程之间提供端到端的逻辑通信服务。
为此,传输层主要实现如下功能:
传输层寻址;
对应用层报文进行分段和重组;
对报文进行差错检测;
实现进程间端到端可靠数据传输控制;
面向应用层实现复用与分解;
实现端到端的流量控制;
拥塞控制等。
当然,并不是所有传输层协议都要实现所有这些功能,通常大部分传输层协议只实现其中一部分功能。不同传输层协议提供的服务也不同,例如,Internet 的传输层主要有两个协议:面向连接的 TCP 和无连接的 UDP,前者提供可靠数据传输服务,而后者则不提供可靠数据传输服务。
传输层为了支持运行在不同主机、不同操作系统上的应用进程之间的通信,必须用统一的寻址方法对应用进程进行标识。TCP/IP 体系结构网络的解决方法就是在传输层使用协议端口号(protocol port number),通常简称为端口(port),在全网范围内利用 “IP 地址+端口号” 唯一标识一个通信端点。IP 地址唯一标识进程运行在哪个主机上,同一主机上传输层协议端口号则可以唯一对应一个应用进程。
传输层端口号为 16 位整数,其中 0〜1023 为熟知端口号;1024〜49151 为登记端口号,为没有熟知端口号的应用程序(服务器)使用,必须在互联网数字分配结构(The Internet Assigned Numbers Authority, IANA)登记,以防止重复; 49152~65535 为客户端口号或短暂端口号,留给客户进程或用户开发的非标准服务器暂时使用。 另外,端口号只本地有效,只是标 识了本计算机应用层中的各应用进程在与传输层交互时的层间接口,在 Internet 不同计算机中 运行的网络应用进程可能使用相同的端口号。
传输层提供的服务可以分为无连接服务和面向连接服务两大类。
无连接服务是指数据传输之前无需与对端进行任何信息交换(即“握手”),直接构造传输层报文段并向接收端发送;
面向连接服务是指在数据传输之前,需要双方交换一些控制信息,建立逻辑连接,然后再传输数据,数据传输结束后还需要再拆除连接。
Internet 网络提供无连接服务的传输层协议是 UDP,提供面向连接服务的传输层协议是 TCP。
支持众多应用进程共用同一个传输层协议,并能够将接收到的数据准确交付给不同的应用进程,是传输层需要实现的一项基本功能,称为传输层的多路复用与多路分解,简称为复用与分解,也称为复用与分用。实现复用与分解的关键是传输层协议能够唯一标识一个套接字。
Internet 传输层提供无连接服务的传输层协议是 UDP。
UDP 套接字的端口号是 UDP 实现复用与分解的重要依据。下面结合图 3.3 所示的例子来解释 UDP 如何实现分解。假设在主机B 上同时运行两个服务器进程 P2, P2 均 使用无连接服务,P1WUDP 套接字端口号是 37568,P2WUDP 套接字端口号是 26478;在 主机 A 上运行两个客户进程,分别与 P1和 P2 通信,在主机 C 上运行一个客户进程,与 P2 通信。当客户进程向服务器进程发送一个应用程序数据块时,主机 A 或主机 C 中的 UDP 将 应用层数据块封装成一个 UDP 报文段,其中包括应用数据、源端口号、目的端口号等,然后,将得到的报文段传递给网络层。网络层将报文段封装到一个 IP 数据报中,并传送给主机 B(当然,IP 并不能确保 IP 数据报被送达)。
如果 IP 数据报到达主机 B,则主机 B 的网络层(IP)提取 IP 数据报中封装的 UDP 报文段,交付给主机 B 的传输层协议(即 UDP), 主机 B 传输层检查报文段中的目的端口号(37568或 26478)。如果报文段的目的端口号为 37568,则将其封装的应用层数据通过 37568 号套接字交付给 P1;如果报文段的目的端口号为 26478,则将其封装的应用层数据通过 26478 号套接字交付给P2。显然,尽管主机B可能同时运行多个使用传输层无连接服务的应用进程,但每个进程有自己的 UDP 套接字及相应的(唯一)端口号,当主机 B 的传输层从网络层接收到 UDP 报文段时,通过检索该报文段中的目的端口号,便可以将每个报文段分解(交付)到相应的套接字,从而将应用数据交付给正确的应用进程。
Internet 传输层提供面向连接服务的是 TCP。TCP 服务器可以同时支持多个 TCP 套接字,每个套接字与一个进程(或线程)相关联,并由一个四元组来标识每个套接字。当一个 TCP报文段到达主机时,4 个字段都被用来将报文段分解到相应的套接字。需要再次说明的是,四元组中的源端口号和目的端口号是 TCP 报文段首部字段,而源 IP 地址和目的 IP 地址则是封装 TCP 报文段的 IP 数据报的首部 字段。图 3.4 为运行在主机 B 的 Web 服务器实现TCP 多路分解的例子。图 3.4 中主机 C 向 主机 B 发起了两个 HTTP 会话(需要建立两条TCP 连接),主机 A 向主机 B 发起了一个 HTTP 会话。主机 A、主机 B 和主机 C 都有自己唯一的 IP 地址,分别是 A、B、C 。主机 C 为其两个 HTTP 连接(即 TCP 连接)的客户端套接字分别分配了不同的源端口号: 7532 和 26145。由于客户端套接字端口号的选择通常是确保本地唯一、随机选择,因此,主机 A 选择源端口号时也可能将源端口号 26145 分配给其 HTTP 连接(图3.4 所示场景)。但这并不会产生问题,即主机 B 的传 输层(即 TCP)仍然能够正确分解这两个具有相同源端口号的连接,因为这两条连接的源 IP 地址不同。
概括来说,在 Internet 网络中,唯一标识套接字的基本信息是 IP 地址和端口号。UDP 基于目的 IP 地址和目的端口号二元组唯一标识一个 UDP 套接字,从而可以实现精确分解;
TCP则需要基于源 IP 地址、目的 IP 地址、源端口号和目的端口号四元组唯一标识一个 TCP 套接字(即一个 TCP 连接),从而实现精确分解。
Internet 传输层主要有两个协议:UDP 和 TCP,其中 TCP 就可以提供可靠数据传输服务。
实现可靠数据传输的措施主要包括以下几种:
1、差错检测:利用差错编码实现数据包传输过程中的比特差错检测(甚至纠正)。
2、确认:接收方向发送方反馈接收状态。
3、重传:发送方重新发送接收方没有正确接收的数据。
4、序号:确保数据按序提交。
5、计时器:解决数据丢失问题。
基于重传机制的可靠数据传输协议称为自动重传请求(Automatic Repeat reQuest, ARQ)协议。最简单的 ARQ 协议就是停-等协议。
停-等协议的主要特点就是每发送一个报文段后就停下来等待接收方的确认,这也是该协议名称的基本含义。停-等协议的基本工作过程是:发送方发送经过差错编码和编号的报文段,等待接收方的确认;接收方如果正确接收报文段,即差错检测无误且序号正确,则接收报文段,并向发送方发送 ACK,否则丢弃报文段,并向发送方发送 NAK;发送方如果收到ACK,则继续发送后续报文段,否则重发刚刚发送的报文段。
停-等协议虽然简单,但在应用实现可靠数据传输的各种措施时,仍然存在许多的变化或细节需要讨论。
1、关于差错检测。对于底层传输信道可能产生比特差错的情况下,不仅报文段的传输可能发生比特差错,ACK 或 NAK 数据包在通过底层信道传输时同样可能会发生比特差错,因此对报文段和 ACK 或 NAK 数据包均需进行差错编码以便进行差错检测。
2、关于序列号。对于停-等协议,序列号字段只需要 1 位就足够了,因为在停-等协议中,只需利用报文段的序号区分是新发的报文段还是重传的报文段。接收方根据报文段的序号就可以知道发送方是否正在重传前一个报文段(即接收到的报文段序号与最近收到的报文段序号相同),还是一个新报文段(即序号变化了,用模 2 运算“前向”移动了)。
3、关于 ACK 和 NAK。如前所述,在停-等协议中,接收端可以利用 ACK 进行肯定确认,利用 NAK 进行否定确认。但在实际的协议设计过程中,通常不使用 NAK,而只使用 ACK进行确认,这样可以减少数据包的种类,降低协议的复杂性。这会带来一个新的问题,那就是当接收端接收到的报文段出现差错时,如何向发送端进行确认呢?显然,如果只简单地发送 ACK 是肯定不行的,那会被发送方误解接收端已经正确接收了刚刚发送的报文段。为此,需要对 ACK 做细微的改进,即在 ACK 数据包中带上所确认的报文段序列号。例如,接收端当前正期望接收 0 号报文段,接收方收到报文段后首先进行差错检测,如果未发生差错,且报文段序号为 0,贝幡收报文段,并向发送方发送 ACK0,对 0 号报文段进行确认;如果检测到报文段有差错,或报文段不是 0 号报文(即 1 号报文段,为重复报段),则丢弃该报文段,并向发送方发送 ACK1,进行确认,相当于对上一个正确接收的 1 号报文段再次进行肯定确认。当发送方再次收到 ACK1 时,即收到重复的 ACK1,则表明刚刚发送的 0 号报文 段没有被接收方正确接收,所以需要重发。也就是说,利用重复 ACK 替代了 NAK。
4、关于 ACK 或 NAK 差错。在 ACK 或 NAK 数据包中增加了差错编码后,发送方可以检测出 ACK 或 NAK 是否发生差错。如果发送方检测出 ACK 或NAK 差错,则不能准确判断接收方是否已正确接收报文段或者没有接收报文段。在这种情况下,为了确保可靠传输,发送方采取“有错推断”'原则,即推断接收方没有正确接收相应的报文段。因此,当发送方检测到收到的 ACK 或 NAK 有差错时,便重传刚刚发送的报文段。当然,这可能带来一个新问题,就是接收方可能重复接收到同一个报文段,但接收方可以通过报文段的序号判断是 否是重复的报文段,对于重复到达的报文段进行丢弃并确认即可。
如果发送方可以在等待确认之前连续发送 3 个分组,则协议的信道利用率相对于停-等协议就提高到 3 倍。在这种可靠数据传输协议中,从发送方向接收方传送的系列分组可以看成是填充到一条流水 线(或一条管道)中,故称这种协议为流水线协议或管道协议。相对于停-等协议,流水线协议实现可靠数据传输时,需要做如下的改进。
1、必须增加分组序号范围。必须确保每个正在传送中、未被确认的分组有一个唯一的 序号(重传的分组除外),以便准确区分每一个未被确认的分组。因此,在流水线可靠传输 协议中,分组中的序号字段需要多位,而不能像停-等协议那样只使用 1 位序号。
2、协议的发送方和(或)接收方必须缓存多个分组。发送方最低限度应当能缓冲那些已发送但没有确认的分组,一旦其中任何一个或多个分组丢失或错误,发送方可以从缓存中取出相应的分组,重发这些分组进行纠错。类似地,接收方或许也需要缓存那些已正确到达 但不是按序到达的分组,以便等缺失的分组到达后一并按序向上层提交数据。最典型的流水线可靠传输协议是滑动窗口协议。
1、用户数据报协议 UDP 是 Internet 传输层协议,提供无连接、不可靠、数据报尽力传输服务。UDP 是一种轻量级传输层协议,只提供最基本的传输层服务。UDP 是无连接的,因此在支持两个进程间通信时,没有握手过程。UDP 提供一种不可靠数据传送服务,也就是说,当应用进程将一个报文发送进 UDP 套接字时,UDP 并不保证将该报文送达到目的接收程。不仅如此,在发送方依次发送的报文段,UDP 即便将这些报文段送达到接收进程,也可能是乱序到达的。UDP 没有拥塞控制机制,所以 UDP 发送端可以用任何速率向其下层(即网络层)注入数据。当然,实际端到端吞吐量可能小于这种速率,这可能是因为中间链路的带宽受限或因为网络拥塞而造成的。
2、使用 UDP 的原因
1) 应用进程更容易控制发送什么数据以及何时发送。
2) 无需建立连接。
3) 无连接状态。
4) 首部开销小。
UDP 校验和提供了差错检测功能。
UDP 在计算校验和时,对所有参与运算的内容(包括 UDP 报文段)按 16 位(16 位对齐)求和,求和过程中遇到的任何溢出(即进位)都被回卷(即进位与和的最低位再加)。 最后得到的和取反码,就是 UDP 的校验和,填入 UDP 数据报的校验和字段。UDP 在生成校验和时,校验和字段取全 0。参与 UDP 校验和计算的内容包括 3 部分:UDP 伪首部、 UDP首部和应用层数据。
传输控制协议(TCP)是 Internet 一个重要的传输层协议。TCP 提供面向连接、可靠、 有序、字节流传输服务。为了提供可靠数据传输,TCP 采用了前面所讨论的许多措施,其中包括差错检测、重传、累积确认、定时器以及序号和确认序号等。
TCP 报文段由首部字段和一个数据字段组成。
1) 源端口号与目的端口号字段分别占 16 位,标识发送该报文段的源端口和目的端口, 用于多路复用/分解来自或送到上层应用的数据。
2) 序号字段与确认序号字段分别占 32 位。
3) 首部长度字段占 4 位,指出 TCP 段的首部长度,以 4 字节为计算单位,例如该字段值为 5 时,表示 TCP 段的首部长度为 20 字节。由于 TCP 选项字段的原因,TCP 首部的长度是可变的。当该字段取最大值 15 时,表示 TCP 段的最大首部长度,即 60 字节。可见,TCP段的选项字段最多为 40 字节。
4)保留字段占 6 位,保留为今后使用,目前值为 0。
5)URG、ACK、PSH、RST、SYN 和 FIN 字段各占 1 位,共占 6 位,为 6 位标志位 (字段)。
6)接收窗口字段占 16 位,用于向对方通告接收窗口大小(单位为字节),表示接收方愿意(或还可以)接收的应用层数据字节数量,其值是本端接收对方数据的缓存剩余空间, 用于实现 TCP 的流量控制。
7)校验和字段占 16 位,校验和字段检验的范围类似于 UDP,包括 TCP 伪首部、TCP 首部和应用层数据 3 部分,计算方法与 UDP 校验和的计算方法相同。
8)紧急指针字段占 16 位,该字段只有 URG=1 时才有效。
9)选项字段的长度可变。T
10)填充字段,长度为 0〜3 字节,取值全 0,其目的是为了使整个首部长度是 4 字节的整数倍。
TCP 连接管理包括连接建立与连接拆除。TCP 连接建立通过“三次握手”过程。假设主机A 上的一个进程想与主机 B 上的一个进程建立一条 TCP 连接,主机 A 应用进程首先通知主机 A 的 TCP,它想建立一个与主机 B 上某个进程之间的连接,主机 A 中的 TCP 会通过以下过程与主机 B 中的 TCP 建立一条 TCP 连接。
1) 主机 A 的 TCP 向主机 B 发出连接请求段(第一次握手)。
2) —旦包含 SYN 报文段的 IP 数据报到达主机 B,SYN 报文段被从该数据手艮中提取出来。主机 B 的 TCP 收到连接请求段后,如同意,则发回确认报文段(第二次握手)。
3)主机 A 收到 SYNACK 报文段后,也要给该连接分配缓存和变量,并向主机 B 发送确认报文段(第三次握手),该报文段是对主机 B 的同意连接报文段进行确认,其中 ACK=i,SYN=0 (因为连接已建立),seq=x+l,ack_seq=^l。第三次握手的 ACK 报文段可以携带从主机 A 到主机 B 的应用层数据。
第一次握手:客户端作为连接建立发起端,选择客户端初始序列号X,向服务器发送 (SYN=1,seq=x)的 SYN 段。客户状态由 LISTEN 进入 SYN_SEND 状态,等待服务器确认。
第二次握手:服务器收到客户发送的SYN段后,选择服务器初始序列号向客户发送 (SYN=1,ACK=1, seq=y, ack_seq=x+1)的 SYNACK 段。同时,服务器状态由 LISTEN 进 入SYN_RCVD 状态。
第三次握手:客户端收到服务器 SYNACK 段后,向服务器发送(ACK=1, seq=x+1,ack_seq=y+1)的 ACK 段,同时,客户端进入 ESTABLISHED 状态,客户端确认连接已建立;
当服务器收到 ACK 段后,也进入 ESTABLISHED 状态,也确认连接已建立。至此,双方均确认连接建立成功。
1)当客户向服务器发送完最后一个数据段后,可以发送一个 FIN 段(FIN=1, seq=M), 请求断开客户到服务器的连接,其状态由 ESTABLISHED 进入 FIN_WAIT_1,在这一状态 下,只能接收服务器发送过来的数据,而不再发送数据。需要注意的是,FIN 段不封装应用层数据,但是也要消耗掉 1 个序列号(类似于 SYN 段)。
2) 服务器收到客户的 FIN 段后,向客户发送一个 ACK 段(ACK=1,seq=v, ack_seq=w+1),ACK 段可以封装应用层数据(如果有)。服务器状态由 ESTABLISHED 进入 CLOSE_WAIT,在这一状态下,服务器仍然可以发送数据,但不再接收数据。当客户收到 ACK 段后,其状态由FIN_WAIT_1 进入 FIN_WAIt3-仍然可以接收来自服务器的数据。此时的 TCP 连接已经关闭了客户向服务器方向的数据传输,故也称为半关闭。
3) 当服务器向客户发送完最后一个数据段后,服务器向客户发送FIN 段(FIN=1, ACK=1,seq=w, ack_seq=w+l),同样,该 FIN 段也不携带应用层数据。服务器状态则由 CLOSE_WAIT进入 LAST ACK,此时服务器也不再发送数据。
4) 当客户收到服务器发送的 FIN 段后,向服务器发送 ACK 段(ACK=1,seq=w+1,ack_seq=w+1),其状态由 FIN_WAIT_2 进入 TIME_WAIT,等待 2MSL(Maximum Segment Lifetime)时间,然后进入 CLOSED 状态,最终释放连接;服务器在收到最后一次 ACK 段后,状态由 LAST__ACK 进入 CLOSED,最终释放连接。
TCP 能够提供可靠的数据传输服务,是通过以下工作机制来实现的。
1) 应用数据被分割成 TCP 认为最适合发送的数据块(通常是 MSS),封装成 TCP 段,传递给 IP。
2) 当 TCP 发出一个段后,启动一个计时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,则认为该报文段丢失,将重发这个报文段。当 TCP 收到发自 TCP 连接另一端的数据,将发送一个确认段。
3) TCP 首部中设有校验和字段,用于检测数据在传输过程中是否发生差错。如果收到的报文段通过校验和检测,发现有差错,TCP 将丢弃这个报文段和不确认收到此报文段(希望发送端超时并重发),而将已连续接收到的应用层数据的最后一个字节的序号加 1,作为确认序号,向发送方发送确认段。
4) 由于 TCP 报文段封装到 IP 数据报中传输,而 IP 数据报的到达可能会经过不同的路径从而造成顺序的错乱,因此 TCP 报文段的到达也可能会失序。如果必要,TCP 将根据序号对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
5) 由于存在网络延迟和重传机制,TCP 的接收端有可能会收到多个重复的报文段,这时接收端需要根据序号把重复的报文段丢弃。
6) TCP 能够提供流量控制。TCP 连接的每一方都在建立连接时分配一定大小的接收缓冲空间。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这可以防止较快主机发送数据太快,致使较慢主机的缓冲区溢出。
流量控制(flow control)的目的是协调协议发送方与接收方的数据发送与接收速度,避免因发送方发送数据太快,超出接收方的数据接收和处理能力,导致接收方被数据“淹没”,即数据到达速度超出接收方的接收、缓存或处理能力,致使数据在接收方被丢弃。流量控制问题不仅存在于端到端的传输层,也存在于数据链路层。
拥塞是指太多主机以太快的速度向网络中发送太多的数据,超出了网络处理能力,导致大量数据分组“拥挤”在网络中间设备(如路由器)队列中等待转发,网络性能显著下降的现象。
拥塞控制(congestion control)就是通过合理调度、规范、调整向网络中发送数据的主机数量、发送速率或数据量,以避免拥塞或尽快消除己发生的拥塞。
1、网络层介于传输层和数据链路层之间,传输层提供端到端的进程间通信服务,数据链路层的功能则是实现物理链路直接相连的两个结点之间的数据帧传输服务,网络层关注的是如何将承载传输层报文段的网络层数据报从源主机送达目的主机。
2、网络层需要实现两项重要功能:转发(forwarding)和路由选择(routing)。
1) 转发。当通过一条输入链路接收到一个分组后,路由器需要决策通过哪条输出链路将分组发送出去,并将分组从输入接口转移到输出接口。
2) 路由选择。当分组从源主机流向目的主机时,必须通过某种方式决定分组经过的路由或路径,计算分组所经过的路径的算法被称为路由选择算法,或称为路由算法。
3、转发与路由区别与联系:每个路由器上都有一张转发表(也称为路由表),其表结构类似于一种键值对的形式。当一个分组到达路由器时,路由器会以该分组的网络层首部地址字段的值(比如目的 IP 地址)作为键,去转发表中查询相应的表项,从而获知该分组应转发至哪条链路上。
按照目的主机地址进行路由选择的网络称为数据报网络。
在数据报网络中,无连接的发送方和接收方之间不存在固定的连接(或路径),所以发送的分组和接收的分组次序不一定相同,每个分组被传送的路径也可能不一致。接收方收到分组后要根据相应的协议,对分组重新进行排序,从而生成原始的完整报文,这个任务通常由传输层来完成。如果分组在网络传输的过程中出现了丢失或者差错,数据报网络本身也不做处理, 可以由通信双方的传输层协议(如 TCP)来解决。虽然数据报网络不维护任何连接状态信 息,但仍然需要在转发表中维护转发信息,这些转发信息相比于虚电路网络中的连接状态信息其更新频率要慢很多。对于转发表中转发状态信息的更新是根据在网络中运行的路由选择算 法来进行的,通常需要 1〜5 min 的时间。
虚电路网络在网络层提供面向连接的分组交换服务。
虚电路组成
一条虚电路(VC)由 3 个要素构成。
虚电路转发表
虚电路网络设备的转发表需要记录或建立邻接链路的 VCID 间的接续关系。
虚电路工作原理
虚电路分组交换的工作原理,如图 4.3 所 示。假设主机 A 请求与主机 B 之间建立一条 VC,该网络选定的路径为 A-PS1-PS2-B,为该 VC 在三条链路上分配的 VC 号分别为 12、22 和
32。这样,当沿该 VC 传输的某个分组离开 主机 A 时,其 VCID=12;当它离开 PS1 时,VCID=22;当它离开 PS2 时,VCID=32。图 4.3 中 PS1 的各个链路上就近标注的数字是接
口号。
虚电路分组交换分类
虚电路分组交换有永久型和交换型两种。永久型虚电路(Permanent Virtual Circuit, PVC)是一种提前建立、长期使用的虚电路,虚电路的建立时间开销基本上可以忽略。
交换型虚电路(Switch Virtual Circuit, SVC)是根据通信需要而临时建立的虚电路,通信结束后立即拆除,虚电路的建立和拆除时间开销有时相对影响较大。
虚电路交换与数据报交换的主要差别表现为:是将顺序控制、差错控制和流量控制等功能交由网络来完成,还是由端系统来完成。虚电路网络(如 ATM 网络)通常由网络完成这些功能,向端系统提供无差错数据传送服务,而端系统则可以很简单;数据报网络(如 Internet)通常网络实现的功能很简单,如基本的路由与转发,顺序控制、差错控制和流量控制等功能则由端系统来完成。
异构网络主要是指两个网络的通信技术和运行协议的不同。实现异构网络互连的基本策略主要包括协议转换和构建虚拟互联网络。协议转换机制采用一类支持异构网络之间协议转换的网络中间设备,实现异构网络之间数据分组的转换与转发。
通过构建虚拟互联网络机制的异构网络互连是在现有异构网络基础上,构建一个同构的虚拟互联网络,异构网络均只需封装、转发虚拟互联网络分组,同时引入虚拟互联网中间设备互连异构网络,实现在异构网络间转发统一的虚拟互联网的数据分组
用来连接网络的设备多种多样,包括中继器、集线器、交换机、网桥、路由器和网关等
路由器是一种具有多个输入端口和多个输出端口的专用计算机,主要任务是获取与维护路由信息以及转发分组。路由器是最典型的网络层设备。
路由器从功能体系结构角度,可以分为输入端口、交换结构、输出端口与路由处理器。
1、输入端口负责从物理接口接收信号,还原数据链路层帧,提取 IP 数据报(或其他网络层协议分组),根据 IP 数据报的目的 IP 地址检索路由表,决策需要将该 IP 数据报交换到哪个输出端口。
2、当分组到达路由器后,通过在输入端口上的处理,分组将会被转发至哪个输出端口上已经确定,具体的转发工作则是由交换结构来完成。
3、 输出端口首先提供一个缓存排队功能,排队交换到该端口的待发送分组,并从队列中不断取出分组进行数据链路层数据帧的封装,通过物理线路端接发送出去。
4、路由处理器就是路由器的 CPU,负责执行路由器的各种指令,包括路由协议的运行,路由计算以及路由表的更新维护等。
在分组交换网中,由于众多的用户随机地将信息送入网络,使网络中需要传输的信息总量经常大于其传输能力,以至于某些网络结点(如路由器)因缓冲区已满,无法接收新到达的分组,此时就发生了所谓的拥塞现象。
拥塞控制就是端系统或网络结点,通过采取某些措施来避免拥塞的发生,或者对已发生的拥塞做出反应,以便尽快消除拥塞。
流量控制是发送数据一方根据接收数据一方的接收数据的能力,包括接收缓存、处理速度等,调整数据发送速率和数据量,以避免接收方被数据淹没;拥塞控制则是根据网络的通过能力或网络拥挤程度,来调整数据发送速率和数据量。
1、缓冲区容量有限。
2、传输线路的带宽有限。
3、网络结点的处理能力有限。
4、网络中某些部分发生了故障。
网络出现拥塞就意味着负载暂时大于网络资源的处理能力,因此对于拥塞的解决一般可从两个方面进行:增加网络资源或者是减小网络负载。增加网络资源,就是在网络出现拥塞前为网络中的各个结点分配更多可用的资源,从而降低拥塞出现的可能性,即拥塞预防;而减小网络负载,一般是指在网络中已经出现负载大于资源的情况下(即拥塞),通过减小当前网络的负载来实现对拥塞的消除,这种策略一般被称作拥塞消除
如图 4.9 所示的网络,链路 CD 是连接两个区域的“最短”通搶链路(如带宽较大或传播延迟较小等),于是两个区域间的用户通信流量都会选择此链路。这样,这条链路的带宽将在极短 的时间内被耗尽,进而使得通信延迟增大。假设还有另一条非“最短”通信链路BE,同样 连接两个区域。如果此时两个区域间的一部分通信流量被转移至链路 BE 上,那么整个网络 的吞吐量将得到提升。可见,如果图中权值能够根据网络负载动态调整,则可以将网络流量引导到不同的链路上,均衡网络负载,从而延缓或避免拥塞的发生,这就是流量感知路由在拥塞控制中起到的作用。
准入控制是一种广泛应用于虚电路网络的拥塞预防技术。准入控制的基本思想是对新建虚电路审核,如果新建立的虚电路会导致网络变得拥塞,那么网络拒绝建立该新虚电路。对于一个处于拥塞边缘的虚电路网络来说,任何新虚电路的建立都会使得整个网络变得拥塞,因此,当判断网络处于即将发生拥塞的边缘时,拒绝新虚电路的建立将有效避免网络发生拥塞。准入控制实现的关键,在于当建立一条新虚电路会导致整个网络发生拥塞时,应该如何反应。常用的方法是基于平均流量和瞬时流量,来判断是否有能力接受新虚电路而不会发生拥塞。
当某个网络结点(如路由器)感知到当前网络发生了拥塞时,可以通知其上游网络结点(或端系统)降低发送速率,从而逐渐消除拥塞。为此,需要解决两个基本问题。第一个问题,就是网络结点如何能够感知到网络已经发生了拥塞呢?第二个问题,就是当路由器感知到网络发生了拥塞时,应该如何将这个拥塞信息通知到 其上游结点,从而使之降低发送速率。解决这个问题的方法有几种。
抑制分组
通知拥塞上游的最直接的方式是直接告知发送方。感知到拥塞的路由器选择一个被拥塞的数据报,给该数据报的源主机返回一个抑制分组,抑制分组的目的地址即从被拥塞数据报的源地址得到。同时,需要对选择的被拥塞数据报(该数据报可能继续向目的传送)的首部进行修改,即修改其首部中的一个标志位,从而使得该数据报在后续传输过程中,不会被后续的路由器再次选择来发送抑制分组。
背压
如果因发送速率过快而导致网络拥塞的网络结点,与感知到拥塞发生的网络结点之间的距离(或是跳数)较远,那么,在抑制分组到达源结点的过程中,实际上又有很多新的分组进入网络,从而进一步加重了网络的拥塞程度。在这种情况下,需要另外采取某种策略来对网络中的拥塞进行消除。一种可行方案,就是让抑制分组在从拥塞结点到源结点的路径上的每一跳,都发挥抑制作用。当抑制分组从拥塞结点传输到上游的第一跳时,接收到抑制分组的结点便会立即降低其向拥塞结点发送分组的速率,从而在极短的时间内使得拥塞结点的拥塞状况得到缓解。但是,由于上游的第一跳的上游结点并没有降低发送速率(因为还没有收到抑制分组),而其向链路输出数据的速率却降低了,因此需要在其输出端口分配更多的缓冲区,当抑制分组到达拥塞结点上游的第二跳时,又能使得第一跳的拥塞状况立即得到改 善,以此类推。最终,直到抑制分组到达源结点(如某端系统),才使得造成网络拥塞的过快发送方的发送速率真正地降低下来。
负载脱落
实施负载脱落时,应该丢掉哪些数据报成为首要关心的问题。例如,在文件传输应用中,一个大文件通常被分割为若千个小数据报进行传输,此时序号较小的数据报就比序号较大的数据报更有价值。假设文件传输应用的传输层使用 UDP,在应用层采用 GBN 协议实现 可靠数据传输。显然,每个小数据报一定会编号。进一步,假设接收方已经接收了前10个分组,如果某个中间路由器丢掉了第 11 号分组,那么,即使接收方接收到了后续的 12 号或 者其他分组,按 GBN 协议的工作原理,这些分组也仍然会被丢弃掉,后续仍然需要进行重传。相反,如果中间路由器选择丢弃掉第 12 号分组,而保留第 11 号分组,则将不会产生这些问题。因此,在这种情况下,选择丢弃掉较新的数据报结果更好。但是,并不是在所有的场景下,选择丢弃较新的数据报都是更好的选择。例如,对于诸如实时视频流应用(如网络直播),则选择保留较新的分组,而丢弃较老的分组却是更好的选择。因此,当网络发生拥塞,而需要采取负载脱落时,选择丢弃哪些数据报是关键,通常与上层应用有关。
Internet 网络层主要包括网际协议(Internet Protocol, IP)、路由协议以及 互联网控制报文协议(Internet Control Message Protocol,ICMP) 等内容。
一个数据链路层协议帧所能承载的最大数据量称为该链路的最大传输单元(Maximum Transmission Unit, MTU)。
在因特网刚开始发展的时期,IPv4 地址被设计为定长前缀,但考虑到不同组织所要使用到的地址数量是不同的,因此设计了 3 种长度的前缀,分别为 8、16、24 位,整个地址空间 被分为 5 类,A、B、C、D 和 E 类,并规定 A、B、C 三类可以分配给主机或路由器使用,D 类地址作为广播地址,E 类地址保留,该方案被称作分类寻址。具体分类方法是依次从最髙比特位逐步“二分”,如图 4.16 所示。
分类寻址中各类地址空间如表 4.5 所示
除了 D 类和 E 类地址外,占 IP 地址空间 87.5%的 A、B、C 类地址可以用于标识网络中的主机或路由器,但并不是所有地址都可用,因为有些地址有特殊用途,不能分配给主机或路由器。
当一个组织分配到一个网络地址块后,就可以为该组织内的主机和路由器接口分配 IP 地址了。这个工作可以由网络管理员进行手动配置(静态分配),也可以通过动态主机配置协议(DHCP)来动态分配。事实上,很多实际网络都选择动态 IP 地址分配。DHCP 是在应用层实现的,传输层使用 UDP。提供动态 IP 地址分配的网络,需要运行 DHCP 服务器(端口号为67),并且配置其可以为其他主机进行动态地址分配的 IP 地址范围等。
对于从内网出去,进入公共互联网的IP数据报,将其源 IP 地址替换为 NAT 服务器拥有的合法的公共 IP 地址,同时替换源端口号,并将替换关系记录到 NAT 转换表中;对于从公共互联网返回的 IP 数据报,依据其目的 IP 地址与目的端口号检索 NAT 转换表,并利用检索到的内部私有 IP 地址与对应的端口号替换目的 IP 地址和目的端口号,然后将 IP 数据报转发到内部网络。
主机或路由器在处理或转发 IP 数据报的过程中,由于种种原因可能导致异常发生,此时主机或路由器就可能需要将这些异常情况,及时地反馈给其他主机或路由器,而 IP 本身并没有这种功能。互联网控制报文协议(Internet Control Message Protocol,ICMP) 的主要目的,就是在这种情况下,在主机或路由器间,实现差错信息报告。
当主机要与所处子网之外的主机进行通信时,分组首先被传送到其默认路由器,然后再转发到网络核心。显然,路由选择的关键,就是从源主机的默认路由器到目的主机的默认路由器之间的路径优选。于是,路由选择问题就可以简化为在路由器之间选择最佳路径问题。路由选择算法的目的,就是在给定一组网络中的路由器以及路由器间的连接链路的情况下,寻找一条从源路由器到目的路由器的最优路径。
路由选择算法分为全局式路由选择算法和分布式路由选择算法。
1) 全局式路由选择算法。这类路由选择算法,需要根据网络的完整信息(即完整的网络拓扑结构,来计算最短路径。全局式路由选择算法并不是说路由计算只在某个路由器上进行,而是指每个路由器在计算路由时,都要获取完整的网络拓扑信息。最具有代表性的全局式路由选择算法是链路状态路由选择算法,简称 LS 算法。
2) 分布式路由选择算法。在分布式路由选择算法中,结点不会(也不需要)尝试获取整个网络拓扑信息,结点只需获知与其相连的链路的“费用”信息,以及邻居结点通告的到达其他结点的最短距离(估计)信息,经过不断的迭代计算,最终获知经由哪个邻居可以具有到达目的结点的最短距离。最具有代表性的分布式路由选择算法是距离向量路由选择算法,简称 DV 算法。
距离向量路由选择算法是一种异步的、迭代的分布式路由选择算法。在距离向量路由选择算法中,没有任何一个结点掌握整个网络的完整信息。每个结点可以测得与所有邻居结点之间的直接链路代价,并将其到达每个目的结点的最短距离(可能是最短距离估计),以(目的,最短距离)的距离向量形式交换给所有的邻居结点。每个结点基于其与邻居结点间的直接链路距离,以及邻居交换过来的距离向量,计算并更新其到达每个目的结点的最短距离,然后将新的距离向量再通告给其所有邻居,直到距离向量不再改变。
层次化路由选择将大规模互联网的路由划分为两层:自治系统内路由选择和自治系统间路由选择。在层次化路由选择网络中,路由器的转发表由自治系统内路由选择协议和自治系统间路由选择协议共同设置。路由器运行自治系统内路由选择协议,在一个自治系统范围内,基于所在自治系统采用的路由选择算法,计算到达自治系统内的目的网络的路由,并存储到转发表中。每个自治系统的网关路由器,运行自治系统间路由选择协议,负责与其他自治系统交换跨越自治系统的路由可达性信息,并基于自治系统间路由选择协议,将跨自治系统的网络可达性信息,交换给其所在自治系统内的其他路由器,这些路由器进一步将这些路由信息也存储到转发表中。这样,自治系统内的路由器,收到一个网络层分组时,无论该分组去往的目的网络在自治系统内,还是在自治系统外,路由器都可以通过查找转发表,知道如何转发分组。
RIP
RIP 是一种基于距离向量路由选择算法的 IGP。RIP 协议在使用 DV 算法时,有其特性。首先,RIP 在度量路径时采用的是跳数,即每条链路的费用都为1。其次,RIP 的费用是定义在源路由器和目的子网之间的,最短路径的费用就是沿着从源路由器到目的子网的最短路径所经过的子网数量。第三,RIP 被限制在网络直径不超过 15 跳的自治系统内使用,即分组从一个子网到另一个子网穿越的最多的子网数目不超过 15,因此在 RIP 中一条路径的最大费用不会超过 15,在 RIP 中,路径费用 16 表示无穷大,即目的网络不可到达。在 RIP中,相邻的路由器 间通过 RIP 响应报文来交换距离向量,交换频率约为 30 s—次,RIP 响应报文中包含了从该路由器到达其他目的子网的估计距离的列表(即 DV), RIP 响应报文也称为 RIP 通告。
OSPF的优点
1)安全。所有 OSPF 报文(如链路状态分组)都是经过认证的,这样可以预防恶意入侵者将不正确的路由信息注入到路由器的转发表中。
2) 支持多条相同费用路径。OSPF 允许使用多条具有相同费用的路径,这样可以防止在具有多条从源到目的的费用相同的路径时,所有流量都发往其中一条路径。这一特性有利于
实现网络流量均衡。
3) 支持区别化费用度量。OSPF 支持对于同一条链路,根据 IP 数据报的 TOS 不同,设置不同的费用度量,从而可以实现不同类型网络流量的分流。
4) 支持单播路由与多播路由。OSPF 综合支持单播路由与多播路由,多播路由只是对OSPF 的简单扩展,使用 OSPF 的链路状态数据库就可以计算多播路由。
5) 分层路由。OSPF 支持在大规模自治系统内进一步进行分层路由。
从数据链路层来看,无论是主机还是路由器等网络设备,都可以统称为结点,因为它们通常都是一条数据链路的端点。沿着通信链路连接的相邻结点的通信信道称为链路,数据链路层传输的数据单元称为帧。数据链路层通常提供的以下几点服务。
1)组帧。
2)链路接入。
3)可靠交付。
4)差错控制。
典型的差错控制方式包括检错重发、前向纠错、反馈校验和检错丢弃 4 种基本方式。
检错重发是一种典型的差错控制方式,在计算机网络中应用广泛。在检错重发方式中,发送端对待发送数据进行差错编码,编码后的数据通过信道传输,接收端利用差错编码检测数据是否出错,对于出错的数据,接收端请求发送端重发数据加以纠正,直到接收端接收到正确数据为止。
前向纠错(Forward Error Correction, FEC)是接收端进行差错纠正的一种差错控制方法。前向纠错机制需要利用纠错编码,即这类编码不仅可以检测数据传输过程中是否发生了错误,而且还可以定位错误位置并直接加以纠正。**在前向纠错机制中,发送端首先对数据进行纠错编码,然后发送包含纠错编码信息的帧,接收端收到帧后利用纠错编码进行差错检测,对于发生错误的帧直接进行纠错。**前向纠错机制比较适用于单工链路或者对实时性要求比较高的应用。
反馈校验方式的接收端将收到的数据原封不动发回发送端,发送端通过比对接收端反馈的数据与发送的数据可以确认接收端是否正确无误接收了已发送的数据。如果发送端发现有不同,则认为接收端没有正确接收到发送的数据,则立即重发数据,直到收到接收端反馈的数据与已发数据一致为止。反馈校验方式的优点是原理简单,易于实现,无须差错编码;缺点是需要相同传输能力的反向信道,传输效率低,实时性差。
不同网络应用对可靠性的要求不同,某些应用(如实时多媒体播报应用)可以采用一种简单的差错控制策略,不纠正出错的数据,而是直接丢弃错误数据,这种差错控制方式就是检错丢弃。显然,这种差错控制方式通常适用于容许一定比例的差错存在,只适用于实时性要求较高的系统。