分享

第 1 章 TCP/IP 概述

 王霄 2009-12-16
本章先介绍了计算机网络的基本概念, 以及 ISO/OSI 七层通信模型及各层的基本功能。然后着重介绍了 TCP/IP 协议的体系结构与分层工作原理,并对 TCP/IP 的常用概念进行了分类说明。最后介绍了不在 TCP/IP 体系结构中但与 TCP/IP 关系密切的地址解析协议 ARP 。
1.1 ISO/OSI 的七层通信模型

   信息化社会的基础是计算机和互连计算机的信息网络,信息网络已成为十分重要的基础设施。计算机网络源于计算机与通信技术的结合,始于 20 世纪 50 年代,在近 20 年得到迅猛发展。特别是在最近 10 年来,随着 TCP/IP 协议的广泛应用和 Internet 的飞速发展,计算机网络已经深入千家万户, TCP/IP 协议也已经成为计算机网络事实上的协议标准。但是,要介绍计算机网络,必须先了解国际标准化组织( International Organization for Standardization, ISO )在 80 年代初制定的“开放系统互连参考模型”( Open System Interconnection Reference Model, OSI ),该模型在规范计算机网络体系结构方面起到了不可替代的作用。

1.1.1 计算机网络概念

   计算机网络是由地理上分散的、具有独立功能的多台计算机,通过通信设备和线路互相连接起来,在配有相应的网络软件的情况下,实现计算机之间通信和资源共享的系统。计算机网络按其所跨越的地理范围可分为局域网 LAN ( Local Area Network )和广域网 WAN ( Wide Area Network )。

1. 局域网

   局域网一般是在一栋或相邻的几栋大楼内,或在一个校园、工厂、企业范围内,其地理范围通常不超过 10 公里 ,属于一个部门或一个单位组建的专用网络。局域网常常被应用于连接单位内部的计算机资源,以便共享资源(如打印机和数据库)和交换信息。局域网的主要特点为:

  • 较小的地域范围:仅用于办公室、机关、工厂、学校等内部联网,其范围没有严格的定义,但一般认为距离不超过 10 公里 ;
  • 高传输速率和低误码率:现在的局域网的传输速率一般为 10-1000Mbps ,误码率一般在 10 -8 ~10 -11 之间;
  • 专用性:局域网一般为一个单位所建,在单位和部门内部控制管理和使用,通常采用同轴电缆、双绞线等建立单位内部专用线,随着千兆网的广泛使用,光线也开始成为局域网的主要连线;
  • 注重信息共享:局域网通常是单位内部为解决资源共享而建立,因此非常注重信息的共享(相对应的广域网多是运营商所建,其注重的是信息传输的准确性与安全性)。

   局域网的典型代表是以太网( Ethernet ), Ethernet 是最早的局域网,也是目前最流行的局域网。交换式、快速型以太网技术使以太网保持着旺盛的生命力,现在的以太网发展成熟,都是基于 IEEE 802.3 系列标准。当前比较流行的以太网是 10BASE-T 、 100BASE-T 、 1000BASE-T 和 1000BASE-LX/SX 。

2. 广域网

   广域网是一种跨越大的地域的网络,通常覆盖一个地区、一个国家乃至全世界。广域网通常是为连接不同的局部网络而建立的,因此多采用租用公用线路和专用线路的方式,如租用电话线、光纤、卫星等。

   当前流行的广域网系统是 X.25 分组交换网、帧中继( Frame Relay )网、窄带综合业务数字网 N-ISDN ( Narrowband Integrated Services Digital Network )、宽带 ISDN ——异步传输模式 ATM ( Asynchronous Transfer Mode )网,但是,最近的宽带 IP 网友异军突起之势。

   广域网的典型代表是 ARPANET ,它是 Internet 的前身,是第一个计算机互联的包交换网。 ARPANET 在 70 年代中期开始出现, 1980 年开始采用新的 TCP/IP 协议, 1983 年要求所有连接到该网的计算机都是用 TCP/IP 协议,正式成为 Internet 。现在, Internet 已经覆盖到全球,几乎所有的国家和地区都连入了 Internet 。

