Skip to content

Latest commit

 

History

History
884 lines (460 loc) · 95 KB

计算机网络.md

File metadata and controls

884 lines (460 loc) · 95 KB

计算机网络

谢希仁编著

第1章 概述

电信网络可向用户提供电话、电报(现在电报业务已基本上消失了)及传真等服务。有线电视网络可向用户提供各种电视节目。计算机网络则可使用户能够迅速传送数据文件,以及从网络上查找并获取各种有用资料,包括图像和视频文件。这

随着技术的发展,电信网络和有线电视网络都逐渐融入了现代计算机网络的技术,这就产生了“网络融合”的概念。现在计算机网络不仅能够传送数据,同时也能够向用户提供打电话、听音乐和观看视频节目的服务,而电信网络和有线电视网络也都能够连接到计算机网络上。然而,网络融合实际上还有许多非技术性的复杂问题有待于有关部门来协调解决。

自从上个世纪90年代以后,以因特网(Internet)为代表的计算机网络得到了飞速的发展,已从最初的教育科研网络逐步发展成为商业网络,并已成为仅次于全球电话网的世界第二大网络。

因特网是人类自印刷术发明以来在通信方面最大的变革。现在人们的生活、工作、学习和交往都已离不开因特网。

所谓共享就是指资源共享。资源共享的含义是多方面的。可以是信息共享、软件共享,也可以是硬件共享。例如,计算机网络上有许多主机存储了大量有价值的电子文档,可供上网的用户自由读取或下载(无偿或有偿)。由于网络的存在,这些资源好像就在用户身边一样。

1.1 计算机网络在信息时代中的作用

网络(network)由若干结点(node)和连接这些结点的链路(link)组成。网

网络和网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网),如图1-1(b)所示。因此互联网是“网络的网络”(network of networks)。

网络把许多计算机连接在一起,而因特网则把许多网络连接在一起。

因此当我们谈到网络互连时,就隐含地表示在这些计算机上已经安装了适当的软件,因而在计算机之间可以通过网络交换信息。

1983年,TCP/IP协议成为ARPANET上的标准协议,使得所有使用TCP/IP协议的计算机都能利用互连网相互通信,因而人们就把1983年作为因特网的诞生时间。

于是美国政府决定将因特网的主干网转交给私人公司来经营,并开始对接入因特网的单位收费。1992年因特网上的主机超过100万台。1993年因特网主干网的速率提高到45Mb/s(T3速率)。

从1993年开始,由美国政府资助的NSFNET逐渐被若干个商用的因特网主干网替代,而政府机构不再负责因特网的运营。这样就出现了一个新的名词:因特网服务提供者ISP (Internet Service Provider)。在许多情况下,因特网服务提供者ISP就是一个进行商业活动的公司,因此ISP又常译为因特网服务提供商。例如,中国电信、中国联通和中国移动就是我国最有名的ISP。

根据提供服务的覆盖面积大小以及所拥有的IP地址数目的不同,ISP也分成为不同的层次:主干ISP、地区ISP和本地ISP。

1.2.2 因特网发展的三个阶段

最早着手建设专用计算机广域网的是铁道部。铁道部在1980年即开始进行计算机联网实验。1989年11月我国第一个公用分组交换网CNPAC建成运行。

从20世纪80年代起,国内的许多单位相继安装了大量的局域网。局域网的价格便宜,其所有权和使用权都属于本单位,因此便于开发、管理和维护。局域网的发展很快,对各行各业的管理现代化和办公自动化已起了积极的作用。

1994年4月20日我国用64kb/s专线正式连入因特网。从此,我国被国际上正式承认为接入因特网的国家。同年5月,中国科学院高能物理研究所设立了我国的第一个万维网服务器。

1.3 因特网的组成

比特(bit)是计算机中数据量的单位,也是信息论中使用的信息量的单位。英文单词bit来源于binary digit,意思是一个“二进制数字”

因此,表示通信线路允许通过的信号频带范围就称为线路的带宽(或通频带)。

(3) 处理时延 主机或路由器在收到分组时要花费一定的时间进行处理,例如分析分组的首部、从分组中提取数据部分、进行差错检验或查找适当的路由等等,这就产生了处理时延。

在路由器确定了转发接口后,还要在输出队列中排队等待转发。这就产生了排队时延。排队时延的长短往往取决于网络当时的通信量。当网络的通信量很大时会发生队列溢出,使分组丢失,这相当于排队时延为无穷大

1.3.1 因特网的边缘部分

“分层”可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。

客户是服务请求方,服务器是服务提供方。

(1) 被用户调用后运行,在通信时主动向远地服务器发起通信(请求服务)。因此,客户程序必须知道服务器程序的地址。

对等连接(peer-to-peer,简写为P2P)是指两个主机在通信时并不区分哪一个是服务请求方还是服务提供方。只要两个主机都运行了对等连接软件(P2P软件),它们就可以进行平等的、对等连接通信。这时,双方都可以下载对方已经存储在硬盘中的共享文档。因此这种工作方式也称为P2P文件共享。在

实际上,对等连接方式从本质上看仍然是使用客户-服务器方式,只是对等连接中的每一个主机既是客户又同时是服务器。

TCP/IP是一个四层的体系结构(图1-18(b)),它包含应用层、运输层、网际层和网络接口层(用网际层这个名字是强调这一层是为了解决不同网络的互连问题)。

网络层的另一个任务就是要选择合适的路由,使源主机运输层所传下来的分组能够通过网络中的路由器找到目的主机。

在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧(framing),在两个相邻结点间的链路上传送帧(frame)。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。

1.3.2 因特网的核心部分

在网络核心部分起特殊作用的是路由器(router),它是一种专用计算机(但不是主机)。路由器是实现分组交换(packet switching)的关键构件,其任务是转发收到的分组,

电话问世后不久,人们就发现要让所有的电话机都两两相连接是不现实的。

于是人们认识到,要使得每一部电话能够很方便地和另一部电话进行通信,就应当使用电话交换机将这些电话连接起来,

交换(switching)就是按照某种方式动态地分配传输线路的资源。在使用电路交换打电话之前,必须先拨号请求建立连接。当被叫用户听到交换机送来的拨号音并摘机后,从主叫端到被叫端就建立了一条连接,也就是一条专用的物理通路。这条连接保证了双方通话时所需的通信资源,而这些资源在双方通信时不会被其他用户占用。此后主叫和被叫双方就能互相通电话。通话完毕挂机后,交换机释放刚才使用的这条专用的物理通路(即把刚才占用的所有通信资源归还给电信网)。这种必须经过“建立连接(占用通信资源)→通话(一直占用通信资源)→释放连接(归还通信资源)”三个步骤的交换方式称为电路交换。如果用户在拨号呼叫时电信网的资源已不足以支持这次的呼叫,则主叫用户会听到忙音,表示电信网不接受用户的呼叫,用户必须挂机,等待一段时间后再重新拨号。

电路交换的一个重要特点就是在通话的全部时间内,通话的两个用户始终占用端到端的通信资源。

路由器则是用来转发分组的,即进行分组交换的。路由器收到一个分组,先暂时存储一下,检查其首部,查找转发表,按照首部中的目的地址,找到合适的接口转发出去,把分组交给下一个路由器。这样一步一步地(有时会经过几十个不同的路由器)以存储转发的方式,把分组交付最终的目的主机。各路由器之间必须经常交换彼此掌握的路由信息,以便创建和维持在路由器中的转发表,使得转发表能够在整个网络拓扑发生变化时及时更新。

这里要注意,路由器暂时存储的是一个个短分组,而不是整个的长报文。短分组是暂存在路由器的存储器(即内存)中而不是存储在磁盘中的。这就保证了较高的交换速率。

分组交换在传送数据之前不必先占用一条端到端的通信资源。分组在哪一段链路上传送时,才占用这段链路的通信资源。分组到达一个路由器后,先暂时存储下来,查找转发表,然后从另一条合适的链路转发出去。分组在传输时就这样一段段地断续占用通信资源,而且还省去了建立连接和释放连接的开销,因而数据的传输效率更高。

