【2021/1/20修订】【梳理】计算机网络:自顶向下方法 第一章 计算机网络和Internet(docx)

计算机网络

知 识 梳 理

(第一版)

建议先修课程:数据结构。
配套教材:
Computer Networking - A Top Down Approach, 7th edition James F. Kurose, Keith W. Ross
参考书目:
1、计算机网络(第7版) 谢希仁 编著 高等教育出版社


链接:https://pan.baidu.com/s/198Jjk_qjNa59gfL6ptDNDw
提取码:0000


一 计算机网络与Internet

1.1 什么是互联网
“网络”是一个统称,泛指把人或物互连在一起而形成的系统。
计算机网络的精确定义并未统一,较好的定义是:计算机网络主要是由一些通用的、可编程的硬件互连而成的网络。而这些硬件并非专门用于特定目的(例如,传送数据或视频)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。
上述的“可编程的硬件”表明这种硬件一定包含有中央处理机(CPU)。
也可以说,计算机网络是一些相互连接的、自治的计算机系统的集合。将处于不同位置并具有独立功能的多个计算机系统通过通信线路和网络设备连接起来,以实现资源共享,此系统称为计算机网络。

有三大类大家很熟悉的网络:电信网络、有线电视网络和计算机网络。最初,电信网络向用户提供电话、电报及传真等服务;有线电视网络向用户传送电视节目;计算机网络则使用户能够在计算机之间传送数据。这三种网络在信息化过程中都起到十分重要的作用,但发展最快并起到核心作用的则是计算机网络。
电信网络和有线电视网络都早已逐渐融入了现代计算机网络的技术,扩大了原有的服务范围;而计算机网络也能向用户提供电话、视频通信与放送视频节目的服务。把上述三种网络融合成一种来提供所有上述服务,这就是很早以前就提出的“三网融合”。然而事实并不如此简单,因为这涉及各方的经济利益和行政管辖权的问题。

互联网(Internet)是一种计算机网络,可以将全世界的计算设备互连。之前,这些设备主要是传统的PC、工作站(workstation)和服务器(用于存储、传输Web页面和电子邮件等)。但是,越来越多的非传统事物(笔记本电脑,智能手机、平板电脑、电视、游戏机、恒温控制系统、家庭安全系统、家用电器、手表、眼镜、汽车、交通控制系统等)已连接到Internet。用Internet术语来说,所有这些设备都称为主机或终端系统(end system),主机上运行着各类应用程序。Internet是人类自印刷术发明以来在存储和交换信息领域中的最大变革。
终端通过通信链路(link)和数据包交换机(switch)连接在一起。通信链路由不同类型的物理媒介(同轴电缆,铜线,光纤、无线电等)构成。当一个终端有数据需要发送时,发送端对数据分段(segment),并将报头(header,首部,头部)添加到每个段。产生的信息包称为数据包(packet,也称分组),通过网络发送到目标终端,后者将它们重组为原始数据。数据包交换机(分组交换机,packet switch)在传输过程中接收到达其通信链路的数据包,并转发到最终目的地。输入到交换机和从交换机输出的数据包分别称为入站(inbound)数据包和出站(outbound)数据包。
关于常用物理媒介的介绍,可以提前学习“附录一 物理层与通信基础”。
交换机有多种,最成熟的两种是路由器(router)和链路层(link-layer)交换机,它们都向最终目的地转发数据包。链路层交换机通常用于接入网络(见后文),而路由器通常用于网络的核心(主干)部分。从发送端到接收端的数据包经过的通信链路和交换机,称为路由(route)或路径(path)。

研究计算机网络时,主机和交换机通称结点(node)。我们说,计算机网络是由结点和连接这些结点的链路组成的。如果在研究时,我们专注于讨论网络的某一部分,那么剩余的部分可以画成一朵云,省略内部的结构。

如果你不太熟悉,可以将数据包交换网络比作公路、道路和交叉路口构成的交通网络。终端系统通过Internet服务提供商(ISP)来访问Internet。ISP包括住宅ISP(如本地的电缆或电话公司),公司ISP,大学ISP,在机场、酒店、咖啡店和其它公共场所提供Wi-Fi接入的ISP,以及蜂窝数据(cellular data,见第7章)ISP。每个ISP本身就是一个分组交换和通信链路网络。ISP为终端提供各类网络访问(网络接入),包括住宅宽带(电缆调制解调器MODEM,或数字用户线DSL),局域网(LAN,也称内网)和移动数据。ISP还向内容提供商(如:YouTube、Netflix)提供Internet访问,将网站和视频服务器直接连接到Internet。
Internet主要是为了相互连接各个终端,因此提供终端访问权限的ISP也必须互连。较低层的ISP通过国家和国际较高层的ISP(例如Level 3 Communications(公司名),AT&T,Sprint和NTT)互连。上层ISP由连接了光纤的高速路由器组成。每个ISP网络,无论上层或下层,大多数情况下都是独立管理的,且使用Internet协议(见下文),遵守特定的命名和地址规范。

终端、交换机和其它Internet遵循特定的协议,控制信息的收发。传输控制协议(TCP)和Internet协议(IP)是Internet中最重要的两个协议。IP指定在路由器和终端之间收发的数据包的格式。互联网的主要协议统称TCP / IP。
在计算机网络中,任何可发送或接收信息的硬件或软件进程,即实体(entity),都应遵守相应的标准,以便正常合作。这就是标准在计算机中的作用。互联网标准是由互联网工程任务组(IETF)开发的。IETF标准文档称为评论请求(requests for comments,RFC)。RFC最初作为一般性评论请求(因此得名),用于解决尚在雏形的互联网面临的网络和协议设计问题。RFC定义了协议,如TCP,IP,HTTP(用于Web)和SMTP(用于电子邮件)。其它机构也为网络组件(尤其是网络链接)规定了标准。例如,IEEE 802 LAN / MAN标准委员会指定了以太网(Ethernet)和无线WiFi标准。
所有互联网标准都以RFC的形式在互联网上发表。当某个标准成为建议标准时,就会以RFC文档的形式公开。成为正式标准以后,一个标准还会分配一个STD开头的编号。一个标准可以多个RFC文档相关联。

也可以从不同的角度来描述Internet:Internet是为应用程序提供服务的基础设施。除了邮件和网页浏览等传统应用,即时通讯、实时道路交通信息追踪、网络音乐和影视、在线社交网络、视频会议、多人游戏和基于位置的推荐系统等应用也使用Internet。这些应用程序称为分布式应用,因为它们涉及多个终端。Internet应用运行在终端上而不是交换机中,交换机并不关心应用程序。

连接到Internet的终端系统提供了一个套接字(socket)接口,该接口指定了:终端系统上运行的程序如何请求Internet基础设施,将数据传递到另一终端系统上运行的特定程序。Socket是发送程序必须遵循的规则,以便Internet成功传递数据。

如果您现在对上述介绍的部分概念仍感到不知所措,请不要担心。在以后的内容中,将解释这些重要的术语和问题。

协议(protocol)是一组用于维持交流的特定信息或动作。人类一直在执行协议。设想如果一个人有礼貌但另一个人没有,或者一个人了解专业的概念,而另一个人不了解,那么沟通就无法进行下去。在网络中也是如此,需要运行相同协议的通信实体互相协同、完成任务。
网络协议的不同在于,交换消息和采取措施的实体不是人,而是设备(计算机,智能电话,平板电脑,路由器或其它具有网络功能的设备)的硬件或软件。Internet中涉及多个通信远程实体的所有活动均由协议控制。
协议定义了多个通信实体之间交换的消息的格式和顺序,以及对消息或其它事件的传输和 / 或接收所采取的操作。
1.2 网络边缘
之前说过,连接到Internet的设备通常称为终端系统。之所以这么称呼,是因为它们位于Internet的边缘,如图。终端运行浏览器之类的应用程序,因此也称主机(host)。主机有时又分两类:客户端(client)和服务器(server)。客户端通常是PC、智能手机等;而服务器是功能更强的计算机,用于存储和分发网页、流视频、传输邮件等。客户是服务请求方,服务器是服务提供方。对等连接(peer-to-peer,P2P)不区分服务提供方和服务请求方,每一台主机既是客户又是服务器。
我们从中接收搜索结果、电子邮件、网页和视频的服务器大都位于大型数据中心(data center,DC)中。一些IT巨头可以拥有几十个乃至上百个数据中心,每个大型数据中心可包含数十万台服务器。

