分类: 系统运维
2014-01-28 17:54:11
RFC文档中文翻译计划(compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:胡伟(duthuwei huwml@263.net)
译文发布时间:2001-4-20
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须保留本文档的翻译及版权信息。
Network Working Group T. Socolofsky
Request for Comments: 1180 C. Kale
Spider Systems Limited
January 1991
TCP/IP指南
(RFC1180 A TCP/IP Tutorial)
本备忘录状态
This memo provides information for the Internet community. It does
not specify an Internet standard of any kind. Distribution of this
memo is unlimited.
目录
1. 介绍....................................................................................................................... 3
2. TCP/IP综述.......................................................................................................... 3
2.1 基本结构......................................................................................................................................................... 4
2.2 术语解释......................................................................................................................................................... 5
2.4 两个网络接口................................................................................................................................................ 6
2.5 IP建立了一个单独的逻辑网络................................................................................................................. 8
2.6 物理网络的独立性........................................................................................................................................ 9
2.7 互用性............................................................................................................................................................. 9
2.8 综述后记......................................................................................................................................................... 9
3. 以太网................................................................................................................... 9
3.1 一个人类的比喻.......................................................................................................................................... 10
4. ARP(地址解析协议)........................................................................................... 10
4.1 用于地址解析的ARP表............................................................................................................................... 11
4.2 典型的地址解析过程................................................................................................................................. 11
4.3 ARP请求和应答......................................................................................................................................... 12
4.4 后续过程....................................................................................................................................................... 13
5. 网际协议(Internet Protocol)....................................................................... 14
5.1 直接路由....................................................................................................................................................... 14
5.2 间接路由....................................................................................................................................................... 15
5.3 IP模块路由准则......................................................................................................................................... 17
5.4 IP地址.......................................................................................................................................................... 17
5.5 名字................................................................................................................................................................ 18
5.6 IP路由表...................................................................................................................................................... 19
5.7 直接路由详情.............................................................................................................................................. 19
5.8 直接路由过程.............................................................................................................................................. 20
5.9 间接路由详情.............................................................................................................................................. 21
5.10 间接路由过程............................................................................................................................................ 22
5.11 路由概要..................................................................................................................................................... 23
5.12 路由管理..................................................................................................................................................... 23
6. 用户数据报协议(UDP)....................................................................................... 24
6.1 端口................................................................................................................................................................ 24
6.2 校验和........................................................................................................................................................... 25
7. 传输控制协议(TCP)........................................................................................... 25
8. 网络应用程序..................................................................................................... 26
8.1 TELNET.......................................................................................................................................................... 27
8.2 FTP................................................................................................................................................................. 27
8.3 rsh................................................................................................................................................................. 27
8.4 NFS................................................................................................................................................................. 28
8.5 SNMP............................................................................................................................................................... 28
8.6 X-窗口........................................................................................................................................................... 28
9. 其它..................................................................................................................... 28
10. 参考数目........................................................................................................... 29
本文只介绍TCP/IP最突出的内容,即TCP/IP技术的"梗概".文中不涉及的内容有:TCP/IP的发展历史;TCP/IP
商业方面的用途;与ISO OSI相比而言,TCP/IP的发展前景.本文的内容是网络专业人士从事TCP/IP方面工作所
必须掌握的最基本知识.这里指的网络"专业人士",包括系统管理员,系统程序员,网络管理员.
本文以UNIX环境下的TCP/IP为例进行讲述.尽管如此,重点部分内容仍然涵盖了各种系统环境下的TCP/IP实现.
请注意,本文的目的只是对某种标准进行解释,而非定义.因此,如果读者对文中某些协议定义的正确性提出质疑,
请参考相关的定义性RFC文档.
下面一节是对TCP/IP的总体概述,其后是对各部分内容的详细讲述.
"TCP/IP"这个名词通常指与TCP和IP这两个特定协议有关的事物.它也包括其他的协议,应用程序,甚至网络媒介.
这样的协议有:UDP,ARP,和ICMP.应用程序有:TELNET,FTP和rcp.一个更准确的命名应该是"Internet技术",使用
Internet技术的网络才能被称为"Internet".
为了理解这种技术,你必须首先理解下面这个逻辑结构:
----------------------------
| 网络应用程序 |
| |
|... \ | / .. \ | / ...|
| ----- ----- |
| |TCP| |UDP| |
| ----- ----- |
| \ / |
| -------- |
| | IP | |
| ----- -*------ |
| |ARP| | |
| ----- | |
| \ | |
| ------ |
| |ENET| |
| ---@-- |
----------|-----------------
|
----------------------o---------
以太网电缆线路
图1. 基本TCP/IP网络结点
这就是一台Internet上计算机内部网络协议的分层结构.正是因为具有了这样一种逻辑结构,计算机之间才能通过
Internet技术进行通信.上图中,方框代表数据在计算机间传输时经历的各种处理过程,连接方框之间的线条则表
示数据通过的传输路径.最下面的一条横线代表以太网电缆;"o"是交叉结点."*"是IP地址,"@"是以太地址.理解这
个逻辑结构,是理解Internet技术的基础,本文中的很多地方都会提到它.
Internet上传输的数据的最小单位,取决于它存在于哪一个协议栈.总的来说:如果它在以太网,就称为以太数据帧;
如果它介于以太网驱动和IP模块之间,则叫做IP数据包;如果它介于IP模块和UDP模块之间,它就是UDP数据报;如
果它介于IP模块和TCP模块之间,它会被叫做TCP片段(换种一般的叫法,就是一段传输的消息);如果它位于一个网络
应用程序之中,它就叫做应用程序消息.
这种定义方法是不完善的.在实际中,不同的文献中定义也各不相同.我们可以从RFC 1122的1.3.3节得到最确切
的定义.
"驱动程序"是直接与网络接口硬件通信的软件."模块"是与驱动程序,网络应用程序,或者其他模块之间通信的软
件.
诸如驱动程序,模块,以太帧,IP包,UDP数据报,TCP消息,应用程序消息等名词,在本文中会在相应的部分提及.
2.3 Flow of Data
2.3 数据的流动
现在,让我们对流过图一所示的协议栈的数据进行跟踪.对于一个使用TCP协议(传输控制协议)的应用程序而言,
数据在应用程序和TCP模块之间流动;对于一个使用UDP协议(用户数据报协议)的应用程序而言,数据在应用程序和
UDP模块之间流动.FTP(文件传输协议)是一个典型的使用TCP协议的应用程序.在本例中,它的协议栈结构是FTP/
TCP/IP/ENET.SNMP(简单网络管理协议)是一个典型的使用UDP协议的应用程序.在本例中,它的协议栈结构是
SNMP/UDP/IP/ENET.
TCP模块,UDP模块,以及以太网驱动程序是n到1的多端合成器.作为多端合成器,它们能把多个输入合成为一个输
出.它们也是1到n的多端分解器.作为多端分解器,它们能根据协议头部的类型区把一个输入分解为多个输出.
1 2 3 ... n 1 2 3 ... n
\ | / | \ | | / ^
\ | | / | \ | | / |
------------- 数据 ---------------- 数据
|多端合成器 | 流动 | 多端分解器 | 流动
------------- 方向 ---------------- 方向
| | | |
| v | |
1 1
Figure 2. n-to-1 multiplexer and 1-to-n de-multiplexer
图2. n到1 多端合成器 和 1到n 多端分解器
当一个以台帧从以太网驱动程序向上层传输,它既可能流向ARP(地址解析协议)模块,也可能流向IP(Internet
协议)模块.以太帧头部类型区的值,将决定它究竟流向ARP还是IP模块.
当一个IP包从IP向上传输,数据既可能传向TCP,也可能传向UDP,这是由IP头部的协议区的值决定的.
当UDP数据报从UDP向上传输,根据UDP头部的端口区的值,应用程序消息传向网络应用程序.当TCP消息从TCP向上
传输,根据TCP头部的端口区的值,应用程序消息传向网络应用程序.
下行的多端合成过程比较简单易行,因为无论从哪里开始,只有一条下行路线;每个协议模块在数据包的前面加上
自己的头部信息,以便于目标计算机可以对其进行多端分解.
从应用程序向下传输的数据,无论是TCP还是UDP,都会聚于IP模块,然后被送到更下层的网络接口驱动程序.
Internet技术支持多种不同的网络介质,但本文中涉及的所有例子都是以太网介质,因为它是IP层下最普遍的网络
介质.图1中的计算机只有一个网络连接.每个以太网接口的六位以太地址都是独一无二的,它定位于以太网驱动程
序的底层.
计算机还有一个四位的IP地址.这个地址定位于IP模块的底层接口.Internet上的IP地址必须是独一无二的.
一台运行中的计算机常常具有可知的IP地址和以太地址.
如果一台计算机连接了两个独立的以太网络,情况将如图3所示.
----------------------------
| 网络应用程序 |
| |
|... \ | / .. \ | / ...|
| ----- ----- |
| |TCP| |UDP| |
| ----- ----- |
| \ / |
| -------- |
| | IP | |
| ----- -*----*- ----- |
| |ARP| | | |ARP| |
| ----- | | ----- |
| \ | | / |
| ------ ------ |
| |ENET| |ENET| |
| ---@-- ---@-- |
----------|-------|---------
| |
| ---o---------------------------
| 以太网电缆 2
---------------o----------
以太网电缆 1
图3. 两个以太网络的TCP/IP网络结点
请注意,这台计算机具有两个以太网地址和两个IP地址.
从上图所示的结构,我们可以得知,对于具有不止一个网络物理接口的计算机,IP模块既是一个n到m的多端合成器,
又是一个m到n的多端分解器.
1 2 3 ... n 1 2 3 ... n
\ | | / | \ | | / ^
\ | | / | \ | | / |
------------- 数据 ---------------- 数据
| 多端合成器| 流动 | 多端分解器 | 流动
------------- 方向 ---------------- 方向
/ | | \ | / | | \ |
/ | | \ v / | | \ |
1 2 3 ... m 1 2 3 ... m
图 4. n到-m 多端合成器 和 m到n 多端分解器
对数据的多端合成在两个方向上都会发生,目的在于适应数据的输入和发送.与前面的例子相比,这里的IP模块要
更加复杂一些,它与多于一个的网络接口相对应,并且要把数据转发到下一个网络.数据可到达任何一个网络接口,
而且可从任何一个网络借口发送出去.
TCP UDP
\ /
\ /
--------------
| IP |
| |
| --- |
| / \ |
| / v |
--------------
/ \
/ \
数据 数据
由此 由此
输入 输出
图5. 一个转发IP包的例子
把一个IP包转发至另一个网络的过程叫做IP包的"转发".一台被用作转发IP包的计算机叫做"IP-路由器".
你从上图可以看出,被转发的IP包在IP-路由器上不会接触TCP和UDP模块.有些IP-路由器的实现中也不包括TCP或
UDP模块.
IP模块是Internet技术成功的关键所在.当消息向协议栈下层传输时,每个模块或者驱动程序都在消息的前面加上
自己的头部;当消息从协议栈下层向上层的应用程序传输时,每个模块或者驱动程序都将自己的头部剥离.IP头部
包含有IP地址,正是IP地址把各种不同的物理网络联系在一起,建立起一个单独的逻辑网络.物理网络的互相连接
也正是"internet"这个名称的由来.物理上互相连接在一起,并且限制IP包范围的网络就叫做"internet".
对于网络应用程序来说,IP将下层的物理网络硬件隐藏了起来.如果你发名了一种新的物理网络,并且想让它在
Internet上投入使用,你只需要再为它写一个与IP连接的驱动程序就可以了.这样,你使用的网络应用程序不会因
为硬件技术的变化而发生任何变化.
如果两台Internet上的计算机能够互相通信,我们则称它们能够"互用";如果一个Internet技术的实现是好的,我
们则说它有"互用性".普通计算机用户们得益于Internet,正是由于其"互用性".一般来说,正是由于计算机具有
"互用性",你才会买下它.如果一台计算机不具备"互用性",或者无法添加"互用性",它将很难找到市场.
在建立足够的背景知识后,我们将能够回答下面的问题:
发出一个IP包的时候,目标以太地址是如何确定的?
发送IP包的时候,IP如何知道该使用众多底层网络接口中的哪一个?
一台计算机上的客户端如何到达另一台计算机上的服务端?
为什么TCP和UDP都存在,而不是只有其中之一?
什么样的网络应用程序是可用的?
在下面关于以太网的讲解中,我们将依次回答这些问题.
本部分是对以太网技术的简短介绍.
一个以太帧含有目标地址,源地址,类型区,以及数据.
以太地址的长度是六个字节.每个设备都有自己的以太地址,并且时刻监听目标地址为其以太地址的以太帧.所有
的设备也同时监听一个这样的地址"FF-FF-FF-FF-FF-FF"(用十六进制表示),这个地址被称为"广播地址".
以太网使用CSMA/CD (Carrier Sense and Multiple Access with Collision Detection).CSMA/CD意思是,所有
的设备利用同一个媒介通信,每一时刻只能传输一个设备的信息,但它们可以同时接收信息.如果两个设备试图在
同一时刻传输,将发生传输冲突,检测到冲突后,两个设备都会等待一段随机的时间(很短)再进行传输.
关于以太网,有一个有关人类的很好比喻:一群人在一个很小,并且完全黑暗的房间里交谈.在这个比喻里,物理网
络媒介是传播声波的屋内空气,而不是传输信号的同轴电缆.
一个人说话,每个人都能听到(Carrier Sense).房间里的每个人都有相同的说话能力(Multiple Access).但是,
由于遵守礼节的关系,每个人的讲话都不会很冗长.如果某个人不礼貌,他将被请出这个房间(被抛到网络外面).
不会有人在别人讲话的时候交谈.但是如果两个人在同一时刻开始讲话,他们两个都会立即发现这一情况.因为他
们听到了有不同于自己的话音想起(Collision Detection).当两个人意识到这种情况时,他们每个人都会停下来
等待一段时间,然后一个人开始讲话.另一个人听到这个人开始讲话,就等待对方讲完,然后再开始自己的讲话.
每个人有一个唯一的名字(唯一的以太地址)以避免混乱.每个人开始讲话的时候,他都要首先说出他想要交谈的
人的名字,以及他自己的名字(依次是目标以太地址,源以太地址),例如:"你好,Jane,我是Jack,.............".
如果谈话人想跟每个人说话,他应该说"所有人"(广播地址),例如:"大家好,我Jack,.................".
当发出一个IP包的时候,目标以太地址是怎样确定的?
ARP(地址解析协议)就是用来把IP地址解析成以太地址的.它只对向外发送的IP包进行地址解析,因为这时正是IP
头部和以太头部建立的时候.
地址的解析是通过查表来完成的.这个表就是ARP表,它被存储于内存中,里面有与每台计算机对应的记录.ARP表中
有一个IP地址字段和一个以太地址字段.当把一个IP地址翻译成一个以太地址的时候,会对ARP表进行以IP地址为
匹配条件的查询.下面就是一个简化过的ARP表:
------------------------------------
|IP地址 以太地址 |
------------------------------------
|223.1.2.1 08-00-39-00-2F-C3|
|223.1.2.3 08-00-5A-21-A7-22|
|223.1.2.4 08-00-10-99-AC-54|
------------------------------------
表 1. ARP表范例
人们书写四个字节的IP地址的习惯,是以十进制写出每个字节,以小数点做分隔符号.书写六个字节的以太地址的
习惯,是以十六进制写出每个字节,以减号或者冒号做分隔符号.
因为IP地址和以太地址都是单独选择的,所以ARP表是可行的.你不能用某种运算法则来实现从IP地址到以太地址
的转换.IP地址是由网络管理员根据计算机所处的位置所决定的.当一台计算机被移动到网络的另一个地方,它的
IP地址也必须改变.以太地址则是由以太接口设备生产厂商根据他们自己得到的授权范围规定的.当以太接口设备
的接口板改变的时候,以太地址才会改变.
在运行一个普通的网络应用程序时,例如TELNET,先给TCP发出一个应用程序消息,然后TCP发出相应的TCP消息给IP
模块.目标IP地址对应用程序,TCP模块,IP模块都是可知的.就这一点看来,IP包已经构造完毕,做好了向以太驱动
程序发送的准备.但是,必须首先确定目标的以太地址.
ARP表就是被用来查询目标以太地址的.
首先,ARP表是怎样填充的?答案是,ARP表是在基于需求的基础上自动填充的.
在以下两种情况下,ARP表不能被用来解析地址:
1. ARP请求包的目标地址是广播地址,即它是发给网络上的每台机器的.
2. 向外发送的IP包正在队列中.
每台计算机的以太接口都能收到广播以太帧.以太网驱动程序检查以太帧的类型区,并把ARP包传送给ARP模块.ARP
请求包好像在说:"如果你的IP地址和这个目标IP地址相符合,请告诉我你的以太地址."一个ARP请求包看起来就像
下面这个样子:
---------------------------------------
|发送者IP地址 223.1.2.1 |
|发送者以太地址 08-00-39-00-2F-C3|
---------------------------------------
|目标IP地址 223.1.2.2 |
|目标以太地址
---------------------------------------
表 2. ARP 请求范例
每个ARP模块都会对ARP请求包的IP地址,看其是否与自己的IP地址一致,如果一致,它将直接向源以太地址发送一
个应答.ARP应答包好像在说:"是的,你的目标IP地址是我的IP地址.现在,把我的以太地址给你."与ARP请求包相比,
ARP应答包的发送/目标区域正好对换了一下位置.它看上去就像下面这个样子:
---------------------------------------
|发送者IP地址 223.1.2.2 |
|发送者以太地址 08-00-28-00-38-A9|
---------------------------------------
|目标IP地址 223.1.2.1 |
|目标以太地址 08-00-39-00-2F-C3|
---------------------------------------
表 3. ARP 应答范例
这个应答会被原来的发送者接收到.它的以太驱动程序查看这个以太帧的类型区,然后将这个ARP包传送给ARP模块.
ARP模块会检查这个ARP包,并且把发送者的IP地址和以太地址添加到自己的ARP表中.
更新后的ARP表看上去就是这个样子:
----------------------------------
|IP 地址 以太地址 |
----------------------------------
|223.1.2.1 08-00-39-00-2F-C3|
|223.1.2.2 08-00-28-00-38-A9|
|223.1.2.3 08-00-5A-21-A7-22|
|223.1.2.4 08-00-10-99-AC-54|
----------------------------------
表 4. 收到应答后的ARP表
新的解析就是这样自动地加到了ARP表里,在极短的一段时间之后,它马上就会被用到.你应该还记得上面讲的第二
个步骤,发送的IP包在队列中等待.下一步,将通过查ARP表把IP地址解析成以太地址,然后,以太帧就被发送到了以
太网上.因此,加上这些新的步骤3,4和5,对于发送方计算机,整个过程是这样的:
1. 一个带有广播以太地址的ARP请求包被发向网络上的每台计算机.
2. 向外发送的IP包排进队列等待.
3. 收到ARP回应包,里面包含了从IP到以太地址的转换,并被加入ARP表中.
4. 用ARP表为队列中的IP包查询,将IP地址解析为以太地址.
5. 以太帧被发向以太网.
概括的说,当在ARP表里查不到IP地址对应的以太地址时,就将这个IP包先排进队列等待,然后迅速通过ARP请求/
应答过程将ARP表的这项记录填上,然后为队列中的IP包查表解析,最后将其发送出去.
在计算机里,每个以太接口对应自己的ARP表.如果目标计算机不存在,那将没有ARP应答,从而ARP表中没有与之对
应的记录.IP将会丢弃发向这个目标地址的包.更上层的协议无法根据目标地址判断究竟是网络问题,还是目标主
机不存在.
在某些IP和ARP的实现中,不把等待应答的IP包排入队列,而是把IP包丢弃,并且把恢复丢弃的包的任务交给TCP模
块,或者UDP网络应用程序.这里的恢复是通过超时重传来实现的.发送的消息可以成功地到达目的地,因为先前发
出的那个消息的拷贝已经使ARP表相应的记录得以填充.
IP模块是Internet技术的核心,而IP的基本是它的路由表.IP利用存储器里的表格来确定对IP包的路由选择.路由
表的内容是由网络管理员规定的.路由表的错误会导致通信的阻塞.
理解路由表的使用就是理解Internet网络.对这些知识的了解有助于成功地管理和维护一个IP网络.
为了更好地理解路由表,我们首先应该对路由和IP地址有个大致的了解,然后再研究细节内容.
下图所示的是一个只包含三台计算机:A,B和C的小型Internet.每台计算机都有如图1所示的相同的TCP/IP协议栈.
每台计算机的以太网接口都有自己的以太地址.每台计算机都被网络管理者分配了IP地址.管理者也为这个以太网
分配了一个IP网络号.
A B C
| | |
--o------o------o--
以太网 1
IP网络 "development"
图 6. 一个IP网络
当A向B发送一个IP包,则IP头部会包含A的IP地址做为源IP地址,以太头部会包含A的以太地址做为源以太地址.同
样,IP头部包含B的IP地址做为目的IP地址,以太头部包含B的以太地址做为目的以太地址.
----------------------------------------
|地址 源 目的 |
----------------------------------------
|IP头部 A B |
|以太头部 A B |
----------------------------------------
表 5. 一个从A到B IP包的以太帧里包含的地址
在这个简单的例子里,IP好像呆在上面没对下层的以太网作什么服务.但实际上,IP起到了一定的作用,并且消耗了
一部分系统资源:额外的CPU操作和网络带宽,以产生,传输和分析IP头部.
当B的IP模块收到从A发来的IP包,它检查这个包的目的IP地址,并和自己的IP地址作比较,看是否相符.如果是,它
就把这个数据报传送给上层的协议.
A和B之间的通信使用的就是直接路由.
下面图中所示的情况是对Internet更现实的一种表示.它由三个以太网络和三个IP网络组成,连接它们的是一个叫
做计算机D的IP路由器.每个IP网络有四台计算机;每台计算机有自己的IP地址和以太地址.
A B C ----D---- E F G
| | | | | | | | |
--o------o------o------o- | -o------o------o------o--
以太网 1 | 以太网 2
IP网络 "development" | IP网络 "accounting"
|
|
| H I J
| | | |
--o-----o------o------o--
以太网 3
IP网络 "factory"
图 7. 三个IP网络; 一个internet
除了计算机D,每台计算机都有如图1所示的TCP/IP堆栈.计算机D是IP路由器:它与三个网络相连,所以它有三个以
太地址和三个IP地址.计算机D所具有的TCP/IP堆栈与图3所示的类似,不同之处是它有三个ARP模块和三个以太驱
动,而不是两个.请注意,计算机D只有一个IP模块.
网络管理员已经为每个以太网络分配了独一无二的号码,这个号码叫做网络号.IP网络号在本图中没有表示出来,
只有网络名字.
当计算机A向计算机B发送一个IP包时,整个过程和上面提到的单一网络的那个例子是一样的.任何在同一个IP网络
之内的两台计算机之间的通信都符合上面例子中提到的直接路由情况.
计算机D和A之间的通信是直接通信,D和E之间的通信是直接通信,D和H之间的通信也是直接通信.这是因为这几对
计算机都在同一个IP网络里.
但是,当计算机A与一台IP路由器远端的计算机通信的时候,通信将不再是直接的.A必须利用D把IP包转发到下一个
IP网络.这样的通信叫做"间接".
对IP包的路由是由IP模块来完成的,它的发生对于TCP,UDP,和网络应用程序来说,都是透明不可见的.
如果A向E发送一个IP包,源IP地址和以太地址都是A的.目标IP地址是E的,但是由于A的IP模块要把这个IP包发给D
然后由其转发,所以目的以太地址应该是D的.
----------------------------------------
|地址 源 目的 |
----------------------------------------
|IP头部 A E |
|以太头部 A D |
----------------------------------------
表 6. 一个从A发向E的IP包中的以太帧里的地址(经过D之前)
D的IP模块收到这个IP包之后,经过检查目的IP地址,发现"这不是我的IP地址",于是就直接把这个包发给E.
----------------------------------------
|地址 源 目的 |
----------------------------------------
|IP头部 A E |
|以太头部 D E |
----------------------------------------
表 7. 一个从A发向E的IP包中的以太帧里的地址(经过D之后)
概括的说,直接通信的时候,源IP地址和源以太地址都是发送者的,目的IP地址和目的以太地址都是接收者的.间接
通信的时候,IP地址和以太地址则不是成对相关的.
这个例子中的internet是非常简单的.真正的网络经常是由各种因素组成的复杂组合,从而导致出现许多IP路由器
和多种类型的物理网络.当网络管理员为了使广播信息尽量本地化而将一个大的网络分割成几个小网络的时候,就
会出现本例中的情况.
上面的内容只介绍了路由时发生了什么,没有介绍它是怎么发生的.现在,让我们仔细了解一下IP模块使用的路由
准则,或者称之为路由的运算法则:
对于一个向外发送的IP包来说,它从上层协议进入IP,IP必须决定应该直接还是间接发送这个IP包,IP还必须选
择一个底层的网络接口设备.这些决定都是在查询路由表之后做出的.
对于一个接收到的IP包来说,它从下层接口进入IP,IP必须决定应该将它转发还是传向上层协议.如果这个IP包
将被转发,它又会被当作一个向外发送的IP包来对待.
当一个接收的IP包到达后,它绝不会从同一个网络接口被转发回去.
这些决定是在IP包传给底层网络接口和查询ARP表之前作出的.
网络管理员根据一台计算机所属的网络来给它分配IP地址.在这四个字节的IP地址里,有一部分是IP网络号,另一
部分是机器号(或主机号).以表1中的计算机为例,它的IP地址是223.1.2.1,网络号是223.1.2,主机号是1.
在一个四字节长的IP地址中,究竟哪一部分是网络号,哪部分是主机号,是由IP地址的前几位决定的.本文中所举
的所有例子中的IP地址都是C类地址,这意味着前3位决定了网络号占21位,主机号占8位.这就允许有2,097,152个
C类地址的网络,每个网络有254台主机.
IP地址由NIC(网络信息中心)管理.所有接入国际互联网的网络都必须使用由NIC分配的网络号.如果你建立了自己
的网络,并且不打算把它连入Internet,你仍然因该从NIC获得你的网络号.如果你坚持使用自己决定的网络号,那
么当你的网络和其他网络相连接的时候就有可能发生混乱.
人们用名字来指代计算机,而不是用数字.一台叫做alpha的计算机的IP地址可能会是223.1.2.1.在小的网络里,这种
从名字到IP地址的对应关系经常保存在每台机器的"hosts"文件中.对于大的网络,这种对应关系被保存在一台服务
器上,必要的时候可以访问查询.含有对应关系的文件中的几行看上去可以是下面这样的:
223.1.2.1 alpha
223.1.2.2 beta
223.1.2.3 gamma
223.1.2.4 delta
223.1.3.2 epsilon
223.1.4.2 iota
第一列是IP地址,第二列是机器名字.
在大多数情况下,你可以在所有的机器上安装同样的"hosts"文件.你可能注意到叫"delta"的计算机在这个文件里
只有一个条目,尽管它实际上有三个IP地址.我们可以用三个IP地址中的任意一个来访问delta;用哪个IP并不重要.
当delta收到一个IP包,它会检查包的目的IP地址,并且能够识别出它自己的任意一个IP地址.
IP网络通常也被人们命名.如果你有三个IP网络,你的"networks"文件就是用来记录网络和它的名字之间的对应
关系的,这个文件通常是下面这样的格式:
223.1.2 development
223.1.3 accounting
223.1.4 factory
第一列是IP网络号,第二列是网络的名字.
在这个例子中,你可以看到计算机"alpha"是网络"development"中的一号机器,"beta"是二号机器.你也可以说,
"alpha"是"development.1","beta"是"development.2",等等.
上面的"hosts"文件对用户已经足够用了,但是网络管理员很可能把delta那一行用下面的内容替换:
223.1.2.4 devnetrouter delta
223.1.3.1 facnetrouter
223.1.4.1 accnetrouter
"hosts"文件新加入的这三行给delta的每个IP赋予了一个易于理解的名字.实际上,上面列出的第一IP地址有两个
名字:"delta"和"devnetrouter",在这里,它们是同义词.实际使用的时候,这台计算机普遍被使用的名字还是
"delta",其它三个名字只有在管理路由表的时候才会用到.
这些文件可被网络管理命令和网络应用程序使用,向它们提供有意义的名字.虽然在操作internet的时候,这些文
件不是必不可少的,但是他们的确能给我们带来不少方便.
IP发送IP包的时候,它是怎么知道应该使用哪一个底层网络接口的呢?首先,IP从目的IP地址中分解出IP网络号,
然后以此为关键值在路由表中进行搜索,从而实现这一选择.
每一条路由在路由表中都占有一行.路由表中主要的列有:IP网络号,直接/间接标记,路由器IP地址,接口号.这个
表根据每个向外发送的IP包的IP地址进行查询.
在大多数计算机上,路由表可以用"route"命令来修改.路由表的内容由网络管理员规定,因为IP地址也是由网络
管理员分配给每台计算机的.
为了了解它是如何使用的,让我们详细分析一下前面例子中的路由情况.
--------- ---------
| alpha | | beta |
| 1 | | 1 |
--------- ---------
| |
--------o---------------o-
以太网 1
IP网络 "development"
图 8. 一个IP网络的详图
alpha内部的路由表是这个样子:
--------------------------------------------------------------
|网络 直接/间接标记 路由器 接口号 |
--------------------------------------------------------------
|development direct
--------------------------------------------------------------
表 8. 一个简单路由表的例子
这样的路由表在大多数UNIX操作系统下可以用"netstat -r"命令查看.在这个简单的网络里,所有计算机都有同样
的路由表.
为了便于讨论,下面再次列出这个路由表,但没有把网络号转换成网络名字.
--------------------------------------------------------------
|网络 直接/间接标记 路由器 接口号 |
--------------------------------------------------------------
|223.1.2 direct
--------------------------------------------------------------
表 9. 用网络号表示的路由表
alpha向beta发送一个IP包.这个IP包正处于alpha的IP模块,目的IP地址是beta或223.1.2.2.IP从这个IP地址中分
离出网络地址部分,并且从路由表的第一列中查询匹配项在这个网络中,第一项就符合匹配条件..
第一项中的其它部分内容说明这个网络上的计算机可以通过一号接口直接到达.然后,ARP表查询完毕,beta的IP地
址被解析为以太地址,最后,以太帧通过一号接口之际发送给beta.
如果一个应用程序试图向一个development网络上不存在地IP地址发送数据.IP将无法在路由表中查到匹配项.因
此IP将丢弃这个IP包.有些计算机会提供一个"网络不可到达"的出错提示信息.
下面,让我们对前面提到的复杂的网络路由进行更细致的分析.
--------- --------- ---------
| alpha | | delta | |epsilon|
| 1 | |1 2 3| | 1 |
--------- --------- ---------
| | | | |
--------o---------------o- | -o----------------o--------
以太网 1 | 以太网 2
IP网络 "Development" | IP网络 "accounting"
|
| --------
| | iota |
| | 1 |
| --------
| |
--o--------o--------
以太网 3
IP网络 "factory"
图 9. 三个IP网络的详图
alpha内部的路由表是这个样子:
---------------------------------------------------------------------
|网络 直接/间接标记 路由器 接口号 |
---------------------------------------------------------------------
|development direct
|accounting indirect devnetrouter 1 |
|factory indirect devnetrouter 1 |
---------------------------------------------------------------------
表 10. Alpha 路由表
为了便于讨论,下面再次列出这个路由表,但没有把网络号转换成网络名字.
--------------------------------------------------------------------
|网络 直接/间接标记 路由器 接口号 |
--------------------------------------------------------------------
|223.1.2 direct
|223.1.3 indirect 223.1.2.4 1 |
|223.1.4 indirect 223.1.2.4 1 |
--------------------------------------------------------------------
表 11. 用网络号表示的Alpha的路由表
Alpha路由表中的路由器是delta与development网络连接的IP地址.
Alpha向epsilon发送一个IP包.这个IP包位于alpha的IP模块,其目的IP地址是epsilon的223.1.3.2.IP从这个IP地
址中分离出网络地址部分(223.1.3),并从路由表的第一列中查询匹配项.查询结果发现第二条记录匹配.
路由表这一项的内容表明位于223.1.3这个网络上的计算机可以通过IP路由器devnetrouter到达.于是alpha的IP
模块对devnetrouter的IP地址进行ARP解析,然后直接把这个IP包通过alpha的一号接口发向devnetrouter.IP包仍
然含有epsilon这个目的地址.
IP包到达dlta的development网络接口,并被向上传至delta的IP模块.经过对目的IP地址的检查,发现目的地址不
是delta自己的IP地址,于是delta决定转发这个包.
Delta's IP module extracts the network portion of the destination IP
address (223.1.3) and scans its route table for a matching network
field. Delta's route table looks like this:
delta的IP模块分离出目的IP地址中的网络地址部分,然后在自己的路由表中查询.
delta的路由表如下表所示:
----------------------------------------------------------------------
|网络 直接/间接标记 路由器 接口号 |
----------------------------------------------------------------------
|development direct
|factory direct
|accounting direct
----------------------------------------------------------------------
表 12. Delta的路由表
下面再次列出这个路由表,但没有把网络号转换成网络名字.
----------------------------------------------------------------------
|网络 直接/间接标记 路由器 接口号 |
----------------------------------------------------------------------
|223.1.2 direct
|223.1.3 direct
|223.1.4 direct
----------------------------------------------------------------------
表 13. 用网络号表示的Delta的路由表
第二项是匹配项.于是IP通过三号接口直接把这个IP包发向epsilon.这个IP包里的目的IP地址和目的以太地址都
是epsilon的.
这个IP包到达epsilon,并被传到上层的IP模块.检查目的IP地址之后发现与epsilon的IP地址相符合,于是这个IP
包就被传给了更上层的协议.
当一个IP包在大的internet上传输的时候,在到达目的地之前,它可能会通过许多IP路由器.它所经过的路径不是
由某项中心因素决定,而是对经过的每一台路由器进行查询得到的结果.每台计算机只决定这个包的下一跳,并且
把它发送想下一个目的地.
维护一个巨大的internet上所有计算机的路由表是一个繁重的任务;网络管理员需要经常改变网络设置以适应各
种变化的需要.路由表的设置错误会导致通信的阻塞,而且诊断这种阻塞也是非常乏味的事情.
维持网络设置的简单有利于网络的可靠性.例如,给以太网分配IP网络时,最直接了当的做法就是给每个以太网一
个IP网络号.
我们也能从某种协议和网络应用程序那里得到帮助.ICMP(网间控制报文协议)就能报告某些路由问题.对于一个小
型网络,每台机器的路由表是由网络管理员手动填写的.对于一个大型网络,管理员会借助路由协议在网间自动分
配路由.
如果一台计算机被移到另一个IP网络,它的IP地址必须改变.如果一台计算机从一个IP网络中离开,则它旧有的地
址会变得不可用.这些变化需要频繁地更改"hosts"文件.这个简单的文件很难应付哪怕是中等规模的网络.域名
系统的出现对这个问题的解决起到了帮助作用.
UDP是位于IP上层的两个主要协议之一.它服务于用户的网络应用程序.诸如网络文件系统(NFS)和简单网络管理协
议(SNMP)都是使用UDP的网络应用程序.这些服务只不过是与IP的一个接口.
UDP是一种无连接的数据报传输服务,不保证传输的可靠性.UDP不与远端的UDP模块保持端对端的连接;它仅仅是把
数据报发向网络,并从网络接收传来的数据报.
数据报在传给IP之前被UDP加上了两个值.一个是基于端口的应用程序间的多路信息,另一个是校验和以保证数据
的完整性.
一台计算机上的客户端是怎样到达另一台计算机上的服务端的?
应用程序和UDP之间通过UDP端口实现通信.这些端口是从零开始的数字.一个提供服务的应用程序(服务端)在一个
该服务专有的端口等待信息的传来.服务端耐心地等待任何客户端的服务请求.
例如,SNMP服务,通常被称作SNMP代理,经常在161端口等待.每台计算机只可能有一个SNMP代理,因为每台计算机只
有一个161UDP端口.这个端口号是众所周知的,它是一个固定的端口,是internet分配的端口号.如果一个SNMP客户
端需要服务,它就像目的计算机的161UDP端口发送请求.
当一个应用程序通过UDP向外发送数据,则数据是做为一个单独的单元到达远端主机的.例如,如果一个应用程序对
UDP端口执行了5次写操作,那么远端的应用程序将从UDP端口执行5次读操作.同样,每次写操作和每次读操作的数据
量是一样的.
UDP保护由应用程序确定的消息包的大小.它从来不会把两个应用程序消息组合到一起,也不会把一个应用程序消
息分割成几部分.
如果一个接收到的IP包的IP头部类型区是"UDP",它会被IP传递到上层的UDP模块.当UDP模块收到从IP传上来的UDP
数据报,它对UDP校验和进行检查.如果校验和为零,则说明发送者没有计算校验和,可以忽略掉.发送者计算机的UDP
模块可以产生校验和,也可以不产生.如果以太网是这两个UDP模块之间唯一的网络通信介质,则可以不需要校验和.
否则,我们建议你始终开启产生校验和的功能,因为将来路由表的变化可能会使发送的数据通过不可靠的网络介质.
如果校验和正确(或者为零),接下来检查目的端口号,并且查看是否有应用程序已绑定在该端口.若是,则应用程序
信息排入队列等待该应用程序读取.若不是,该数据报将被丢弃.如果数据报到来的速度快于应用程序读取的速度,
而且队列已满,UDP也会丢弃这个数据报.UDP会继续丢弃收到的数据报,直至队列中有空间为止.
TCP提供的服务与UDP不同.TCP提供的是面向连接的数据流,而不是传输无连接的数据报.TCP能保证传输的可靠性,
而UDP不能.
对于那些需要保证传输的可靠性,并且不能被超时重传所打扰的网络应用程序来说,使用TCP是一个很好的选择.两
个使用TCP的最普遍的网络应用程序是文件传输协议(FTP)和TELNET.其它流行的TCP网络应用程序包括:X-窗口系
统,rcp(远程拷贝),以及r-系列命令.TCP更好的性能是以更多的消耗换来的,它需要更多的CPU资源和更多的网络
带宽.TCP模块的内部也比UDP模块要复杂得多.
与UDP相似,网络应用程序通过TCP端口连接.特定的应用程序有自己特定的端口.例如:TELNET服务使用端口23.
TELNET客户端通过向特定计算机的TCP端口23进行连接,就能找到服务端.
一旦应用程序开始使用TCP,客户机和服务器上的TCP模块就同时开始互相通信.这种端到端的TCP模块包含用来定
义一个虚电路的状态信息.这个虚电路消耗的是两端共同的资源;这个虚电路是完全双向的;数据可以同时向两个
方向传输.应用程序向TCP端口写数据,数据经过网络传输后,由另一端的应用程序读取.
TCP根据需要确定数据包的大小;它不保持其原本的打包大小.例如,如果一个应用程序向TCP端口执行5次写操作,
远端的应用程序有可能需要对TCP端口执行10次都操作才能把所有的数据都接收下来.或者也有可能通过一次读
操作就得到了全部数据.两端之间数据包的大小和数目没有联系.
TCP是一种具有超时重传的滑动窗口协议.发送的数据必须要得到远端TCP的确认.确认信息可以存在于发回的数据
中.每个接收端都可以对远端进行流控制,以防止缓冲区的溢出.
和其它的滑动窗口协议一样,TCP也有一个窗口值.窗口值决定了在需要确认之前可以传输的数据量.对TCP而言,这
个数据量不是指TCP片段的数目,而是字节数.
为什么TCP和UDP同时存在,而不是只有它们其中一个?
因为它们提供的服务不同.大多数应用程序只使用其中一种.作为程序员,你应该选择最能满足你需要的协议.如果
你需要可靠的数据流连接服务,TCP可能是最好的选择.如果你需要数据报服务,UDP可能是最好的选择.如果你需要
实现远程的有效通信,TCP可能是最好的选择.如果你想实现近距离的高效通信,UDP可能是最好的选择.如果你的需
求不是明确的属于上面的某一类别,那么就不太容易确定什么选择是"最好的".尽管如此,应用程序可以弥补某种
选择的不足.例如,如果你选择了UDP,但你需要可靠性,那么应用程序必须提供对可靠性的保障.如果你选择TCP而且
想提供一个面向记录的服务,那么必须由应用程序给数据流中插入标记来区分各个记录.
什么样的网络应用程序是可用的?
可用的网络应用程序数不胜数.而且它们的数目还在持续地增长中.某些应用程序自从internet技术出现的时候就
已经存在了:TELNET和FTP.其它的一些相对较新:X-窗口和SNMP.下面内容是对本文提到过的几种网络应用程序的
简单介绍.
TELNET是基于TCP,提供远程登陆能力的应用程序.它的操作和外观都非常像用键盘通过电话交换机拨号.在命令行
状态下,用户输入"telnet delta",然后得到从"delta"这台计算机的登陆提示符.
TELNET工作得很好:它是个古老的网络应用程序,并且有广泛的互用性.TELNET的实现经常在不同的操作系统之间
工作.例如,一个TELNET客户端可能是VAX/VMS,但是服务器就可能是UNIX系统V.
文件传输协议(FTP),和TELNET一样古老,同样使用TCP,有广泛的互用性.它的操作和外观很像你TELNET进入系统之
后的情况.但是它的命令不像TELNET那么丰富,你只能用有限的几个命令来实现列出文件目录等类似操作.FTP命令
允许你在计算机之间拷贝文件.
远程shell(rsh或者remsh)是一系列UNIX风格远程命令中的一种.UNIX的复制命令,cp,变成rcp.UNIX的"谁登陆进
来了"命令,who,变成rwho.这系列的命令被统称为"r"系列命令,或者叫"r*"(r星号)命令.
r*命令主要工作于UNIX系统之间,是为互相之间有信任关系的主机设计的.在安全方面考虑的很少,但它们提供了
一个方便的用户环境.
为了在一台叫"delta"的远程计算机上执行"cc file.c"命令,可以输入"rsh delta cc file.c".为了把文件"file.c"
拷贝到delta上面,可以输入"rcp file.c delta:".为了登陆进入delta,可以输入"rlogin delta".如果你以某种
方式管理这台机器,你将不必输入密码.
网络文件系统,最早由Sun Microsystems公司开发,使用UDP,用于在多台计算机上加载UNIX文件系统,非常优秀.一
台没有磁盘的计算机可以访问服务器的硬盘,就像使用自己本地的硬盘一样.在alpha主机上的数据库可以为beta
主机所用,如果数据库文件系统被加载到beta主机上的话.
NFS会明显加重网络的负担,在低速连接的情况下,很难有什么用处,但它的优点也是显而易见的.NFS客户端在内核
中进行实现,允许所有的应用程序和命令使用加载的NFS硬盘,就像使用本地硬盘一样.
简单网络管理协议(SNMP)使用UDP,被用于网络的中心管理机.众所周知,如果有足够的数据,网络管理员就能够检
测和诊断网络的问题.中心管理机使用SNMP从网络上的计算机收集这样的数据.SNMP规定数据的格式;由中心管理
机或者网络管理员来解释这些数据.
X窗口系统使用基于TCP的X窗口协议,它用来在工作站的位图显示器上画出窗口.X窗口不仅仅是画窗口的工具;它
是用户界面设计方面的一整套体系.
有很多关于internet技术的信息本文没有提及.如果读者希望了解更多的知识,可以参考下面列出的项目:
o 管理命令: arp, route, 和 netstat
o ARP: 持久项,发布项,超时项,欺骗
o IP路由表: 主机项,缺省路由,子网
o IP: 生存时间,碎片,ICMP
o RIP, 路由环
o 域名系统
[1] Comer, D., "Internetworking with TCP/IP Principles, Protocols,
and Architecture", Prentice Hall, Englewood Cliffs, New Jersey,
U.S.A., 1988.
[2] Feinler, E., et al, DDN Protocol Handbook, Volume 2 and 3, DDN
Network Information Center, SRI International, 333 Ravenswood
Avenue, Room EJ291, Menlow Par