因特网采取了专门的措施,保证了数据的传送具有非常高的可靠性(在第5章5.4节介绍运输层协议时,要着重讨论这个问题)。当网络中的某些结点或链路突然出故障时,在各路由器中运行的路由选择协议(protocol)能够自动找到其他路径转发分组(

分组交换——单个分组(这只是整个报文的一部分)传送到相邻结点,存储下来后查找转发表,转发到下一个结点。

1.6.1 计算机网络的性能指标

在计算机网络中,带宽用来表示网络的通信线路传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的“最高数据率”。

1.7 计算机网络体系结构

ADSL在用户线(铜线)的两端各安装一个ADSL调制解调器。

ADSL最大的好处就是可以利用现有电话网中的用户线,不需要重新布线。到2006年3月为止,全世界的ADSL用户已超过1.5亿户。现在ADSL调制解调器已经可以做得很轻巧(见图2-21)。需要注意的是,ADSL调制解调器有两个插口。较大的一个是RJ-45插口,用来和PC相连。较小的是RJ-11插口,用来和电话分离器相连。电话分离器则更小巧(见图2-22),用户只需要用三个带有RJ-11插头的连线就可以连接好,使用起来非常方便。

1.7.3 具有五层协议的体系结构

在本章中我们研究的是在同一个局域网中,分组怎样从一个主机传送到另一个主机(不经过路由器)。因此,这是属于数据链路层的范围

主机H1和H2都有完整的五层协议栈,但路由器在转发分组时使用的协议栈只有下面的三层。数据进入路由器后要先从物理层上到网络层,在转发表中找到下一跳的地址后,再下到物理层转发出去。

所谓链路(link)就是从一个结点到相邻结点的一段物理线路(有线或无线)

现在最常用的方法是使用网络适配器(既有硬件,也包括软件)来实现这些协议。一般的适配器都包括了数据链路层和物理层这两层的功能。

把链路分为物理链路和逻辑链路。物理链路就是上面所说的链路,而逻辑链路就是上面的数据链路,是物理链路加上必要的通信协议。

(3) 若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层;否则丢弃这个帧。

网络层的IP数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,构成了一个完整的帧。这样的帧就是数据链路层的数据传送单元。一

最大传送单元MTU (Maximum Transfer Unit)。

1.7.4 实体、协议、服务和服务访问点

PPPoE是为宽带上网的主机使用的链路层协议。这个协议把PPP帧再封装在以太网帧中(当然还要增加一些能够识别各用户的功能)。宽带上网时由于数据传输速率较高,因此可以让多个连接在以太网上的用户共享一条到ISP的宽带链路。现在,即使是只有一个用户利用ADSL进行宽带上网(并不和其他人共享到ISP的宽带链路),也是使用PPPoE协议

1.7.5 TCP/IP的体系结构

网络接口卡 NIC (Network Interface Card)或简称为“网卡”。由于现在计算机主板上已经都嵌入了这种适配器,不再使用单独的网卡了,因此本书使用适配器这个更准确的术语。在适配器上面装有处理器和存储器(包括RAM和ROM)。适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的,而适配器和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行的。因此,适配器的一个重要功能就是要进行数据串行传输和并行传输的转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此在适配器中必须装有对数据进行缓存的存储芯片。若在主板上插入适配器时,还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。

适配器接收和发送各种帧时不使用计算机的CPU。这时CPU可以处理其他任务。当适配器收到有差错的帧时,就把这个帧丢弃而不必通知计算机。

总线的特点是:当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据。这种就是广播通信方式。但我们并不总是要在局域网上进行一对多的广播通信。为了在总线上实现一对一的通信,可以使每一台计算机的适配器拥有一个与其他适配器都不同的地址。在发送数据帧时,在帧的首部写明接收站的地址。现在的电子技术可以很容易做到:仅当数据帧中的目的地址与适配器ROM中存放的硬件地址一致时,该适配器才能接收这个数据帧。适配器对不是发送给自己的数据帧就丢弃。这样,具有广播特性的总线上就实现了一对一的通信。

第一,采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据。适配器对发送的数据帧不进行编号,也不要求对方发回确认。这样做可以使以太网工作起来非常简单,而局域网信道的质量很好

总线上只要有一台计算机在发送数据,总线的传输资源就被占用。因此,在同一时间只能允许一台计算机发送数据,否则各计算机之间就会互相干扰,使得所发送数据被破坏。因此,如何协调总线上各计算机的工作就是以太网要解决的一个重要问题。以太网采用最简单的随机接入,但有很好的协议用来减少冲突发生的概率。

这就是:如果你听见有人在发言,那么你就必须等别人讲完了才能发言(否则就干扰了别人的发言)。但有时碰巧两个或更多的人同时发言了,那么一旦发现冲突,大家都必须都立即停止发言,等听到没有人发言了你再发言。以太网采用的协调方法和上面的办法非常像,它使用的协议是CSMA/CD,意思是载波监听多点接入/碰撞检测(Carrier Sense Multiple Access with Collision Detection)。

在发送前检测信道,是为了获得发送权。如果检测出已经有其他站在发送,则自己就暂时不许发送数据,必须要等到信道变为空闲时才能发送。在发送中检测信道,是为了及时发现有没有其他站的发送和本站发送的碰撞。这就称为碰撞检测。

本章的重要概念

使双绞线能够传送高速数据的主要措施是把双绞线的绞合度做得非常精确。这样不仅可使特性阻抗均匀以减少失真,而且大大减少了电磁波辐射和无线电频率的干扰。在多对双绞线的电缆中,还要使用更加复杂的绞合方法。

(3) 集线器工作在物理层,它的每个接口仅仅简单地转发比特——收到1就转发1,收到0就转发0,不进行碰撞检测。若两个接口同时有信号输入(即发生碰撞),那么所有的接口都将收不到正确的帧。

当类型字段的值是0x0800时,就表示上层使用的是IP数据报。

当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面加入一个整数字节的填充字段,以保证以太网的MAC帧长不小于64字节

习题

光纤调制解调器的作用就是进行电信号和光信号的转换。由于光纤带来的时延很小,并且带宽很高,因此使用这种方法可以很容易地使主机和几公里以外的集线器相连接。

2.1 物理层的基本概念

链路是从一个结点到相邻结点的一段物理线路,数据链路则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)。 ● 数据链路层使用的信道主要有点对点信道和广播信道两种。

● 点对点协议PPP是数据链路层使用的最多的一种协议,它的特点是:简单;只检

● PPPoE是为宽带上网的主机使用的链路层协议。

2.2.2 有关信道的几个基本概念

讨论多个网络通过路由器互连成为一个互连网络(或互联网)的各种问题。