想象一个几乎一切都连接到Internet的世界:人,汽车,自行车,眼镜,手表,玩具,医院设备,家居传感器,教室,视频监控系统,大气传感器,货架产品和宠物,都通过Internet互连起来。物联网(Internet of things,IoT)的世界即将来临。手机已经在家、办公室和汽车中伴随我们,向ISP和Internet应用程序报告地理位置和使用情况。除了智能手机,各种非传统事物也已商用,例如联网的可穿戴设备。连接互联网的眼镜可以将我们看到的所有内容上传到云中,使我们能与世界各地的人们实时共享所见所闻。智能家居可以联网,包括可以从手机远程控制的恒温器,以及体重秤,使我们能以图形方式查看饮食情况。有很多联网玩具,譬如可以识别和解释语音并做出响应的玩偶。
物联网带来了革命性的益处,但也存在巨大的安全和隐私风险。攻击者可以通过互联网入侵IoT设备或从IoT设备收集数据的服务器;还可能劫持联网玩具并直接与孩子交谈;抑或可能侵入存储了从可穿戴设备收集的个人健康和活动信息的数据库。对安全和隐私的担忧会破坏消费者的信心,从而无法使技术充分发挥潜力,阻碍IoT的普及。

接入网络(access network)又称为本地接入网或居民接入网,即将终端系统物理连接到从终端系统开始的路径上的第一台路由器(边缘路由器)的网络。
我们以广泛使用的家庭接入网络作为例子。家庭宽带的两种最普遍的类型是数字用户线(digital subscriber line,DSL)和电缆。住宅可从提供其有线电话服务的公司获得DSL Internet访问。这时,电话公司也是其ISP。每个客户的DSL MODEM使用现有电话线(双绞铜线,见下文)与位于电话公司的本地端局(central office,CO)的数字用户线访问多路复用器(digital subscriber line access multiplexer,DSLAM)交换数据。DSL Modem获取数字数据并将其转换为高频音调,通过电话线传输到CO。来自许多房屋的模拟信号在DSLAM处被转换回数字格式。
住宅电话线同时传输数据和电话信号,它们以不同的频率编码:50 kHz至1 MHz频带中的高速下行信道(channel);4 kHz至50 kHz频带中的中速上行信道;0到4 kHz频带中的双向电话信道。这种方法使单条DSL链路看起来好像有三条单独的链路,也就是说电话呼叫和Internet连接可以同时共享DSL链路。
在客户方,分路器(splitter)将到达家庭的数据和电话信号分离,并将数据信号转发到DSL调制解调器。在电话公司一方,在CO中,DSLAM分离数据和电话信号,然后将数据发送到Internet。成百上千个家庭连接到单个DSLAM。
DSL标准定义了多种传输速率,包括下行12 Mbps和上行1.8 Mbps,下行55 Mbps和上行15 Mbps。下行和上行速率不同,访问是不对称的,因此该技术也叫非对称数字用户线(Asymmetric DSL,ADSL)。实际的传输速率往往小于上述速率,因为当提供多种服务(不同价格)时,DSL提供商会故意限速。最大速率还受到房屋与端局的距离,双绞线规格以及电磁干扰的限制。DSL是针对家庭和端局之间的短距离设计的。通常,若住所不在CO的5到10英里之内,则必须采用其它形式的Internet访问。

ADSL并不适合企业,因为企业往往需要使用上行信道发送大量数据给许多用户。为了满足企业的需要,ADSL技术有几种变型。对称DSL(Symmetric DSL,SDSL)把带宽平均分配到下行和上行两个方向。有一种使用一对线或两对线的对称DSE叫做HDSL(High speed DSL),是一种高速数字用户线。还有一种比ADSL更快的、用于短距离传送(300 ~ 1800 m)的VDSL(Very high speed DSL),即甚高速数字用户线。这也是ADSL的快速版本。

近年来,高速DSL技术的发展又有了新的突破。2011年ITU-T成立了G.fast项目组,致力于短距离超高速接入新标准的制定。在欧洲,这种超高速DSL的接入方式很受欢迎:具有历史意义的古建筑在欧洲非常之多,而各国政府都已制定很严格的保护文物的法律。如果为了高速上网就在这些古建筑的墙上钻洞铺设光缆,那么就破坏了文物,因而被法律禁止。值得注意的是,这些国家的电话普及率很高,进入这些建筑的电话线都早已铺设好了。因此,利用现有电话线来实现高速接入,在欧洲就特别受到欢迎。
在我国,情况有些不同。在建设新的高楼时,就已经把各种电缆的管线位置预留好了。因此,高楼中的用户可以根据自己的需要选择合适的接入方式,不一定非要采用xDSL技术。所以,超高速DSL接入方式在国内使用得尚不普遍。

有线Internet访问则利用有线电视公司现有的电缆电视基础设施。居民可以从提供有线电视的公司获得Internet访问。光纤(fiber)将电缆的头端(head end)连接到附近的光纤结点,在这里光信号被转换为电信号,然后数据通过传统的同轴电缆(coaxial cable)到达各个房屋和公寓。每个这样的结点通常支持500至5,000户房屋。此系统同时使用了光纤和同轴电缆,常称为混合光纤同轴电缆(hybrid fiber coax,HFC)。

电缆互联网访问需要特殊的调制解调器,称为电缆调制解调器(cable modem)。与DSL调制解调器一样,电缆调制解调器通常是一个外部设备,通过以太网(见第六章)端口连接到家用PC。在电缆头端,电缆调制解调器终端系统(cable modem termination system,CMTS)与DSL网络的DSLAM功能相似:将许多下行至家庭中的电缆调制解调器发送的模拟信号转换回数字信号。电缆MODEM将HFC网络分为两个通道,下行(downstream)通道和上行(upstream)通道。与DSL一样,访问通常是不对称的,下行的传输速率远比上行高。DOCSIS(见第六章) 2.0标准分别定义了42.8 Mbps和30.7 Mbps的下、上行速率。与DSL网络一样,如果购买网络时签署了低价的合同,或介质存在较多损耗,那么实际速率将与最大速率有一定的差距。
电缆Internet访问的一个重要特征是:广播媒介是共享的。头端发送的每个数据包在每条链路的下行传播,发送给每户家庭;由家发送的每个数据包在上行信道传播到头端。如果几个用户同时在下行通道上下载一个视频文件,则每个用户接收视频的实际速率将大大低于总下行速率。不过,如果只有几个浏览网页的用户,则每个用户实际上都可以全速接收网页,因为很少会有许多用户碰巧在同一时间请求一个网页。上游信道也是被共享的,所以需要分布式多址访问协议(distributed multiple access protocol)来协调传输,避免冲突。

一种提供更高速度的新技术是光纤到户(fiber to the home,FTTH)。顾名思义,FTTH提供从CO直接到家庭的光纤路径。最简单的光分配网络称为直接光纤,从CO到每户家庭的光纤都是单独的一根。更常见的一种是,离开CO的每根光纤实际上是许多家庭共享的;直到相对靠近房屋时,才由更多的光纤分别进入每一户。这需要用光配线网(Optical Distribution Network,ODN)来实现。光配线网分为无源和有源两种,它们又分别称为有源光网络(active optical networks,AON)和无源光网络(passive optical networks,PON)。
AON本质上是交换以太网(switched Ethernet),将在第6章中讨论。