1.1.2 OSI 七层模型

   现代计算机网络的设计都是按照高度结构化方式进行的, OSI 七层参考模型非常明确地表示了这一点。结构化设计的最为重要的手段就是分层。

1. 网络协议与分层

   计算机网络是为了实现计算机之间的通信,任何双方要成功地进行通信,必须遵守一定的信息交换规则和约定,这些信息交换规则和约定就称为通信协议( protocol )。计算机上的网络接口卡、通信软件、通信设备都是遵循一定的协议设计的,必须符合一定的协议规范。

   为了减少协议设计的复杂性,大多数网络都按层或级的方式来组织,每一层都建立在它的下层之上。不同的网络在分层数量和各层的名字、内容与功能上都不尽相同,然而,在所有的网络中,每一层的目的都是向它的上一层提供一定的服务,而把这种服务是如何实现的细节对上层加以屏蔽。

   层按功能来划分,每一层都有特定的功能,它一方面利用下一层所提供的功能,另一方面又为其上一层提供服务。通信双方在相同层之间进行通话,通话规则和协定的整体就是该层的协议。每一层都有一个或多个协议,几个层合成一个协议栈( protocol stack )。协议的分层模型便于协议软件按模块方式进行设计和实现,这样每层协议的设计、修改、实现和测试都可以独立进行,从而减少复杂性。

   不同机器内包含相同协议层的实体叫做对等进程,对等进程是利用协议进行通信的主体。相邻层之间通过接口来定义相互关系,接口定义下层向上层提供的原语操作和服务。层和协议的集合叫做网络体系结构。

2. OSI 参考模型

OSI 模型有七层,其分层原则如下:

  • 根据不同层次的抽象分层;
  • 每一层应当实现一个定义明确的功能;
  • 每一层功能的选择应当有助于制定网络协议的国际标准;
  • 各层边界的选择应尽量减少跨过接口的通信量;
  • 层数应足够多,以避免不同的功能混杂在同一层中;但也不能太多,否则体系结构会过于庞大。

根据这些原则, ISO 在 1983 年推出的 OSI 参考模型如图 1-1 所示。

图 1-1 OSI 七层参考模型

   值得注意的是, OSI 参考模型本身并不是一个完整的网络体系结构,因为它并未确切地描述用于各层的协议和服务,它仅仅告诉我们每层应该做什么。不过, ISO 已经为各层制定了标准,但它们并不是参考模型的一部分,而是作为独立的国际标准公布的。

1.1.3 OSI 各层简介

   OSI 七层模型是指从物理层到应用层这七层,它不涉及通信的物理介质。随着网络技术的发展,特别是局域网的发展,后来对 OSI 七层模型进行了改进。修订之一就是非正式地增加了一些子层和新层,如增加了第 0 层,使之覆盖了象电缆连接器和光纤这样的硬件细节。本节我们只对 OSI 模型的七层的功能作简单描述。

1. 物理层

   物理层( physical layer )是 OSI 模型的最低层,它建立在物理通信介质的基础上,作为系统和通信介质的接口,用来实现数据链路实体间透明的比特流传输。在设计上必须保证一方发送出二进制“ 1 ”时,另一方收到的也是“ 1 ”而不是“ 0 ”。

   物理层是 OSI 中唯一设计通信介质的一层,它提供与通信介质的连接,描述这种连接的机械、电气、功能和规程特性,以建 立、维护和释放数据链路实体之间的物理连接。物理层向上层提供位信息的正确传送。

   物理层协议定义了硬件接口的一系列标准,典型地如用多少伏特电压表示“ 1 ”,多少伏特表示“ 0 ”;一个比特持续多少时间;传输是双向的还是单向的;最初的连接如何建立和完成通信后连接如何终止;一次通信中发送方和接收方如何应答;设备之间连接件的尺寸和接头数;每根线的用途等。