网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接。每一个分组(也就是IP数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。也就是说,所传送的分组可能出错、丢失、重复和失序(即不按序到达终点),当然也不保证分组交付的时限。由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。

采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。因特网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。

2.2.3 信道的极限容量

(1) 物理层使用的中间设备叫做转发器(repeater)。 (2) 数据链路层使用的中间设备叫做网桥或桥接器(bridge)。 (3) 网络层使用的中间设备叫做路由器(router)。 (4) 在网络层以上使用的中间设备叫做网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。

路由器其实就是一台专用计算机,用来在互联网中进行路由选择。

互联网可以由多种异构网络互连组成。

IP地址的结构使我们可以在因特网上很方便地进行寻址。

IP地址并不仅仅指明一个主机,而是还指明了主机所连接到的网络。

对主机或路由器来说,IP地址都是32位的二进制代码。为了提高可读性,我们常常把32位的IP地址中的每8位插入一个空格(但在机器中并没有这样的空格)。要更加便于使用,可用其等效的十进制数字表示,并且在这些数字之间加上一个点。这就叫做点分十进制记

A类地址的网络号字段占一个字节,只有7位可供使用(该字段的第一位已固定为0),但可指派的网络号是126个(即27 - 2)。减2的原因是:第一,IP地址中的全0表示“这个(this)”。网络号字段为全0的IP地址是个保留地址,意思是“本网络”。第二,网络号为127(即01111111)保留作为本地软件环回测试(loopback test)本主机的进程之间的通信之用。若主机发送一个目的地址为环回地址(例如127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。目的地址为环回地址的IP数据报永远不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。

类地址的主机号占3字节,因此每一个A类网络中的最大主机数是224 - 2,即16 777 214。这里减2的原因是:全0的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址(例如,一主机的IP地址为5.6.7.8,则该主机所在的网络地址就是5.0.0.0),而全1表示“所有的(all)”,因此全1的主机号字段表示该网络上的所有主机

  1. 每一个IP地址都由网络号和主机号两部分组成。从这个意义上说,IP地址是一种分等级的地址结构。分两个等级的好处是:第一,IP地址管理机构在分配IP地址时只分配网络号(第一级),而剩下的主机号(第二级)则由得到该网络号的单位自行分配。

器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间以及查找路由表的时间。

这种主机称为多归属主机(multihomed host)。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。

● 用网桥(它只在链路层工作)互连的网段仍然是一个局域网,只能有一个网络号。 ● 路由器总是具有两个或两个以上的IP地址。即路由器的每一个接口都有一个不同网络号的IP地址。

从层次的角度看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(称IP地址是逻辑地址是因为IP地址是用软件实现的)。

在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成MAC帧了。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧的首部中。

连接在通信链路上的设备(主机或路由器)在接收MAC帧时,其根据是MAC帧首部中的硬件地址。在数据链路层看不见隐藏在MAC帧的数据中的IP地址。

它们硬件地址分别为HA1和HA2(HA表示Hardware Address)。通信的路径是:H1→经过R1转发→再经过R2转发→H2。路由器R1因同时连接到两个局域网上,因此它有两个硬件地址,即HA3和HA4

在局域网的链路层,只能看见MAC帧。IP数据报被封装在MAC帧中。MAC帧在不同网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化。

我们经常会遇到这样的问题:已经知道了一个机器(主机或路由器)的IP地址,需要找出其相应的硬件地址。地址解析协议ARP就是用来解决这样的问题的

由于传送ARP分组使用是IP协议,因此应当把ARP协议划归网络层。但ARP协议的用途是为了从网络层使用的IP地址解析出在数据链路层使用的硬件地址。因此,有的教科书就按照协议的所用,把ARP协议划归在数据链路层。这样做当然也是可以的。

地址解析协议RARP,它的作用是使只知道自己硬件地址的主机能够通过RARP协议找出其IP地址。现在的DHCP协议(见第6章6.6节)已经包含了RARP协议的功能。因此本书不再介绍RARP协议。

网络层使用的是IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址

地址解析协议ARP解决这个问题的方法是在主机ARP高速缓存中应存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。 每一个主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址

当主机A要向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。 也有可能查不到主机B的IP地址的项目。这可能是主机B才入网,也可能是主机A刚刚加电,其高速缓存还是空的。在这种情况下,主机A就自动运行ARP, 然后按以下步骤找出主机B的硬件地址。

ARP请求分组的主要内容是:“我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18。我想知道IP地址为209.0.0.6的主机的硬件地址。”

) 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。

(4) 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。

可见ARP高速缓存非常有用。如果不使用ARP高速缓存,那么任何一个主机只要进行一次通信,就必须在网络上用广播方式发送ARP请求分组,这就使网络上的通信量大大增加。ARP把已经得到的地址映射保存在高速缓存中,这样就使得该主机下次再和具有同样目的地址的主机通信时,可以直接从高速缓存中找到所需的硬件地址而不必再用广播方式发送ARP请求分组。

ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间(例如,10~20分钟)。凡超过生存时间的项目就从高速缓存中删除掉。设置这种地址映射项目的生存时间是很重要的。设想有一种情况。主机A和B通信。A的ARP高速缓存里保存有B的硬件地址。但B的网络适配器突然坏了,B立即更换了一块,因此B的硬件地址就改变了。假定A还要和B继续通信。A在其ARP高速缓存中查找到B原先的硬件地址,并使用该硬件地址向B发送数据帧。但B原先的硬件地址已经失效了,因此A无法找到主机B。但是过了一段不长的生存时间,A的ARP高速缓存中已经删除了B原先的硬件地址,于是A重新广播发送ARP请求分组,又找到了B。

只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地把这个IP地址解析为链路层所需要的硬件地址。

(2)发送方是主机(如H1),要把IP数据报发送到另一个网络上的一个主机(如H3或H4)。这时H1发送ARP请求分组(在网1上广播),找到网1上的一个路由器R1的硬件地址。剩下的工作由路由器R1来完成。

(3)发送方是路由器(如R1),要把IP数据报转发到与R1连接在同一个网络(网2)上的主机(如H3)。这时R1发送ARP请求分组(在网2上广播),找到目的主机H3的硬件地址。

最常用的以太网就规定其MTU值是1 500字节。若所传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。

但数据报短些也有好处。每一个IP数据报越短,路由器转发的速度就越快。为此,IP协议规定,在因特网中所有的主机和路由器,必须能够接受长度不超过576字节的数据报。这是假定上层交下来的数据长度有512字节(合理的长度),加上最长的IP首部60字节,再加上4字节的富裕量,就得到576字节。当主机需要发送长度超过576字节的数据报时,应当先了解一下,目的主机能否接受所要发送的数据报长度。否则,就要进行分片。

因固定首部长度为20字节,因此每个数据报片的数据部分长度不能超过1 400字节。

(8) 生存时间 占8位,生存时间字段常用的英文缩写是TTL (Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子(例如从路由器R1转发到R2,再转发到R3,然后又转发到R1),因而白白消耗网络资源。最初的设计是以秒作为TTL值的单位。每经过一个路由器时,就把TTL减去数据报在路由器所消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值减为零时,就丢弃这个数据报。

后来就把TTL字段的功能改为“跳数限制”(但名称不变)。路由器在转发数据报之前就把TTL值减1。若TTL值减小到零,就丢弃这个数据报,不再转发。因此,现在TTL的单位不再是秒,而是跳数。TTL的意义是指明数据报在因特网中至多可经过多少个路由器。

若把TTL的初始值设置为1,就表示这个数据报只能在本局域网中传送。因为这个数据报一传送到局域网上的某个路由器,在被转发之前TTL值就减小到零,因而就会被这个路由器丢弃。

但若按主机所在的网络地址来制作路由表,那么每一个路由器中的路由表就只包含4个项目(即只有4行,每一行对应于一个网络)。

这样的简化图强调了在互联网上转发分组时,是从一个路由器转发到下一个路由器。

路由器还可采用默认路由(default route)以减少路由表所占用的空间和搜索路由表所用的时间。这种转发方式在一个网络只有很少的对外连接时是很有用的。

第一个项目就是到本网络主机的路由,其目的网络就是本网络N1,因而不需要路由器转发,而是直接交付。第二个项目是到网络N2的路由,对应的下一跳路由器是R2。第三个项目就是默认路由。只要目的网络不是N1和N2,就一律选择默认路由,把数据报先间接交付路由器R1,让R1 再转发给下一个路由器,一直转发到目的网络上的路由器,最后进行直接交付。在实际上的路由器中,像图4-17路由表中所示的“直接”和“默认”的几个字符并没有出现在路由表中,而是被记为0.0.0.0。

在IP数据报的首部写上的IP地址是源IP地址和目的IP地址,而没有中间经过的路由器的IP地址。既然IP数据报中没有下一跳路由器的IP地址,那么待转发的数据报又怎样能够找到下一跳路由器呢? 当路由器收到一个待转发的数据报,在从路由表得出下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而是送交数据链路层的网络接口软件。网络接口软件负责把下一跳路由器的IP地址转换成硬件地址(使用ARP),并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。由此可见,当发送一连串的数据报时,上述的这种查找路由表、计算硬件地址、写入MAC帧的首部等过程,将不断地重复进行,造成了一定的开销。

分组转发算法如下: (1) 从数据报的首部提取目的主机的IP地址D, 得出目的网络地址为N。 (2) 若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址 D 转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就是间接交付,执行(3)。

2.3 物理层下面的传输媒体

划分子网后IP地址变成了三级结构。划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号。

从IP数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网的划分。这是因为32位的IP地址本身以及数据报的首部都没有包含任何有关子网划分的信息。因此必须另外想办法,这就是使用子网掩码(subnet mask)

表示R1把三级IP地址的子网掩码和收到的数据报的目的IP地址145.13.3.10逐位相“与”(AND)(计算机进行这种逻辑AND运算是很容易的),得出了所要找的子网的网络地址145.13.3.0。

使用子网掩码的好处就是:不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位的“与”运算(AND),就立即得出网络地址来。这样在路由器处理到来的分组时就可采用同样的算法。

现在因特网的标准规定:所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。默认子网掩码中1的位置和IP地址中的网络号字段net-id正好相对应。因此,若用默认子网掩码和某个不划分子网的IP地址逐位相“与”(AND),就应当能够得出该IP地址的网络地址来。

B类地址的默认子网掩码是255.255.0.0,或0xFFFF0000; C类地址的默认子网掩码是255.255.255.0,或0xFFFFFF00。

若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。

(2) CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数。例如,已知IP地址128.14.35.7/20是某CIDR地址块中的一个地址,现在把它写成二进制表示,其中的前20位是网络前缀(用粗体和下画线表示出),而前缀后面的12位是主机号:

例如,地址192.199.170.82/27不仅表示IP地址是192.199.170.82,而且还表示这个地址块的网络的前缀有27位(剩下的5位是主机号),因此这个地址块包含32个IP地址(25 =32)。通过简单的计算还可得出,这个地址块的最小地址是192.199.170.64,最大地址是192.199.170.95。

由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合(route aggregation),它使得路由表中的一个项目可以表示原来传统分类地址的很多个(例如上千个)路由。路由聚合也称为构成超网(supernetting)。如果没有采用CIDR,则在1994和1995年,因特网的一个路由表就会超过7万个项目,而使用了CIDR后,在1996年一个路由表的项目数才只有3万多个。路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个因特网的性能。

为了进行更加有效的查找,通常是把无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie),它是一种特殊结构的树。IP地址中从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。

2.3.1 导引型传输媒体

ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。

ICMP的一个重要应用就是分组网间探测PING (Packet InterNet Groper),用来测试两个主机之间的连通性。PING使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。

由于往返的ICMP报文上都有时间戳,因此很容易得出往返时间

Traceroute从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报。第一个数据报P1的生存时间TTL设置为1。当P1到达路径上的第一个路由器R1时,路由器R1先收下它,接着把TTL的值减1。由于TTL等于零了,R1就把P1丢弃了,并向源主机发送一个ICMP时间超过差错报告报文。

这样,源主机达到了自己的目的,因为这些路由器和最后目的主机发来的ICMP报文正好给出了源主机想知道的路由信息——到达目的主机所经过的路由器的IP地址,以及到达其中的每一个路由器的往返时间。

从原则上讲,IP数据报经过的路由器越多,所花费的时间也会越多。但从图4-30可看出,有时正好相反。这是因为因特网的拥塞程度随时都在变化,也很难预料到。因此,完全有这样的可能:经过更多的路由器反而花费更少的时间。

2.3.2 非导引型传输媒体

因特网将整个互联网划分为许多较小的自治系统(autonomous system)

在目前的因特网中,一个大的ISP就是一个自治系统。这样,因特网就把路由选择协议划分为两大类,即: (1) 内部网关协议IGP (Interior Gateway Protocol) 即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如RIP和OSPF协议。 (2) 外部网关协议EGP (

路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。从路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。

在网络层的处理模块中设有一个缓冲区,实际上它就是一个队列。当交换结构传送过来的分组的速率超过输出链路的发送速率时,来不及发送的分组就必须暂时存放在这个队列中。

2.4 信道复用技术

在一对多的通信中,多播可大大节约网络资源。图4-46(a)是视频服务器用单播方式向90个主机传送同样的视频节目。为此,需要发送90个单播,即同一个视频分组要发送90个副本。图4-46(b)是视频服务器用多播方式向属于同一个多播组的90个成员传送节目。这时,视频服务器只需把视频分组当作多播数据报来发送,并且只需发送一次。路由器R1在转发分组时,需要把收到的分组复制成3个副本,分别向R2、R3和R4各转发1个副本。当分组到达目的局域网时,由于局域网具有硬件多播功能,因此不需要复制分组,在局域网上的多播组成员都能收到这个视频分组。

其实多播组的标识符就是IP地址中的D类地址。D类IP地址的前四位是1110,因此D类地址范围是224.0.0.0到239.255.255.255

2.4.2 波分复用

专用地址(private address)。这些地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信。换言之,专用地址只能用作本地地址而不能用作全球地址。

或记为10.0.0.0/8,它又称为24位块)

或记为172.16.0.0/12,它又称为20位块

或记为192.168.0.0/16,它又称为16位块

显然,全世界可能有很多的专用互连网络具有相同的专用IP地址,但这并不会引起麻烦,因为这些专用地址仅在本机构内部使用。专用IP地址也叫做可重用地址(reusable address)。

这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

2.6 宽带接入技术

讨论TCP的三个重要问题:滑动窗口、流量控制和拥塞控制机制

(1) 运输层为相互通信的应用进程提供逻辑通信。

(5) 在不可靠的网络上实现可靠传输的工作原理,停止等待协议和ARQ协议。(6) TCP的滑动窗口、流量控制、拥塞控制和连接管理。

当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。

端到端的通信是应用进程之间的通信

网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信(见图5-2)

UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。

TCP则提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或多播服务。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销,如确认、流量控制、计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。

由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的IP地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。

2.6.1 ADSL技术

应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文

UDP一次交付一个完整的报文。因此,应用程序必须选择合适大小的报文。若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率。反之,若报文太短,UDP把它交给IP层后,会使IP数据报的首部的相对长度太大,这也降低了IP层的效率。

  1. UDP支持一对一、一对多、多对一和多对多的交互通信。

) UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