我们简要讨论Verizon的FIOS Internet中使用的PON。P代表无源,表明在光配线网中无须配备电源,因此基本上不用维护,其长期运营成本和管理成本都相对很低。
如上图,每个家庭都有一个光网络终端(optical network terminator,ONT),该终端通过专用光纤连接到邻近的光分路器。分路器将许多房屋(如100个)组合到一条共享的光纤上,该光纤与电信公司CO中的光线路终端(optical line terminator,OLT)连接。提供光电信号互相转换的OLT通过电信公司的路由器连接到Internet。在家庭中,用户将家庭路由器(通常是无线路由器)连接到ONT,并通过此路由器访问Internet。在PON体系结构中,从OLT发送到分路器的所有数据包都在分路器中复制(类似于电缆头端)。
FTTH可提供Gbps级别的Internet接入速率。另外两种接入网络技术也可提供Internet接入:在无法使用DSL、电缆和FTTH的地方(如某些农村地区),可以使用卫星链路以超过1 Mbps的速度连接到Internet;Star Band和HughesNet是两个卫星访问提供商。传统电话线上的拨号访问基于与DSL相同的模型:家用MODEM通过电话线连接到ISP中的MODEM。与DSL和其它宽带接入网络相比,拨号访问非常慢,仅为56 kbps。

但FTTH有两个问题:首先,价格还不便宜;其次,一般用户也没有这样高的速率需求。要流畅观看视频节目,有数Mbps的速率就可以了,不一定非要100 Mbps以上的数据率。
于是,出现了多种宽带光纤接入方式,称为FTTx,表示Fiber To The …。字母x代表不同的光纤接入地点。实际上,FTTx就是把光电转换的地方,从用户家中(这时x就是H)向外延伸到离用户家门口有一定距离的地方。
现在已有很多种不同的FTTx。除了FTTH,还有光纤到路边FTTC(Curb)、光纤到小区FTTZ(Zone)、光纤到大楼FTTB(Building)、光纤到楼层FTTF(Floor)、光纤到办公室FTTO(Office)、光纤到桌面FTTD(Desk)等。
需要注意的是,有些运营商宣传的“光纤到户”,并非真正的FTTH,而是FTTx,对居民来说就是FTTB或FTTF。有的运营商把这种接入方式叫做“光纤宽带”或“光纤 + 局域网”,可能较为准确。

公司、大学及越来越多的家庭,都使用局域网(LAN)将终端连接到边缘路由器。在LAN技术中,以太网是最流行的。如下图,以太网用户使用双绞铜线连接到以太网交换机,交换机网络又连接到较大的Internet。用户访问以太网交换机的理论速率多为100 Mbps至1 Gbps,服务器则多为1至10 Gbps乃至更高。越来越多的人开始无线访问Internet。在无线LAN中,无线用户向与企业网络连接的接入点(最可能使用有线以太网)收发数据包,该接入点又与有线互联网连接。无线局域网用户通常必须位于接入点几十米以内。现在,基于IEEE 802.11(俗称WiFi)的无线LAN访问几乎遍及所有地方,包括大学,商务办公室,咖啡厅,机场,家庭,甚至飞机。在许多城市中,一个人站在街上,就位于十个或二十个基站(见第七章)的范围内。今天的802.11提供了100 Mbps以上的共享传输速率。

以太网和WiFi接入网络最初是在企业(公司,大学)中部署的,现在已普及到家庭。许多家庭将宽带住宅接入(电缆调制解调器或DSL)与这些廉价的无线LAN(WLAN)技术相结合,以创建家庭网络。
下图是一个典型的家庭网络。网络包括一台漫游(roaming)笔记本电脑和一台有线PC、基站(无线接入点),可与家庭中的无线PC和其它无线设备通信;电缆调制解调器,提供对Internet的宽带访问;路由器,用于将基站和固定式PC与电缆调制解调器互连。该网络允许家庭成员从厨房到后院到卧室都能接入互联网。

iPhone和Android设备的市占越来越多。这些设备采用为蜂窝电话打造的相同的无线基础设施:通过由蜂窝网络提供商运营的基站发送 / 接收数据包。与WiFi不同,用户仅需要距离基站几十公里(而不是几十米)。
1.3 网络核心
网络核心包括由分组交换机和链路构成的网络。在网络应用中,终端系统彼此交换消息。消息可以包含应用程序设计人员想要的任何内容:可以进行控制,也可以包含数据,如邮件、PNG图像或FLAC音频。源将长消息分解为较小的块——数据包。在源和目标之间,每个数据包都经过通信链路和分组交换机。分组转发是网络核心最重要的功能。

大多数分组交换机在链路的输入处使用存储转发传输(store-and-forward transmission)。这意味着分组交换机必须先将整个数据包接收完毕,才能开始将包的第一个位传输到输出链路上。
每个数据包交换机都具有多条链路。对于每条已连接的链路,交换机都会在内存中为其分配输出缓冲区(输出队列),存储即将发送到该链路的数据包。缓冲的作用非常关键:如果数据包需要在链路上传输,但该链路正忙,则后到达的包必须等待。网络中的各种延迟是可变的,取决于网络的拥塞(congestion)程度。
如果在某时间段内,路由器的数据总接收速率超过可用发送链路的总带宽,数据包将在输出缓冲区中排队,路由器会发生拥塞。由于缓冲区空间有限,到达的数据包可能无法再装入缓冲区。这种情况下,会发生数据包丢失(packet loss):新到达的数据包或已经排队的数据包之一将被丢弃。

路由器如何确定将数据包转发到Internet的哪条链路?在Internet中,每个终端都有IP地址。当源端要将数据包发送到目标端时,源将目标IP地址包含在数据包的首部中。与邮政地址类似,该地址具有层次结构。数据包到达路由器时,路由器检查其目的地址的一部分,将其转发给相邻的路由器。每台路由器都有转发表(forwarding table),将目标地址(或其前缀)映射到该路由器的出站链接。路由器使用目标地址搜索转发表,查找适当的出站链接并发送。
转发表如何设置?这里先简单提一提:互联网具有许多用于自动设置转发表的路由协议。例如,路由协议可能会确定从每台路由器到每个目的地的最短路径,依据最短路径来配置转发表。
如何查看数据包经过的端到端路由?访问www.traceroute.org,选择特定国家 / 地区的来源,然后从该来源的计算机追踪。

通过链接和交换机的网络传输数据有两种基本方法:电路交换(circuit switching)和分组交换(packet switching)。刚才介绍了分组交换网络,现在介绍电路交换网络。
在电路交换网络中,两个准备通信的终端需要提前申请专门的链路,才能开始通信。在分组交换网络中,不保留这些链路资源:每个会话(session)按需使用资源。因此,可能必须等待(即排队)才能访问通信链接。一个简单的类比:两家餐厅,一家要求预订,另一家不需要。对于前者,我们必须提前打电话预留位置。当我们到达餐厅时,便可立即就座。对于后者,不必费心订位。但到达餐厅时,或许必须等待一桌人吃完以后空出一张桌子才能入座。
传统电话网络是一种电路交换网络。若一个人想要通过电话网络向另一个人发送信息(语音或已经极少使用的传真)。在发送者发送信息之前,网络必须在发送者和接收者之间建立专用连接。双方之间路径上的交换机为该连接保持连接状态。这种连接称为电路(circuit)。这样的链路保持恒定的传输速率(占链路传输总容量的一部分)。因此发送方可以保证以恒定速率将数据传输到接收方。