2. 数据链路层

   数据链路层( data link layer )的主要任务是加强物理层传输原始比特的功能,使之对网络层显现为一条无错链路。它在相邻网络实体之间建立、维持和释放数据链路连接,并传输数据链路数据单元(帧, frame )。它是将位收集起来,按包处理的第一个层次,它完成发送包前的最后封装,及对到达包进行首次检视。其主要功能为:

  • 数据链路连接的建立与释放:在每次通信前后,双方相互联系以确认一次通信的开始和结束。数据链路层一般提供无应答无连接服务、有应答无连接服务和面向连接的服务等三种类型服务。
  • 数据链路数据单元的构成:在上层交付的数据的基础上加入数据链路协议控制信息,形成数据链路协议数据单元。
  • 数据链路连接的分裂:当数据量很大时,为提高传输速率和效率,将原来在一条物理链路上传输的数据改用多条物理链路来传输(与多路复用相反)。
  • 定界与同步:从物理连接上传输数的比特流中,识别出数据链路数据单元的开始和结束,以及识别出其中的每个字段,以便实现正确的接收和控制。
  • 顺序和流量控制:用以保证发送方发送的数据单元能以相同的顺序传输到接收方,并保持发送速率与接收速率的匹配。
  • 差错的检测与恢复:检测出传输、格式和操作等错误,并对错误进行恢复,如不能恢复则向相关网络实体报告。

3. 网络层

   网络层( network layer )关系到子网的运行控制,其关键问题之一是确定分组从源端到目的端如何选择路由。本层维护路由表,并确定哪一条路由是最快捷的,及何时使用替代路由。路由既可以选用网络中固定的静态路由表,几乎保持不变,也可以在每一次会话开始时决定(如通过终端协商决定),还可以根据当前网络的负载状况,高度灵活地为每一个分组决定路由。

   网络层的另一重要功能是传输和流量控制,它在子网中同时出现过多的分组时,提供有效的流量控制服务来控制网络连接上传输的分组,以免发生信息“堵塞”或“拥挤”现象。

   网络层提供两种类型的网络服务,即无连接的服务(数据报服务)和面向连接的服务(虚电路服务)。网络层使较高层与连接系统所用的数据传输和交换技术相独立。

   IP 协议工作在本层,它提供“无连接的”或“数据报”服务。

4. 传输层

   传输层( transport layer )的基本功能是从会话层接收数据,在必要时把它们划分成较小的单元传递给网络层,并确保到达对方的各段信息准确无误。而且,这些任务都必须高效率地完成。

   传输层是在网络层的基础上再增添一层软件,使之能屏蔽掉各类通信子网的差异,相用户进程提供一个能满足其要求的服务,其具有一个不变的通用接口,使用户进程只需了解该接口,便可方便地在网络上使用网络资源并进行通信。

   通常情况下,会话层每请求建立一个传输连接,传输层就为其创建一个独立的网络连接。如果传输连接需要较高的信息吞吐量,传输层也可以为之创建多个网络连接,让数据在这些网络连接上分流,以提高吞吐量。另一方面,如果创建或维持一个网络连接不合算,传输层可以将几个传输连接复用到一个网络连接上,以降低费用。在任何情况下,都要求传输层能使多路复用对会话层透明。

   传输层是真正的从源到目标“端到端”的层,也就是说,源端机上的某程序,利用报文头和控制报文与目标机上的类似程序进行对话。在传输层以下的各项层中,协议是每台机器和它直接相邻的机器间的协议,而不是最终的源端机和目标机之间的协议,在他们中间可能还有多个路由器。图 1-1 说明了这种区别, 1 层 -3 层是链接起来的, 4 层 -7 层是端到端的。

   TCP 协议工作在本层,它提供可靠的基于连接的服务。它在两个端点之间提供可靠的数据传送,并提供端到端的差错恢复与流控。

5. 会话层

   会话层( session layer )允许不同机器上的用户之间建立会话关系,即正式的连接。这种正式的连接使得信息的收发具有高可靠性。会话层的目的就是有效地组织和同步进行合作的会话服务用户之间的对话,并对它们之间的数据交换进行管理。

   会话层服务之一是管理对话,它允许信息同时双向传输,或任意时刻只能单向传输。约属于后者,则类似于单线铁路,会话层将记录此时该轮到哪一方了。一种与会话有关的服务是令牌管理( token management ),令牌可以在会话双方之间交换,只有持有令牌的一方可以执行某种关键操作。

   另一种会话服务是同步( synchronization )。同步是在连续发送大量信息时,为了使发送的数据更加精细地结构化,在用户发送的数据中设置同步点,以便记录发送过程的状态,并且在错误发生导致会话中断时,会话实体能够从一个同步点恢复会话继续传送,而不必从开头恢复会话。

   TCP/IP 协议体系中没有专门的会话层,但是在其传输层协议 TCP 协议实现了本层部分功能。