不使用拥塞控制功能的UDP有可能会引起网络产生严重的拥塞问题。

长度 UDP用户数据报的长度,其最小值是8(仅有首部)。(4) 检验和 检测UDP用户数据报在传输中是否有错。有错就丢弃。

2.6.2 光纤同轴混合网(HFC网)

(4) TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。

面向字节流。TCP中的“流”(stream)指的是流入到进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。

TCP并不关心应用进程一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。如果应用进程传送到TCP缓存的数据块太长,TCP就可以把它划分短一些再传送。如果应用进程一次只发来一个字节,TCP也可以等待积累有足够多的字节后再构成报文段发送出去。关于TCP报文段的长度问题,在后面还要进行讨论。

每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:

2.6.3 FTTx技术

TCP发送的报文段是交给IP层传送的。但IP层只能提供尽最大努力服务,也就是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP必须采用适当的措施才能使得两个运输层之间的通信变得可靠。

但我们可以使用一些可靠传输协议,当出现差错时让发送方重传出现差错的数据,同时在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速度。

可靠传输协议是这样设计的:A只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组。这就叫做超时重传。要实现超时重传,就要在每发送完一个分组设置一个超时计时器。如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器。

第一,A在发送完一个分组后,必须暂时保留已发送的分组的副本(为发生超时重传时使用)。只有在收到相应的确认后才能清除暂时保留的分组副本。

第二,分组和确认分组都必须进行编号[插图]。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。

如果M1正确到达B同时A也正确收到确认的过程。可见重传时间应设定为比平均往返时间更长一些。显然,如果重传时间设定得很长,那么通信的效率就会很低。但如果重传时间设定得太短,以致产生不必要的重传,浪费了网络资源。然而,在运输层重传时间的准确设定是非常复杂的,这是因为已发送出的分组到底会经过哪些网络,以及这些网络将会产生多大的时延(这取决于这些网络当时的拥塞情况),这些都是不确定因素。图5-9中把往返时间当作固定的(这并不符合网络的实际情况),只是为了讲述原理的方便。关于重传时间应如何选择,在本章的5.6.3节还要进一步讨论。

如果A不断重传分组但总是收不到确认,就说明通信线路太差,不能进行通信。使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。

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

为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输(见图5-12所示)。流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不间断地在传送。显然,这种传输方式可以获得很高的信道利用率。

发送方维持的发送窗口,它的意义是:位于发送窗口内的5个分组都可连续发送出去,而不需要等待对方的确认。这样,信道利用率就提高了。

本章的重要概念

一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它首部中各字段的作用。因此,只有弄清TCP首部各字段的作用才能掌握TCP的工作原理。

TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。

这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。

确认ACK (ACKnowlegment) 仅当ACK = 1时确认号字段才有效。当ACK = 0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。

复位RST (ReSeT)当RST = 1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可称为重建位或重置位。

  1. 同步SYN (SYNchronization) 在连接建立时用来同步序号。当SYN = 1而ACK = 0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN = 1和ACK = 1。因此,SYN置为1就表示这是一个连接请求或连接接受报文。

(12) 终止FIN (FINis,意思是“完”、“终”) 用来释放一个连接。当FIN = 1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。

时间戳选项占10字节,其中最主要的字段时间戳值字段(4字节)和时间戳回送回答字段(4字节)。时间戳选项有以下两个功能:第一,用来计算往返时间RTT(见本章5.6.3节)。发送方在发送报文段时把当前时钟的时间值放入时间戳字段,接收方在确认该报文段时把时间戳字段值复制到时间戳回送回答字段。因此,发送方在收到确认报文后,可以准确地计算出RTT来。

为了使接收方能够把新的报文段和迟到很久的报文段区分开,可以在报文段中加上这种时间戳。

习题

TCP的滑动窗口是以字节为单位的。

发送窗口表示:在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。

发送窗口里面的序号表示允许发送的序号。显然,窗口越大,发送方就可以在收到对方确认之前连续发送更多的数据,因而可能获得更高的传输效率。但接收方必须来得及处理这些收到的数据。