下图是一个电路交换网络:四台电路交换机通过四条链路互连。这些链路中的每一条都有四条电路,因此每条链路可以支持四台机同时连接。主机(例如,PC和工作站)直接连接到其中一台交换机。两台主机需要通信时,网络在主机之间建立专用的端到端连接。在该示例中,专用连接在第一、第二链路中分别使用第二、第四线路。由于每条链接都有四条线路,因此端到端连接获得总传输容量的四分之一。如果相邻交换机之间的每条链路的传输速率为1 Mbps,则每个端到端电路交换连接将获得250 kbps的传输速率。
相反,当一台主机希望通过分组交换网络(例如Internet)将数据包发送到另一台主机时,与电路交换一样,数据包通过一系列通信链路传输。但不同的是,数据包被直接发送到网络中,而不会保留任何链接资源。如果全部链路都因为正在传输其它数据包而堵塞,则该数据包将在传输链路的发送侧的缓冲区中等待,这会增加延迟。Internet尽最大努力及时发送数据包,但它不对发送的总用时做任何保证。

分组交换的支持者一直认为电路交换是浪费的,因为专用电路在静默期间处于空闲状态。例如,当电话中的一个人暂停通话时,其他人无法使用此人暂时不使用的已分配连接。这些支持者还指出,建立端到端电路和保留端到端传输能力是繁琐的,需要复杂的软件来协调沿端到端路径的交换机的操作。分组交换的支持者还认为分组交换:(1)提供更好的传输容量共享机制;(2)与电路交换相比,实现起来更简单,效率更高,成本更低。
分组交换的批评者常说,分组交换不可预测端到端延迟(主要不可预测排队延迟)而不适用于实时服务(例如电话呼叫和视频会议)。

为何分组交换效率更高?电路交换在分配链路时并不考虑是否所有时候都需要使用链路,已分配但暂时不需要的链路会闲置。而分组交换按需分配链路使用。将总量很大的数据划分为数据包后,可以以数据包为单位对收发调度。当有用户暂停传输时,正在等待的数据包即刻占领空闲链路。
当今的电信网络中,两种交换都很普遍,但大趋势是更多使用分组交换。许多电路交换电话网络都在缓慢地向分组交换过渡。电话网络经常将分组交换用于电话呼叫的昂贵的海外呼叫。而互联网的核心部分采用了分组交换技术。

前面我们说过,最终用户(end user)和内容提供商连接到访问ISP(接入ISP)以接入互联网,访问ISP本身也必须互连。这是通过创建网络的网络(network of network)来完成的——理解这句话是理解Internet的关键。
多年来,Internet已经演变为非常复杂的结构。这种演变很大程度上是由经济和国家政策所驱动,而不是性能。怎样构建这样的网络呢?(记住:总体目标是互连访问ISP,以便所有终端系统可以相互发送数据包)
一种幼稚的方法是:让每个访问ISP直接与其它的访问ISP连接。当然,这种设计太昂贵,因为它要求每个接入ISP具有到世界上的其它全部接入ISP中的每一个的单独通信链路。我们必须换用其它方法。

在任何给定区域中,都有若干个区域ISP(regional ISP),该区域中的接入ISP连接到该区域ISP。每个区域性ISP都连接到第1层(最顶层)ISP(tier-1 ISP)。世界上大约有十几个1级ISP,包括Level 3 Communications,AT&T,Sprint和NTT。高层ISP向每个连接到它的低层ISP收费。被收费的这些ISP称为客户,向它们收费的ISP称为提供商。1级ISP本身必须互连。否则,连接到其中一个提供商的访问ISP将无法与连接到其它提供商的访问ISP通信。访问ISP也可以直接连接到1层ISP,此时它要向1层ISP付费。因此,在层次结构的每个级别上都有客户-提供商关系。第1层ISP不向任何人付款,因为它们位于层次结构的顶部。公司、大学和科研机构也可以是ISP。

在某些地区,可能会有一个较大的区域性ISP(可跨越整个国家),而该区域中较小的区域性ISP与之连接;然后,较大的区域性ISP连接到第1层ISP。例如,在中国,每个城市都有接入ISP,它们与省级ISP连接,省级ISP又与国家ISP连接,而国家ISP最终与一级ISP连接。

入网点(point of presence,PoP)存在于层次结构的所有级别中,除了底层(访问ISP)。PoP就是提供商网络中的一组路由器(在同一位置),客户ISP通过它连接到提供商ISP。为了这样连接,客户ISP可以从第三方电信提供商租用一条高速链接,以将其路由器之一直接连接到PoP的一个路由器。任何ISP(第1层除外)都可以选择多宿主(multi-home),即连接到两个或多个提供商ISP。低层ISP可以跨层级与多个高层ISP进行多宿主。采用多宿主方案时,即使其中一个提供商发生故障,客户ISP也可以继续向Internet发送和接收数据包。

为了降低成本,可以在同一级别的一对附近的ISP进行结伴(peering),即将各自的网络直接连接在一起,以便它们之间的所有流量都通过直接连接而不是通过上层ISP充当中介。两个ISP结伴互连时,一般是免结算的:两个ISP都不向对方付费。第1层ISP也与另一方免费结伴。同样,第三方公司可以创建Internet交换点(Internet exchanging point,IXP),这是多个ISP可以结伴的汇合点。IXP通常位于具有自己的交换机的独立建筑物中。如今,互联网上有至少数百个IXP。

内容提供商也可能具有自己的网络。Google在北美、欧洲、亚洲、南美和澳洲拥有几十至上百个数据中心,一些包含十万多台服务器;而另一些仅具有数百台服务器。Google数据中心都通过Google私有的TCP / IP网络互连。该网络遍布全球,与公共Internet是分开的。Google私有网络仅承载Google服务器之间的流量。Google专用网络尝试“绕过”Internet的上层:自己直接与低层ISP进行对等连接(免费)或在IXP处与它们连接。但是,许多访问ISP仍然只能通过第1层网络才能到达,因此Google网络也连接到第1层ISP并向它们付费。通过创建自己的网络,内容提供商不仅减少了对上层ISP的付款,还更好地控制了其服务最终交付给最终用户的方式。

总而言之,当今的Internet,一个网络的网络,非常复杂,由大约十来个Tier-1 ISP和无数低级ISP组成。ISP的覆盖范围很广,有些跨多个大洲和大洋,另一些则局限于狭窄的地理区域。较低层的ISP连接到较高层的ISP,较高层的ISP彼此互连。用户和内容提供者是较低层ISP的客户,较低层ISP是较高层ISP的客户。近年来,主要的内容提供商还创建了自己的网络,并在可能的情况下直接连接到较低层的ISP。

1.4 延迟、丢失、吞吐量和分组交换网络
我们希望Internet能在终端之间即时移动任意多的数据而不丢失,但这只是理想情况。计算机网络必定会限制端系统之间的吞吐量。端系统之间存在延迟,并可能丢包。物理定律也会导致延迟和损失,限制吞吐量。对这些问题的处理大大超出了本课程的容量,并产生了至少数千篇博士学位论文。下面简单讲解计算机网络中的延迟、丢失和吞吐量。

吞吐量(throughput)表示在单位时间内通过某个网络(或信道、接口)的数据量,即每秒传输的数据量——速率(rate),也称数据率(data rate)或比特率(bit rate)。此外还有一个常用术语叫带宽(bandwidth),本来是指信号具有的频带宽度,其单位为Hz(kHz,MHz,GHz等),但在计算机网络中,也表示传输速率。带宽的这两种意义,前者为频域(frequency domain)称谓,而后者为时域(time domain)称谓,其本质是相同的。

回想一下,一个数据包从一台主机(源)开始,经过一系列路由器,然后在另一主机(目标)结束旅程。当数据包沿着该路径从一个结点(主机或路由器)传播到后续结点时,在途经的每个结点处都会遭受多种类型的延迟。这些延迟中最重要的是:结点处理延迟、排队延迟、传输延迟和传播延迟,它们累积成总结点延迟。网络延迟会极大影响许多Internet应用的性能。

