计算机网络


在这里插入图片描述

⚽️ 一、计算机网络概述

  我们知道,21世纪的一些重要特征就是数字化、网络化和信息化,它是一个以网络为核心的信息时代。要实现信息化就必须依靠完善的网络,因为网络可以非常迅速地传递信息。因此网络现在已经成为信息社会的命脉和发展知识经济的重要基础。网络对社会生活的很多方面以及对社会经济的发展已经产生了不可估量的影响。
  有三大类大家很熟悉的网络,即电信网络、有线电视网络和计算机网络。
  自从20世纪90年代以后,以Internet为代表的计算机网路得到了飞速的发展,已从最初的仅供美国人使用的免费教育科研网络,逐步发展成为供全球使用的商业完了过(有偿使用),成为全球最大的和最重要的计算机网络。可以毫不夸大地说,Internet是人类自印刷术发明以来在存储和交换信息领域中的最大变革。
  Internet的中文译名并不统一。现有的Internet译名有两种:
  (1)因特网
  (2)互联网

  计算机网络(简称网络)由若干结点(node)和连接这些结点的链路(link)组成。网络中的结点可以是计算机、集线器、交换机或路由器等。图1-1(a)给出了一个具有四个结点和三条链路的网络。我们看到,有三台计算机通过三条链路连接到一个集线器上,构成了一个简单的计算机网络。在很多情况下,我们可以使用一朵云来表示一个网络。这样做的好处是可以不去关心网络中的相当复杂细节问题,因而可以集中精力研究涉及到与网络互连有关的一些问题。
在这里插入图片描述
  网络之间还可以通过路由器互连起来,这就构成了一个覆盖范围更大的计算机网络。这样的网络成为互连网。如图1-1(b)所示。因此互连网是“网络的网络”。
  网络把许多计算机连接在一起,而互连网则把许多网络通过路由器连接在一起。与网络相连的计算机称为主机。
  现在使用智能手机上网非常普遍。由于智能手机中有中央处理及CPU。因此也可以把连接在计算机网络上的智能手机称为主机。

🏀二、五层协议

在这里插入图片描述
  OSI的七层协议体系架构(图1-18(a))的概念清楚,理论也比较完整,但它既复杂又不实用。CPI/IP体系结构则不通,但它现在却得到了非常广泛的应用。TCP/IP是一个四层的体系结构(图1-18(b)),它包含了应用层、运输层、网际层和网络接口层。不过从实质上讲,TCP/IP只有最上面的三层,因为最下面的网络接口层并没有什么具体内容。因此在学习计算机网络的原理时往往会采取折中的办法,即综合OSI和TCP/IP的优点,采用一种只有五层协议的体系结构(图1-18(c))。这样既简洁又能将概念阐述清楚。

  现在结合互联网的情况,自上而下地,简要地介绍一下各层的主要功能。

(1)应用层
  应用层是体系结构中的最高层。应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则。
  如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议,我们把应用层交互的数据单元成为报文。
(2)运输层
  运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。
  运输层主要使用以下两种协议:
  1、传输控制协议TCP:提供面向连接的、可靠的数据传输服务,其数据传输的单位是报文段。
  2、用户数据报协议UDP:提供无连接的、尽最大努力的数据传输服务(不保证数据传输的可靠性),其数据传输的单位是用户数据报。
(3)网络层
  网络层负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫做IP数据报。
  互连网是由大量的异构网络通过路由器相互连接起来的。互联网使用的网络层协议是无连接的网际协议IP和许多种路由选择协议,因此互连网的网络层也叫做网际层或IP层。
(4)数据链路层
  数据链路层常简称为链路层。我们知道,两台主机上的数据传输,总是在一段一段的链路上传送,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层浇下来的IP数据报封装成帧,在两个相邻结点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。
(5)物理层
  在物理层上所传数据的单位是比特。发送方发送1时,接收方应当收到1而不是0。因此物理层要考虑用多大的电压代表“1”或“0”,以及接收方如何识别出发送方所发送的比特。

🏈三、物理层

  首先要强调指出,物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。大家知道,现有的计算机网络中的硬件设备和出书媒体的种类非常多,而通信手段也有许多不同方式。物理层的作用正是尽可能地屏蔽这些传输媒体和通信手段的差异,使物理层上面的数据链路层感觉不到这些差异,这样就可使数据链路层只需要考虑如何完成本层得协议和服务,而不必考虑网络具体的传输媒体和通信手段是什么。用于物理层的协议野常称为物理层规程。其实物理层规程是物理层协议。只是在“协议“这个名词出现之前人们就先使用了”规程“这一名词。
  物理层得主要任务就是确定与传输媒体得接口有关的一些特性,如机械特性、电气特性、功能特性和过程特性。
  一个数据通信系统可划分为三大部分,即源系统、传输系统和目的系统。源系统包括源点(或源站、信源)和发送器,目的系统包括接收器和终点(或目的站,或信宿)。
  通信的目的是传送消息。如语音、文字、图像、视频等都是消息。数据是运送消息的实体。信号则是数据得电器或电磁的表现。
  根据信号中代表消息的参数的取值方式不同,信号可分为模拟信号(或持续信号)和数字信号(或离散信号)。代表数字信号不同离散数值的基本波形称为码元。
  根据双方信息交互的方式,通信可以划分为单向通信(或单工通信)、双向交替通信(或半双工通信)和双向同时通信(或全双工通信)。

总结 :
  具体的物理层协议种类较多。这是因为物理连接的方式很多(例如,可以是点对点的,也可以是采用多点连接或广播连接),而传输媒体的种类也非常多(如架空明线、双绞线、对称电缆、同轴电缆、光缆,以及各种波段的无线信道等)。因此在学习物理层的时候,应将重点放在掌握基本概念上。

⚾️四、数据链路层

  数据链路层属于计算机网络的低层。数据链路层使用的信道主要有以下两种类型:
(1)点对点信道。这种信道使用一对一的点对点通信方式。
(2)广播信道。这种信道使用一对多的广播通信方式。因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。

1、传输过程

  下面看一下两台主机通过互联网进行通信时数据链路层所处的地位(图3-1)。图3-l()表示用户主机H通过电话线上网,中间经过三个路由器(R1,R2和R3)连接到远程主机H2。所经过的网络可以是多种的,如电话网、局域网和广域网。当主机H1向H2发送数据时,从协议的层次上看,数据的流动如图3-1(b)所示。主机H1和H2都有完整的五层协议栈,但路由器在转发分组时使用的协议栈只有下面的三层①。数据进入路由器后要先从物理层上到网络层,在转发表中找到下一跳的地址后,再下到物理层转发出去。因此,
数据从主机H1传送到主机H2需要在路径中的各结点的协议栈向上和向下流动多次,如图中
的浅灰色箭头所示。
  然而当我们专门研究数据链路层的问题时,在许多情况下我们可以只关心在协议栈中水平方向的各数据链路层。于是,当主机H向主机H2发送数据时,我们可以想象数据就是在数据链路层从左向右沿水平方向传送的,如图3-2中从左到右的粗箭头所示,即通过以下这样的链路:

  H1的链路层→R1的链路层→R2的链路层→R3的链路层→H2的链路层
在这里插入图片描述
  图3-2指出,从数据链路层来看,H1到H2的通信可以看成由四段不同的链路层通信组
成,即:H1→R1,R1→R2,R2→R3和R3→H2。这四段不同的链路层可能采用不同的数据链
路层协议。

2、帧

  下面再介绍点对点信道的数据链路层的协议数据单元一帧。数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。在互联网中,网络层协议数据单元就是P数据报(或简称为数据报、分组或包)。
  为了把主要精力放在点对点信道的数据链路层协议上,可以采用如图3-3()所示的三层模型。在这种三层模型中,不管在哪一段链路上的通信(主机和路由器之间或两个路由器之间),我们都看成是结点和结点的通信(如图中的结点A和B),而每个结点只有下三层一网络层、数据链路层和物理层。
在这里插入图片描述
点对点信道的数据链路层在进行通信时的主要步骤如下:
(1)结点A的数据链路层把网络层交下来的P数据报添加首部和尾部封装成帧。
(2)结点A把封装好的帧发送给结点B的数据链路层。
(3)若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出P数据报交给上
面的网络层;否则丢弃这个帧。
  数据链路层不必考虑物理层如何实现比特传输的细节。我们甚至还可以更简单地设想
好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方,如图3-3(b)所示。

  数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题是:封装成帧、透明传输和差错检测。

3、以太网的MAC层

  在局域网中,硬件地址又称为物理地址或MAC地址(因为这种地址用在MAC帧中)。
  大家知道,在所有计算机系统的设计中,标识系统(identification system)°都是一个核心问题。在标识系统中,地址就是识别某个系统的一个非常重要的标识符。在讨论地址问题时,很多人常常引用著名文献[SHOC78]给出的如下定义:“名字指出我们所要寻找的那个资源,地址指出那个资源在何处,路由告诉我们如何到达该处。”
  这个非形式的定义固然很简单,但有时却不够准确。严格地讲,名字应当与系统的所在地无关。这就像我们每一个人的名字一样,不随我们所处的地点而改变。但是正EE802标准为局域网规定了一种48位的全球地址(一般都简称为“地址”),是指局域网上的每一台计算机中固化在适配器的ROM中的地址。