第二,对于不按序到达的数据应如何处理,TCP标准并无明确规定。如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利(因为发送方会重复传送较多的数据)。因此TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。

TCP标准规定,确认推迟的时间不应超过0.5秒。若收到一连串具有最大长度的报文段,则必须每隔一个报文段就要发送一个确认[

每个IP数据报所选择的路由还可能不同。如果把超时重传时间设置得太短,就会引起很多报文段的不必要的重传,使网络负荷增大。但若把超时重传时间设置得过长,则又使网络的空闲时间增大,降低了传输效率。

TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT。

第3章 数据链路层

利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

我的接收窗口rwnd = 400”(这里rwnd表示receiver window)

3.1 使用点对点信道的数据链路层

这种情况就叫做拥塞(congestion)。

若网络中有许多资源同时呈现供应不足,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。

网络拥塞往往是由许多因素引起的。例如,当某个结点缓存的容量太小时,到达该结点的分组因无存储空间暂存而不得不被丢弃。现在设想将该结点缓存的容量扩展到非常大。于是凡到达该结点的分组均可在结点的缓存队列中排队,不受任何限制。由于输出链路的容量和处理机的速度并未提高,因此在这队列中的绝大多数分组的排队等待时间将会大大增加,结果上层软件只好把它们进行重传(因为早就超时了)。由此可见,简单地扩大缓存的存储空间同样会造成网络资源的严重浪费,因而解决不了网络拥塞的问题。

又如,处理机处理的速率太慢可能引起网络的拥塞。简单地将处理机的速率提高,可能会使上述情况缓解一些,但往往又会将瓶颈转移到其他地方。问题的实质往往是整个系统的各个部分不匹配。只有所有的部分都平衡了,问题才会得到解决。

拥塞常常趋于恶化。如果一个路由器没有足够的缓存空间,它就会丢弃一些新到的分组。但当分组被丢弃时,发送这一分组的源点就会重传这一分组,甚至可能还要重传多次。这样会引起更多的分组流入网络和被网络中的路由器丢弃。可见拥塞引起的重传并不会缓解网络的拥塞,反而会加剧网络的拥塞。

所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。

进行拥塞控制的四种算法,即慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)和快恢复(fast recovery)。以后

送方维持一个叫做拥塞窗口 cwnd (congestion window)的状态变量

发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢开始算法的思路是这样的。当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。经验证明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。

因此使用慢开始算法后,每经过一个传输轮次(transmission round),拥塞窗口cwnd就加倍。

慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd = 1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。这当然比按照大的cwnd一下子把许多报文段突然注入到网络中要“慢得多”。这对防止网络出现拥塞是一个非常有力的措施。

拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样,拥塞窗口cwnd 按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。

(3) 假定拥塞窗口的数值增长到24时,网络出现超时(这很可能就是网络发生拥塞了)。更新后的ssthresh值变为12(即变为出现超时时的拥塞窗口数值24的一半),拥塞窗口再重新设置为1,并执行慢开始算法。当cwnd = ssthresh = 12时改为执行拥塞避免算法,拥塞窗口按线性规律增长,每经过一个往返时间增加一个MSS的大小。

“拥塞避免”是说在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。

慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法。1990年又增加了两个新的拥塞控制算法。这就是快重传和快恢复。

快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等待自己发送数据时才进行捎带确认

重传算法的规定,接收方应及时发送对 M2的重复确认,这样做可以让发送方及早知道报文段M3没有到达接收方。发送方接着发送M5和M6。接收方收到后,也还要再次发出对M2的重复确认。这样,发送方共收到了接收方的四个对M2的确认,其中后三个都是重复确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必继续等待为M3设置的重传计时器到期。由于发送方能尽早重传未被确认的报文段,因此采用快重传后可以使整个网络的吞吐量提高约20%!。(MISSING)

(1) 当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意,接下去不执行慢开始算法。

现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用。

在这一节的开始我们就假定了接收方总是有足够大的缓存空间,因而发送窗口的大小由网络的拥塞程度来决定。但实际上接收方的缓存空间总是有限的。接收方根据自己的接收能力设定了接收窗口rwnd,并把这个窗口值写入TCP首部中的窗口字段,传送给发送方。因此,接收窗口又称为通知窗口(advertised window)。因此,从接收方对发送方的流量控制的角度考虑,发送方的发送窗口一定不能超过对方给出的接收窗口值rwnd。

若发生了路由器中的尾部丢弃,就可能会同时影响到很多条TCP连接,结果就使这许多的TCP连接在同一时间突然都进入到慢开始状态。这在TCP的术语中称为全局同步(global syncronization)。全局同步使得全网的通信量突然下降了很多,而在网络恢复正常后,其通信量又突然增大很多。

3.1.1 数据链路和帧

然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。如有,即作出响应。

A的TCP客户进程也是首先创建传输控制模块TCB,然后向B发出连接请求报文段,这时首部中的同步位SYN = 1,同时选择一个初始序号seq = x。TCP规定,SYN报文段(即SYN = 1的报文段)不能携带数据,但要消耗掉一个序号。这时,TCP客户进程进入SYN-SENT(同步已发送)状态

(3) 若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层;否则丢弃这个帧。

这时,TCP连接已经建立,A进入ESTABLISHED(已建立连接)状态。

A把连接释放报文段首部的终止控制位FIN置1,其序号seq = u,它等于前面已传送过的数据的最后一个字节的序号加1。这时A进入FIN-WAIT-1(终止等待1)状态,等待B的确认。

B收到连接释放报文段后即发出确认,确认号是ack = u + 1,而这个报文段自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1。然后B就进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时的TCP连接处于半关闭(half-close)状态,即A已经没有数据要发送了,但B若发送数据,A仍要接收。也就是说,从B到A这个方向的连接并未关闭,这个状态可能会持续一些时间。 A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。

若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN = 1。现假定B的序号为w(在半关闭状态B可能又发送了一些数据)。B还必须重复上次已发送过的确认号ack = u + 1。这时B就进入LAST-ACK(最后确认)状态,等待A的确认。

然后进入到TIME-WAIT(时间等待)状态。请注意,现在TCP连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入到CLOSED状态。

文段寿命(Maximum Segment Lifetime),RFC 793建议设为2分钟。但这完全是从工程上来考虑,对于现在的网络,MSL = 2分钟可能太长了一些。因此TCP允许不同的实现可根据具体情况使用更小的MSL值。因此,从A进入到TIME-WAIT状态后,要经过4分钟才能进入到CLOSED状态,才能开始建立下一个新的连接。当A撤销相应的传输控制块TCB后,就结束了这次的TCP连接。

如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后立即释放连接,那么就无法收到B重传的FIN + ACK报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常步骤进入CLOSED状态。

这就是使用保活计时器。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两小时。若两小时没有收到客户的数据,服务器就发送一个探测报文段,以后则每隔75分钟发送一次。若一连发送10个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭这个连接。

3.1.2 三个基本问题

网络层的IP数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,构成了一个完整的帧。这样的帧就是数据链路层的数据传送单元。

为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是,每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传送单元MTU (Maximum Transfer Unit)。图3-4给出了帧的首部和尾部的位置,以及帧的数据部分与MTU的关系。[插图]图3-4 用帧首部和帧尾部封装成帧当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的

对于通信质量良好的有线传输链路,数据链路层协议不使用确认和重传机制,即不要求数据链路层向上提供可靠传输的服务。如果在数据链路层传输数据时出现了差错并且需要进行改正,那么改正差错的任务就由上层协议(例如,运输层的TCP协议)来完成。

对于通信质量较差的无线传输链路,数据链路层协议使用确认和重传机制,数据链路层向上提供可靠传输的服务(见第9章无线网络)。实践证明,这样做可以提高通信效率。

3.2.1 PPP协议的特点

PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议

这种数据链路层的协议非常简单:接收方每收到一个帧,就进行CRC检验。如CRC检验正确,就收下这个帧;反之,就丢弃这个帧,其他什么也不做。

3.2.2 PPP协议的帧格式

PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。若为0xC021,则信息字段是PPP链路控制协议LCP的数据,而0x8021表示这是网络层的控制数据。

3.5.1 在物理层扩展以太网

这种被动攻击又称为流量分析(traffic analysis)。

这种攻击被称为拒绝服务DoS (Denial of Service)。若从因特网上的成百上千的网站集中攻击一个网站,则称为分布式拒绝服务DDoS (Distributed Denial of Service)。有时也把这种攻击称为网络带宽攻击或连通性攻击。

3.5.2 在数据链路层扩展以太网

在数据链路层扩展以太网要使用网桥(bridge)。网桥工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发和过滤。