作为源与目的地之间的端到端路由的一部分,设数据包从源主机通过路由器A发送到路由器B。
现在要表示路由器A的结点延迟。路由器A的出站链路指向路由器B,链路前面有一条队列(缓冲区)。数据包到达A时,A检查其首部确定出站链接,然后将数据包定向到此链接。在此示例中,出站链接是通向路由器B的那一条。仅当当前队列和链路中没有其它数据包时,才可继续上传输数据包;若链路正忙,新到达的数据包将加入队列。

检查数据包的包头并确定将其定向到何处所需的时间是处理延迟(processing delay)的一部分。处理延迟还包括其它因素,例如检查位错误的用时。高速路由器中的处理延迟通常约为微秒或更少。经过这种结点处理(nodal processing)后,路由器会将数据包定向到前往路由器B的链接之前的队列。

数据包到达队列之后,到正式被发送之前,经过的时间称为排队延迟(queuing delay)。特定数据包的排队延迟取决于队列中已有数据包数量。如果队列为空,且没有其它包正在传输,那么该数据包的排队延迟为零。若许多数据包已经在等待发送,则排队延迟很长。实际上,排队延迟可以在几微秒到几毫秒之间。

假设数据包以先来先服务(FCFS)的方式传输(这在数据包交换网络中很常见):只有将之前到达的所有数据包都传输完毕,才能传输新来的数据包。用L位表示数据包的长度,路由器A到路由器B的链路速率为R位/秒。则传输延迟(transmission delay)为L/R。这是将数据包的全部位都“推”上链路所需的时间。传输延迟通常在微秒到毫秒级。

一旦将某个位“推”入链路,它就会继续传播。从链路的一端传播到另一端所需的时间就是传播延迟(propagation delay)。该位以链路的传播速度传播。传播速度取决于链路的物理介质,不超过光速。数据包的最后一位传播到结点B后,它和数据包的所有前面的位都暂存在路由器B中(若B到下一个结点的链路空闲,则该包立刻被转发出去)。在广域网(Wide area network,WAN)中,传播延迟约为毫秒。

初学者有时难以理解传输延迟和传播延迟的区别。这个区别是微妙的,但极为重要。传输延迟是路由器发出数据包所需的时间;它取决于数据包的长度和链路的传输速率,但与两个结点的距离无关。另一方面,传播延迟是指从一台路由器传播到另一台路由器所花费的时间。它是结点距离的函数,但与数据包的长度或链路的传输速率无关。

处理延迟、排队延迟、传输延迟、传播延迟四种延迟的和是结点的总延迟。即
d_nodal=d_proc+d_queue+d_trans+d_prop
通常,当需要传输的数据量很大时,总时延中发送时延占主导地位;当传输数据量非常小时,传播时延占主导地位。

不计其数的论文和书籍都对排队延迟做了大量研究。这里仅对排队延迟进行高层次的、直观的讨论。有兴趣的读者可参考相关书目(甚至可以写出一篇博士论文!)。与其它三个延迟不同,排队延迟可能因数据包而异。如果有若干个数据包同时到达一个空队列,则第一个包无排队延迟,最后一个包的排队延迟最大。因此,在表征排队延迟时,通常使用统计方法,例如排队延迟的算术平均数、方差以及超过某个特定值的概率。
何时排队延迟更紧要?答案取决于数据包到达队列的速率、链路的传输速率以及流量的性质,即流量是周期性到达还是突发到达。用a表示数据包到达队列的平均速率(包 / 秒),R是传输速率(位 / 秒)。为简单起见,假设所有数据包长度均为L位。则比特到达队列的平均速率为La bps。La/R称为流量强度(traffic intensity)。如果La/R>1,则比特到达队列的平均速率超过了可以从队列转发出去的比特的速率。队列将趋于无限制地增长,排队延迟将不断上升。因此,流量工程(traffic engineering)中的黄金法则之一是:流量强度不要大于1。

现在考虑La/R≤1的情况。流量性质会影响排队延迟。如果数据包足够缓慢地周期性到达(不少于每L/R秒到达一个数据包),则每个数据包将到达一个空队列,并且不会有排队延迟。如果大量数据包周期性地突发到达,则可能会有很大的平均排队延迟。
这两个示例有些理想化。通常,包的到达是随机的。实践中,La/R通常不足以刻画排队延迟。尽管如此,它对排队延迟的直观了解很有用。特别地,如果流量强度接近零,则数据包到达的次数很少且两个数据包相差很远,后到的数据包不太可能在队列中发现另一个已有的数据包,因此平均排队延迟接近零。另一方面,当流量强度接近1时,会有一定的时间出现到达速率超过传输容量的情况(到达速率是波动的),这些时间段内将形成队列;此后,如果速率小于传输容量,则队列长度会缩小。随着流量强度接近1,平均队列长度会越来越大。
平均排队延迟对流量强度的定性依赖性如图所示。随着流量强度接近1,平均排队延迟会迅速增加。也许您在高速公路上遇到了这种现象。如果您经常在拥挤的道路上行驶,那么通常情况下,拥塞表示其流量强度接近1。如果某个突发事件导致流量比平时稍大,则遇到的延迟会大得多。

在上面的讨论中,我们假设队列能容纳无限个数据包。实际上,队列的最大容量取决于路由器的设计和成本。因为队列容量有限,所以当流量强度接近1时,数据包延迟并不会增长过快。相反,一个数据包到达后,可能发现队列已满。此时会有数据包丢失,因为路由器不再有足够的空间贮存数据包。
从终端来看,数据包丢失表现为该数据包已经传输出去,但未收到目的地的已接收报告。丢包的比例随着流量强度的增加而增加。因此,结点的性能通常结合延迟与丢包的可能性来衡量。丢失的数据包可以重新传输,以确保最终将所有数据从源传输到目的地。

到目前为止,我们的讨论集中在结点延迟,即一台路由器的延迟。现在考虑从源到目的地的总延迟。假设在源主机和目标主机之间有(N-1)台路由器,且网络没有拥塞(即可以忽略排队延迟),源主机和每台路由器的处理延迟为d_proc,传输速率为R位/秒,每条链路的传播延迟为d_prop。则通过结点延迟可以得到端到端延迟:
d_(end-end)=N(d_proc+d_trans+d_prop ),d_trans=L/R
L是数据包大小。当然,这是一个非常理想化的模型,因为它认为每台路由器的处理延迟、传输速率和每条链路的传播延迟都是一样的。不要刻意去记这条式子,而是尝试去理解,以便当情况不这么简单时也能正确列式计算。

为了深入理解端到端延迟,我们可以使用Traceroute程序(Windows下为Tracert)。Traceroute可以在任何Internet主机上运行。当用户指定目标主机时,程序向目标发送多个特殊数据包。数据包传输时,会通过一系列路由器。当路由器收到一个这些数据包时,将一条短消息发回源,其中包含路由器的名称和地址。Traceroute的原理见5.6节。

除了处理、传输和传播延迟之外,终端还可能存在其它不可忽略的延迟。例如,一个终端希望将数据包发送到共享介质,则由于协议的原因,它可以故意延迟其发送。另一个重要的延迟是IP语音(voice over IP,VoIP)应用程序中存在的媒体打包延迟。在VoIP中,发送方必须先将编码的数字化语音填充到数据包里,再将其传递到Internet。填充数据包的时间如果过长,会影响用户对VoIP通话质量的主观感受。

除了延迟和丢包,计算机网络的另一个关键性能指标是端到端吞吐量。假设你正将大文件从主机A传输到主机B。例如,通过P2P传输长视频。瞬时吞吐量是指主机B接收文件的速率(单位:bps)。许多应用程序,包括P2P文件共享系统,都在用户界面(UI)显示下载的瞬时吞吐量。如果文件由F位组成,并且传输需要T秒才能使主机B接收到所有位,那么文件传输的平均吞吐量为F/T bps。某些应用(例如Internet telephony)希望具有低延迟和始终高于某个阈值的瞬时吞吐量(如:一些Internet电话要求吞吐量超过24 kbps)。对于文件传输之类的应用,延迟并不重要,但是希望吞吐量尽可能高。