🎾五、网络层

1、网络层提供的两种服务

  在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连
接”)曾引起了长期的争论。争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来
负责?是网络还是端系统?
  有些人认为应当借助于电信网的成功经验,让网络负责可靠交付。大家知道,传统电信网的主要业务是提供电话服务。电信网使用昂贵的程控交换机(其软件也非常复杂),用面向连接的通信方式,使电信网络能够向用户(实际上就是电话机)提供可靠传输的服务。因此他们认为,计算机网络也应模仿打电话所使用的面向连接的通信方式。当两台计算机进行通信时,也应当先建立连接(但在分组交换中是建立一条虚电路VC(Virtual Circuit)O),以预留双方通信所需的一切网络资源。然后双方就沿着已建立的虚电路发送分组。这样的分组的首部不需要填写完整的目的主机地址,而只需要填写这条虚电路的编号(一个不大的整数),因而减少了分组的开销。这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,当然也不丢失、不重复。在通信结束后要释放建立的虚电路。图4-1()是网络提供虚电路服务的示意图。主机H,和H2之间交换的分组都必须在事先建立的虚电路上传送。
  但互联网的先驱者却提出一种崭新的网络设计思路。他们认为,电信网提供的端到端可靠传输的服务对电话业务无疑是很合适的,因为电信网的终端(电话机)非常简单,没有智能,也没有差错处理能力。因此电信网必须负责把用户电话机产生的话音信号可靠地传送到对方的电话机,使还原后的话音质量符合技术规范的要求。但计算机网络的端系统是有智能的计算机。计算机有很强的差错处理能力(这点和传统的电话机有本质上的差别)。因此,互联网在设计上就采用了和电信网完全不同的思路。
  互联网采用的设计思路是这样的:网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。这里的“数据报”(datagram)是互联网的设计者最初使用的名词,其实数据报(或P数据报)就是我们经常使用的“分组”。在本书中,数据报和分组是同义词,可以混用。
  网络在发送分组时不需要先建立连接。每一个分组(也就是P数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。也就是说,所传送的分组可能出错、丢失、重复和失序(即不按序到达终点),当然也不保证分组交付的时限。由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器比较简单,且价格低廉(与电信网的交换机相比较)。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。采用这种设计思路的好处是:网络造价大大降低,运行方式灵活,能够适应多种应用。互联网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
  图4-1(b)给出了网络提供数据报服务的示意图。主机H1向H2发送的分组各自独立地选择路由,并且在传送的过程中还可能丢失。
在这里插入图片描述
以下表4-1中归纳了虚电路服务与数据报服务的主要区别
在这里插入图片描述

2、网际协议IP

  网际协议IP是TCP/IP体系中两个最主要的协议之一[STEV94][COME06][FORO1O],也是最重要的互联网标准协议之一。网际协议P又称为Kahn-Cerf协议,因为这个重要协议正是Robert Kahn和Vint Cerf二人共同研发的。这两位学者在2005年获得图灵奖(其地位相当于计算机科学领域的诺贝尔奖)。严格来说,这里所讲的P其实是P的第4个版本,应记为Pv4。但在讲述P协议的各种原理时,往往不在P后面加上版本号。在后面我们再介绍较新的版本Pv6(版本1~3和版本5都未曾使用过)。
在这里插入图片描述

(1)虚拟互连网络

  从一般的概念来讲,将网络互相连接起来要使用一些中间设备。根据中间设备所在的层次,可以有以下四种不同的中间设备:
(1)物理层使用的中间设备叫做转发器(repeater)。
(2)数据链路层使用的中间设备叫做网桥或桥接器(bridge)。
(3)网络层使用的中间设备叫做路由器(router)。
(4)在网络层以上使用的中间设备叫做网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。
  图4-3(a)表示有许多计算机网络通过一些路由器进行互连。由于参加互连的计算机网络都是用相同的网际协议IP(Internet Protocol),因此可以把互连以后的计算机网络看成如图4-3(b)所示的一个虚拟互连网络(internet)。所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用IP协议的虚拟互连网可简称为IP网。使用IP网的好处是:当IP网上的主机进行通信时,就好像在一个单个网络上通信一样,它们看不见互连的各个网络的具体异构细节。如果在这种覆盖全球的IP网的上层使用TCP协议,那么就是现在的互联网(Internet)。
在这里插入图片描述
  当很多异构网络通过路由器互连起来时,如果所有的网络都使用相同的P协议,那么在网络层讨论问题就显得很方便。现在用一个例子来说明。  在图4-4所示的互联网中的源主机H要把一个P数据报发送给目的主机H2。根据第1章中讲过的分组交换的存储转发概念,主机H1先要查找自己的路由表,看目的主机是否就在本网络上。如是,则不需要经过任何路由器而是直接交付,任务就完成了。如不是,则必须把P数据报发送给某个路由器(图中的R1)。R,在查找了自己的路由表后,知道应当把数据报转发给R2进行间接交付。这样一直转发下去,最后由路由器R5知道自己是和H2连接在同一个网络上,不需要再使用别的路由器转发了,于是就把数据报直接交付目的主机H2。图中画出了源主机、目的主机以及各路由器的协议栈。我们注意到,主机的协议栈共有五层,但路由器的协议栈只有下三层。图中还画出了数据在各协议栈中流动的方向(用黑色粗线表示)。我们还可注意到,在R4和R5之间使用了卫星链路,而Rs所连接的是个无线局域网。在R1到R4之间的三个网络则可以是任意类型的网络。总之,这里强调的是:互联网可以由多种异构网络互连组成。
  如果我们只从网络层考虑问题,那么P数据报就可以想象是在网络层中传送,其传送路径是:
H1→R1→R2→R3→R4→R5→H2
  这样就不必画出许多完整的协议栈,使问题的描述更加简单。
  有了虚拟互连网络的概念后,我们再讨论在这样的虚拟网络上如何寻址。
在这里插入图片描述

(2)分类的IP地址

  整个的互联网就是一个单一的、抽象的网络。IP地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32位的标识符。IP地址的结构使我们可以在互联网上很方便地进行寻址。IP地址现在由互联网名字和数字分配机构ICANN进行分配。
  IP地址的编址方法共经过了三个历史阶段。
(1)分类的IP地址。
(2)子网的划分。
(3)构成超网。
  所谓”分类的IP地址“就是将IP地址划分为若干个固定类,其中第一个字段是网络号,它标志着主机所连接到的网络,一个网络号在整个互联网范围内必须是唯一的。第二个字段为主机号,它标志这该主机。一台主机号在它前面的网络号所指明的网络范围内必须是唯一的。由此可见,一个IP地址在整个互联网范围内是唯一的。
在这里插入图片描述
在这里插入图片描述
从图4-5可以看出:
-A类、B类和C类地址的网络号字段(在图中这个字段是灰色的)分别为1个、2个
和3个字节长,而在网络号字段的最前面有1~3位的类别位,其数值分别规定为
0,10和110。
-A类、B类和C类地址的主机号字段分别为3个、2个和1个字节长。
-D类地址(前4位是1110)用于多播(一对多通信)。我们将在4.6节讨论P多播。
-E类地址(前4位是1111)保留为以后用。
  这里要指出,由于近年来已经广泛使用无分类P地址进行路由选择,A类、B类和C类地址的区分已成为历史[RFC1812],但由于很多文献和资料都还使用传统的分类的P地
址,而且从概念的演进上更清晰,因此我们在这里还要从分类的P地址讲起。

(3)IP地址与硬件地址

  在学习P地址时,很重要的一点就是要弄懂主机的P地址与硬件地址⑥的区别。
  图4-8说明了这两种地址的区别。从层次的角度看,物理地址是数据链路层和物理层使用的地址,而P地址是网络层和以上各层使用的地址,是一种逻辑地址(称P地址为逻辑地址是因为P地址是用软件实现的)。
在这里插入图片描述
  在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成MAC帧了。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧的首部中。
  连接在通信链路上的设备(主机或路由器)在收到MAC帧时,根据MAC帧首部中的硬件地址决定收下或丢弃。只有在剥去MAC帧的首部和尾部后把MAC层的数据上交给网络层后,网络层才能在P数据报的首部中找到源P地址和目的P地址。
  总之,P地址放在P数据报的首部,而硬件地址则放在MAC帧的首部。在网络层和网络层以上使用的是P地址,而数据链路层及以下使用的是硬件地址。在图4-8中,当P数据报放入数据链路层的MAC帧中以后,整个的IP数据报就成为MAC帧的数据,因而在数据链路层看不见数据报的P地址。
  图4-9()画的是三个局域网用两个路由器R1和R2互连起来。现在主机H要和主机H2通信。这两台主机的P地址分别是P1和P2,而它们的硬件地址分别为HA1和HA2(HA表示Hardware Address)。通信的路径是:H1→经过R1转发→再经过R2转发→H2。路由器R1因同时连接到两个局域网上,因此它有两个硬件地址,即HA3和HA4。同理,路由器R2也有两个硬件地址HA5和HA6。
在这里插入图片描述
图4-9(b)特别强调了IP地址与硬件地址的区别。表4-4归纳了这种区别。
在这里插入图片描述
这里要强调指出以下几点:
  (1)在P层抽象的互联网上只能看到P数据报。虽然P数据报要经过路由器R1和R2的两次转发,但在它的首部中的源地址和目的地址始终分别是P1和P2。图中的数据报上写的“从P1到P2”就表示前者是源地址而后者是目的地址。数据报中间经过的两个路由器的P地址并不出现在P数据报的首部中。
  (2)虽然在P数据报首部有源站P地址,但路由器只根据目的站的IP地址的网络号进
行路由选择。
  (3)在局域网的链路层,只能看见MAC帧。P数据报被封装在MAC帧中。MAC帧在不同网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化,见图49b)。开始在H,到R1间传送时,MAC帧首部中写的是从硬件地址HA,发送到硬件地址HA3,路由器R1收到此MAC帧后,在数据链路层,要丢弃原来的MAC帧的首部和尾部。在转发时,在数据链路层,要重新添加上MAC帧的首部和尾部。这时首部中的源地址和目的地址分别便成为HA4和HA5。路由器R2收到此帧后,再次更换MAC帧的首部和尾部,首部中的源地址和目的地址分别变成为HA6和HA2。MAC帧的首部的这种变化,在上面的P层上是看不见的。
  (4)尽管互连在一起的网络的硬件地址体系各不相同,但P层抽象的互联网却屏蔽了