所谓对称密钥密码体制,即加密密钥与解密密钥是相同的密码体制。 数据加密标准 DES属于对称密钥密码体制。它由IBM公司研制出,于1977年被美国定为联邦信息标准后,在国际上引起了极大的重视。ISO曾将DES作为数据加密标准。

3.6 高速以太网

下面讨论一下数字签名为什么具有上述的三点功能。因为除A外没有别人持有A的私钥SKA,所以除A外没有别人能产生密文。这样,B就相信报文X是A签名发送的。这就是报文鉴别的功能。

3.6.4 使用以太网进行宽带接入

防火墙(firewall)作为一种访问控制技术,通过严格控制进出网络边界的分组,禁止任何不必要的通信,从而减少潜在入侵的发生,尽可能降低这类安全威胁所带来的安全风险。由于防火墙不可能阻止所有入侵行为,作为系统防御的第二道防线,入侵检测系统(Intrusion Detection System)通过对进入网络的分组进行深度分析与检测发现疑似入侵行为的网络活动,并进行报警以便进一步采取相应措施。

一般都把防火墙里面的网络称为“可信的网络”(trusted network),而把防火墙外面的网络称为“不可信的网络”(untrusted network)。

分组过滤路由器的优点是简单高效,且对于用户是透明的,但不能对高层数据进行过滤。例如,不能禁止某个用户对某个特定应用进行某个特定的操作,不能支持应用层用户鉴别等。这些功能需要使用应用网关技术来实现。

应用网关中,可以实现基于应用层数据的过滤和高层用户鉴别。

入侵检测方法一般可以分为基于特征的入侵检测和基于异常的入侵检测两种。

4.1 网络层提供的两种服务

在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?

电信网提供的端到端可靠传输的服务对电话业务无疑是很合适的,因为电信网的终端(电话机)非常简单,没有智能,也没有差错处理能力。因此电信网必须负责把用户电话机产生的话音信号可靠地传送到对方的电话机,使还原后的话音质量符合技术规范的要求。但计算机网络的端系统是有智能的计算机。计算机有很强的差错处理的能力(这点和传统的电话机有本质上的差别)。因此,因特网在设计上就采用了和电信网完全不同的思路。

如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。因特网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。

4.2 网际协议IP

由于网际协议IP是用来使互连起来的许多计算机网络能够进行通信,因此TCP/IP体系中的网络层常常称为网际层(internet layer),或IP层。

TCP/IP体系中的网络层常常称为网际层(internet layer),或IP层。

4.2.1 虚拟互连网络

(2) 数据链路层使用的中间设备叫做网桥或桥接器(bridge)。(3) 网络层使用的中间设备叫做路由器(router)[插图]。(4) 在网络层以上使用的中间设备叫做网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。

4.2.2 分类的IP地址

(3) 构成超网。这是比较新的无分类编址方法。1993年提出后很快就得到推广应用。

由于近年来已经广泛使用无分类IP地址进行路由选择,A类、B类和C类地址的区分已成为历史[RFC 1812],但由于很多文献和资料都还使用传统的分类IP地址

从IP地址的结构来看,IP地址并不仅仅指明一个主机,而是还指明了主机所连接到的网络。

IP地址都是32位的二进制代码。为了提高可读性,我们常常把32位的IP地址中的每8位插入一个空格(但在机器中并没有这样的空格)。要更加便于使用,可用其等效的十进制数字表示,并且在这些数字之间加上一个点。这就叫做点分十进制记法(dotted decimal notation)。

第一,IP地址管理机构在分配IP地址时只分配网络号(第一级),而剩下的主机号(第二级)则由得到该网络号的单位自行分配。这样就方便了IP地址的管理。第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间以及查找路由表的时间。

4.2.3 IP地址与硬件地址

物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(称IP地址是逻辑地址是因为IP地址是用软件实现的)。

在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成MAC帧了。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧的首部中。

虽然IP数据报要经过路由器R1和R2的两次转发,但在它的首部中的源地址和目的地址始终分别是IP1和IP2。

IP数据报被封装在MAC帧中。MAC帧在不同网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化。开始在H1到R1间传送时,MAC帧首部中写的是从硬件地址HA1发送到硬件地址HA3,路由器R1收到此MAC帧后,在转发时要改变首部中的源地址和目的地址,将它们换成从硬件地址HA4发送到硬件地址HA5。

实际上计算机要完成这些任务必须执行很多条指令。但这些复杂的过程全都被设计良好的图形用户界面屏蔽掉了,使用户看不见这些复杂过程。

) 主机或路由器怎样知道应当在MAC帧的首部填入什么样的硬件地址?

4.2.4 地址解析协议ARP

已经知道了一个机器(主机或路由器)的IP地址,需要找出其相应的硬件地址。地址解析协议ARP就是用来解决这样的问题的。

由于传送ARP分组使用是IP协议,因此应当把ARP协议划归网络层。但ARP协议的用途是为了从网络层使用的IP地址解析出在数据链路层使用的硬件地址。

做逆地址解析协议RARP,它的作用是使只知道自己硬件地址的主机能够通过RARP协议找出其IP地址。现在的DHCP协议(见第6章6.6节)已经包含了RARP协议的功能。

此外,在一个网络上可能经常会有新的主机加入进来,或撤走一些主机。更换网络适配器也会使主机的硬件地址改变。地址解析协议ARP解决这个问题的方法是在主机ARP高速缓存中应存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。

每一个主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。那么主机怎样知道这些地址呢?

当主机A要向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。

(2) 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。(3) 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组(其格式见[COME06]),并在这个ARP响应分组中写入自己的硬件地址。由于其余的所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组

请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。

ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。

:既然在网络链路上传送的帧最终是按照硬件地址找到目的主机的,那么为什么我们不直接使用硬件地址进行通信,而是要使用抽象的IP地址并调用ARP来寻找出相应的硬件地址呢?这个问题必须弄清楚。由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事。但统一的IP地址把这个复杂问题解决了。

4.2.6 IP层转发分组的流程

即对特定的目的主机指明一个路由。这种路由叫做特定主机路由

路由器还可采用默认路由(default route)以减少路由表所占用的空间和搜索路由表所用的时间。

在IP数据报的首部中没有地方可以用来指明“下一跳路由器的IP地址”。在IP数据报的首部写上的IP地址是源IP地址和目的IP地址,而没有中间经过的路由器的IP地址。既然IP数据报中没有下一跳路由器的IP地址,那么待转发的数据报又怎样能够找到下一跳路由器呢?

当路由器收到一个待转发的数据报,在从路由表得出下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而是送交数据链路层的网络接口软件。网络接口软件负责把下一跳路由器的IP地址转换成硬件地址(使用ARP),并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。由此可见,当发送一连串的数据报时,上述的这种查找路由表、计算硬件地址、写入MAC帧的首部等过程,将不断地重复进行,造成了一定的开销。

(1) 从数据报的首部提取目的主机的IP地址D, 得出目的网络地址为N。(2) 若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址 D 转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就是间接交付,执行(3)。

4.3 划分子网和构造超网

第二,给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。

划分子网的基本思路如下: (1) 一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网(subnet)。划分子网纯属一个单位内部的事情。本单位以外的网络看不见这个网络是由多少个子网组成,因为这个单位对外仍然表现为一个网络。

为了使路由器R1能够很方便地从数据报中的目的IP地址中提取出所要找的子网的网络地址,路由器R1就要使用三级IP地址的子网掩码。

使用子网掩码的好处就是:不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位的“与”运算(AND),就立即得出网络地址来。这样在路由器处理到来的分组时就可采用同样的算法。

为什么还要使用子网掩码?这就是为了更便于查找路由表。现在因特网的标准规定:所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。默认子网掩码中1的位置和IP地址中的网络号字段net-id正好相对应。

4.3.3 无分类编址CIDR(构成超网)

其实早在1987年,RFC 1009就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码。使用变长子网掩码VLSM (Variable Length Subnet Mask)可进一步提高IP地址资源的利用率。在VLSM的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择CIDR (Classless Inter-Domain Routing,CIDR的读音是“sider”)。

(1) CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,因而可以更加有效地分配IPv4的地址空间

CIDR把32位的IP地址划分为两个部分。前面的部分是“网络前缀”(network-prefix)(或简称为“前缀”),用来指明网络,后面的部分则用来指明主机。因此CIDR使IP地址从三级编址(使用子网掩码)又回到了两级编址,但这已是无分类的两级编址。

CIDR还使用“斜线记法”(slash notation),或称为CIDR记法,即在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。

(2) CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数。