将数据从一个终端发送至另一个终端时,整条链路的传输速率是其中最慢的那条链路的速率,这条最慢的链路称为瓶颈链路(bottleneck link)。
对于多对客户端-服务器都需要经过同一条链路的情况,这条被共享的链路的速率理论上是均分给各对客户端-服务器的。如果这条链路在平分其速率后,其中的一些客户端-服务器在该链路上分到速率在各自的传输路由中最慢,那么这一段共享链路就成为它们的传输速率的瓶颈。
这里的讨论是比较理想化的。假如还有其它因素(比如延迟)影响传输速率,那么整条路由的传输速率还会更慢。

下面再介绍一些计算机网络的性能指标。

传播延迟×带宽,称为时延带宽积,也称链路长度(单位:bit),代表链路在任意时刻能够“容纳”的位数,即从发送端发出的但尚未到达接收端的位。

往返时间(Round-trip time,RTT)是双向交互一次所需的总时间。例如A向B发送数据时,每发送一定的量,就要等待B将“已接收”信息返回给A,才能继续向B发送数据。从A开始发送这部分数据,到A接收到从B发来的接收成功的消息,经过的时间便是往返时间。

利用率有信道利用率和网络利用率两种。信道利用率指出信道有多少时间是被利用的(有数据通过)。完全空闲的信道的利用率是零。网络利用率则是全网络的信道利用率的加权平均值。信道利用率并非越高越好:根据排队论,当信道的利用率增大时,该信道引起的时延会迅速增加。通信量很少时,网络产生的时延并不大。但在网络通信量不断增大的情况下,由于分组在网络结点进行处理时需要排队等候,网络引起的时延就会增大。设D_0, D分别代表空闲延迟和当前延迟,U代表利用率,那么在适当的假定条件下,利用率与延迟的关系可按照下式估计:
D=D_0/(1-U)
信道或网络的利用率过高会产生非常大的时延。因此一些拥有较大主干网的ISP通常控制信道利用率不超过50 %。如果超过了就要准备扩容,增大线路的带宽。

计算机网络还有一些重要的非性能特征,它们与前面介绍的性能指标有很大的关系:
·费用。网络的价格(包括设计和实现的费用)总是必须考虑的。一般说来,速率越高,价格越高。
·质量。网络的质量取决于网络中所有构件的质量,以及这些构件是怎样组成网络的。网络的质量影响到很多方面,如可靠性、管理的简易性,以及性能。但网络的性能与质量并不是一回事。有些速率很高的网络,运行一段时间后就出现了故障,无法再继续工作,说明其质量不好。高质量的网络往往价格也高。
·标准化。网络的硬件和软件的设计既可以按照通用的国际标准,也可以遵循特定的专用网络标准。最好采用国际标准的设计,这样可以得到更好的互操作性,更易于升级换代和维修,也更容易得到技术上的支持。
·可靠性。可靠性与网络的质量和性能都有密切关系。高速网络的可靠性不一定很差。但高速网络要可靠地运行,往往更加困难,所需的费用也会更高。
·可扩展性(scalability)和可升级性。在构造网络时就应当考虑到今后可能会需要扩展(规模扩大)和升级(性能和版本的提高)。网络的性能越高,其扩展费用往往也越高,难度也会相应增加。
·易于管理和维护。网络如果没有良好的管理和维护,就很难达到和保持所设计的性能。
1.5 协议层和它们的服务模型
分层思想是计算机科学与工程中的常见思想,它将复杂的问题转化为若干较小的局部问题,有利于问题的顺利解决。
分层结构使我们可以明确定义并讨论大型复杂系统中的特定部分。分层通过模块化(modularity)实现,这使更改该层服务的实现(implementation)变得更加容易:当更改其中一层和 / 或其实现时,系统的其余部分将保持不变。
对于不断更新的大型复杂系统,在不影响系统其它组件的情况下更改服务实现的能力是分层的重要优势。

网络协议是分成若干个层次的。协议层可以通过软件,硬件或软硬结合来实现。
应用层协议(例如HTTP和SMTP)几乎总是在终端系统的软件中实现;运输层协议也是如此。因为物理层和数据链路层负责处理通过特定链路的通信,所以它们通常在与给定链路关联的网卡(网络接口卡,network interface card,NIC,例如以太网或无线网卡)中实现。网络层常由硬件和软件混合实现。注意:协议通常分布在计算机网络的各个部件(如:终端、交换机)中,这些部件一同将协议实现。
协议分层具有概念和结构上的优势。如我们所见,分层提供了一种讨论系统组件的结构化方式。模块化使更新系统组件变得更加容易。但是,有些研究人员和网络工程师强烈反对分层。分层的一个潜在缺点是:一层的功能可能会不可避免地与另一层重复(duplicate),造成不必要的冗余(redundancy)。
第二个潜在的缺点是:如果一个层要正常工作,可能需要仅存在于另一层中的信息(例如时间戳(timestamp)),这些必要的信息必须由另一层传送过来。这可能违反了层与层之间尽量分离的目标。

这些多层协议很像栈这种常见的数据结构,合称协议栈(protocol stack)。Internet协议栈由五层组成:物理层、链路层、网络层、运输层和应用层。下图给出了Internet协议栈的五层模型和七层OSI参考模型(Open Systems Interconnection Reference Model,OSI/RM):

Internet协议栈并不是唯一的协议栈。1970年代后期,国际标准化组织(ISO)提议将计算机网络围绕七层组织,称为开放系统互连(Open Systems Interconnection,OSI)模型。当要成为Internet的协议的协议还处于起步阶段时,OSI模型就成形了,但它只是正在开发的许多不同协议套件(suite,/swi:t/)之一。原始OSI模型的发明者在创建它时可能没有考虑会有互联网这个东西。从1970年代后期开始,许多培训和大学课程都采用了ISO规定,并围绕七层模型组织了课程。由于它对网络教育的早期影响,七层模型在某些网络教科书和课程中仍然存在。

OSI试图达到一种理想境界,即全球计算机网络都遵循此标准,使计算机之间能够很方便地互连和交换数据。20世纪80年代,许多大公司和一些政府机构纷纷表示支持OSI。当时看来,似乎在不久的将来,全世界一定会按照OSI制定的标准来构造计算机网络。然而到了20世纪90年代初期,虽然整套的OSI国际标准都已经制定出来了,但基于TCP / IP的互联网已抢先在全球相当大的范围成功地运行了,与此同时却几乎找不到符合OSI标准的商用产品。因此人们得出这样的结论:OSI只获得了一些理论研究的成果,但在市场化方面则事与愿违地失败了。现今规模最大的、覆盖全球的、基于TCP / IP的互联网并未使用OSI标准。OSI失败的原因可以归纳为:
(1) OSI的专家们缺乏实际经验,他们在完成OSI标准时缺乏商业驱动力;
(2) OSI的协议实现起来过分复杂,而且运行效率很低;
(3) OSI标准的制定周期太长,因而使得按OSI标准生产的设备无法及时进入市场;
(4) OSI的层次划分不太合理,有些功能在多个层次中重复出现。
通常,网络技术和设备只有符合有关标准才能大范围地获得工程应用,但这个例子却反过来了。最广泛应用的不是法律上的国际标准OSI而是非国际标准TCP / IP。这样,TCP / IP常被称为事实上的国际标准。从这种意义上说,能够占领市场的就是标准。在过去,制定标准的组织中往往以专家、学者为主。而现在,许多公司都纷纷加入各种标准化组织,使得技术标准具有浓厚的商业气息。一个新标准的技术水平不一定是最先进的,而往往有市场背景的影响。