6. 表示层

   表示层( presentation layer )完成某些特定的功能,由于这些功能常被请求,因此人们希望找到通用的解决办法,而不 是要让每个用户来实现。值得一提的是,表示层以下的各层只关心可靠的传输比特流,而表示层关心的是所传输的信息的语法和语义。

   表示层尚未完整定义和广泛使用,如 TCP/IP 协议体系中就没有定义表示层。表示层完成应用层所用数据所需要的任何转换,以提供标准化的应用接口和公共的通信服务。如数据格式转换、数据压缩 / 解压和数据加密 / 解密可能在表示层进行。

7. 应用层

   应用层( application layer )包含大量人们普遍需要的协议。本层处理安全问题与资源的可用性。最近几年,应用层协议发展很快,经常用到的应用层协议有: FTP 、 TELNET 、 HTTP 、 SMTP 等。

   OSI 模型的各层之间任务明确,它们只与上下相邻层打交道:接受下层提供的服务,向上层提供服务。由于所有的网络协议都是分层的,象堆栈一样,因此经常将协议各层统称协议栈。它们的工作模式一般为:发送时接收上层的数据,将其分割打包,然后交给下层;接收时接收下层的数据包,将其拆包重组,然后交给上层。这样,一个包的传输过程是:发送主机的应用程序将数据传递给网络协议栈实现(网络通信程序),网络协议栈实现将数据层层打包,最后交由物理层在数据链路上发送;接收主机收到数据后,逐层拆包向上传递,直到最后达到应用层,应用程序得到对等方的数据。

1.2 TCP/IP 协议的体系

   Internet 采用的是 TCP/IP 协议体系, TCP/IP 协议体系是因其两个著名的协议 TCP 和 IP 而得名的。 TCP/IP 协议体系在和 OSI 的竞争中取得了决定性的胜利,得到了广泛的认可,成为了事实上的网络协议体系标准。

1.2.1 TCP/IP 分层模型

   TCP/IP 协议体系和 OSI 参考模型一样,也是一种分层结构。它是由基于硬件层次上的四个概念性层次构成,即网络接口层、互联网层、传输层和应用层。图 1-2 表示了 TCP/IP 协议体系及其与 OSI 参考模型的对应关系。

                 

   从图 1-2 可以看出,对照 OSI 七层协议, TCP/IP 第三层以上是应用层、传输层和网际互联层, TCP/IP 的应用层组合了 OSI 的应用层和表示层,还包括 OSI 会话层的部分功能。但是,这样的对应关系并不是绝对的,它只有参考意义,因为 TCP/IP 各层功能和 OSI 模型的对应层还是有一些区别的。

1. 网络接口层

   网络接口层也称为数据链路层,它是 TCP/IP 的最底层,但是 TCP/IP 协议并没有严格定义该层,它只是要求主机必须使用某种协议与网络连接,以便能在其上传递 IP 分组。因此,在传统的 UNIX 里,网络接口通常是一个设备驱动器,并且随主机和网络的不同而不同。

2. 互联网层

   互联网层( Internet Layer )俗称 IP 层,它处理机器之间的通信。它接受来自传输层的请求,传输某个具有目的地址信息的分组。该层把分组封装到 IP 数据报中,填入数据报的首部(也称为报头),使用路由算法来选择是直接把数据报发送到目标机还是把数据报发送给路由器,然后报数据报交给下面的网络接口层中的对应网络接口模块。该层还有处理接收到的数据报,检验其正确性,使用路由算法来决定对数据报是否在本地进行处理还是继续向前传送。

3. 传输层

   传输层的基本任务是提供应用层之间的通信,即端到端的通信。传输层管理信息流,提供可靠的传输服务,以确保数据无差错的、按序到达。为了这个目的,传输层协议软件要进行协商,让接收方回送确认信息及让发送方重发丢失的分组。传输层协议软件将要传送的数据流划分成分组,并把每个分组连同目的地址交给下一层去发送。