当然,这两个主机号是全0和全1的地址一般并不使用。通常只使用在这两个地址之间的地址。

网络还使用子网划分和子网掩码,因此CIDR使用的地址掩码也可继续称为子网掩码。例如,/20地址块的地址掩码是:11111111 11111111 1111000000000000(20个连续的1)。斜线记法中,斜线后面的数字就是地址掩码中1的个数。

由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合(route aggregation),它使得路由表中的一个项目可以表示原来传统分类地址的很多个(例如上千个)路由。路由聚合也称为构成超网(supernetting)。

路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个因特网的性能。

使用CIDR的一个好处就是可以更加有效地分配IPv4的地址空间,可根据客户的需要分配适当大小的CIDR地址块。然而在分类地址的环境中,向一个组织分配IP地址,就只能以/8, /16或/24为单位来分配。这就很不灵活。

但是,在使用CIDR之前,因特网的地址管理机构没有按地理位置来分配IP地址。现在要把已分配出的IP地址收回再重新分配是十分困难的事,因为这牵涉到很多正在工作的主机必须改变其IP地址。尽管这样,CIDR的使用已经推迟了IP地址将要耗尽的日期。

  1. 使用二叉线索查找路由表 使用CIDR后,由于要寻找最长前缀匹配,使路由表的查找过程变得更加复杂了。当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题

4.4 网际控制报文协议ICMP

为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP

4.5.1 有关路由选择协议的几个基本概念

静态路由选择也叫做非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。对于很简单的小网络,完全可以采用静态路由选择,用人工配置每一条路由。动态路由选择也叫做自适应路由选择,其特点是能较好地适应网络状态的变化

因此,动态路由选择适用于较复杂的大网络。

为此,因特网将整个互联网划分为许多较小的自治系统(autonomous system),一般都记为AS

● 外部网关协议EGP:目前使用的协议就是BGP。

4.5.2 内部网关协议RIP