TCP / IP是一个四层的体系结构,它包含应用层、运输层、网际层和网络接口层(用网际层这个名字是强调这一层是为了解决不同网络的互连问题)。不过从实质上讲,TCP / IP只有最上面的三层,因为最下面的网络接口层并没有什么具体内容。网络接口层不定义任何协议,但是它支持所有标准和专门协议。
在学习计算机网络的原理时,往往采取折中的办法,即综合OSI和TCP / IP的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。有时为了方便,也可把最底下两层称为网络接口层。

现在结合互联网的情况,自上而下地、非常简要地介绍一下各层的主要功能。实际上,只有认真学习完本书各章的协议后,才能真正弄清各层的作用。

网络应用和应用层协议都位于应用层(Application-layer)。应用层的任务是:通过进程通信来完成特定的网络应用。Internet的应用层包括许多协议,比如HTTP(用于Web文档请求和传输)、SMTP(用于邮件传输)和FTP(用于文件传输)。域名系统(domain name system,DNS)用于将诸如www.ietf.org之类的域名转换成IP地址。
应用层协议分布在多个终端系统上,一个终端的应用程序(进程)使用该协议与另一终端中的应用程序交换信息包。应用层的此种信息包称为消息,也称报文(message)。

互联网的运输层(transport layer,有的资料写作传输层)的任务是:负责向两台主机中进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。所谓“通用的”,是指并不针对某个特定网络应用,而是多种应用可以使用同一个运输层服务。
在Internet中,有两种传输协议,即传输控制协议(transmission control protocol,TCP)和用户数据报协议(user datagram protocol,UDP),都可以传输应用层消息。TCP为应用程序提供面向连接的、可靠的数据传输服务,保证将应用层消息传递到目标,也提供流控制(收发双方的速率匹配)。TCP还可以将长消息分成更短的段,并提供拥塞控制机制,以便当网络拥塞时限制源传输速率。UDP为其应用程序提供无连接服务。这是一项简单的服务,虽然能尽最大努力(best-effort)进行传输,但不提供可靠性、流量控制和拥塞控制。TCP和UDP的传输单位分别称为报文段(segment)和用户数据报。

互联网的网络层(Network-layer)负责将称为数据报(datagram)的网络层数据包(分组)在主机之间传输。源主机中的Internet运输层协议(TCP或UDP)将报文段(用户数据报)和目标地址传递到网络层。然后,网络层将它们传送到目标主机中的运输层。网络层的另一个任务是:选择合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目标主机。总之,网络层负责单个分组到达主机,传输层负责整份报文到达进程。
Internet的网络层包括著名的Internet协议(IP),它定义了数据报中的字段及终端系统和路由器在这些字段上的动作。IP只有一个,具有网络层的所有Internet组件都必须运行IP。互联网的网络层还包含路由协议,这些路由协议确定数据报在源和目的地之间的路由。互联网有许多路由协议。在各个网络内,网络管理员可以运行所需的任何路由协议。尽管网络层同时包含IP和众多路由协议,但通常将其简称为IP层,反映了IP作为将Internet绑定在一起的粘合剂的事实。

互联网的网络层通过源和目标之间的一系列路由器来传输数据报。两台主机之间的数据传输,总是在一段一段的链路上传送的。为了在相邻结点之间传输数据,网络层依赖于链路层(link-layer)的服务。特别地,在每个结点处,网络层将数据报向下传递到链路层,链路层将数据报沿着路由传递到下一个结点。在下一个结点,链路层将数据报传递到网络层。
链路层提供的服务取决于链路上使用的链路层协议。例如,某些链路层协议提供了从传输结点、链路到接收结点的可靠传递。注意,此可靠传递服务与TCP的可靠传递服务不同,后者提供了从一个终端到另一终端的可靠传递。链路层协议包括以太网,WiFi和电缆访问网络的DOCSIS等。由于数据报通常需要遍历数条链路从源行进到目的地,因此数据报可能被其路径上不同链路的不同协议来处理。例如,数据报可以由一条链路上的以太网处理,而由下一条链路上的PPP(见第6章)处理。网络层将从每个不同的链路层协议接收不同的服务。链路层数据包称为帧(frame)。

链路层的工作是将整个帧从一个网络元素移动到相邻的网络元素,而物理层(physical-layer)的工作是将帧中的各个比特从一个结点移动到下一结点。该层中的协议取决于链路和传输介质(例如双绞铜线、单模光纤)。以太网具有许多物理层协议:一个用于双绞铜线,另一个用于同轴电缆,另一个用于光纤,等等。在不同的协议下,一个比特通常以不同的方式在链接上移动。
物理层要考虑用多大的电压代表“1”或“0”,以及接收方如何识别出发送方所发送的比特。物理层还要确定连接电缆的插头应当有多少根引脚以及各引脚应如何连接。当然,解释比特代表的意思,就不是物理层的任务。请注意,传递信息所利用的一些物理媒体,如双绞线、同轴电缆、光缆、无线信道等,并不在物理层协议之内,而是在物理层协议之下。因此也有人把物理层下面的物理媒体当作第0层。

OSI参考模型的七层是:应用层,表示层(presentation layer),会话层(session layer),运输层,网络层,数据链路层和物理层。这些层中的五个层的功能与Internet对应层大致相同。不同的便是两个附加层:表示层和会话层。表示层的作用是:提供允许通信应用程序解释所交换数据含义的服务。这些服务包括数据压缩、加密及数据描述(这使应用程序不必担心表示 / 存储数据的内部格式不同带来的麻烦)。会话层提供数据交换的定界(delimiting)和同步,包括建立检查点(checkpoint)和恢复方案的手段。
Internet缺少OSI/RM中的两层。这些层提供的服务是否不重要?如果应用程序需要这些服务怎么办?互联网对这两个问题给出了相同的答案:开发人员决定这些服务是否重要。如是,就将它们内置到应用程序中。

上图显示了数据在发送端的协议栈、中间的链路层交换机和路由器的协议栈中向下移动,然后在接收端的协议栈中向上移动的物理路径。路由器和链路层交换机都是分组交换机。与终端系统相似,路由器和链路层交换机将其网络硬件和软件组织为层次结构,但并未实现协议栈中的所有层,而通常仅实现底层。如图,链路层交换机实现了第1层和第2层;路由器实现第1到第3层。这意味着Internet路由器能够实现IP(三层协议),而链路层交换机不行。链路层交换机不识别IP地址,但能识别二层地址,如以太网地址(见第六章)。注意,主机实现了所有五层协议。这与Internet体系结构将其大部分复杂性置于网络边缘的观点是一致的。
上图还说明了封装(encapsulation)的重要概念。在发送主机上,应用层报文M被传递到运输层。在最简单的情况下,运输层将接收它并附加将由接收方运输层使用的其它信息(运输层首部信息(transport-layer header information)Ht)。应用层报文和运输层首部一起构成运输层报文段(transport-layer segment)。因此,运输层段封装了应用层消息。添加的内容可能包括:允许接收方运输层将消息传递到适当的应用程序的相关信息,以及错误检测位。然后,运输层将该段传递到网络层,网络层添加网络层首部信息Hn,例如源和目标端系统地址,从而创建网络层数据报(network-layer datagram)。然后数据报传递到链路层,链路层将添加自己的链路层首部信息Hl并创建链路层帧(link-layer frame)。因此在每一层,数据包都有两种类型的字段:首部字段和有效载荷(payload)字段。有效负载通常是上一层的数据包。除了最顶层和最底层,每一层都需要向上一层提供服务,并使用下层提供的服务。
实际的封装的过程可能更复杂。例如,长报文可被划分为多个运输层段(它们本身可能各自被划分为多份网络层数据报)。然后,必须在接收端从数据报中重建此段。
总之,计算机网络的多层通信的基本特点可以这样概括:两个对等层通信时,发送方发送的数据需要依次经过更低层次,数据到达接收方之前要反过来依次通过更高层次到达对等层。数据从上到下层层封装,从下到上层层解封。
OSI参考模型把对等层次之间传送的数据单位称为该层的协议数据单元PDU(Protocol Data Unit)。这个名词现已被许多非OSI标准采用。OSI把层与层之间交换的数据的单位称为服务数据单元SDU(Service Data Unit)。SDU可以与PDU不一样。例如,可以是多个SDU合成为一个PDU,也可以是一个SDU划分为几个PDU。同一系统相邻两层的实体进行交互的地方,称为服务访问点SAP(Service Access Point)。SAP是一个抽象的概念,它实际上就是一个逻辑接口。