4. 应用层

   在这个最高层,用户调用应用程序来访问 TCP/IP 互联网络提供的多种服务。应用程序负责发送和接收数据。每个应用程序选择所需的传输服务类型,可以是独立的报文序列,或者是连续的字节流。应用程序将数据按要求的格式传送给传输层。

1.2.2 TCP/IP 分层工作原理

   TCP/IP 协议体系和 OSI 模型的分层结构虽然不完全相同,但它们的分层原则是一致的,即都遵循这样的一个思想:分层的协议要被设计成达到这样的效果,即目标机的第 n 层所收到的数据就是源主机的第 n 层所发出的数据。

   图 1-3 描述了 TCP/IP 分层工作原理,它表示了两台主机上的应用程序之间传输报文的路径。主机 B 上的第 n 层所收到的正是主机 A 上的第 n 层所发出的对象。

   在图 1-3 中我们忽略了一个重要的内容,即没有描述发送方主机上的应用程序与接收主机的应用程序之间通过路由器进行报 文传输的情况。图 1-4 中描述使用路由器的 TCP / IP 分层工作,图中报文经历了两种结构不同的网络,也使用了两种不同的网络帧,即一个是从主机 A 到路由器 R ,另一个是从路由器 R 到主机 B 。主机 A 发出的帧和路由器 R 接收到的帧相同,但不同于路由器 R 和主机 B 之间传送的帧。与此形成对照的是应用程序层和传输层处理端到端的事务,因此发送方的软件能和最终的接收方的对等层软件进行通信。也就是说,分层原则保证了最终的接收方的传输层所收到的分组与发送方的传输层送出的分组是一样的。

图 1-3 TCP/IP 分层工作原理

 

图 1-4 使用路由器的 TCP/IP 分层工作原理

 

1.2.3 TCP/IP 模型的分界线

   TCP/IP 的概念性层次包含两个重要的分界线,一个是协议地址分界线,以区分高层和低层的寻址,另一个是操作系统分界线,以区分系统与应用程序。图 1-5 描述了 TCP/IP 概念层模型的分界。

 

图 1-5 TCP/IP 概念层模型的分界

 

   高层寻址使用 IP 地址,低层寻址使用物理地址。一个概念性的界限把使用低层地址的软件和使用高层地址的软件区分开来,这个分界线出现在网络接口层和 Internet 层之间,即应用程序和在 Internet 层之上的所有协议软件只使用 IP 地址,而网络接口层处理的是物理地址。因此,象 ARP 这样的处于网络接口层的协议,就不是 IP 的一部分。

   通常将软件分成操作系统和非操作系统软件两种类型。当协议软件集成到操作系统之中后,在协议软件的低层之间进行数据传输的开销比应用程序和传输层之间进行数据传送的开销要小得多。因此大多数 TCP/IP 实现都遵循图 1-5 中上面的分界线。

1.2.4 复用和分解

   在整个层次结构中,通信协议使用了复用和分解的技术。当发送报文时,发送方在报文中加入了报文类型、选用的协议等附加信息。所有的报文以帧的形式在网络中复用传送,形成一个分组流。在接收方收到分组时,参考附加信息对接收到的分组进行分解。图 1-6 给出了一个分解的例子,它描述了网络接口层如何根据帧的报头中的类型字段对接收到的帧进行分解。

图 1-6 基于帧的报头中的类型字段进行帧的分解

 

   复用和分解技术几乎出现在所有的协议层次之中。当网络接口层完成对帧的分解操作之后,它要把那些包含有 IP 数据报的帧送给 IP 模块, IP 软件模块分析这些帧以后,参照传输层协议对它们进行进一步的分解操作。图 1-7 描述了 IP 层的分解, IP 层的软件模块检查数据报报头,根据其中的协议类型选择相应的协议进行处理。

图 1-7 IP 层的分解

1.3 TCP/IP 常用概念

  TCP/IP 协议体系及其实现中有很多概念和术语,为了方便读者理解后面的内容,本节集中介绍一些最常用的概念与术语。

1.3.1 包、网络字节顺序