RIP (Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议[RFC 1058],它的中文名称很少使用,叫做路由信息协议。RIP是一种分布式的基于距离向量的路由选择协议,是因特网的标准协议,其最大优点就是简单。

RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(因此,这是一组距离,即“距离向量”)。RIP协议将“距离”定义如下:从一路由器到直接连接的网络的距离定义为1。从一路由器到非直接连接的网络的距离定义为所经过的路由器数加1。“加1”是因为到达目的网络后就进行直接交付,而到直接连接的网络的距离已经定义为1。

RIP协议的“距离”[插图]也称为“跳数”(hop count),因为每经过一个路由器,跳数就加1。RIP认为好的路由就是它通过的路由器的数目少,即“距离短”。RIP允许一条路径最多只能包含15个路由器。因此“距离”等于16时即相当于不可达。可见 RIP只适用于小型互联网。

4.5.4 外部网关协议BGP

在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销方面都有好处。

一旦邻站关系建立了,就要继续维持这种关系。双方中的每一方都需要确信对方是存在的,且一直在保持这种邻站关系。为此,这两个BGP发言人彼此要周期性地交换KEEPALIVE报文(一般每隔30秒)。KEEPALIVE报文只有19字节长(只用BGP报文的通用首部),因此不会造成网络上太大的开销。

4.5.5 路由器的构成

最早使用的路由器就是利用普通的计算机,用计算机的CPU作为路由器的路由选择处理机。路由器的输入和输出端口的功能和传统的操作系统中的I/O设备一样。当路由器的某个输入端口收到一个分组时,就用中断方式通知路由选择处理机。然后分组就从输入端口复制到存储器中。路由器处理机从分组首部提取目的地址,查找路由表,再将分组复制到合适的输出端口的缓存中。

图4-45(b)是通过总线进行交换的示意图。采用这种方式时,数据报从输入端口通过共享的总线直接传送到合适的输出端口,而不需要路由选择处理机的干预。但是,由于总线是共享的,因此在同一时间只能有一个分组在总线上传送。当分组到达输入端口时若发现总线忙(因为总线正在传送另一个分组),则被阻塞而不能通过交换结构,并在输入端口排队等待。因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽就受总线速率的限制。现代的技术已经可以将总线的带宽提高到每秒吉比特的速率,因此许多的路由器产品都采用这种通过总线的交换方式。

4.6 IP多播

现在IP多播(multicast,以前曾译为组播)已成为因特网的一个热门课题。这是由于有许多的应用需要由一个源点发送到许多个终点,即一对多的通信。例如,实时信息的交付(如新闻、股市行情等),软件更新,交互式会议等。

与单播相比,在一对多的通信中,多播可大大节约网络资源。图4-46(a)是视频服务器用单播方式向90个主机传送同样的视频节目。为此,需要发送90个单播,即同一个视频分组要发送90个副本。图4-46(b)是视频服务器用多播方式向属于同一个多播组的90个成员传送节目。这时,视频服务器只需把视频分组当作多播数据报来发送,并且只需发送一次。路由器R1在转发分组时,需要把收到的分组复制成3个副本,分别向R2、R3和R4各转发1个副本。当分组到达目的局域网时,由于局域网具有硬件多播功能,因此不需要复制分组

当多播组的主机数很大时(如成千上万个),采用多播方式就可明显地减轻网络中各种资源的消耗。在因特网范围的多播要靠路由器来实现,这些路由器必须增加一些能够识别多播数据报的软件。能够运行多播协议的路由器称为多播路由器(multicast router)。

5.4.1 停止等待协议

“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

5.5 TCP报文段的首部格式

若确认号 = N,则表明:到序号N - 1为止的所有数据都已正确收到。

窗口字段明确指出了现在允许对方发送的数据量。窗口值是经常在动态变化着。

5.7 TCP的流量控制

所谓流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。

5.9.1 TCP的连接建立

为什么A还要发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。

本章的重要概念

● 停止等待协议能够在不可靠的传输网络上实现可靠的通信。每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。分组需要进行编号。

● 为了进行拥塞控制,TCP的发送方要维持一个拥塞窗口cwnd的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接收窗口中较小的一个。

● TCP的拥塞控制采用了四种算法,即慢开始、拥塞避免、快重传和快恢复。在网络层,也可以使路由器采用适当的分组丢弃策略(如随机早期检测RED),以减少网络拥塞的发生。

● 运输连接有三个阶段,即:连接建立、数据传送和连接释放。

● TCP的连接释放采用四次握手机制。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后就进入半关闭状态。当另一方也没有数据再发送时,则发送连接释放通知,对方确认后就完全关闭了TCP连接。

第6章 应用层

万维网的应用层协议是HTTP,它定义了在万维网浏览器和万维网服务器之间传送的报文类型、格式和序列等规则

6.1 域名系统DNS

为什么机器在处理IP数据报时要使用IP地址而不使用域名呢?这是因为IP地址的长度是固定的32位(如果是IPv6地址,那就是128位,也是定长的),而域名的长度并不是固定的,机器处理起来比较困难。

从理论上讲,整个因特网可以只使用一个域名服务器,使它装入因特网上所有的主机名,并回答所有对IP地址的查询。然而这种做法并不可取。因为因特网规模很大,这样的域名服务器肯定会因过负荷而无法正常工作,而且一旦域名服务器出现故障,整个因特网就会瘫痪。因此,早在1983年因特网就开始采用层次树状结构的命名方法,并使用分布式的域名系统DNS。

若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。

6.1.3 域名服务器

下面简单讨论一下域名的解析过程。这里要注意两点。 第一,主机向本地域名服务器的查询一般都是采用递归查询(recursive query)。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步的查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

本地域名服务器向根域名服务器的查询通常是采用迭代查询(iterative query)。迭代查询的特点是这样的:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:

❶ 主机m.xyz.com先向其本地域名服务器dns.xyz.com进行递归查询。 ❷ 本地域名服务器采用迭代查询。它先向一个根域名服务器查询。 ❸ 根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址。 ❹ 本地域名服务器向顶级域名服务器dns.com进行查询。

6.4.3 超文本传送协议HTTP

下面我们用HTTP/1.0更具体地说明在用户点击鼠标后所发生的几个事件: (1) 浏览器分析链接指向页面的URL。 (2) 浏览器向DNS请求解析www.tsinghua.edu.cn的IP地址。 (3) 域名系统DNS解析出清华大学服务器的IP地址为166.111.4.100。 (4) 浏览器与服务器建立TCP连接(在服务器端IP地址是166.111.4.100,端口是80)。 (5) 浏览器发出取文件命令:GET /chn/yxsz/index.htm。 (6) 服务器www.tsinghua.edu.cn给出响应,把文件index.htm发送给浏览器。 (7) 释放TCP连接。 (8) 浏览器显示“清华大学院系设置”文件index.htm中的所有文本。

HTTP/1.1协议较好地解决了这个问题,它使用了持续连接(persistent connection)。所谓持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文

当张三继续浏览这个网站时,每发送一个HTTP请求报文,其浏览器就会从其Cookie文件中取出这个网站的识别码,并放到HTTP请求报文的Cookie首部行中:

6.4.4 万维网的文档

动态文档和静态文档之间的主要差别体现在服务器一端。这主要是文档内容的生成方法不同。而从浏览器的角度看,这两种文档并没有区别。

通用网关接口CGI (Common Gateway Interface)。CGI是一种标准,它定义了动态文档应如何创建,输入数据应如何提供给应用程序,以及输出结果应如何使用。

CGI程序又称为cgi-bin脚本,这是因为在许多万维网服务器上,为便于找到CGI程序,就将CGI程序放在/cgi-bin的目录下。

(2) 运行(runtime)环境。Java系统还定义了一个运行Java程序所必须的运行环境,其中包括一个Java虚拟机(简称为JVM),该软件定义了Java二进制代码的执行模型。

Java是一种面向对象的高级语言,编程方便直观。Java是从C++派生出来的,它省略了C++很多复杂的、很少用的语言特点。但Java和C或C++并不兼容。Java的每一个数据项都有一个确定的类型。对数据的操作严格按照该数据的类型来进行。 Java的编译程序将源程序转换成Java 字节码(bytecode),这是一种与机器无关的二进制代码。计算机程序调用解释程序(interpreter)读取字节码,并解释执行。

6.6 动态主机配置协议DHCP

现在广泛使用是动态主机配置协议DHCP (Dynamic Host Configuration Protocol),它提供了一种机制,称为即插即用连网(plug-and-play networking)。这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与。

这时该主机就成为DHCP客户。发送广播报文是因为现在还不知道DHCP服务器在什么地方,因此要发现(DISCOVER)DHCP服务器的IP地址。这个主机目前还没有自己的IP地址,因此它将IP数据报的源IP地址设为全0。这样,在本地网络上的所有主机都能够收到这个广播报文,但只有DHCP服务器才对此广播报文进行回答。DHCP服务器先在其数据库中查找该计算机的配置信息。若找到,则返回找到的信息。若找不到,则从服务器的IP地址池(address pool)中取一个地址分配给该计算机。DHCP服务器的回答报文叫做提供报文(DHCPOFFER),表示“提供”了IP地址等配置信息。

DHCP服务器分配给DHCP客户的IP地址是临时的,因此DHCP客户只能在一段有限的时间内使用这个分配到的IP地址。DHCP协议称这段时间为租用期(lease period),但并没有具体规定租用期应取为多长或至少为多长,这个数值应由DHCP服务器自己决定。

DHCP客户使用的UDP端口是68,而DHCP服务器使用的UDP端口是67。这

❶ DHCP服务器被动打开UDP端口67,等待客户端发来的报文。 ❷ DHCP客户从UDP端口68发送DHCP发现报文。 ❸ 凡收到DHCP发现报文的DHCP服务器都发出DHCP提供报文,因此DHCP客户可能收到多个DHCP提供报文。

❻ 租用期过了一半(T1时间到),DHCP发送请求报文DHCPREQUEST要求更新租用期。 ❼ DHCP服务器若同意,则发回确认报文DHCPACK。DHCP客户得到了新的租用期,重新设置计时器。 ❽ DHCP服务器若不同意,则发回否认报文DHCPNACK。这时DHCP客户必须立即停止使用原来的IP地址,而必须重新申请IP地址(回到步骤❷)。 若DHCP服务器不响应步骤❻的请求报文DHCPREQUEST,则在租用期过了87.5%!时(MISSING)(T2时间到),DHCP客户必须重新发送请求报文DHCPREQUEST(重复步骤❻),然后又继续后面的步骤。

7.2.2 公钥密码体制

在公钥密码体制中,加密密钥PK(public key,即公钥)是向公众公开的,而解密密钥SK(secret key,即私钥或秘钥)则是需要保密的。加密算法 E 和解密算法 D 也都是公开的。

本章的重要概念

●由于HTTP是在TCP连接上运行的,TCP要重传出错的或丢失的报文段,因而不适合于流式音频/视频文件的传送。对于流式音频/视频文件的传送应当使用UDP而不使用TCP。因此我们需要另外的一种服务器,即媒体服务器(或称为流式服务器),用来支持流式音频和视频的传送。

9.1.1 无线局域网的组成

802.11标准规定无线局域网的最小构件是基本服务集BSS (Basic Service Set)。一个基本服务集BSS包括一个基站和若干个移动站,所有的站在本BSS以内都可以直接通信,但在和本BSS以外的站通信时都必须通过本BSS的基站。在802.11的术语中,上面提到的接入点AP就是基本服务集内的基站(base station)

9.1.3 802.11局域网的MAC层协议

“无线局域网不需要进行碰撞检测”是由无线信道本身的特点决定的。我们知道,无线电波能够向所有的方向传播,且其传播距离受限。当电磁波在传播过程中遇到障碍物时,其传播距离就会受到限制。如

10.1.2 IPv6 的基本首部

把TTL字段改称为跳数限制字段,但作用是一样的(名称与作用更加一致)。

● 取消了检验和字段,这样就加快了路由器处理数据报的速度。我们知道,在数据链路层对检测出有差错的帧就丢弃。在运输层,当使用UDP时,若检测出有差错的用户数据报就丢弃。当使用TCP时,对检测出有差错的报文段就重传,直到正确传送到目的进程为止。因此在网络层的差错检测可以精简掉。

10.1.4 IPv6的地址空间

(2) 多播(multicast) 多播是一点对多点的通信,数据报发送到一组计算机中的每一个。IPv6没有采用广播的术语,而是将广播看作多播的一个特例。(3) 任播(anycast) 这是IPv6增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是距离最近的一个。

为了使地址再稍简洁些,IPv6使用冒号十六进制记法(colon hexadecimal notation, 简写为colon hex),它把每个16位的值用十六进制值表示,各值之间用冒号分隔。例如,如果前面所给的点分十进制数记法的值改为冒号十六进制记法,就变成了:

冒号十六进制记法还包含两个技术使它尤其有用。首先,冒号十六进制记法可以允许零压缩(zero compression),即一连串连续的零可以为一对冒号所取代,例如:FF05:0:0:0:0:0:0:B3可以写成:FF05::B3为了保证零压缩有一个不含混的解释,规定在任一地址中只能使用一次零压缩。该技术对已建议的分配策略特别有用,因为会有许多地址包含较长连续的零串。

(2) 环回地址 IPv6的环回地址是0:0:0:0:0:0:0:1(即::1或::1/128),作用和IPv4的环回地址一样。

10.1.5 从IPv4向IPv6过渡

双协议栈(dual stack)是指在完全过渡到IPv6之前,使一部分主机(或路由器)装有两个协议栈,一个IPv4和一个IPv6。因此双协议栈主机(或路由器)既能够和IPv6的系统通信,又能够和IPv4的系统进行通信。双协议栈的主机(或路由器)记为IPv6/IPv4,表明它具有两种IP地址:一个IPv6地址和一个IPv4地址。

向IPv6过渡的另一种方法是隧道技术(tunneling)。

要使双协议栈的主机知道IPv4数据报里面封装的数据是一个IPv6数据报,就必须把IPv4首部的协议字段的值设置为41(41表示数据报的数据部分是IPv6数据报)。

10.1.6 ICMPv6

在新版本的网络层中,地址解析协议ARP和网际组管理协议IGMP协议的功能都已被合并到ICMPv6中。

10.3 P2P应用

P2P工作方式受到广大网民的欢迎,因为这种工作方式不需要使用集中式的媒体服务器,这就解决了集中式媒体服务器可能出现的瓶颈问题。在P2P工作方式下,所有的音频/视频文件都是在普通的因特网用户之间传输。这其实是相当于有很多(有时达到上百万个)分散在各地的媒体服务器(由普通用户的PC充当这种媒体服务器)向其他用户提供所要下载的音频/视频文件。

10.3.4 P2P文件分发的分析

由于现在P2P文件共享程序的大量使用,已经消耗了因特网主干网上大部分的带宽,但网络运营商并没有因此而盈利。因此,怎样制定出合理的收费标准,既能够让广大网民接受,又能使网络运营商赢利并加大投入,也是目前迫切需要解决的问题。