计算机网络的协议还有一个很重要的特点,就是协议必须把所有不利的条件事先都估计到,而不能假定一切都是正常的和非常理想的。两个朋友在电话中约好,下午3时在某公园门口碰头,“不见不散”,这就是一个很不科学的协议,因为任何一方临时有急事来不了而又无法通知对方时(如对方的固话或手机都无法接通),另一方按照协议就必须永远等待下去。因此,判断计算机网络协议是否正确,不能只看在正常情况下是否正确,而且还必须非常仔细地检查这个协议能否应付各种异常情况。

应当指出,技术的发展并不总是严格遵循分层概念。实际上现在的互联网使用的TCP / IP体系结构有时已经演变成为下图所示的那样,即某些应用程序可以直接使用IP层,甚至直接使用最下面的网络接口层。网络接口层有时也称为子网层。但我们不采用“子网层”这种容易弄混淆的表示方法,因为这里的“子网”是指一些局域网和某些广域网(如ATM网),但从IP层来看,这些网络属于数据链路层,也就是属于网络接口层。后续讲到IP地址时,将会讲到“子网划分”。但子网划分中的“子网”和图中“子网层”中的“子网”是完全不同的概念。

1.6 网络攻击
我们连接到Internet,因为我们想通过Internet收发数据,包括Instagram帖子,Internet搜索结果,流音乐,视频电话会议,流电影等。但不幸的是,伴随着所有这些,恶意软件(malware)也可以进入并感染我们的设备。一旦恶意软件感染设备,它就可以行不轨之事,包括删除文件和安装收集个人信息(例如社会安全号码、密码、商业秘密、键盘记录和私人消息)的间谍软件,然后将其发送给坏人。受感染主机也可能加入了多个受感染设备构成的网络——僵尸网络(botnet),坏人控制并利用这些网络来针对目标主机进行攻击。
如今,大多数恶意软件都是自我复制(self-replicating)的:一旦感染了一台主机,它便从该主机尝试通过Internet进入其它主机,再从新感染的主机尝试进入更多主机。于是恶意软件的副本数指数增长。恶意软件可以病毒或蠕虫的形式传播。病毒(virus)需要某种形式的用户交互才能感染用户设备,例如包含恶意可执行代码的电子邮件附件。如果用户接收并打开此类附件,则运行了恶意软件。此类病毒通常能自我复制:一旦执行,该病毒可能会发送带有相同恶意附件的相同消息给其它用户,如通讯录中的人。蠕虫(worm)是无需任何明确用户交互就可进入设备的恶意软件。例如,用户可能正在运行攻击者可以向其发送恶意软件的,易受攻击的网络应用程序。某些时候,没有任何用户干预时,应用程序也可能接受来自Internet的恶意软件并运行,从而形成蠕虫。成功感染的蠕虫会扫描Internet,搜索运行同一易受攻击的网络应用程序的其它主机。发现这样的主机后,它将自身的副本发送给那些主机。如今,恶意软件无处不在,且防御成本很高。

另一类广泛的安全威胁被称为拒绝服务(denial-of-service,DoS)攻击。顾名思义,DoS攻击使合法用户无法使用网络,主机或其它基础架构。Web服务器,邮件服务器,DNS服务器(见第2章)和机构网络都可能受到DoS攻击。互联网DoS攻击非常普遍。Digital Attack Map网站可视化了全球范围的主要DoS攻击。大多数Internet DoS攻击属于以下三类之一:
漏洞攻击(vulnerability attack)。向目标主机上运行的易受攻击的应用程序或操作系统发送一些精心设计的消息。如果将合适的数据包序列成功发送,则服务可能会停止,主机可能会崩溃。
带宽洪水(bandwidth flooding)。攻击者向目标主机发送大量数据包,使其访问链接被阻塞,从而阻止合法数据包到达服务器。
连接洪水(connection flooding)。攻击者在目标主机上建立了大量的半开或全开TCP连接(见第3章)。主机会不断处理这些虚假连接,从而停止接受合法的连接。

设服务器的访问速率为R bps,则攻击者至少需要以R bps的速率发送流量以造成破坏。如果R很大,则单个攻击源可能无法生成足够的流量危害服务器。此外,如果所有流量来自单个源,则路由器可能检测到攻击并在流量靠近服务器之前阻止该源的所有流量。分布式DoS(DDoS)攻击中,攻击者控制多个源一同对目标爆发流量。对于此方法,所有受控源之间需要的总通信速率大约为R。利用僵尸网络的大量主机进行的DDoS攻击已很普遍,它比单主机DoS攻击更难检测和防御。

尽管无处不在的Internet访问非常方便,并且为移动用户提供了许多新的应用,但它也存在重大的安全漏洞——通过将无源接收器放在无线发射器附近,接收器可以获得每个发送数据包的副本。记录每个经过的数据包的无源接收器称为数据包嗅探器(packet sniffer)。
嗅探器也可以部署于有线环境。在有线广播环境中,就像在许多以太网LAN中一样,数据包嗅探器可以获取通过LAN发送的广播数据包的副本。电缆访问技术还会广播数据包,因此很容易被嗅探。此外,获得对机构的接入路由器或Internet接入链接的访问权的坏人可能会植入嗅探器,以复制每个数据包,之后再设法将数据还原并离线(offline)分析敏感信息。
嗅探包软件可以在各种网站上免费获得,也可以作为商业产品使用。教授网络课程的教授会分配实验练习,其中涉及编写或使用嗅探器和应用层数据重建程序。Wireshark正是这样的例子。
数据包嗅探器是被动的:它们不会主动将数据包注入信道中,所以很难检测。因此,当我们将数据包发送到无线通道时,我们必须接受数据包被记录的可能性。针对数据包嗅探的一种最佳防御措施是加密。

创建一个具有任意源地址、数据包内容和目标地址的数据包,然后将手工制作的这个数据包传输到Internet,是非常容易的。毫无戒心的接收者(例如路由器)接收到这样的数据包,会将(假)源地址视为真,然后执行嵌入在数据包内容中的某些命令(例如修改其转发表)。通过错误的源地址将数据包注入Internet的能力称为IP欺骗(IP spoofing),但这只是一个用户伪装成另一个用户的许多方式之一。
要解决此问题,我们将需要端点身份验证(end-point authentication)——确定数据是否来自期望的来源的一种机制。

互联网为何会迅速变得如此不安全?本质上,互联网最初是按照这样的方式设计的:基于“连接到透明网络的一组相互信任的用户”的模型。这种模型(根据定义)没有考虑安全。最初的Internet架构的许多方面深刻反映了这种相互信任。例如,一个用户将数据包发送给任何其它用户是默认功能,而不是需要请求 / 授权的功能,并且没有默认的身份验证。
当今的Internet基本不涉及“相互信任的用户”。但是,用户在不彼此信任时可能仍需要通信(可以匿名或通过第三方间接通信),并且也许不信任用于通信的硬件、软件,疑心重重的用户们甚至连空气都怀疑。我们现在面临许多与安全相关的挑战,应当寻求防御措施,以防嗅探、端点伪装、中间人攻击、DDoS攻击和恶意软件等。记住,相互信任的用户通信是例外,不是规定。
欢迎来到现代计算机网络世界!

猜你喜欢

转载自blog.csdn.net/COFACTOR/article/details/108744095