1.

   包( packet )是网络上传输的数据片段,也称分组。在计算机网络上,用户数据要按照规定划分为大小适中的若干组,每个组加上包头构成一个包,这个过程称为封装( encapsulation )。网络上使用包为单位传输的目的是为了更好地实现资源共享和检错、纠错。包是一种统称,在不同的协议不同的层次,包有不同的名字,如 TCP/IP 协议中,数据链路层的包叫帧( Frame ), IP 层的包称为 IP 数据报, TCP 层的包常称为 TCP 报文等。应用程序自己也可以设计自己的包类型,如在自己设计的 socket 程序中使用包。图 1-8 是 IP 数据报格式。

 

图 1-8 IP 数据报格式

2. 网络字节顺序

   由于不同体系结构的计算机存储数据的格式和顺序都不一样,要建立一个独立于任何特定厂家的机器结构或网络硬件的互联网,就必须定义一个数据的表示标准。例如,将一台计算机上的一个 32 位的二进制整数发送到另一台计算机,由于不同的机器上存储整数的字节顺序可能不一样,如 Intel 结构的计算机存储整数是低地址低字节数,即最低存储器地址存放整数的低位字节(叫做小端机, Little Endian ),而 Sun Sparc 结构的计算机存储整数是低地址高字节数,即最低存储器地址存放整数的高位字节(叫做大端机, Big Endian )。因此,直接把数据按照恒定的顺序发送到另一台机器上时可能会改变数字的值。

   为了解决字节顺序的问题, TCP/IP 协议定义了一种所有机器在互联网分组的二进制字段中必须使用的网络标准字节顺序( network standard byte order ):必须首先发送整数中最高有效字节(同大端机)。因此,网络应用程序都要求遵循一个字节顺序转换规则:“主机字节顺序── > 网络字节顺序── > 主机字节顺序”,即发送方将主机字节顺序的整数转换为网络字节顺序然后发送出去,接收方收到数据后将网络字节顺序的整数转换为自己的主机字节顺序然后处理。

1.3.2 服务、接口、协议

   服务、接口、协议是 TCP / IP 体系结构中非常重要的概念,它们贯穿了整个参考模型的始终。

   简单地讲,服务是指特定一层提供的功能。例如网络层提供网络间寻址的功能,我们就可以说它向它的上一层(即传输层)提供了网间寻址服务;反之,也可以说传输层利用了网络层所提供的服务。

   接口是上下层次之间调用功能和传输数据的方法。它类似于程序设计中的函数调用,上层通过使用接口定义的方法来方便地使用下层提供的服务。

  协议是对等层必须共同遵循的标准。它定义包格式和它们的用途的规则集。大多数包都有包头和信息组成:包头常常包括诸如 源和目的地址、包的长度和类型指示符等信息;信息部分可以是原始数据,也可以包含另一个包。一个协议则规范了交换的包的格式、信息的正确顺序以及可能需要采取的附加措施。

   网络协议是使计算机能够通信的标准。典型的协议规定网络上的计算机如何彼此识别、数据在传输中应采取何种格式、信息一旦到达最终目的地时应如何处理等,协议还规定对遗失的和被破坏的传输或数据包的处理过程。 IPX 、 TCP/IP 、 DECnet 、 AppleTalk 都是网络协议的例子。

1.3.3 寻址

   网络的核心概念是“寻址”。在网络中,一个设备的地址是它的唯一标识。网络地址通常是有数字组成的,具有标准的、以定义好的格式。网络上的所有设备都需要给定一个遵循标准格式的唯一标识,即设备的地址。在一个有路由能力的网络中,地址至少包括两个部分:网络部分(或域部分)和节点部分(或主机部分)。

1.3.4 路由器和终端节点

   路由器和终端节点是两种具有路由选择能力的设备。

   路由器是连接网络的设备,它可以连接两个或多个网络。路由器具有路由选择能力,知道怎样将信息从网络的一个部分移到另一个部分。

   终端节点是用户与之交互的设备──工作站、 PC 、打印机、文件服务器等。终端节点能够识别网络上发送给自己的信息,也能够将信息直接发送给它知道的网络设备,对于不知道如何投递的信息,终端节点将其发送给本地路由器;路由器负责将信息从一个网络(子网)传送到另一个网络(子网)。

