1.绪论
这本教程仅仅包含TCP/IP技术的突出特点,因此它是TCP/IP技术的"梗概"。
它忽略了TCP/IP发展的历史以及导致它广泛使用的商业原因,并且忽略它在与ISO
(国际标准化组织)的OSI(开放式系统互连参考模型)相比的发展前景。实际上,
很多技术的信息也被忽略。它所讲述的是在TCP/IP环境工作的专业人员必须理解
的最少信息。这些专业人员包括系统治理员,系统程序员,和网络治理员。
这本教程使用的例子是在UNIXTCP/IP环境下执行的,然而主要方面能在所有
的TCP/IP环境下执行。
这本指南的目的是解释TCP/IP的基本问题而不是定义它。假如有任何问题关于
协议的具体说明,请参考定义RFC的实际的标准。
.下一节是TCP/IP的概述,然后是各个组成部分的具体描述.
2.TCP/IP概述
术语"TCP/IP"通常意味着任何与TCP(传输控制协议)和IP(网际协议)有
联系的东西,它包括其它的协议,应用软件,甚至网络媒介。这些协议的一个示例
是:UDP(用户数据报协议),ARP(地址解析协议),和ICMP(控制报文协议)。
这些应用的一个示例是:telnet(远程登录),FTP(文件传递协议),和rcp。更精确的
应该说是"因特网技术"。使用因特网技术的一个网络被称为"INTERNET(因特
网)"。
2.1基本结构:
为了理解TCP/IP你必须理解下面的逻辑结构:
----------------------------
networkapplications
...\/..\/...
----------
TCPUDP
----------
\/
--------
IP
------*------
ARP
-----
------
ENET
---@--
---------------------------
----------------------o---------
EthernetCable(缆线)
图1.TCP/IP的基本结构
这是TCP/IP协议的分层结构在互连网计算机上的表示,用互连网技术互相通信的每
台计算机有这样的分层结构。这样的分层结构决定了计算机在internet上互相通信的
方式。数据通过这样的分层结构从上层传到底层,然后通过网线把数据传送出去。底
层的水平线代表以太网网线,"O"代表收发器,"*"代表IP地址,"@"代表网址,
理解这样的分层结构式理解INTERNET技术的基础。这种分层结构贯川于这本指南的始
终。
2.2相关术语
通过一个internet传送的数据流的名字由它在协议堆栈的什么地方存在而决定。
总体上来说:假如它在一个以太网上,它被称为以太网帧;
假如它在以太网与网际协议模块之间,它就被称为一个IP包;
假如它在网际协议模块与UDP模块之间,它被称为一个UDP包;
假如它在网际协议模块和TCP模块之间,它被称为一TCP包(更通常
说,传输消息包);
并且假如它在网络应用程序间,它被称为应用消息包。
这些定义是不很确切的。不同的版本有不同的定义,要看更精确的定义请参
考(RFC1122,section1.3.3.)。
驱动程序是直接与网卡接口硬件通信的软件。应用程序模块是与驱动程序`或
与网络应用软件`或另一个应用程序模块通信的软件
术语:驱动程序,应用程序模块,以太网帧,TCP包,UDP包,TCP消息,以及
应用程序消息在此指南中经常被使用。
2.3.数据传送
让我们看看当它经过如图1所示的协议堆栈流动时的情况,当应用程序使用TCP
(传输控制协议),数据在应用程序与TCP模块之间传递。当应用程序使用UDP(用户
数据报协议),数据在应用程序与UDP模块之间传递。FTP(文件传输协议)是使用TCP
包的典型应用。在这个例子的协议堆栈是FTP/TCP/IP/ENET。SNMP(简单网络治理
协议)是使用UDP的应用。在这个例子的协议堆栈是SNMP/UDP/IP/ENET。
TCP模块,UDP模块,和以太网驱动程序是n-to-1multiplexers(多路复用
器)。作为multiplexers它们复用许多输入到一个输出。它们也是1-to-n
de-multiplexers(分路器),作为分路器,它们通过协议头从一个输入产生许多输出。
123...n123...n
\/\/^
\/\/
-------------flow----------------flow
multiplexerofde-multiplexerof
-------------data----------------data
v
11
图2.n-to-1multiplexerand1-to-nde-multiplexer
假如以太网帧离开网卡进入以太网驱动程序,包能向上传递给ARP(地址解析协议)
模块或到IP(网间协议)模块。在以太网帧的字段属性决定了以太网帧是否被传递给
ARP或IP模块。
假如IP报文进入IP包,它被向上传递到TCP或UDP,由在IP头的字段属性决定。
假如UDP报文进入UDP,应用消息向上传递给网络应用程序,这是由UDP头的
端口值决定的。假如TCP消息进入TCP,应用消息向上传递给网络应用程序,这是
由TCP头的端口值决定的。
向下复用很轻易实现因为从每一个开始点只有一条向下的路径;每个协议模块增
加它的头信息从而使包能在目的计算机上被分开。
从应用程序出来的数据通过TCP或者UDP复合到IP模块,然后被送到更低层。
尽管因特网技术支持许多网络媒介,在我们这里使用的例子都是以太网来讨论的
因为以太网是基于IP的最常见物理网络。在图1中的计算机有唯一的以太网连接。6字
节的物理地址对每一个在以太网的接口是唯一的,它们被存储在以太网驱动程序的底
层接口中。
计算机同样有4字节的IP地址,这个地址被存储在IP模块的底层,IP地址对在
internet上的每台计算机必须是唯一的。
每台计算机知道属于自己的IP地址和物理地址。
2.4.两个网络接口
假如一台计算机和2个独立的以太网连接,它的样子如图3所示:
----------------------------
networkapplications
...\/..\/...
----------
TCPUDP
----------
\/
--------
IP
------*----*------
ARPARP
----------
\/
------------
ENETENET
---@-----@--
--------------------------
---o---------------------------
EthernetCable2
---------------o----------
EthernetCable1
图3.TCP/IPNetworkNodeon2Ethernets
请注重这台计算机有两个物理地址和两个IP地址。
从图3的结构中我们发现计算机有多于一个的物理网络接口,那么IP模块就是
n_to_m复用器和m_to_n分路器的结合。
123...n123...n
\/\/^
\/\/
-------------flow----------------flow
multiplexerofde-multiplexerof
-------------data----------------data
/\//\v/123...m123...m
图4.n-to-m复用器andm-to-n分路器
从上面我们可以看出这种多路技术可以从任意的方向接收和发送数据,有一个以
上网络接口的IP模块比我们最初的把数据从一个网络送到另一个网络的例子要复杂的
多,数据可以从各个网络接口传过来也可被送向网络。
TCPUDP
\/
\/
--------------
IP
---
//v
--------------
//datadata
comesingoesout
herehere
图5.IP包的发送和接收的例子
发送IP包到另一个网络的过程叫做传递IP包,一台专门用来传递IP包的计算机
计算机叫做"路由器"。
就如你从图中看到的一样,在路由器上传递的IP包不涉及TCP和UDP模块,一
些路由器执行时更本就不要TCP或UDP模块。
2.5.IP产生专一的逻辑网络
IP模块是interner技术成功的中心所在,当消息向下通过协议栈时每一个模块或
驱动程序加上自己的头到消息中去。每一个模块或驱动程序从消息中去掉相应的头当
消息沿协议栈向上传时,IP头包含了用以从许多物理网络中区分唯一的逻辑网络的IP
地址,互相连接的物理网络是internet的组成部分,这些互相联络的物理网络就构成
了internet。
2.6.独立的物理网络
IP通过网络应用程序处于网络硬件之中,假如你发明新的物理网络,你可以投入
使用只要你用新的驱动程序基于IP。因此,尽管硬件技术在变化网络应用程序仍然是
完美无缺以及不易受攻击的。
2.7.互相通信
假如两台计算机能够互相通信,就称它们是"能互操作的"。假如internet畅通,
就称它们有"互用性"。有多方面用途计算机的用户从互连网获益因为在市场上有的
协同工作能力的计算机。一般地,当你买了一台计算机,它就能互相通信。假如计算
机没有互操作性,且互操作性不能加上,则这样地计算机就没有市场竞争力。
2.8梗概之后
通过后面地学习,我们将回答以下问题:
当发送一个IP包,目的以太网地地址是这样知道地?
当发送IP包时,IP协议是怎样从众多地底层网络中选择的?
客户端的计算机是怎样连上服务器的?
为什么TCP和UDP要同时存在,而不只选其中一种?
网络应用程序的可用性是什么?
这些问题将依次回答。
3.以太网
这一节是以太网技术的简短复习。
一个以太网帧包含目的地地址,源地址,属性域,和数据。
物理地址是6字节。每一个装置有它自己的物理地址和监听物理帧中的目的地址。
所有的装置用通配符"FF-FF-FF-FF-FF-FF"(十六进制)的方式监听目的地址,被
称为"广播"地址。
以太网使用CSMA/CD(带有检测冲突的载波侦听多路存取)。CSMA/CD意味着
所有装置在同一个媒介中通信,在某一个时刻只能有一个在传送数据,它们能同时
接收数据。假如2个装置在同一个传送数据,那么传送冲突被发觉,在再次发送之前
两个装置等随机(但是很短)的一段时间。
3.1一个类比
一个很好的说明以太网技术的类比:一群人在很小道`很黑的屋里聊天。在这个类
比中:物理的网络媒介是空气中的声波而不是在同一根同轴电缆中的电信号
每一个人能听见其它人的说话(信号感觉),每一个人有相同的权利说话(多种
可能),但是没有人会发表长篇大论因为他们懂礼貌。假如有人不懂礼貌,他被要求
离开房间(也就是,被抛离网络)。
没有人会说话当有人说话时,但是当两个人同时开始说话,他们会立即知道因为
他们听到一些他们自己没有说过的话(冲突检出)。当两个人意识到时,他们等一会,
然后一人开始说话。另一个在开始自己的说话之前听着别人说一直等着第一个人说完。
每一个人有唯一的名字(唯一的物理地址)以避免混乱。某一个时间一人说话,
他会先通知他将要交谈的人以及自己的名字(以太网目的地址,源地址,分别的),
也就是:"Hello,thisisjack,..blahblahblah..",假如他想和所有的人交谈,
他会说"everyone"(广播地址),也就是说:"hello,everyone,thisisjack,
..blahblahblah.."。
4.ARP(地址解析协议)
当发送一个IP包,目的以太网的地址是怎么知道的呢?
ARP(地址解析协议)用来把IP地址翻译成物理地址。这种翻译只是在发送IP
包时,因为这时需要产生IP头和以太网头地址。
4.1.ARP地址转换表
翻译通过查表进行,这表,叫作ARP地址转换表,放在存储器里,包含每一台
计算机的信息。其中有一列是IP地址,一列是物理地址。当要把IP地址翻译成物理
地址时,计算机从表中搜索IP地址。下面是一个简单的ARP地址转换表:
------------------------------------
IPaddressEthernetaddress
------------------------------------
223.1.2.108-00-39-00-2F-C3
223.1.2.308-00-5A-21-A7-22
223.1.2.408-00-10-99-AC-54
------------------------------------
表1.ExampleARPTable
人们的习惯是当写出4字节的IP地址时每一字节用十进制且用句点把每一字节
分开。当写出6字节的物理地址时,习惯上是每一字节用十六进制且用冒号或负号
把每一字节分开。
ARP地址转换协议是必须的因为IP地址和物理地址是互不相干的,你不可能用
一种算法把IP地址翻译成物理地址。IP地址是由网络治理员基于internet而选择的,
当计算机internet的另外一个地方,那么它的IP地址也随之改变了。物理地址是由制
造商基于以太网地址空间而决定的,当物理硬件接口改变了,它的物理地址也随之改
变了。
4.2.典型转化情况
当正常运行一个网络应用程序,比如:TELNET,发送一个应用程序消息给TCP,
然后TCP发送相应的TCP消息给IP模块,从而目的IP地址就被应用程序`TCP模块`IP模块
知道,这时IP包被建立然后预备传给以太网驱动程序,但是在这之前必须知道物理地
址,而ARP地址转换表就是用来找到物理地址的。
4.3.ARP"请求/应答"对
但是ARP地址转换表最初是怎样建立的呢?回答是它是由ARP自动根据"必须"的原
则建立的。
当ARP地址转换表不能翻译地址时,会发生下面两件事:
1.一个携带物理地址的ARP请求包被发送向网络上的每一台计算机。
2.发出的IP包排队等待。
每一台计算机的物理接口收到广播的物理帧。每一个以太网驱动程序检查物理帧
的属性域然后传递ARP包给ARP模块。ARP请求包的意思是:"假如你的IP地址和目
标IP地址一样,那么请你告诉我你的物理地址。"一个ARP请求包的结构是这样的:
---------------------------------------
SenderIPAddress223.1.2.1
SenderEnetAddress08-00-39-00-2F-C3
---------------------------------------
TargetIPAddress223.1.2.2
TargetEnetAddress<blank>
---------------------------------------
表2.ARP请求包
每一个ARP模块检查IP地址,假如目标IP地址和自己的IP地址相同,那么它
直接发一个回答给源以太网。ARP响应包的意思是:"是的,你所说的目标IP地
址就是我的IP地址,让我把我的物理地址告诉你吧!"ARP响应包把"发包人/收
包人"域交换以不同域ARP请求包,它的结构是这样的:
---------------------------------------
SenderIPAddress223.1.2.2
SenderEnetAddress08-00-28-00-38-A9
---------------------------------------
TargetIPAddress223.1.2.1
TargetEnetAddress08-00-39-00-2F-C3
---------------------------------------
表3.ARP响应包
发送请求包的计算机会收到响应,这样以太网驱动程序检查以太网帧中的
属性域然后把ARP包送给ARP模块。ARP模块检查ARP包然后把发送ARP响应包
的计算机的IP地址和物理地址写到其ARP地址转换表中去。
更新后的ARP地址转换象下面的样子:
----------------------------------
IPaddressEthernetaddress
----------------------------------
223.1.2.108-00-39-00-2F-C3
223.1.2.208-00-28-00-38-A9
223.1.2.308-00-5A-21-A7-22
223.1.2.408-00-10-99-AC-54
----------------------------------
表4.更新后的ARP地址转换表
4.4.方案继续
新的对应关系被自动加到表中去,得到这些对应关系需要几个毫秒。在第2步
时,IP包在排队等候。接着,通过查表把IP地址翻译成物理地址然后就能把以太
网帧发送出去了。因此,有了第3,4,5步后,可以看出源计算机的转换步骤依次
为:
1.一个ARP请求包以广播的形式发送给网上的每一台计算机。
2.须转发的IP包在排队等候。
3.带着相应的IP地址到物理地址转化的ARP响应包到达源计算机,用以更新
ARP地址转换表
4.对于等候的IP包,通过查表把IP地址翻译成物理地址。
5.最后以太网帧被发送出去。
简要的说,当ARP表不能翻译时,IP包就得等候,通过ARP请求包/ARP响应
包得到对应关系,这样等待的IP包就被发送出去了
每一台计算机都有对应于它的以太网的ARP地址转换表,假如目的计算机不
存在,就不会有ARP响应包,在ARP表中就没有入口。则送给这个地址的IP包被
丢弃。上层协议不能从目的IP地址中分辨出是否是以太网坏了还是计算机没有工
作
一些IP协议和ARP在等待ARP响应包时不处理IP包,而是把它丢弃,而丢弃的
IP包的恢复工作由TCP模块或UDP网络应用程序来处理。这种恢复由"时和重传"
来处理。重发的信息会成功的发送因为在这之前被丢弃的包已经使ARP表被更新。
5.internet协议
IP模块是internet技术的要害,IP的本质是它的路由表。IP协议用存储器中的路由表
来选择路由当传递IP包时。路由表的内容由网络治理员定义,错误将导致不能通信。
理解路由表是如何工作的就是理解网络是如何工作的,这种了解是必须的对于治理
和维护一个IP网络。
为了更好的了解路由表必须先对路由有一个一般的熟悉,然后了解IP网络地址,最后
才深入细节。
5.1.直接的路径选择
下面的图是一个只有3台:A,B,C计算机的小型internet。每一台计算机有相同的
TCP/IP协议就如图1所示。每一台计算机的以太网接口都有自己的物理地址。每一台计
算机都有网络治理员分配的IP地址,他同样分配一个网络号给这个以太网。
ABC
--o------o------o--
Ethernet1
IPnetwork"development"
图6.一个IP网络
当A发送一个IP给B,则IP头包括A的IP地址作为源IP地址,物理帧头包括A的
物理地址作为源物理地址。同样,IP头包括B的IP地址作为目的地址,物理帧头包
括包括B的物理地址作为目的物理地址。
----------------------------------------
addresssourcedestination
----------------------------------------
IPheaderAB
EthernetheaderAB
----------------------------------------
IP包中的物理帧的地址(A到B)
在这个简单的例子中,IP在头上因为IP把很少加到以太网提供的服务中去。然而
IP确实增加了额外的开销:消耗了CPU和用以产生、传送、解析IP头的网络带宽。
当B的IP模块接收到从A来的IP包,然后把其中的目的IP地址和自己的IP地址相比
较,看是否匹配,然后把数据包传向上层的协议。
A和B的通信用直接的路径选择。
5.2.间接的路径选择
下面是一个比较接近现实的internet的图。它由3个以太网和3个IP网络由一台叫
做"计算机D"的IP路由器连接而成。每一个IP网络由4台计算机组成,每一台计算机
由自己的IP地址和物理地址。
ABC----D----EFG
--o------o------o------o--o------o------o------o--
Ethernet1Ethernet2
IPnetwork"development"IPnetwork"accounting"
HIJ
--o-----o------o------o--
Ethernet3
IPnetwork"factory"
图7.3个IP网络组成的internet
除了计算机D,每一台计算机都有象图1所示的TCP/IP协议栈。计算机D是路由器,
它和3网络相连所以有3个IP地址和3个物理地址。计算机D有和图3相类似的TCP/IP协
议栈,只不过它用3个ARP模块和3个以太网驱动程序代替了图2中所示的2个。请记
住计算机D只有一个IP模块。
网络治理员分配了唯一的IP网络号给每一个以太网。但是IP网络号没有在图中表
示出来,而只给出了网络名字。
当A发送一个IP包给B时,其过程和上面举的单一网络的例子是一样的。任何处
于一个IP网络的计算机之间的通信和前面讨论的直接路径选择相同。
计算机D和A通信,他们是直接通信。计算机D和E通信,是直接的。计算机D
和H通信,是直接的。这是因为每一对都处于同一个IP网络。
但是,当计算机A和处于路由器另一端的计算机通信时,路径就不是直接的了。A
必须通过D把IP包传递到下一个IP网络。这种通信是间接的。
按这种路径走的IP包由IP模块和TCP,UDP,网络应用程序处理。
假如A发送一个IP包给E,则源IP地址和源物理地址是A的,目的IP地址是E的,
但是因为A的IP模块把IP包传递给D,所以目的物理地址是D的。
----------------------------------------
addresssourcedestination
----------------------------------------
IPheaderAE
EthernetheaderAD
----------------------------------------
表6.IP包的物理帧中的地址表示
(从A到E(D之前))
D的IP模块收到IP包然后向上解析目的IP地址,发现:"这不是我的IP地址,"就
直接把IP包传递给了E。
----------------------------------------
addresssourcedestination
----------------------------------------
IPheaderAE
EthernetheaderDE
----------------------------------------
表7.IP包的物理帧中的地址表示
(从A到E(D之后))
一言以蔽之,对于直接通信,源IP地址和源物理地址都是发送者的,目的IP
地址和目的物理地址都是接收者的。对于间接通信,IP地址和物理地址不是这样的。
这个例子是简化的。实际的网络是由许多的因素,比如许多的路由器和各种
各样的物理网络所组成。象例子一样的网络是有可能存在的因为有时网络治理员想
把一个大的以太网分开为了防止以太网的广播风暴。
5.3.IP模块选路原则
这一节的梗概只讲如何选路而不讲为什么。现在让我们来看一看IP模块
的选路原则或者说是算法吧。
对于一个要发的IP包,从上层进入IP,IP模块必须决定是直接选路还是间接
选路,然后IP模块要选择一个低层的网络接口。这些选择是通过咨询路由表后
作出的。
对于一个进来的IP包,从低层接口进入IP模块,IP模块必须决定是继续转发
还是把IP包往上层传递。假如IP包继续转发,则它被视为一个要发的IP包。
当一个进来的IP包到达则它不在同一个网络接口内继续传递。
这些决定是在IP包被送到低层接口以前作出的,也在ARP表被调用之前。
5.4IP地址
网络治理员根据计算机隶属于什么IP网络分配给每一台计算机一个IP地址。
4字节中的一部分是网络号,其余部分是主机号。对于表1的计算机有IP地址为:
223.1.2.1,其中网络号为:223.1.2,主机号是1。
地址的一部分用作网络号,主机号是由4字节地址的上面的比特决定的。
在这本指南用的例子里的IP地址是类型C,意思是上3比特说明21比特是网络
号和8比特是主机号。这样就答应有2097152个类型C的网络,每个网络可以
有254台主机。
IP地址空间是由NIC(网络信息中心)治理的。所有连到万维网的的局域
网都必须使用NIC分配的网络号。假如你建立了你自己的网络且你不预备连上
因特网,你仍然要从NIC那儿获得你的网络号。假如你坚持用你自己的号,那
么你冒着混乱的危险,当你连上另一个网时会使一些不可预料的事情发生。
5.5域名
人们习惯用名字识别计算机,而不是数字。一台名叫"alpha"的计算机可能
有IP地址:223.1.2.1。对于一些小的网络,这种"名字到IP地址"的信息经常保
存在每一台计算机的叫"hosts"文件里。对于一些大的网络,这种对应关系保存在
服务器上当需要时通过网络来访问。这种文件的其中几行可能是这样的:
223.1.2.1alpha
223.1.2.2beta
223.1.2.3gamma
223.1.2.4delta
223.1.3.2epsilon
223.1.4.2iota
IP地址在第一列,计算机名字在第二列。
大多数情况下,你可以保存同样的"hosts"文件在所有的计算机上。你可能
注重到了"delta"只有一个条目尽管它有3个IP地址。因此Delta能够用3个中的
任意一个IP地址登录,用哪一个是没有关系的。当Delta收到一个IP包并检查它
的目的地址,它会认可3个中的任意一个IP地址。
IP网络同样有自己的名字,假如你有3个IP网络,你的用以存储这些名字的
"network"文件会是下面的样子:
223.1.2development
223.1.3accounting
223.1.4factory
网络号在第一列,对应的名字在第二列。
从这个例子中你可能已经发现了计算机"alpha"是网络"development"上的
1号计算机,beta是2号计算机诸如此类。你同样可以说"alpha"是"developme
nt.1",beta是"development.2"诸如此类。
对用户来说上述的hosts文件就已经足够了,但是网络治理员可能用下面的
行代表delta:
223.1.2.4devnetrouterdelta
223.1.3.1facnetrouter
223.1.4.1accnetrouter
hosts文件中的这些新3行给出了每一个delta的IP地址和一个有意义的名。事实
上第一个IP地址的两个名字:"delta"和"devnetrouter"是同义字。在实践中,"delta"
代表计算机多种用途的名字,其他三个名字只是在治理IP路由表时会用到。
这些文件用于网络治理,网络应用程序给出了一个有意义的名字。其实在操纵int
ernet时他们是不需要的,但是他们给我们带来了方便。
5.6.路由表
IP模块是怎样知道用哪一个网络接口当发送IP包时?IP模块用从目的IP地址提取
出来IP网络号作为索引字查询路由表。
路由表的每一条路线包含在一行中。路由表的第一列是:IP网络号,直接路径选择
/间接路径选择标记,路由器的IP地址,接口号。每一个IP包传递时都要用到这张表。
在大多数计算机上路由表可以用"route"命令。路由表的内容是由网络治理员定
义的,因为是网络治理员分配IP地址给计算机。
5.7.直接路由选择细节
为了解释这个问题,让我们来看一看路由选择的位置(前面我们已经学过):
------------------
alphabeta
11
------------------
--------o---------------o-
Ethernet1
IPnetwork"development"
图8.Close-upViewofOneIPNetwork
在alpha内的路由表可能是这样的:
--------------------------------------------------------------
networkdirect/indirectflagrouterinterfacenumber
--------------------------------------------------------------
developmentdirect<blank>1
--------------------------------------------------------------
表8.ExampleSimpleRouteTable
这些信息在UNIX系统下可以用"netstar-r"命令得到。在这个简单的网络里,所
有的计算机有统一的路由表。
为了讨论,这张表再次打印出来(没有网络号到网络名的对应关系):
--------------------------------------------------------------
networkdirect/indirectflagrouterinterfacenumber
--------------------------------------------------------------
223.1.2direct<blank>1
--------------------------------------------------------------
表9.ExampleSimpleRouteTablewithNumbers
5.8.选路步骤
alpha发送一个IP包给beta,IP包在alpha的IP模块里,目的IP地址是beta或者是
223.1.2.2。IP模块从IP地址中提取出网络号然后扫描路由表的第一列,在第一个
条目找到了匹配网络。
其他信息表明在这个网络的计算机能够直接到达通过接口1,ARP地址转换表
使我们得到了它的物理地址,然后这个物理帧直接经接口1到达了beta。
假如应用程序试图发数据到一个不在网络"development"上的IP地址,则IP
模块不能在路由表中找到匹配条目,IP模块将丢弃这个IP包。一些计算机会提供
"网络不可到达"的出错信息。
5.9.间接路由选择细节
现在,让我们来看一看复杂的路由选择步骤。
---------------------------
alphadeltaepsilon
11231
---------------------------
--------o---------------o--o----------------o--------
Ethernet1Ethernet2
IPnetwork"Development"IPnetwork"accounting"
--------
iota
1
--------
--o--------o--------
Ethernet3
IPnetwork"factory"
图9.Close-upViewofThreeIPNetworks
在alpha中的路由表是这样的:
---------------------------------------------------------------------
networkdirect/indirectflagrouterinterfacenumber
---------------------------------------------------------------------
developmentdirect<blank>1
accountingindirectdevnetrouter1
factoryindirectdevnetrouter1
---------------------------------------------------------------------
表10.Alpha路由表
为了讨论路由表,用数字代替名字再把表画一遍:
--------------------------------------------------------------------
networkdirect/indirectflagrouterinterfacenumber
--------------------------------------------------------------------
223.1.2direct<blank>1
223.1.3indirect223.1.2.41
223.1.4indirect223.1.2.41
--------------------------------------------------------------------
表11.Alpha的用数字表示的路由表
在Alpha的路由表中的路由器是delta连到网络"development"上的IP地址
5.10.间接选路步骤
Alpha发送一个IP包给epsilon.IP包在alpha的IP模块中,目的IP地址是epsilon
(223.1.3.2)。IP模块从IP地址中提取出网络部分(223.1.3)然后扫描路由表的第一
列寻找匹配的网络,在第二个条目中找到它。
这个条目说明在网络223.1.3上的计算机通过路由器"devnetrouter"到达。Alpha
的IP模块通过ARP表把devnetrouter的IP地址翻译成物理地址,然后直接通过Alpha
的接口1把IP包发给devntrouter。IP包仍然包括epsilon的IP地址
IP包到达delta的网络"development"然后被传到delta的IP模块。目的IP地址被检
查因为它和delta的任何IP地址都不同,所以delta向前传递这个IP包。
Delta的IP模块从目的IP地址中提取出网络部分(223.1.3)然后扫描它的路由表寻
找匹配的网络。Delta的路由表是这样的:
----------------------------------------------------------------------
networkdirect/indirectflagrouterinterfacenumber
----------------------------------------------------------------------
developmentdirect<blank>1
factorydirect<blank>3
accountingdirect<blank>2
----------------------------------------------------------------------
表12.Delta的路由表
下面是Delta的路由表被再次画出(用数字表示):
----------------------------------------------------------------------
networkdirect/indirectflagrouterinterfacenumber
----------------------------------------------------------------------
223.1.2direct<blank>1
223.1.3direct<blank>3
223.1.4direct<blank>2
----------------------------------------------------------------------
表13.Delta的用数字表示的路由表
在第二个条目发现了匹配的网络,IP模块通过接口3把IP包直接发给epsilon。
IP包包括epsilon的IP地址和物理地址。
IP包到达epsilon然后向上传到epsilon的IP模块,目的IP地址被检查发现和
epsilon的IP地址相同,从而IP包被传到上面的协议层。
5.11.选路小结
当一个IP包要在一个很大的网上传递,在它到达目的地以前它要通过很多的路由
器,它所选择的路径不是由中心的资源控制的而是通过路由表的查询而确定的。每一
台路由器只决定它传递的下一步然后依靠这台路由器沿这条路径传递。
5.12.路径选择的治理
在一个大的网络上维护所有计算机的路由表正确是一项艰巨的任务,网络治理员
经常更改网络配置以适应网络状况的变化。路由表中的错误会导致中断通信,这种错
误是很难察觉的。
通过简单的配置使网络可靠需要不断的尝试。举个例子,分配IP网络到以太网的
最简单的方法是分配一个网络号给每一个以太网。
我们可以从协议和网络应用程序中得到帮助。ICMP(网间控制报文协议)能够汇
报出一些路由问题。对于小的网络的路由表是由网络治理员加到每一台计算机上去
的。对于大的网络,网络治理员用路由协议通过网络寻找路由使这种手工的操作变为
自动。
当一台计算机从一个网络移到另一个,它的IP地址必须改变,它原来的IP地址就
不正确了。这些变化需要写到"hosts"文件中去。这个单调的文件变的难以维护即使
对于中等的网络。域名服务器用来解决这些问题。
6.UDP(用户数据报协议)
UDP是在IP层之上的两个主要协议之一。它提供用户网络应用程序的服务,用到UDP
的网络应用程序有:NFS(网络文件系统)和SNMP(简单网络治理协议)。UDP服务只
是在IP的基础上加了少许一点。
UDP是无连接的数据报服务没有丢失检测。UDP不和远端的UDP模块保持点到点连接,
,它仅仅把包发送出去而不管有没有丢失和接收来自外面的数据包。
UDP在IP的基础上加了两个属性,一个是端口号,另一个是检查数据完整性的校验和。
6.1.端口
客户端是怎样连上服务器端的呢?
UDP和应用程序之间的通信路径是通过UDP端口。这些端口是用数字表示的,从0开始
。提供服务的应用程序用特定的端口号等待消息的进入。服务器不间断扫描客户端的
请求服务。
举个例子,比如说SNMP,叫做一个SNMP代理,总是在端口161上等待消息。每台计
算机只能有一个SNMP代理因为只有一个UDP端口号161。这个端口号是众人皆知的,它
是固定的,是网络分配的唯一的号。假如SNMP客户请求服务,则它就发送UDP包到目的
计算机的端口161。
当应用程序发送UDP包,则远端收到的是一个单元。比如,假如应用程序发了5个UDP
包,则远端就读取5次。当然,发的5个包和读取的5个包大小相等。
UDP保存每一个完整的包,它不把两个应用程序消息加在一块,也不把一个包拆成两
个。
6.2.校验和
在IP头域里显示"UDP"的IP包被送到UDP模块。当UDP模块收到UDP包它检查它的校验
和。假如它的校验和为0,则意味着在发送端校验和没有被计算,可以忽略。因此发送
端的计算机的UDP模块产不产生校验和没关系。假如物理帧在一个网络的2个UDP模块间
通信,则不需要产生校验和。但是我们推荐使用校验和因为路由表的改变可能导致数
据通过不可靠的媒介。
假如校验和是正确的或为0,目的端口就会检查它。UDP包传向这个端口,排队等待
应用程序处理它,否则UDP包就会被丢弃。假如UDP包到达的速度比应用程序能够处理
的速度快或者等待的UDP包把队列排满,UDP包就会被UDP模块丢弃。UDP模块会一直丢
弃UDP包直到队列有多余的空间。
7.TCP(传输控制协议)
TCP提供和UDP不同的服务,TCP提供有连接的比特流,不同于无连接的数据报服务。
TCP保证可靠传输,而UDP不保证。
TCP被网络应用程序调用时保证可靠传输和不能有超时和误传。两个典型的网络应用
程序时FTP(文件传送协议)和TELNET。其他的流行的TCP网络应用程序包括:X-WINDOW
系统,rcp(远程复制),和rseriescommands.TCP的强大功能时要代价的:它需要更多
的CPU和网络带宽。TCP模块的内部比UDP模块要复杂的多。
和UDP相似,网络应用程序和TCP端口连接。特定的端口号对应特定的应用程序。举
个例子TELNET服务器使用端口23。TELNET客户端只能通过连接特定计算机上的端口23
才能成功。
当应用程序通过TCP启动,在客户端的TCP模块和在服务器端的TCP模块互相通信,这
些两个端点的TCP模块构成了虚拟的电路。这个虚拟电路消耗两端的资源。虚拟电路时
双向的,数据能够同时往两个方向传。应用程序把数据写到TCP端口,数据通过网络由
远端的应用程序控制。
TCP包可以分成任意大小,包与包之间没有界限。比如,假如应用程序往TCP端口发
了5次,远端的应用程序也许要读10次,或者它就只读一次。在一端写的次数和大小与
另一端读的次数和大小时没有关联的。
TCP是一个有超时和重发的滑动窗口协议。发出去的包必须得到远端的确认。确认信
息可以携带在数据包上。两个接受端能控制远端,从而防止缓冲器溢出。
对于所有的滑动窗口协议,有一个窗口的大小,窗口的大小决定了在收到确认信息
以前可以发送的总的数据。对于TCP,这个数量不是TCP段的数量而是字节的数量。
8.网络应用程序
为什么TCP和UDP要同时存在,而不是只有一个?
他们提供不同的服务,大部分的应用程序只用其中的一个。你,程序员,当然选择
最适合你的协议了。假如你需要可靠的数据传送,TCP可能是最佳的选择了。假如你需
要数据包服务,UDP是最佳的。假如你需要高效的长的通路,TCP可能是最佳的。假如
你需要快的网络反应时间,UDP可能是最佳的。假如你不想把分类,则"最佳"的选择
就是模糊的。然而,应用程序能够弥补选择上的不足。举个例子,假如你选择UDP可是
你需要可靠性,则在应用程序上加上可靠性就可以了。假如你选择TCP可是你需要标记
的服务,那么应用程序必须在字节流里加入标记。
什么样网络应用程序是有用的?
这可就有许多可以罗列的。数目是连续增长的。自从internet技术开始就有一些应
用程序了:TELNET和FTP。其他的是较新的:X-WINDOWS和SNMP。下面是在这本指南提
到的网络应用程序的简短说明。
8.1.TELNET
TELNET提供远端登录服务。它的操作和外型同通过电话拨号是相似的。在命令行上
用户敲入:"TELNETDELTA"就会收到从"delta"来的登录提示。
TELNET很好使,它使一个老的应用程序有着广泛的应用。TELNET通常在不同的操作
系统间工作。举个例子,TELNET客户端使VAX/VMS系统,而服务器端是UNIXV系统。
8.2FTP
文件传送协议(FTP),是和TELNET一样久远的网络应用程序,也有广泛的应用。从
操作来看好象你登录上了远端的计算机。但是你必须用非凡的命令取代你习惯上的命
令。FTP命令答应你在两台计算机之间拷贝文件。
8.3RSH
远端shell(rsh或者remsh)是全部远端UNIX类型命令族中的一个。UNIX拷贝命令
--CP,变成了RCP。UNIX命令"谁在登陆"WHO变成了RWHO。这个系列都被变成了"R
"系列命令。
R*命令主要工作在UNIX系统和被设计成在互相信任主机间相互操作。安全性很少
被考虑,但是他们提供了方便的用户环境。
为了在一台远端叫做delta的计算机上执行命令"ccfile.c",输入"rshdelta
ccfile.c",为了拷贝文件到delta上,输入"rcpfile.cdelta"。为了登陆到
delta上,输入"rlogindelta",假如你在某种特定的方式上治理这台计算机,你
将不会有登陆提示。
8.4NFS
网络文件系统,是由美国SUN公司开发的,使用UDP,它在不同的计算机之间上载
UNIX系统文件是很出色的。一个无磁盘的工作站通过存取服务器的硬盘就好象磁盘是
本地的。在主机"alpha"上的单一的数据库同样能被主机"beta"使用只要数据库文件用
NFS上载在"beta"上。
NFS加入大量的信息给网络从而使连接的速度很慢,但是它的优点使主要的。NFS客
户端在内核执行,答应使用NFS的磁盘好象在本地一样。
8.5.SNMP
简单网络治理协议(SNMP)使用UDP,被设计成由中心网络点来治理。它很知名如
果给它足够的数据,网络治理员就能够发觉和诊断网络问题。中心点用SNMP从在网上
的计算机收集数据。SNMP定义了这种数据的格式。由中心点或网络治理员来解释这种
数据。
8.6.X-WINDOW
X-WINDOW系统使用基于TCP的XWINDOW协议来画在工作站上的位图显示窗口。X
WINDOW不仅仅是画窗口,它能够用来设计用户界面。
9.其他信息
许多有关internet技术的信息没有被包括在这本指南里。读者假如想深入学习,请
看下面列出的相关信息:
*网络治理命令:arp,route,netstat
*ARP;permanententry,publishentry,time-outentry,spoofing
*IP路由表:hostentry,defaultgateway,subnets
*IP:time-to-livecounter,fragmentation,ICMP
*RIP:routingloops
*DNS(域名解析系统)
10.参考书
[1]Comer,D.,"InternetworkingwithTCP/IPPrinciples,Protocols,
andArchitecture",PrenticeHall,EnglewoodCliffs,NewJersey,
U.S.A.,1988.
[2]Feinler,E.,etal,DDNProtocolHandbook,Volume2and3,DDN
NetworkInformationCenter,SRIInternational,333Ravenswood
Avenue,RoomEJ291,MenlowPark,California,U.S.A.,1985.
[3]SpiderSystems,Ltd.,"PacketsandProtocols",SpiderSystems
Ltd.,StanwellStreet,Edinburgh,U.K.EH65NG,1990.
11.和其他RFC的关系
这本RFC是一本指南,它不同与其他任何的RFC。
12.安全问题
在TCP/IP里有一些安全问题需要考虑。对一些人来说安全是一个严厉的问题,而
另一些人不这样认为,这就看用户的需求了。
这本指南没有讨论这些问题,但是假如你想学习更多的这方面的东西你可以从
ARP-spoofing开始,接着用<<RFC1122>>的"SecurityConsiderations"节了解更多
的信息