本教程首先回顾 TCP/IP 的起源,然后阐述 TCP/IP 发展所依据的模型,最后还讨论 TCP/IP 是如何工作的 ― 包括 IP 地址、子网以及路由。打好这些理论基础之后,我们将讨论 Linux 所需要的各种网络配置文件以及如何初始化网络接口和如何编辑系统路由表。在本教程的最后,我们将简要看一下如何分析网络以及如何确保数据准确无误地到达应到之处。
TCP/IP 简史
近年来,随着“传输控制协议/网际协议(TCP/IP)”套件的广泛使用,它已经成为网络通信中事实上的标准。这绝大部分要归功于因特网的迅猛发展以及对在不同平台、设备和操作系统中以它们都理解的“语言”来共享数据的需要。让我们首先了解 TCP/IP 的历史。
在 20 世纪 60 年代后期,美国国防部(DOD)意识到其内部日渐突出的通信问题。在 DOD 工作人员、研究实验室、大学以及承包商之间日益增长的电子信息通信量遇到了严重的障碍。组成 DOD 的不同实体和组织拥有来自不同计算机制造商的计算机系统,这些计算机系统运行不同的操作系统并使用不同网络拓扑结构和协议。
高级研究项目局(Advanced Research Projects Agency,ARPA)被授命提出一种解决这个问题的方案。ARPA 与各大学和计算机制造商结盟来开发一组通信标准。该联盟确定并构建了 4 节点的网络,这就成为当今因特网的基础。在 20 世纪 70 年代,该网络移植到一个新的、核心的协议设计中,这个协议就成为 TCP/IP 的基础。
开放系统互连(Open System Interconnection,OSI)模型
现在,我们使用许多不同类型的计算机,它们有着不同的操作系统、CPU 和网络接口等等。这些不同使得计算机系统间的通信出现问题。在 1997 年,国际标准化组织(ISO)创建了一个小组委员会来开发数据通信标准以促进多供应商的互操作性。其结果就是开放系统互连(OSI)模型。
OSI 模型并未确定任何通信标准或协议;相反,它只是提供了通信任务应该遵循的一些指导性建议。
注:OSI 模型只是一种模型或框架,它确定了要执行的功能,理解这一点很重要。它并未详细说明如何执行这些功能。但是,对于部分 OSI 模型,ISO 也确实接纳了某些符合 OSI 标准的具体协议。例如,ISO 接受 CCITT X.25 协议,该协议作为一种实现提供了 OSI 模型中网络层的大部分服务。
7 个 OSI 层
为简单起见,ISO 小组委员会采用分而治之的方法。将复杂的通信过程分为较小的子任务,问题就变得更容易处理,每个子任务可以分别优化。OSI 模型由 7 层组成:
? 应用层
? 表示层
? 会话层
? 传输层
? 网络层
? 数据链路层
? 物理层
给每一层都分配了一组特定的功能。每一层都使用下层的服务并为其上层提供服务。例如,网络层使用数据链路层的服务并为传输层提供与网络相关的服务。
OSI 层,续
利用相邻层的服务和为其相邻层提供服务,这种层的概念很简单。考虑公司是如何运做的:秘书写备忘录来向总裁(相邻的上一层)提供秘书服务。秘书使用信使的服务(相邻的下一层)来发送消息。通过将这些服务分开,秘书(应用程序)就不必知道消息实际上是如何传递到接收者手中。秘书只需要求信使(网络)发送消息即可。正如许多秘书通过使用这种标准的信使服务来发送备忘录一样,分层的网络可以通过将信息包交给网络层来发送这些信息包。
注:不要将应用层与在计算机上执行的应用程序混淆(在英文中都是一个词 ― application)。请记住,应用层是 OSI 模型的一部分,它并未具体指定用户和通信路径之间的接口是如何工作的,应用程序是这个接口的具体实现。实际的应用程序通常执行应用层、会话层和表示层的服务,而将传输层、网络层、数据链接层和物理层服务留给网络操作系统来处理。
跨层通信
每一层都与其它计算机中的同一层通信。例如,一个系统中的第 3 层与另一个计算机系统的第 3 层通信。
当信息从一层传到下一层时,会在数据前面加一个头,以指出该信息的来源和目的地。来自某一层的由数据和头所组成的信息块又成为下一层的数据。例如,当第 4 层将数据传递到第 3 层时,它会添加自己的头。当第 3 层将该信息传递到第 2 层时,第 3 层会将来自第 4 层的头加数据作为它的数据,并在该数据前添加第 3 层的头,然后才将这个“头 + 数据”组合传给下一层。
每一层信息单元的名称都不同:
应用层 -- 消息
传输层-- 段
网络层 -- 数据报
数据链路层 -- 帧(也称做信息包)
物理层 -- 位
在 OSI 模型出现前,美国国防部定义了它自己的网络模型,即 DOD 模型。DOD 模型与 TCP/IP 协议套件有紧密的联系,这将在下一节说明。
TCP/IP 协议栈(TCP)
TCP/IP 协议栈表示了与 OSI 模型类似的网络体系结构。
但 TCP/IP 不象 OSI 模型那样详细区分协议栈的上面几层。OSI 最上面的 3 层大致与 TCP/IP 的网际处理协议相当。处理协议的一些示例有 Telnet、FTP、SMTP、NFS、SNMP 和 DNS。
OSI 模型的传输层负责可靠数据的发送。在网际协议栈中,这对应于主机到主机协议。这方面的示例是 TCP 和 UDP。TCP 用来转换来自上层协议的不定长消息以及提供远程系统间必要的确认和面向连接的流控制。
UDP 与 TCP 相似,但它不是面向连接的,而且不对数据接收进行确认。UDP 仅接收消息并将其传递给上层协议。因为 UDP 没有与 TCP 有关的那些开销,所以它为如远程磁盘服务等操作提供更高效的接口。
TCP/IP 协议栈(IP)
网际协议(IP)负责系统间无连接方式的通信。它相当于 OSI 模型中网络层的一部分,它负责网络间的信息移动。通过检查网络层地址来完成这种通信,该地址确定了发送消息的系统和路径。
IP 提供与网络层相同的功能并帮助获取系统间的消息,但是它不保证这些消息能够成功传送。IP 还可以将这些消息分成多个段,然后在目的地重组这些段。另外,每一段可以采用不同的网络路径在系统间传送。如果这些段到达时乱了次序,IP 则会在目的地将这些信息包重组成正确的序列。
IP 地址
网际协议要求为网络上的每个设备分配一个地址。这个地址就是 IP 地址,它由 4 个八位元组成。这些八位元每个都定义唯一的地址,这个地址的一部分表示网络(有时也可以表示子网),而另一部分则表示网络上特定的节点。
在 TCP/IP 网络中有几个地址具有特殊含义:
? 以零开头的地址表示当前网络中的本地节点。例如,0.0.0.23 指当前网络中的 23 号工作站。地址 0.0.0.0 指当前工作站。
? 在进行故障排除和网络诊断时,以 127 开头的地址非常重要。形式上将网络地址块 127.x.x.x 定义为 A 类地址,保留了该地址块以用于内部回送(loopback)。
? 将地址上所有位全置为 1(也就是值 255)代表"所有"地址。所以,192.18.255.255 意味着将消息发送给 192.18. 网络上的所有节点;类似的,255.255.255.255 意味着将消息发送给因特网上的每个节点。这些地址用于多点广播消息和服务公告。
注意:给系统分配节点号时,不要使用 0 或 255,它们都是保留数字,具有特殊含义。
IP 地址类型
将 IP 地址按一定范围分配,称为将 IP 地址分类,这取决于应用和组织的规模。三种最常见的类型地址是 A 类地址,B 类地址和 C 类地址。这三种分类表示了可为本地网络分配的 IP 地址中位的数目。
A 类地址用于非常大的网络或相关网络的集合。B 类地址用于超过 256 个节点(但少于 65536 个节点)的大型网络。而大多数组织采用 C 类地址。一个组织采用几个 C 类地址的做法是一个好主意,因为 B 类地址的数量是有限的。 D 类地址被保留用于网络上消息的多点广播,E 类地址则被保留用于实验和开发。
类 地址
A 从 0.x.x.x 到 126.x.x.x
B 从 128.0.x.x 到 191.255.x.x
C 从 192.0.0.x 到 223.255.255.x
D 从 224.0.0.1 到 239.255.255.255
E 从 240.x.x.x 到 255.255.255.255
“专用”IP 地址
如果您的网络没有连接到因特网而且最近也不会连接的话,则可以自由选择任何合法的网络地址。只是要确保您内部网络信息包不会跑到实际的因特网中即可。要确保即便信息包确实跑出也不会有任何危害,应该使用为专用而保留的那些网络地址的某个号码。因特网赋号管理局(Internet Assigned Numbers Authorit,IANA) 已经在 A、B 和 C 类地址中保留了一些网络号,您无需注册就可以使用这些地址。这些地址只有在专用网络中才有效,而且(理论上)不会路由到实际的因特网站点中。
A 10.0.0.0
B 172.16.0.0 - 172.31.0.0
C 192.168.0.0 - 192.168.255.0
请注意第二块和第三块分别包含 16 个和 256 个网络。
从这些网络号码中选择一个地址对于那些完全没有连接到因特网的网络是十分有用的。通过将单个主机用做网关,仍然可以实现访问另一个网络(如因特网)。对于本地网络而言,可以通过内部专用 IP 地址来访问该网关,而外部世界则通过正式注册的地址(由带宽供应商分配)知道该网关。
子网和子网掩码
划分子网是将大型的、实际的网络分成较小的逻辑网络的过程。划分网络的原因有以下几点:联网技术的电气(物理层)限制;为简便起见,希望在建筑物的每一层(或每个部门或针对每个应用)放置一个独立的网络而划分网络;减少网络段负载;或需要用高速线路连接远程位置。
划分网段的结果是使整个网络变成由一些小型子网块组成的网络,从而易于管理。这些较小的子网之间的通信通过网关和路由器进行。同样,一个组织可以有几个物理上在同一个网络中的子网,以便将网络功能逻辑地分成多个