1.3.5 IP 地址、域名

   为了使连入 Internet 的众多主机在通信时能够相互识别, Internet 上的每一台主机都分配有一个唯一的 32 位地址,这就是 IP 地址,也称作网际地址( Internet 地址)。在 TCP/IP 协议中, IP 地址是一个 32 位的二进制无符号数,为了表示方便,国际通行一种点分十进制表示法:即将 32 位地址按字节分为 4 段,高字节在前,每个字节用十进制数表示出来,并且各字节之间用点号“ . ”隔开。这样, IP 地址表示成了一个用点号隔开的四组数字,每组数字的取值范围只能是 0~255 ,如清华大学主页服务器的 IP 地址就是“ 166.111. 4.100 ” 。

   虽然使用 IP 地址可以唯一地识别 Internet 上的一台主机,但是,对用户来说,要记住一大堆毫无意义的 IP 地址数字实在是一件困难的事。因此,一个好的方法是给每一台机器分配一个名字。 Internet 对于计算机的命名方案称为域名系统( Domain Name System , DNS )。

   DNS 采用层次结构,入网的每台主机都可以有一个类似如下面的域名:

   主机名 . 机构名 . 网络名 . 顶层域名

   域名通常由英文字符串组成,各段用点号分开,从左到右域的范围变大,它拥有实际的含义,比 IP 地址好记得多。如清华大学的主页服务器域名为:

   www.tsinghua.edu.cn

1.4 地址解析协议 ARP

   严格地说,地址解析协议 ARP 并不是 TCP/IP 协议体系的一部分,但是在 Internet 和以太网盛行的今天,作为物理地址到 IP 地址转换的一个协议标准, ARP 协议的重要性显得特别突出。因此本节专门介绍 ARP ( Address Resolution Protocol )协议。

1.4.1 地址转换问题

   我们前面介绍的 TCP/IP 网络使用 IP 地址进行寻址, IP 地址是一种网际地址,它工作在第三层。对于所有的计算机通信,最终表现为某种形式的链路(如以太网、令牌环、 FDDI 和 PPP )上将数据从节点移动到另一节点。许多链路能连接多个节点,这就要求在其上发送的所有数据都应标明目的地址,以便正确传递。这些地址与 IP 地址无关,它们是完全独立的,处于 IP 地址以外,这就是设备的物理硬件地址。具体到以太网络,其物理硬件地址就是我们常说的 MAC 地址。递交一个网际报文分组,网络软件必须使 IP 地址最终变换成物理硬件地址,使用硬件地址来传输帧。

   和 IP 地址不同, MAC 地址是设备内嵌的,它在设备出厂前就定好了。 MAC 地址是一个 6 字节的串,通常写成 16 进制数,以冒号分隔,如我的一台机器的网卡地址就是 08:00: 5a :c7:bd:3d 。 MAC 地址由电气和电子工程师学会( IEEE )分配,在所有以太网设备中是唯一的。 MAC 地址分两部分,前三个字节是厂商代码,后三个字节是设备编号。厂商必须确保它生产的以太网设备都具有同样的前三个字节(厂商代码),以及不同的后三个字节。

   TCP/IP 网络使用 IP 地址寻址, IP 包在 IP 层实现路由选择。但是 IP 包在数据链路层的传输却需要知道设备的物理地址,因此需要一种 IP 地址到物理地址的转换协议。 TCP/IP 协议栈使用一种动态绑定技术,来实现一种维护起来既高效又容易的机制,这就是地址解析协议 ARP 。

1.4.2 地址动态转换

   ARP 协议是 TCP/IP 协议的设计人员为象以太网这种有广播能力的网络找到的一种创造性地解决地址转换问题的方法。这种办法允许在不重新编译代码、不需维护一个集中式数据库的情况下,在网络中动态增加新机器。这种办法就是动态地址转换。

   如图 1-9 所示, ARP 动态地址转换的基本思想很简单:当主机 A 想转换 IP 地址 I B 时,它就广播一个专门的报文分组,要求具有 IP 地址 I B 的主机以其物理地址 P B 做出应答。包括 B 在内的所有主机都收到这个请求,但是只有主机 B 才辨认其 IP 地址,发回一个回答,回答中包含其物理地址。当 A 收到回答时,它便知道 B 的物理硬件地址,并使用这个地址直接把网际报文分组发送给 B 。

 