下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的P地址研究主机和主机或路由器之间的通信。上述的这种“屏蔽”概念是一个很有用、很普遍的基本概念。例如,计算机中广泛使用的图形用户界面使得用户只需简单地点击几下鼠标就能让计算机完成很多任务。实际上计算机要完成这些任务必须执行很多条指令。但这些复杂的过程全都被设计良好的图形用户界面屏蔽掉了,使用户看不见这些复杂过程。
  以上这些概念是计算机网络的精髓所在,对这些重要概念务必仔细思考和掌握。
  细心的读者会发现,还有两个重要问题没有解决:
  (I)主机或路由器怎样知道应当在MAC帧的首部填入什么样的硬件地址?
  (2)路由器中的路由表是怎样得出的?

(4)地址解析协议ARP

  在实际应用中,我们经常会遇到这样的问题:已经知道了一个机器(主机或路由器)的IP地址,需要找出其对应的硬件地址。地址解析协议AARP就是用来解决这样的问题的。
在这里插入图片描述
  (1)发送方是主机(如H1),要把P数据报发送到同一个网络上的另一台主机(如H2)。这时H发送ARP请求分组(在网1上广播),找到目的主机H2的硬件地址。
  (2)发送方是主机(如H1),要把P数据报发送到另一个网络上的一台主机(如H3或
H4)。这时H1发送ARP请求分组(在网1上广播),找到网1上的一个路由器R1的硬件地
址。剩下的工作由路由器R1来完成。R1要做的事情是下面的(3)或(4)。
  (3)发送方是路由器(如R1),要把P数据报转发到与R1连接在同一个网络(网2)上的主机(如H3)。这时R1发送ARP请求分组(在网2上广播),找到目的主机H3的硬件地址。
  (4)发送方是路由器(如R1),要把P数据报转发到网3上的一台主机(如H4)。H4与R1不是连接在同一个网络上。这时R,发送ARP请求分组(在网2上广播),找到连接在网2上的一个路由器R2的硬件地址。剩下的工作由这个路由器R2来完成。
  在许多情况下需要多次使用ARP。但这只是以上几种情况的反复使用而己。
  有的读者可能会产生这样的问题:既然在网络链路上传送的帧最终是按照硬件地址找到目的主机的,那么为什么我们还要使用抽象的P地址,而不直接使用硬件地址进行通信?这样似乎可以免除使用ARP。
  这个问题必须弄清楚。
  由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事。但P编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的P地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述的调用ARP的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
  因此,在虚拟的P网络上用P地址进行通信给广大的计算机用户带来很大的方便。

(5)IP层转发分组的流程

  在路由表中,对每一条路由最主要的是以下两个信息:
(目的网络地址,下一跳地址)
在这里插入图片描述
我们根据目的网络地址来确定下一跳路由器,这样做可得出以下的结果。
  (1)IP数据包最终一定可以找到目的主机所在网络上的路由器(可能要通过多次的间接交付)。
  (2)只有到达最后一个路由器时,才试图向目的主机进行直接交付。

