因特网是一个世界范围内的计算机网络,即它是一个互联了遍及全世界数十亿计算设备的网络。在不久前,这些计算设备多数是传统的桌面PC、Linux工作站以及所谓的服务器。然而,越来越多的非传统的因特网“物品”正在与因特网相连。的确,在许多非传统设备连接到因特网的情况下,计算机网络这个术语有些过时了。用因特网术语来说,所有这些设备都称为主机或端系统。据估计,到2015年大约有50亿台设备与因特网连接,而到2020年该数字将达到250亿。2015年,全世界已有超过32亿因特网用户,接近世界人口的40%。
端系统通过通信链路和分组交换机连接到一起。其中,通信链路由不同类型的物理媒体组成。这些物理媒体包括同轴电缆、铜线、光纤和无线电频谱。不同的链路能够以不同的速率传输数据,链路的传输数据以比特/秒度量。当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节。由此形成的信息包用计算机网络的术语称为分组。这些分组通过网络发送到目的端系统,在那里转配成初始数据。
分组交换机从它的一条入通信链路接收到达的分组,并从它的一条出通信链路转发该分组。市面上流行着各种类型、各具特色的分组交换机,但在当今的因特网中,两种最著名的类型是路由器和链路层交换机。这两种类型的交换机朝着最终目的地转发分组。链路层交换机通常用于接入网中,而路由器通常用于网络核心中。从发送端系统到接收端系统,一个分组所经历的一系列通信链路和分组交换机称为通过该网络的路径。思科公司估计到2016年年底全球年度IP流量将超过泽字节,到2019年超过2泽字节。
由于传送分组分组交换网络在许多方面类似于承载车辆的运输网络,该网络包括了高速公路、公路和交叉口。例如,考虑下列情况,一个工厂需要将大量货物搬运到数千公里以外的某个目的地仓库。在工厂中,货物要分开并装上卡车车队。然后,每辆卡车独立地通过高速公路、公路和立交桥组成的网络向仓库运输货物。在目的地仓库,卸下这些货物,并且与一起装载的同一批货物的其余部分堆在一起。因此,在许多方面,分组类似于卡车,通信链路类似于高速公路和公路,分组交换类似于交叉口,而端系统类似于建筑物。就像卡车选取运输网络的一条路径前行一样,分组则选取计算机网络的一条路径前行。
端系统通过因特网服务提供商接入因特网,包括如本地电缆和电话公司那样的住宅ISP、公司ISP、大学ISP,在机场、旅馆、咖啡店和其他公共场所提供WIFI接入的ISP,以及为智能手机和其他设备提供移动接入的蜂窝数据ISP。每个ISP自身就是一个由多台分组交换机和多段通信链路组成的网络。各ISP为端系统提供了各种不同类型的网络接入,包括如线缆调制解调器或DSL那样的住宅宽带接入、高速局域网接入和移动无线接入。ISP也为内容提供者提供因特网接入服务,将Web站点和视频服务器直接连入因特网。因特网就是将端系统彼此互联,因此为端系统提供互联的ISP也必须互联。较低层的ISP通过***的、国际的较高层ISP互联起来。较高层ISP则则是通过高速光纤链路互联的高速路由器组成的。无论是较高层还是较低层ISP网络,他们每个都是独立管理的,运行着IP协议,遵从一定的命名和地址规则。
端系统、分组交换机和其他因特网部件都要运行一系列协议,这些协议控制因特网中信息的接收和发送。TCP和IP协议是因特网中两个最为重要的协议。IP协议定义了在路由器和端系统之间发送和接收的分组格式。因特网的主要协议统称为TCP/IP。
鉴于因特网协议的重要性,每个人就各个协议及其作用取得一致认识是很重要的,这样人们就能够创造协同工作的系统和产品。这正是标准发挥作用的地方。
因特网标准是由因特网工程任务组研发。IETF的标准文档称为请求评论。RFC最初只是普通的请求评论,目的是解决因特网先驱者们面临的网络和协议问题。RFC文档往往是技术性很强并相当详细的。他们定义了TCP、IP、HTTP、SMTP等协议。目前已经有将近7000个RFC。其他组织也在指定用于网络组件的标准,最引人注目的是网络链路的标准。例如,IEEE 802 LAN/MAN标准化委员会【IEEE 802 2016】制定了以太网和无线WIFI的标准。
服务描述前面的讨论已经辨识了构成因特网的许多部件。但是我们也能从一个完全不同的角度,即从为应用程序提供服务的基础设施的角度来描述因特网。除了诸如电子邮件和Web冲浪等传统应用外,因特网还包括移动智能手机和平板电脑应用程序,其中包括即时讯息、与实时道路流量信息的映射、来自云的音乐流、电影和电视流、在线社交网络、视频会议、多人游戏以及基于位置的推荐系统。因为这些应用程序涉及多个相互交换数据的端系统,故它们被称为分布式应用程序。重要的是,因特网应用程序在端系统上,即它们并不运行在网络核心中的分组交换机中。尽管分组交换机能够加速端系统之间的数据交换,但它们并不在意作为数据的源或宿的应用程序。
我们稍深入探讨一下为应用程序提供服务的基础设施的含义。为此,假定你对某种分布式因特网应用有一个激动人心的新想法,它可能大大地造福于人类,或者它可能直接使你名利双收。你将如何把这种想法转化成一个实际的因特网应用呢?因为应用程序运行在端系统上,所以你需要编写运行在端系统的一些软件。例如,你可能用C、Java或Python编写软件。此时,因为你研发一种分布式因特网应用程序,运行在不同端系统的软件将需要互相发送数据。此时我们碰到了一个核心问题,这个问题导致了另一种描述因特网的方法,即将因特网描述为应用程序的平台。运行在端系统上的应用程序怎样才能指令因特网向运行在另一个端系统上的软件发送数据呢?
与因特网相连的端系统提供了一个套接字接口,改接口规定了运行在另一个端系统上的程序请求因特网基础设施向运行在另一个端系统的特定目的地程序交付数据的方式。因特网套接字接口是一套发送程序必须遵循的规则集合,因此因特网能够将数据交付给目的地。此时,我们做一个简单的类比。假定Alice使用邮政服务向Bob发一封信。当然,Alice不能只是写了这封信然后把信丢出窗外。相反,邮政服务要求Alice将信放入一个信封中;在信封的中间写上Bob的全名、地址和邮政编码;封上信封;在信封的右上角贴上邮票;最后将该信封丢进邮局的一个邮政服务信箱中。因此,该邮政服务有自己的“邮政接口服务”或一套规则,这是Alice必须遵循的,这样邮政服务才能将她的信件交给Bob。同理,因特网也有一个发送数据的程序必须遵循套接字接口,使因特网向接收数据的程序交付数据。
当然,邮政服务向顾客提供了多种服务,如特快专递、挂号、普通服务等。同样,因特网向应用程序提供了多种服务。当你研发一种因特网应用程序时,也必须为你的应用程序选择其中的 一种因特网服务。
我们已经给出了因特网的两种描述方法:一种是根据它的硬件和软件组件来描述,另一种是基础设施像向分布式应用程序提供的服务来描述。
什么是协议?1、人类活动的类比
也许理解计算机网络协议这一概念的一个最容易的办法是,先与某些人类活动进行类比,因为我们人类无时无刻不止在执行协议。考虑到当你想要向某人询问时间将要怎么做。人类协议要求一方首先进行问候,然后开始与另一个人的通信。对“你好”的典型响应是返回一个“你好”报文。此人用一个热情的“你好进行响应”,隐含着一种指示,表明能够继续向那人询问时间了。对最初的“你好”的不同响应也许表明了一个勉强的或不能进行的通信。在此情况下,按照人类协议,发话者就不能询问时间了。有时,问的问题根本得不到任何回答,在此情况下,按照人类协议,发话者通常会放弃向这个人询问时间。注意在我们人类协议中,有我们发送的特定报文,也有我们根据接收到的应答报文或其他时间采取的动作。显然,发送和接收的报文,以及这些报文发送和接收或其他事件出现时所采取的动作,这些在一个人类协议中起到了核心作用。如果人们使用不同的协议,这些协议就不能交互,因而不能完成有用的工作。在网络中这个道理同样成立。即为了完成一项工作,要求两个通信实体运行相同的协议。
我们再考虑第二个人类类比的例子。假定你正在大学课堂里上课。教师正在唠唠叨叨地讲述协议,而你困惑不解。这名教师停下来问:“同学们你们有什么问题吗?”你举起了手。这位教师面带微笑地示意你说:“请讲......”接着你就问了问题。教师听取了你的问题并加以回答。我们再一次看到了报文的发送和接收,以及这些报文发送和接收时所采取的一系列约定俗成的动作,这些是这个“提问与回答”协议的关键所在。
2、网络协议
网络协议类似于人类协议,除了交换报文和采取动作的实体是某些设备的硬件或软件组件。在因特网中,涉及两个或多个远程通信实体的所有活动都受协议的制约。例如,在两台物理上连接的计算机中,硬件实现的协议控制了在两块网络接口卡间的“线上”得比特流;在端系统中,拥塞控制协议控制了在发送方和接收方之间传输的分组发送的速率;路由器中的协议决定了分组从源到目的地的路径。在因特网中协议运行无处不在。
以大家可能熟悉的一个计算机网络协议为例,考虑当你向一个Web服务器发出请求时所发生的情况。首先,你的计算机向该Web服务器发送一条连接请求报文,并等待回答。该Web服务器将最终能接收到连接请求报文,并返回一条连接响应报文。得知请求该Web文档正常以后,计算机则在一条GET报文中发送要从这台Web服务器上取回的网页名字。最后,Web服务器向计算机返回该Web网页。
以上述的人类活动和网络例子中可见,报文的交换以及发送和接收这些报文时所采取的动作是定义一个协议的关键元素:
协议定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送和接收一条报文或其他事件所采取的动作。
因特网广泛地使用了协议。不同的协议用于完成不同的通信任务。某些协议简单而直接了当,而某些协议则复杂且晦涩难懂。掌握计算机网络领域知识的过程就是理解网络协议的构成、原理和工作方式的过程。