图 1-9 ARP 地址解析示意图

1.4.3 A RP 的实现

   ARP 协议是由 David C. Plummer [ RFC 826 ]中提出,并已成为一个 TCP / IP 互联网协议标准。它在实现时,在应用上面提到的动态地址转换思想的基础上,做了一些优化和改进,成为了一个广泛使用的协议。

   第一个改进是采用地址转换的高速缓存。为了减少通信成本,使用 ARP 的主机维持一个快速暂存器,其中存放这最新得到的 IP 地址到物理地址的绑定,这样在连续发送数据时就不必反复使用 ARP 了。当一台计算机接收到一个 ARP 回答时,就在它的高速缓存中保存发送方的 IP 地址及对应的物理地址,便于以后查询。在发送分组时,计算机在发出一个 ARP 请求之前总是先到缓存中寻找所需的绑定。如果计算机在它的 ARP 缓存中找到了所要的绑定,就不需要在网上广播。经验表明,由于大多数网络通信发送的分组不止一个,所以即使是一个小的缓存也是值得的。

   另一个改进是,发送者在每次 ARP 广播中都包括 IP 地址到物理地址的绑定,接收者先在它们的快速暂存器中更新 IP 地址到物理地址绑定,然后再处理 ARP 报文分组。这是因为在通常情况下通信是双向的,如果主机 A 因为要向主机 B 发送而正要使用 ARP ,那么主机 B 很可能即将向主机 A 发送。这种实现方式能够使 ARP 的效率大为提高。

   另外,为了使 IP 地址到物理地址的一致性(比如说使用动态地址分配 DHCP 的主机停机一段时间后重新启动获取了另外一个 IP 地址),暂存器中的 IP 地址到物理地址绑定在一定的时间后就被清除。

ARP 协议定义了 ARP 报文的格式,按通常的每行 4 个字节(八位组)的标准表示方法描述如图 1-10 所示。

 

图 1-10 ARP 包格式

   “硬件类型”( HARDWARE TYPE )字段表示发送方硬件地址的类型。它的值为 1 即表示以太网地址。“协议类型”( PROTOCOL TYPE )字段表示要映射的协议地址类型。它的值为 0x0800 即表示 I P 地址。接下来的两个 1 字节的字段,“硬件地址长度”( HLEN )和“协议地址长度”( PLEN )分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上 IP 地址的 ARP 请求或应答来说,它们的值分别为 6 和 4 。“操作”( OPERATION )字段指出四种操作类型,它们是 ARP 请求(值为 1 )、 ARP 应答(值为 2 )、 RARP 请求(值为 3 )和 RARP 应答(值为 4 )( RARP 是逆向地址解析协议)。这个字段必需的,因为 ARP 请求和 ARP 应答的帧类型字段值是相同的。接下来的四个字段分别是发送端的硬件地址( HA ,在本例中是以太网地址)、发送端的协议地址( IA , IP 地址)、目的端的硬件地址和目的端的协议地址。

   对于 ARP 请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端 IP 地址为本机 IP 地址的 ARP 请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为 2 ,最后把它发送回去。

1.5 小结

   计算机网络的发展过程实际上是 TCP/IP 网络协议体系不断战胜其他网络协议体系的过程。当年 ISO 力推的 OSI 七层开放模型虽然在实际竞争中输给了 TCP/IP ,但是,其清晰的网络层次结构对于初学者理解网络层次结构却大有裨益,并且随着网络应用的快速发展和 TCP/IP 协议簇的日益庞大, ISO/OSI 七层开放模型仍能给我们很多启示。

   本章是后面各章的基础,对于没有专门修过计算机网络课程的读者来说,认真阅读本章,搞清楚 TCP/IP 协议的体系结构和相应的基本概念,对于学好后续章节很有帮助。另外, 1.4 节介绍的 ARP 协议虽然不是 TCP/IP 的组成部分,但 ARP 对于将 TCP/IP 协议和我们最常使用的以太网络( Ethernet )联系起来却是必不可少的知识。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多