😀 😃 😄 😁 😆 😅 😂 🤣😀 😃 😄 😁 😆 😅 😂 🤣😀 😃 😄 😁 😆 😅 😂 🤣

  那么,能不能在路由表中不使用P地址而直接使用硬件地址呢?不行。我们一定要弄清楚,使用抽象的P地址,本来就是为了隐蔽各种底层网络的复杂性而便于分析和研究问题,这样就不可避免地要付出些代价,例如在选择路由时多了一些开销。但反过来,如果在路由表中直接使用硬件地址,那就会带来更多的麻烦。
  根据以上所述,可归纳出分组转发算法如下:
  (1)从数据报的首部提取目的主机的P地址D,得出目的网络地址为N。
  (2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧):否则就是间接交付,执行(3)。
  (3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
  (4)若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器:否则,执行(5)。
  (5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器:否则,执行(6)。
  (6)报告转发分组出错。
  这里我们要再强调一下,路由表并没有给分组指明到某个网络的完整路径(即先经过哪一个路由器,然后再经过哪一个路由器,等等)。路由表指出,到某个网络应当先到某个路由器(即下一跳路由器),在到达下一跳路由器后,再继续查找其路由表,知道再下一步应当到哪一个路由器。这样一步一步地查找下去,直到最后到达目的网络。
  可以用一个简单的比喻来说明查找路由表的作用。例如,从家门口开车到机场,但没有地图,不知道应当走哪条路线。好在每一个道路岔口都有一个警察可以询问。因此,每到一个岔口(相当于到了一个路由器),就问:“到机场应当走哪个方向?”(相当于查找路由表)。该警察既不指明到下一个岔口以后再应当如何走,也不指明还要经过几个岔口才到达机场。他仅仅指出下一个岔口的方向。其回答可能是:“向左转。”到了下一个岔口,再讯问到机场该走哪个方向?回答可能是:“直行。”这样,每到一个岔口,就询问下一步该如何走。这样,即使我们没有地图,但最终一定可以到达目的地一机场。

3、划分子网和构造超网

(1)从两级IP地址到三级IP地址

  在今天看来,在ARPANET的早期,IP地址的设计确实不够合理。
  第一,P地址空间的利用率有时很低。
  每一个A类地址网络可连接的主机数超过1000万,而每一个B类地址网络可连接的主机数也超过6万。有的单位申请到了一个B类地址网络,但所连接的主机数并不多,可是又不愿意申请一个足够使用的C类地址,理由是考虑到今后可能的发展。P地址的浪费,还会使P地址空间的资源过早地被用完。
  第二,给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
  每一个路由器都应当能够从路由表查出应怎样到达其他网络的下一跳路由器。因此,互联网中的网络数越多,路由器的路由表的项目数也就越多。这样,即使我们拥有足够多的P地址资源可以给每一个物理网络分配一个网络号,也会导致路由器的路由表中的项目数过多。这不仅增加了路由器的成本(需要更多的存储空间),而且使查找路由时耗费更多的时间,同时也使路由器之间定期交换的路由信息急剧增加,因而使路由器和整个互联网的性能都下降了。
  第三,两级P地址不够灵活。
  有时情况紧急,一个单位需要在新的地点马上开通一个新的网络。但是在申请到一个新的P地址之前,新增加的网络是不可能连接到互联网上工作的。我们希望有一种方法,使一个单位能随时灵活地增加本单位的网络,而不必事先到互联网管理机构去申请新的网络号。原来的两级P地址无法做到这一点。
  为解决上述问题,从1985年起在P地址中又增加了一个“子网号字段”,使两级P地址变成为三级P地址,它能够较好地解决上述问题,并且使用起来也很灵活。这种做法叫做划分子网(subnetting)[RFC950],或子网寻址或子网路由选择。划分子网己成为互联网的正式标准协议。
在这里插入图片描述
在这里插入图片描述

(2)子网掩码

  现在剩下的问题就是:假定有一个数据报(其目的地址是145.13.3.10)已经到达了路由器R1。那么这个路由器如何把它转发到子网145.13.3.0呢?
  我们知道,从P数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网的划分。这是因为32位的P地址本身以及数据报的首部都没有包含任何有关子网划分的信息。因此必须另外想办法,这就是使用子网掩码(subnet mask)(见图4-20)。
在这里插入图片描述
  图4-20(是P地址为145.13.3.10的主机本来的两级IP地址结构。图4-20(b)是这个两级P地址的子网掩码。图4-20(©)是同一地址的三级P地址结构,也就是说,现在从原来16位的主机号中拿出8位作为子网号,而主机号由16位减少到8位。请注意,现在子网号为3的网络的网络地址是145.13.3.0(既不是原来两级P地址的网络地址145.13.0.0,也不是简单的子网号3)。为了使路由器R,能够很方便地从数据报中的目的P地址中提取出所要找的子网的网络地址,路由器R1就要使用三级P地址的子网掩码。图4-20(d)是三级P地址的子网掩码,它也是32位,由一串24个1和跟随的一串8个0组成。子网掩码中的1对应于P地址中原来二级地址中的16位网络号加上新增加的8位子网号,而子网掩码中的0对应于现在的8位主机号。虽然RFC文档中没有规定子网掩码中的一串1必须是连续的,但却极力推荐在子网掩码中选用连续的1,以免出现可能发生的差错。
  图4-20(e)表示R1把三级P地址的子网掩码和收到的数据报的目的P地址145.13.3.10逐位相“与”(AND)(计算机进行这种逻辑AND运算是很容易的),得出了所要找的子网的网络地址145.13.3.0。
  使用子网掩码的好处就是:不管网络有没有划分子网,只要把子网掩码和P地址进行逐位的“与”运算(AND),就立即得出网络地址来。这样在路由器处理到来的分组时就可采用同样的算法。

(3)使用子网时分组的转发

  在划分子网的情况下,分组转发的算法必须做相应的改动。
  我们应当注意到,使用子网划分后,路由表必须包含以下三项内容:目的网络地址、子网掩码和下一跳地址。
  在划分子网的情况下,路由器转发分组的算法如下:
  (I)从收到的数据报的首部提取目的P地址D。
  (2)先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”(AND操作),看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还需要把D转换成物理地址,把数据报封装成帧发送出去),转发任务结束。否则就是间接交付,执行(3)。
  (3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
  (4)对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相“与”(AND操作),其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(⑤)。
  (5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)
  (6)报告转发分组出错。

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

  划分子网在一定程度上缓解了互联网在发展中遇到的困难。然而在1992年互联网仍然面临三个必须尽早解决的问题,这就是:
  (1)B类地址在1992年已分配了近一半,眼看很快就将全部分配完毕!
  (2)互联网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)。
  (3)整个Pv4的地址空间最终将全部耗尽。在2011年2月3日,IANA宣布IPv4地址已经耗尽了。
  当时预计前两个问题将在1994年变得非常严重。因此ET℉很快就研究出采用无分类编址的方法来解决前两个问题。ET℉认为上面的第三个问题属于更加长远的问题,因此专门成立Pv6工作组负责研究解决新版本P协议的问题。
  其实早在1987年,RFC1009就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码。使用变长子网掩码VLSM(Variable Length Subnet Mask)可进一步提高IP地址资源的利用率。在VLSM的基础上又进一步研究出无分类编址方法,它的正式名字是无分类
域间路由选择CDR(Classless Inter-Domain Routing,CIDR的读音是“sider”)。
  CIDR最主要的特点有两个:
  (1)CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,因而能更加有效地分配IPv4的地址空间,并且在新的IPv6使用之前容许互联网的规模继续增长。CIDR把32位的IP地址划分为前后两个部分。前面部分是“网络前缀”(network-prefix)(或简称为“前缀”),用来指明网络,后面部分则用来指明主机。因此CDR使P地址从三级编址
(使用子网掩码)又回到了两级编址,但这己是无分类的两级编址。其记法是:
在这里插入图片描述
  CIDR还使用“斜线记法”(slash notation),或称为CIDR记法,即在P地址后面加上斜线“/”,然后写上网络前缀所占的位数。
  (2)CIDR把网络前缀都相同的连续的P地址组成一个“CIDR地址块”。我们只要知道CDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数。例如,已知P地址128.14.35.720是某CDR地址块中的一个地址,现在把它写成二进制表示,其中的前20位是网络前缀(用粗体和下划线表示出),而前缀后面的12位是主机号:
在这里插入图片描述
  这个地址所在地址块中的最小地址和最大地址可以很方便地得出:
在这里插入图片描述
  当然,以上这两个特殊地址的主机号是全0和全1的地址。一般并不使用。通常只使用在这两个特殊地址之间的地址。不难看出,这个地址块共有212个地址。我们可以用地址块中的最小地址和网络前缀的位数指明这个地址块。例如,上面的地址块可记为128.14.32.0/20。在不需要指出地址块的起始地址时,也可把这样的地址块简称为“/20地址块”。
  为了更方便地进行路由选择,CIDR使用32位的地址掩码(address mask)。地址掩码由一串1和一串0组成,而1的个数就是网络前缀的长度。虽然CDR不使用子网了,但由于目前仍有一些网络还使用子网划分和子网掩码,因此CDR使用的地址掩码也可继续称为子网掩码。例如,/20地址块的地址掩码是:11111111111111111111000000000000(20个连续的1)。斜线记法中,斜线后面的数字就是地址掩码中1的个数。

4、IPv6

  IP是互联网的核心协议。现在使用的P(即IPv4)是在20世纪70年代末期设计的。互联网经过几十年的飞速发展,到2011年2月,Pv4的地址己经耗尽,ISP已经不能再申请到新的P地址块了。我国在2014年至2015年也逐步停止了向新用户和应用分配Pv4地址,同时全面开始商用部署Pv6。
  解决P地址耗尽的根本措施就是采用具有更大地址空间的新版本的P,即PV6。到目前为止,Pv6还只是草案标准阶段[RF℃2460,4862,4443]。有关向Pv6转换的进展情况见有关网站W-NGTRANS]。

  之前一直有一个使我比较困扰,那就是关于IPv4的使用情况,因为本人也拥有几个服务器,其中的Ip地址都是IPv4的,但是根据实际的情况。全世界的IPv4地址就只有四十二亿个左右,就目前来说IPv4的地址资源比较匮乏。但现实却是我们仍然大量地使用IPv4的地址。于是经过上网看相关科普视频后发现,其中有一个视频解释的非常好。
电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅

大家有兴趣可以去看一看

  关于IPv6所引进的主要变化如下:
  (1)更大的地址空间。Pv6把地址从Pv4的32位增大到4倍,即增大到128位,使地址空间增大了26倍。这样大的地址空间在可预见的将来是不会用完的。
  (2)扩展的地址层次结构。PV6由于地址空间很大,因此可以划分为更多的层次。
  (3)灵活的首部格式。Pv6数据报的首部和Pv4的并不兼容。Pv6定义了许多可选的扩展首部,不仅可提供比Pv4更多的功能,而且还可提高路由器的处理效率,这是因为路由器对扩展首部不进行处理(除逐跳扩展首部外)。
  (4)改进的选项。PV6允许数据报包含有选项的控制信息,因而可以包含一些新的选项。但IPv6的首部长度是固定的,其选项放在有效载荷中。我们知道,Pv4所规定的选项是固定不变的,其选项放在首部的可变部分。
  (5)允许协议继续扩充。这一点很重要,因为技术总是在不断地发展(如网络硬件的更新)而新的应用也还会出现。但我们知道,Pv4的功能是固定不变的。
  (6)支持即插即用(即自动配置)。因此Pv6不需要使用DHCP。
  (7)支持资源的预分配。PV6支持实时视像等要求保证一定的带宽和时延的应用。
  (8)IPv6首部改为8字节对齐(即首部长度必须是8字节的整数倍)。原来的Pv4首部是4字节对齐。

5、虚拟专用网VPN和网络地址转换NAT

(1)虚拟专用网VPN

  由于P地址的紧缺,一个机构能够申请到的P地址数往往远小于本机构所拥有的主机数。考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。实际上,在许多情况下,很多主机主要还是和本机构内的其他主机进行通信(例如,在大型商场或宾馆中,有很多用于营业和管理的计算机。显然这些计算机并不都需要和互联网相连)。假定在一个机构内部的计算机通信也是采用TCPP协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其P地址。这就是说,让这些计算机使用仅在本机构有效的P地址(这种地址称为本地地址),而不需要向互联网的管理机构申请全球唯一的P地址(这种地址称为全球地址)。这样就可以大大节约宝贵的全球P地址资源。
  但是,如果任意选择一些P地址作为本机构内部使用的本地地址,那么在某种情况下可能会引起一些麻烦。例如,有时机构内部的某台主机需要和互联网连接,那么这种仅在内部使用的本地地址就有可能和互联网中某个P地址重合,这样就会出现地址的二义性问题。
  为了解决这一问题,RFC1918指明了一些专用地址(private address)。这些地址只能用于一个机构的内部通信,而不能用于和互联网上的主机通信。换言之,专用地址只能用做本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。2013年4月,RFC6890全面地给出了所有特殊用途的Pv4地址,但三个专用地址块的指派并无变化,即
  (1)10.0.0.0到10.255.255.255(或记为10.0.0.0/8,它又称为24位块)
  (2)172.16.0.0到172.31.255.255(或记为172.16.0.0/12,它又称为20位块)
  (3)192.168.0.0到192.168.255.255(或记为192.168.0.0/16,它又称为16位块)
  上面的三个地址块分别相当于一个A类网络、16个连续的B类网络和256个连续的C类网络。A类地址本来早已用完了,而上面的地址10.0.0.0本来是分配给ARPANET的。由于ARPANET己经关闭停止运行了,因此这个地址就用作专用地址。
  采用这样的专用P地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫做专用网。显然,全世界可能有很多的专用互连网络具有相同的专用P地址,但这并不会引起麻烦,因为这些专用地址仅在本机构内部使用。专用P地址也叫做可重用地址
(reusable address)
  有时一个很大的机构的许多部门分布的范围很广(例如,在世界各地),这些部门经常要互相交换信息。这可以有两种方法。(1)租用电信公司的通信线路为本机构专用。这种方法虽然简单方便,但线路的租金太高,一般难于承受。(2)利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用VPN(Virtual Private Network)。
  之所以称为“专用网”是因为这种网络是为本机构的主机用于机构内部的通信,而不是用于和网络外非本机构的主机通信。如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。加密需要采用的协议将在7.61节讨论。“虚拟”表示“好像是”,但实际上并不是,因为现在并没有真正使用通信专线,而VPN只是在效果上和真正的专用网一样。一个机构要构建自己的VPN就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的VPN系统都知道其他场所的地址。
  图4-59以两个场所为例说明如何使用P隧道技术实现虚拟专用网。
  假定某个机构在两个相隔较远的场所建立了专用网A和B,其网络地址分别为专用地址10.1.0.0和10.2.0.0。现在这两个场所需要通过公用的互联网构成一个VPN。
  显然,每一个场所至少要有一个路由器具有合法的全球P地址,如图4-59()中的路由器R,和R2。这两个路由器和互联网的接口地址必须是合法的全球P地址。路由器R,和R2在专用网内部网络的接口地址则是专用网的本地地址。
在这里插入图片描述
  在每一个场所A或B内部的通信量都不经过互联网。但如果场所A的主机X要和另一个场所B的主机Y通信,那么就必须经过路由器R,和R2。主机X向主机Y发送的P数据报的源地址是10.1.0.1,而目的地址是10.2.0.3。这个数据报先作为本机构的内部数据报从X发送到与互联网连接的路由器R1。路由器R1收到内部数据报后,发现其目的网络必须通过互联网才能到达,就把整个的内部数据报进行加密(这样就保证了内部数据报的安全),然后重新加上数据报的首部,封装成为在互联网上发送的外部数据报,其源地址是路由器R的全球地址125.1.2.3,而目的地址是路由器R2的全球地址194.4.5.6。路由器R2收到数据报后将其数据部分取出进行解密,恢复出原来的内部数据报(目的地址是10.2.0.3),交付主机Y。可见,虽然X向Y发送的数据报是通过了公用的互联网,但在效果上就好像是在本部门的专用网上传送一样。如果主机Y要向X发送数据报,那么所进行的步骤也是类似的。
  请注意,数据报从R1传送到R2可能要经过互联网中的很多个网络和路由器。但从逻辑上看,在R1到R2之间好像是一条直通的点对点链路,图4-59(中的“隧道”就是这个意思。
  如图4-59b)所示的、由场所A和B的内部网络所构成的虚拟专用网VPN又称为内联网(intranet或intranet VPN,即内联网VPN),表示场所A和B都属于同一个机构。
  有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN就称为外联网(extranet或extranet VPN,即外联网VPN)。

  请注意,内联网和外联网都采用了互联网技术,即都是基于TCPP协议的。
  还有一种类型的VPN,就是远程接入VPN(remote access VPN)。我们知道,有的公司可能并没有分布在不同场所的部门,但却有很多流动员工在外地工作。公司需要和他们保持联系,有时还可能一起开电话会议或视频会议。远程接入VPN可以满足这种需求。在外地工作的员工通过拨号接入互联网,而驻留在员工个人电脑中的VPN软件可以在员工的个人电脑和公司的主机之间建立VPN隧道,因而外地员工与公司通信的内容也是保密的,员工们感到好像就是使用公司内部的本地网络。

(2)网络地址转换NAT

  下面讨论另一种情况,就是在专用网内部的一些主机本来己经分配到了本地P地址(即仅在本专用网内使用的专用地址),但现在又想和互联网上的主机通信(并不需要加密),那么应当采取什么措施呢?
  最简单的办法就是设法再申请一些全球P地址。但这在很多情况下是不容易做到的,因为全球PV4的地址已所剩不多了。目前使用得最多的方法是采用网络地址转换。网络地址转换NAT (Network Address Translation)方法是在l994年提出的。这种方法需
要在专用网连接到互联网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球P地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球P地址,才能和互联网连接。
  图4-60给出了NAT路由器的工作原理。在图中,专用网192.168.0.0内所有主机的IP地址都是本地IP地址192.168.x.x。NAT路由器至少要有一个全球P地址,才能和互联网相连。图4-60表示出NAT路由器有一个全球IP地址172.38.1.5(当然,NAT路由器可以有多个全球P地址)。
在这里插入图片描述
  NAT路由器收到从专用网内部的主机A法网互联网上主机B的IP数据报:源IP地址是192.168.0.3,而目的IP地址是213.18.2.4。NAT路由器把IP数据报的源IP地址下面讨论另一种情况,就是在专用网内部的一些主机本来己经分配到了本地P地址(即仅在本专用网内使用的专用地址),但现在又想和互联网上的主机通信(并不需要加密),那么应当采取什么措施呢?最简单的办法就是设法再申请一些全球P地址。但这在很多情况下是不容易做到的,因为全球PV4的地址已所剩不多了。目前使用得最多的方法是采用网络地址转换。网络地址转换NAT (Network Address Translation)方法是在l994年提出的。这种方法需要在专用网连接到互联网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球P地址。这样,所有使用本地地址的主机在和外界通
信时,都要在NAT路由器上将其本地地址转换成全球P地址,才能和互联网连接。图4-60给出了NAT路由器的工作原理。在图中,专用网192.168.0.0内所有主机的P地址都是本地P地址192.168.x.x。NAT路由器至少要有一个全球P地址,才能和互联网相连。图4-60表示出NAT路由器有一个全球P地址172.38.1.5(当然,NAT路由器可以有多个全球P地址)。
在这里插入图片描述
  由此可见,当NAT路由器具有n个全球IP地址时,专用网内最多可以同时有n台主机接入到互联网。这样就可以使专用网内较多数量的主机,轮流使用NAT路由器有限数量的全球IP地址。

🏐六、运输层

1、运输层协议概述

(1)进程之间的通信

  从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络的边缘部分中的两台主机使用网络的核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。
  下面通过图5-1的示意图来说明运输层的作用。设局域网LAN1上的主机A和局域网LAN2上的主机B通过互连的广域网WAN进行通信。我们知道,IP协议能够把源主机A发送出的分组,按照首部中的目的地址,送交到目的主机B,那么,为什么还需要运输层呢?
  从IP层来说,通信的两端是两台主机。P数据报的首部明确地标志了这两台主机的P地址。但“两台主机之间的通信”这种说法还不够清楚。这是因为,真正进行通信的实体是在主机中的进程,是这台主机中的一个进程和另一台主机中的一个进程在交换数据(即通信)。因此严格地讲,两台主机进行通信就是两台主机中的应用进程互相通信。P协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用进程。从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。例如,某用户在使用浏览器查找某网站的信息时,其主机的应用层运
行浏览器客户进程。如果在浏览网页的同时,还要用电子邮件给网站发送反馈意见,那么主机的应用层就还要运行电子邮件的客户进程。在图5-1中,主机A的应用进程AP,和主机B的应用进程AP3通信,而与此同时,应用进程AP2也和对方的应用进程AP4通信。这表明
运输层有一个很重要的功能一复用(multiplexing)和分用(demultiplexing)。这里的“复用”是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据(当然需要加上适当的首部),而“分用”是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。图5-1中两个运输层之间有一个双向粗箭头,写明==“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:从应用层来看,只要把应用层报文交给下面的运输层,运输层就可以把这报文传送到对方的运输层(哪怕双方相距很远,例如几千公里),好像这种通信就是沿水平方向直接传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。数据的传送是沿着图中的虚线方向(经过多个层次)传送的。“逻辑通信”的意思是“好像是这样通信,但事实上并非真的这样通信”。
在这里插入图片描述
  从这里可以看出网络层和运输层有明显的区别。网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信(见图5-2)。然而正如后面还要讨论的,运输层还具有网络层无法代替的许多其他重要功能。
  运输层还要对收到的报文进行差错检测。大家应当还记得,在网络层,P数据报首部中的检验和字段,只检验首部是否出现差错而不检查数据部分。
  根据应用程序的不同需求,运输层需要有两种不同的运输协议,即
面向连接的TCP和无连接的UDP==,这两种协议就是本章要讨论的主要内容。
  我们还应指出,运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别。当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道
在这里插入图片描述

(2)运输层的两个主要协议

TCP/IP运输层的两个主要协议都是互联网的正是标准,即:
(1)用户数据报协议UDP(User Datagram Protocol)[RFC 768]
(2)传输控制协议TCP(Transmission Control Protocol)[RFC 793]
图5-3给出了这两种协议在协议栈中的位置
在这里插入图片描述
  按照OSI的术语,两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元TPDU(Transport Protocol Data Unit)。但在TCP/IP体系中,则根据所使用的协议是TCP或UDP,分别称之为TCP报文段(segment)或UDP用户数据报。
  UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。
  TCP则提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或多播服务。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销,如确认、流量控制、计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
  表5-1给出了一些应用和应用层协议主要使用的运输层协议(UDP或TCP)。
在这里插入图片描述

(3)运输层的端口

  前面已经提到过运输层的复用和分用功能。其实在日常生活中也有很多复用和分用的例子。假定一个机构的所有部门向外单位发出的公文都由收发室负责寄出,这相当于各部门都“复用”这个收发室。当收发室收到从外单位寄来的公文时,则要完成“分用”功能,即按照信封上写明的本机构的部门地址把公文正确进行交付。
  运输层的复用和分用功能也是类似的。应用层所有的应用进程都可以通过运输层再传送到P层(网络层),这就是复用。运输层从P层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程,这就是分用。显然,给应用层的每个应用进程赋予一个非常明确的标志是至关重要的。
  我们知道,在单个计算机中的进程是用进程标识符(一个不大的整数)来标志的。但是在互联网环境下,用计算机操作系统所指派的这种进程标识符来标志运行在应用层的各种应用进程则是不行的。这是因为在互联网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符。为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法(而这种方法必须与特定操作系统无关)对TCPP体系的应用进程进行标志。
  但是,把一个特定机器上运行的特定进程,指明为互联网上通信的最后终点还是不可行的。这是因为进程的创建和撤销都是动态的,通信的一方几乎无法识别对方机器上的进程。另外,我们往往需要利用目的主机提供的功能来识别终点,而不需要知道具体实现这个功能的进程是哪一个(例如,要和互联网上的某个邮件服务器联系,并不一定要知道这个服务器功能是由目的主机上的哪个进程实现的)。
  解决这个问题的方法就是在运输层使用协议端口号(protocol port number),或通常简称为端口(port
)。这就是说,虽然通信的终点是应用进程,但只要把所传送的报文交到目的主机的某个合适的目的端口,剩下的工作(即最后交付目的进程)就由TCP或UDP来完成。
  请注意,这种在协议栈层间的抽象的协议端口是软件端口,和路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的接口,==而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。==不同的系统具体实现端口的方法可以是不同的。(取决于系统使用的操作系统)。

(1)服务器端使用的端口号
  这里又分为两类,最重要的一类叫做熟知端口号(well-known port number)或系统端口号,数值为0~l023。这些数值可在网址www.iana.org查到。IANA把这些端口号指派给了TCPP最重要的一些应用程序,让所有的用户都知道。当一种新的应用程序出现后,IANA必须为它指派一个熟知端口,否则互联网上的其他应用进程就无法和它进行通信。表5-2给出了一些常用的熟知端口号。
在这里插入图片描述
  另一类叫做登记端口号,数值为102449151。这类端口号是为没有熟知端口号的应用程序使用的。使用这类端口号必须在IANA按照规定的手续登记,以防止重复。
(2)客户端使用的端口号 数值为49152~65535。由于这类端口号仅在客户进程运行时才动态选择,因此又叫做短暂端口号。这类端口号留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的端口号,因而可以把数据发送给客户进程。通信结束后,刚才已使用过的客户端口号就不复存在,这个端口号就可以供其他客户进程使用。

2、用户数据报协议(UDP)

(1)UDP概述

  用户数据报协议UDP只在P的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及差错检测的功能。UDP的主要特点是:
  (1)UDP是无连接的,即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
  (2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里面有许多参数)。
  (3)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付P层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文,如图5-4所示。在接收方的UDP,对P层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程。也就是说,UDP一次交付一个完整的报文。因此,应用程序必须选择合适大小的报文。若报文太长,UDP把它交给P层后,P层在传送时可能要进行分片,这会降低P层的效率。反之,若报文太短,UDP把它交给P层后,会使P数据报的首部的相对长度太大,这也降低了P层的效率。
在这里插入图片描述
  (4)UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很多的实时应用(如P电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延。UDP正好适合这种要求。
  (5)UDP支持一对一、一对多、多对一和多对多的交互通信。
  (6)UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。虽然某些实时应用需要使用没有拥塞控制的UDP,但当很多的源主机同时都向网络发
送高速率的实时视频流时,网络就有可能发生拥塞,结果大家都无法正常接收。因此,不使用拥塞控制功能的UDP有可能会引起网络产生严重的拥塞问题。
  还有一些使用UDP的实时应用,需要对UDP的不可靠的传输进行适当的改进,以减少数据的丢失。在这种情况下,应用进程本身可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传己丢失的报文。

3、传输控制协议TCP概述

(1)TCP最主要的特点

  TCP是TCPP体系中非常复杂的一个协议。下面介绍TCP最主要的特点。
  (1)TCP是面向连接的运输层协议。这就是说,应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。也就是说,应用进程之间的通信好像在“打电话”:通话前要先拨号建立连接,通话结束后要挂机释放连接。
  (2)每一条TCP连接只能有两个
端点(endpoint)
,每一条TCP连接只能是点对点的(一对一)。这个问题后面还要进一步讨论。
  (3)TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。
  (4)TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。在发送时,应用程序在把数据传送给TCP的缓存后,就可以做自己的事,而TCP在合适的时候把数据发送出去。在接收时,T℃P把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据。
  (5)面向字节流。TCP中的“流”(stream)指的是流入到进程或从进程流出的字节序列。“面向字节流”.的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。TCP并不知道所传送的字节流的含义。T℃P不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系(例如,发送方应用程序交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付上层的应用程序)。但接收方应
用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。当然,接收方的应用程序必须有能力识别收到的字节流,把它还原成有意义的应用层数据。图5-8是上述概念的示意图。
在这里插入图片描述
  为了突出示意图的要点,我们只画出了一个方向的数据流。但请注意,在实际的网络中,一个TCP报文段包含上千个字节是很常见的,而图中的各部分都只画出了几个字节,这仅仅是为了更方便地说明“面向字节流”的概念。另一点很重要的是:图5-8中的T℃P
连接是一条虚连接(也就是逻辑连接),而不是一条真正的物理连接。TCP报文段先要传送到P层,加上P首部后,再传送到数据链路层。再加上数据链路层的首部和尾部后,才离开主机发送到物理链路。
  图5-8指出,TCP和UDP在发送报文时所采用的方式完全不同。TCP并不关心应用进程一次把多长的报文发送到T℃P的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。如果应用进程传送到TCP缓存的数据块太长,TCP就可以把它划分短一些再传送。如果应用进程一次只发来一个字节,TCP也可以等待积累有足够多的字节后再构成报文段发送出去。关于TCP报文段的长度问题,在后面还要进行讨论。

(2)TCP的连接

  TCP把连接作为最基本的抽象。TCP的许多特性都与TCP是面向连接的这个基本特性有关。因此我们对TCP连接需要有更清楚的了解。
  前面已经讲过,每一条TCP连接有两个端点。那么,TCP连接的端点是什么呢?不是主机,不是主机的P地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫做套接字(socket)或插口。根据RFC793的定义:端口号拼接到(concatenated with)IP地址即构成了套接字。因此,套接字的表示方法是在点分十进制的P地址后面写上端口号,中间用冒号或逗号隔开。例如,若P地址是192.3.4.5而端口号是80,那么得到的套接字就是(192.3.4.5:80)。总之,我们有
在这里插入图片描述
==每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。==即
在这里插入图片描述

(4)可靠传输的工作原理

  我们知道TCP发送的报文段是交给IP层传送的。但IP层只能提供最大努力服务,也就是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP必须采用适当的措施才能使得两个运输层之间的通信变得可靠。
  理想的传输条件有以下两个特点:
  (1)传输信道不产生差错。
  (2)不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。在这样的理想传输条件下,不需要采取任何措施就能够实现可靠传输。
  然而实际的网络都不具备以上两个理想条件。但我们可以使用一些可靠传输协议,当出现差错时让发送方重传出现差错的数据,同时在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速度。这样一来,本来不可靠的传输信道就能够实现可靠传输了。下面从最简单的停止等待协议①讲起。

  其中关于传输的工作原理,所涉及的内容篇幅较大,详细可再进一步去查阅计算机网络(第7版)

(5)TCP可靠传输的实现和TCP的拥塞控制方法

  其中TCP可靠传输的实现和拥塞控制方法过程也十分有意思,但由于篇幅较大,可查阅计算机网络(第7版)。

(6)TCP的运输连接管理(重点)

  TCP是面向连接的协议。运输连接是用来传送TCP报文的。TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。因此,运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。
  在TCP连接建立过程中要解决以下三个问题:
  (1)要使每一方能够确知对方的存在。
  (2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)。
  (3)能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
  TCP连接的建立采用客户服务器方式。主动发起连接建立的应用进程叫做客户(client),而被动等待连接建立的应用进程叫做服务器(server)。

(7)TCP的连接建立(三次握手)

  TCP建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段。
图5-28画出了三报文握手建立TCP连接的过程。
在这里插入图片描述
  假定主机A运行的是TCP客户程序,而B运行TCP服务器程序。最终两端的TCP进程都处于CLOSED(关闭)状态。图中在主机下面的方框分别是TCP进程所处的状态。请注意,在本例中,A主动打开连接,而B被动打开连接。
  一开始,B的TCP服务器进程先创建传输控制块TCB”,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。如有,即作出响应。
  A的TCP客户进程也是首先创建传输控制模块TCB。然后,在打算建立TCP连接时,向B发出连接请求报文段,这时首部中的同步位SYN=I,同时选择一个初始序号sq=x。TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗掉一个序号。这时,TCP客户进程进入SYN-SENT(同步已发送)状态。
  B收到连接请求报文段后,如同意建立连接,则向A发送确认。在确认报文段中应把SYN位和ACK位都置1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。请注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。这时TC服务器进程进入SYN-RCVD(同步收到)状态。
  TCP客户进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号ack=y+I,而自己的序号seq=x+1。TCP的标准规定,ACK报文段可以携带数据。但如果不携带数据则不消耗序号,在这种情沉下,下一个数据报文段的序号仍是sq=x+1。这时,TCP连接已经建立,A进入ESTABLISHED(已建立连接)状态。
  当B收到A的确认后,也进入ESTABLISHED状态。
  上面给出的连接建立过程叫做三报文握手。请注意,在图5-28中B发送给A的报文段,也可拆成两个报文段。可以先发送一个确认报文段(ACK=I,ck=x+I),然后再发送一个同步报文段(SYN=1,seq=y)。这样的过程就变成了四报文握手,但效果是一样的。
  为什么A最后还要发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。
  所谓“已失效的连接请求报文段”是这样产生的。考虑一种正常情况,A发出连接请求,但因连接请求报文丢失而未收到确认。于是A再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接。A共发送了两个连接请求报文段,其中第一个丢失,第二个到达了B,没有“已失效的连接请求报文段”。
  现假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误认为是A又发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用报文握手,那么只要B发出确认,新的连接就建立了。
  由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却以为新的运输连接已经建立了,并一直等待A发来数据。B的许多资源就这样白白浪费了。
  采用三报文握手的方法,可以防止上述现象的发生。例如在刚才的异常情况下,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接。

(8)TCP的连接释放(四次分手)

  TCP连接释放过程比较复杂,我们仍结合双方状态的改变来阐明连接释放的过程。
  数据传输结束后,通信的双方都可释放连接。现在A和B都处于ESTABLISHED状态(图5-29)。A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的终止控制位FN置1,其序号sq=u,它等于前面
已传送过的数据的最后一个字节的序号加1。这时A进入FN-WAIT-1(终止等待1)状态,等待B的确认。请注意,TCP规定,FN报文段即使不携带数据,它也消耗掉一个序号。
在这里插入图片描述
  B收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1。然后B就进入CLOSE-WAT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时的TCP连接处于半关闭(half-close)状态,即A己经没有数据要发送了,但B若发送数据,A仍要接收。也就是说,从B到A这个方向的连接并未关闭,这个状态可能会持续一段时间。
  A收到来自B的确认后,就进入FN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
  若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FN=1。现假定B的序号为w(在半关闭状态B可能又发送了一些数据)。B还必须重复上次已发送过的确认号ack=u+1。这时B就进入LAST-ACK(最后确认)状态,等待A的确认。
  A在收到B的连接释放报文段后,必须对此发出确认。在确认报文段中把ACK置1,确认号ack=w+l,而自己的序号是seq=u+1(根据TCP标准,前面发送过的FN报文段要消耗一个序号)。然后进入到TME-WAT(时间等待)状态。请注意,现在TCP连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入到CLOSED状态。时间MSL叫做最长报文段寿命(Maximum Segment Lifetime),RFC793建议设为2分钟。但这完全是从工程上来考虑的,对于现在的网络,MSL=2分钟可能太长了一些。因此TCP允许不同的实现可根据具体情况使用更小的MSL值。因此,从A进入到TIME-WAIT状态后,要经过4分钟才能进入到CLOSED状态,才能开始建立下一个新的连接。当A撤销相应的传输控制块TCB后,就结束了这次的TCP连接。
  为什么A在TIME-WAIT状态必须等待2MSL的时间呢?这有两个理由。
  第一,为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FN+ACK报文段的确认。B会超时重传这个FN+ACK报文段,而A就能在2MSL时间内收到这个重传的FN+ACK报文段。接着A重传一次确认,重新启动2MSL计时器。最后,A和B都正常进入到CLOSED状态。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后立即释放连接,那么就无法收到B重传的FN+ACK报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常步骤进入CLOSED状态。
  第二,防止上一节提到的“已失效的连接请求报文段”出现在本连接中。A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
  B只要收到了A发出的确认,就进入CLOSED状态。同样,B在撤销相应的传输控制块TCB后,就结束了这次的TCP连接。我们注意到,B结束TCP连接的时间要比A早一些。
  上述的TCP连接释放过程是四报文握手。
  除时间等待计时器外,TcP还设有一个保活计时器(keepalive timer)。设想有这样的情况:客户已主动与服务器建立了TCP连接。但后来客户端的主机突然出故障。显然,服务器以后就不能再收到客户发来的数据。因此,应当有措施使服务器不要再白白等待下去。这就是使用保活计时器。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两小时。若两小时没有收到客户的数据,服务器就发送一个探测报文段,以后则每隔75秒钟发送一次。若一连发送10个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭这个连接。

🏉七、应用层

应用层协议应当定义:
  1、应用进程交换的报文类型,如请求报文和响应报文。
  2、各种报文类型的语法,如报文中的各个字段及其详细描述。
  3、字段的语义,即包含在字段中的信息的含义。
  4、进程何时、如何发送报文,以及对报文进行响应的规则。

1、域名系统DNS

  域名系统DNS(Domain Name System)是互联网使用的命名系统,用来把便于人们使用的机器名字转换为P地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种互联网的命名系统中使用了许多的“域”(domain),因此就出现了“域名”这个名词。“域名系统”很明确地指明这种系统是用在互联网中的。
  许多应用层软件经常直接使用域名系统DNS。虽然计算机的用户只是间接而不是直接使用域名系统,但DNS却为互联网的各种网络应用提供了核心服务。
  用户与互联网上某台主机通信时,必须要知道对方的P地址。然而用户很难记住长达32位的二进制主机地址。即使是点分十进制P地址也并不太容易记忆。但在应用层为了便于用户记忆各种网络应用,连接在互联网上的主机不仅有P地址,而且还有便于用户记忆的主机名字。域名系统DNS能够把互联网上的主机名字转换为P地址。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、文件传送协议

(1)FTP概述

  网络环境中的一项基本应用就是将文件从一台计算机中复制到另一台可能相距很远的计算机中。初看起来,在两台主机之间传送文件是很简单的事情。其实这往往非常困难。原因是众多的计算机厂商研制出的文件系统多达数百种,且差别很大。经常遇到的问题是:
  (1)计算机存储数据的格式不同。
  (2)文件的目录结构和文件命名的规定不同。
  (3)对于相同的文件存取功能,操作系统使用的命令不同。
  (4)访问控制方法不同。
  文件传送协议FTP只提供文件传送的一些基本的服务,它使用TCP可靠的运输服务。FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
  FTP使用客户服务器方式。一个FTP服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求:另外有若干个从属进程,负责处理单个请求。

(2)远程终端协议TELNET

  TELNET是一个简单的远程终端协议RFC854],它也是互联网的正式标准。用户用TELNET就可在其所在地通过TCP连接注册(即登录)到远地的另一台主机上(使用主机名或P地址)。TELNET能将用户的击键传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。因此,TELNET又称为终端仿真协议。
  TELNET并不复杂,以前应用得很多。现在由于计算机的功能越来越强,用户己较少使用TELNET了。

3、超文本传送协议HTTP(重点)

  HTTP协议定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向事务的(transaction-oriented)②应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。请注意,HTTP不仅传送完成超文本跳转所必需的信息,而且也传送任何可从互联网上得到的信息,如文本、超文本、声音和图像等。
  万维网的大致工作过程如图6-9所示。
在这里插入图片描述

  每个万维网网点都有一个服务器进程,它不断地监听TCP的端口80,以便发现是否有浏览器(即万维网客户。请注意,浏览器和万维网客户是同义词)向它发出连接建立请求。一旦监听到连接建立请求并建立了TCP连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。最后,TCP连接就被释放了。在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则就是超文本传送协议HTTP。
  HTTP规定在HTTP客户与HTTP服务器之间的每次交互,都由一个ASCII码串构成的请求和一个类似的通用互联网扩充,即“类MIME (MIME-Iike)”的响应组成。HTTP报文通常都使用TCP连接传送。
  用户浏览页面的方法有两种。一种方法是在浏览器的地址窗口中键入所要找的页面的URL。另一种方法是在某一个页面中用鼠标点击一个可选部分,这时浏览器会自动在互联网上找到所要链接的页面。
  HTTP使用了面向连接的TCP作为运输层协议,保证了数据的可靠传输。HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP协议本身是无连接的。这就是说,虽然HTTP使用了TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接。在1997年以前使用的是RFC1945定义的HTTP/1.0协议。现在普遍使用的升级版本HTTP/1.1己是互联网建议标准[RFC7231]。
  HTTP协议是无状态的(stateless)。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同(假定现在服务器还没有把该页面更新),因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。HTTP的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。
  下面我们粗略估算一下,从浏览器请求一个万维网文档到收到整个文档所需的时间(图6-10)。用户在点击鼠标链接某个万维网文档时,HTTP协议首先要和服务器建立TCP连接。这需要使用三报文握手。当建立TCP连接的三报文握手的前两部分完成后(即经过了一个RTT时间后),万维网客户就把HTTP请求报文,作为建立TCP连接的三报文握手中的第三个报文的数据,发送给万维网服务器。服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户。
在这里插入图片描述
  从图6-10可看出,请求一个万维网文档所需的时间是该文档的传输时间(与文档大小成正比)加上两倍往返时间RTT(一个RTT用于连接TCP连接,另一个RTT用于请求和接收万维网文档。TCP建立连接的三报文握手的第三个报文段中的数据,就是客户对万维网文档的请求报文)。
  HTTP/1.0的主要缺点,就是每请求一个文档就要有两倍RTT的开销。若一个主页上有很多链接的对象(如图片等)需要依次进行链接,那么每一次链接下载都导致2×RTT的开销。另一种开销就是万维网客户和服务器每一次建立新的T℃P连接都要分配缓存和变量。特别是万维网服务器往往要同时服务于大量客户的请求,所以这种非持续连接会使万维网服务器的负担很重。好在浏览器都能够打开5~10个并行的TCP连接,而每一个T℃P连接处理客户的一个请求。因此,使用并行TCP连接可以缩短响应时间。
  HTTP/1.1协议较好地解决了这个问题,它使用了持续连接(persistent connection)。所谓持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。目前一些流行的浏览器(如E11.0)的默认设置就使用了HTTP/1.1。如果用户不愿意使用持续连接的浏览器,可以选择E浏览器上面的“工具”→“Internet选项”→“高级”等项目,把“HTTP1.1设置”的选择取消即可。
  HTTP/1.1协议的持续连接有两种工作方式,即非流水线方式(without pipelining)和流水线方式(with pipelining).
  非流水线方式的特点,是客户在收到前一个响应后才能发出下一个请求。因此,在T℃P连接已建立后,客户每访问一次对象都要用去一个往返时间TT。这比非持续连接要用去两倍RTT的开销,节省了建立TCP连接所需的一个RTT时间。但非流水线方式还是有缺点的,因为服务器在发送完一个对象后,其T℃P连接就处于空闲状态,浪费了服务器资源。
  流水线方式的特点,是客户在收到HTTP的响应报文之前就能够接着发送新的请求报文。于是一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。因此,使用流水线方式时,客户访问所有的对象只需花费一个RTT时间。瑞穗乡工作方式使TCP连接中的空闲时间减少,提高了下载文档效率。

🥏八、网络安全

1、网络安全问题概述

  计算机网络面临的安全威胁
  计算机网络的通信面临两大类威胁,即被动攻击和主动攻击。
在这里插入图片描述
  被动攻击是指攻击者从网络上窃听他人的通信内容。通常把这类攻击称为截获。在被动攻击中,攻击者只是观察和分析某一个协议数据单元PDU(这里使用PDU这一名词是考虑到所涉及的可能是不同的层次)而不干扰信息流。即使这些数据对攻击者来说是不易理解的,他也可通过观察PDU的协议控制信息部分,了解正在通信的协议实体的地址和身份,研究PDU的长度和传输的频度,从而了解所交换的数据的某种性质。这种被动攻击又称为流量分析(traffic analysis)。在战争时期,通过分析某处出现大量异常的通信量,往往可以发现敌方指挥所的位置。
  主动攻击有如下几种最常见的方式。
  (1)篡改
攻击者故意篡改网络上传送的报文。这里也包括彻底中断传送的报文,甚至是把完全伪造的报文传送给接收方。这种攻击方式有时也称为更改报文流。
  (2)恶意程序
恶意程序(rogue program)种类繁多,对网络安全威胁较大的主要有以下几种。
  计算机病毒(computer virus),一种会“传染”其他程序的程序,“传染”是通过修改其他程序来把自身或自己的变种复制进去而完成的。
  计算机蠕虫(computer worm),一种通过网络的通信功能将自身从一个结点发送到另一个结点并自动启动运行的程序。
  特洛伊木马(Trojan horse),一种程序,它执行的功能并非所声称的功能而是某种恶意功能。如一个编译程序除了执行编译任务以外,还把用户的源程序偷偷地复制下来,那么这种编译程序就是一种特洛伊木马。计算机病毒有时也以特洛伊木马的形式出现。
  逻辑炸弹(logic bomb),一种当运行环境满足某种特定条件时执行其他特殊功能的程序。如一个编辑程序,平时运行得很好,但当系统时间为13日又为星期五时,它会删去系统中所有的文件,这种程序就是一种逻辑炸弹。
  后门入侵(backdoor knocking),是指利用系统实现中的漏洞通过网络入侵系统。就像一个盗贼在夜晚试图闯入民宅,如果某家住户的房门有缺陷,盗贼就能乘虚而入。索尼游戏网络(PlayStation Network)在2011年被入侵,导致7700万用户的个人信息,诸如姓名、生日、email地址、密码等被盗[W-BACKD]。
  流氓软件,一种未经用户允许就在用户计算机上安装运行并损害用户利益的软件,其典型特征是:强制安装、难以卸载、浏览器劫持、广告弹出、恶意收集用户信息、恶意卸载、恶意捆绑等等。现在流氓软件的泛滥程度已超过了各种计算机病毒,成为互联网上最大的公害。流氓软件的名字一般都很吸引人,如某某卫士、某某搜霸等,因此要特别小心。

2、实用的密码散列函数MD5和SHA-1

  通过许多学者的不断努力,已经设计出一些实用的密码散列函数(或称为散列算法),其中最出名的就是MD5和SHA-l。MD就是Message Digest的缩写,意思是报文摘要。MD5是报文摘要的第5个版本。
  报文摘要算法MD5公布于RFC1321(1991年),并获得了非常广泛的应用。MD5的设计者Rivest曾提出一个猜想,即根据给定的MD5报文摘要代码,要找出一个与原来报文有相同报文摘要的另一报文,其难度在计算上几乎是不可能的。但在2004年,中国学者王小云”发表了轰动世界的密码学论文,证明可以用系统的方法找出一对报文,这对报文具有相同的MD5报文摘要[W-WANG],而这仅需15分钟,或不到1小时。“密码散列函数的逆向变换是不可能的”这一传统概念现在已受到了颠覆性的动摇。随后,又有许多学者开发了对MD5实际的攻击。于是MD5最终被另一种叫做安全散列算法SHA(Secure Hash Algorithm)的标准所取代。
  下面仍以MD5为例来介绍报文摘要。这主要是考虑到目前新的散列函数(如SHA)都是从MD5发展而来的。对于有兴趣研究散列函数的读者,MD5是个很好的出发点。
  MD5算法的大致过程如下:
  (1)先把任意长的报文按模24计算其余数(64位),追加在报文的后面。
  (2)在报文和余数之间填充1~512位,使得填充后的总长度是512的整数倍。填充的首位是1,后面都是0。
  (3)把追加和填充后的报文分割为一个个512位的数据块,每个512位的报文数据再分成4个128位的数据块依次送到不同的散列函数进行4轮计算。每一轮又都按32位的小数据块进行复杂的运算。一直到最后计算出MD5报文摘要代码(128位)。

  这样得出的MD5报文摘要代码中的每一位都与原来报文中的每一位有关。由此可见,像MD5这样的密码散列函数实际上已是个相当复杂的算法,而不是简单的函数了。
  SHA是由美国标准与技术协会NIST提出的一个散列算法系列。SHA和MD5相似,但码长为160位(比MD5的128位多了25%)。SHA也是用512位长的数据块经过复杂运算得出的。SHA比MD5更安全,但计算起来却比MD5要慢些。1995年发布的新版本SHA-1[RFC3174]在安全性方面有了很大的改进,但后来SHA-1也被证明其实际安全性并未达到设计要求,并且也曾被王小云教授的研究团队攻破。虽然现在SHA-1仍在使用,但很快就会被另外的两个版本SHA-2和SHA-3[W-SHA3]所替代。例如,微软选择弃用SHA-1的计划,并将于2017年1月1日起停止支持SHA-1证书,而以前签发的SHA-1证书也必须更换为SHA-2证书。谷歌也宣布将在Chrome浏览器中逐渐降低SHA-1证书的安全指示。

特别鸣谢:计算机网络(第7版)-谢希仁——《计算机网络(第7版)》是由谢希仁编著,2017年由电子工业出版社出版的“十二五”普通高等教育本科国家级规划教材

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值