欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

TCP/IP指南(RFC1180)

程序员文章站 2022-07-05 23:30:51
TCP/IP指南(RFC1180)    TCP/IP指南 (RFC1180——A TCP/IP Tutorial)   ...

TCP/IP指南(RFC1180)

 

 TCP/IP指南

(RFC1180——A TCP/IP Tutorial)

  

本备忘录的状态

  

这本 RFC 是 TCP/IP 协议的指南, 重点介绍通过一个路由 

器从来源主机提交一个 IP 数据包到目的地主机的步骤。 

它不指定一个因特网标准。 

  

目录

  

1.绪论 3

2. TCP/IP概述 3

2.1 基本结构: 3

2.2相关术语 4

2.3.数据传送 5

2.4. 两个网络接口 6

2.5.IP产生专一的逻辑网络 8

2.6.独立的物理网络 8

2.7.互相通信 8

2.8 梗概之后 8

3. 以太网 9

3.1一个类比 9

4.ARP(地址解析协议) 10

4.1.ARP地址转换表 10

4.2.  典型转化情况 10

4.3.ARP "请求/应答" 对 11

4.4.  方案继续 12

5.internet协议 13

5.1.直接的路径选择 13

5.2.间接的路径选择 14

5.3. IP模块选路原则 15

5.4 IP地址 16

5.5域名 16

5.6.路由表 17

5.7.直接路由选择细节 18

5.8.选路步骤 18

5.9.间接路由选择细节 19

5.10.间接选路步骤 20

5.11.选路小结 21

5.12.路径选择的管理 21

6.UDP(用户数据报协议) 22

6.1.端口 22

6.2.校验和 22

7.TCP(传输控制协议) 23

8.网络应用程序 23

8.1.TELNET 24

8.2 FTP 24

8.3 RSH 24

8.4 NFS 25

8.5.SNMP 25

8.6.X-WINDOW 25

9.其他信息 25

10.参考书 26

11.和其他RFC的关系 26

12.安全问题 26

13.作者的地址 27

 

 1.绪论 

  

   这本教程仅仅包含 TCP/IP技术 的突出特点,因此它是 TCP/IP 技术的"梗概"。 

它忽略了TCP/IP发展的历史以及导致它广泛使用的商业原因,并且忽略它在与ISO 

(国际标准化组织)的OSI(开放式系统互连参考模型 )相比的发展前景。实际上, 

很多技术的信息也被忽略。它所讲述的是在 TCP/IP 环境工作的专业人员必须理解 

的最少信息。 这些专业人员包括系统管理员,系统程序员,和网络管理员。 

  

   这本教程使用的例子是在UNIX   TCP/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你必须理解下面的逻辑结构: 

  

 

 

 

 

 

 

 

                    ---------------------------- 

                     |    network applications  | 

                     |                          | 

                     |...  \ | /  ..  \ | /  ...| 

                     |     -----      -----     | 

                     |     |TCP|      |UDP|     | 

                     |     -----      -----     | 

                     |         \      /         | 

                     |         --------         | 

                     |         |  IP  |         | 

                     |  -----  -*------         | 

                     |  |ARP|   |               | 

                     |  -----   |               | 

                     |      \   |               | 

                     |      ------              | 

                     |      |ENET|              | 

                     |      ---@--              | 

                     ----------|----------------- 

                               | 

                     ----------------------o--------- 

                     Ethernet Cable(缆线) 

  

                       图1.TCP/IP的基本结构 

  

   这是TCP/IP协议的分层结构在互连网计算机上的表示,用互连网技术互相通信的每 

台计算机有这样的分层结构。这样的分层结构决定了计算机在internet上互相通信的 

方式。数据通过这样的分层结构从上层传到底层,然后通过网线把数据传送出去。底 

层的水平线代表以太网网线,"O"代表收发器,"*"代表IP地址,"@"代表网址, 

理解这样的分层结构式理解INTERNET技术的基础。这种分层结构贯川于这本指南的始 

终。 

  

 2.2相关术语 

  

    通过一个internet传送的数据流的名字由它在协议堆栈的什么地方存在而决定。 

总体上来说:如果它在一个以太网上,它被称为以太网帧; 

    如果它在以太网与网际协议模块之间,它就被称为一个IP包; 

    如果它在网际协议模块与UDP 模块之间,它被称为一个 UDP包; 

    如果它在网际协议模块和 TCP模块 之间,它被称为一 TCP 包(更通常 

    说,传输消息包); 

    并且如果它在网络应用程序间,它被称为应用消息包。 

    这些定义是不很确切的。不同的版本有不同的定义,要看更精确的定义请参 

考(RFC 1122, section 1.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-1  multiplexers(多路复用 

器)。作为multiplexers 它们复用许多输入到一个输出。它们也是 1-to-n 

de-multiplexers(分路器),作为分路器,它们通过协议头从一个输入产生许多输出。 

  

 

 

 

 

 

 

              1   2 3 ...   n                   1  2 3 ...   n 

               \  | |    /      |               \  | |      /       ^ 

                \ | |   /       |                \ | |     /        | 

              -------------   flow              ----------------   flow 

              |multiplexer|    of               |de-multiplexer|    of 

             -------------   data              ----------------   data 

                   |            |                     |              | 

                   |            v                     |              | 

                   1                                  1 

  

            图 2.  n-to-1 multiplexer and 1-to-n de-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所示: 

                  ---------------------------- 

                |    network applications  | 

                |                          | 

                |...  \ | /  ..  \ | /  ...| 

                |     -----      -----     | 

                |     |TCP|      |UDP|     | 

                |     -----      -----     | 

                |         \      /         | 

                |         --------         | 

                |         |  IP  |         | 

                |  -----  -*----*-  -----  | 

                |  |ARP|   |    |   |ARP|  | 

                |  -----   |    |   -----  | 

                |      \   |    |   /      | 

                |      ------  ------      | 

                |      |ENET|  |ENET|      | 

                |      ---@--  ---@--      | 

                ----------|-------|--------- 

                          |       | 

                          |    ---o--------------------------- 

                          |             Ethernet Cable 2 

           ---------------o---------- 

             Ethernet Cable 1 

  

             图 3.  TCP/IP Network Node on 2 Ethernets 

  

   请注意这台计算机有两个物理地址和两个IP 地址。 

  

   从图3的结构中我们发现计算机有多于一个的物理网络接口,那么IP模块就是 

n_to_m复用器和m_to_n分路器的结合。 

  

 

 

 

         1  2 3 ...   n                   1   2 3 ...   n 

         \  | |      /    |                \  | |      /       ^ 

          \ | |     /     |                 \ | |     /        | 

          -------------   flow              ----------------   flow 

          |multiplexer|    of               |de-multiplexer|    of 

          -------------   data              ----------------   data 

           / | |     \     |                 / | |     \        | 

          /  | |      \    v                /  | |      \       | 

         1   2 3 ...   m                   1   2 3 ...   m 

  

                  图 4.  n-to-m 复用器 and m-to-n 分路器 

  

    从上面我们可以看出这种多路技术可以从任意的方向接收和发送数据,有一个以 

上网络接口的IP模块比我们最初的把数据从一个网络送到另一个网络的例子要复杂的 

多,数据可以从各个网络接口传过来也可被送向网络。 

  

                           TCP      UDP 

                             \      / 

                              \    / 

                          -------------- 

                          |     IP     | 

                          |            | 

                          |    ---     | 

                          |   /   \    | 

                          |  /     v   | 

                          -------------- 

                           /         \ 

                          /           \ 

                       data           data 

                      comes in         goes out 

                     here               here 

  

                     图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,this is jack,..blah blah blah..",如果他想和所有的人交谈, 

他会说"everyone"(广播地址),也就是说:" hello,everyone,this is jack, 

..blah blah blah.."。 

  

  

4.ARP(地址解析协议) 

  

    当发送一个IP包,目的以太网的地址是怎么知道的呢? 

  

    ARP(地址解析协议)用来把IP 地址翻译成物理地址。这种翻译只是在发送IP 

包时,因为这时需要产生IP头和以太网头地址。 

  

4.1.ARP地址转换表 

  

    翻译通过查表进行,这表,叫作ARP地址转换表,放在存储器里,包含每一台 

计算机的信息。其中有一列是IP地址,一列是物理地址。当要把IP地址翻译成物理 

地址时,计算机从表中搜索IP地址。  下面是一个简单的ARP地址转换表: 

  

                       ------------------------------------ 

                  |IP address       Ethernet address | 

                  ------------------------------------ 

                  |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.  Example ARP Table 

    人们的习惯是当写出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请求包的结构是这样的: 

  

                --------------------------------------- 

                |Sender IP Address   223.1.2.1        | 

                |Sender Enet Address 08-00-39-00-2F-C3| 

                --------------------------------------- 

                |Target IP Address   223.1.2.2        | 

                |Target Enet Address <blank>          | 

                --------------------------------------- 

                     表2.  ARP请求包 

  

    每一个ARP模块检查IP地址,如果目标IP地址和自己的IP地址相同,那么它 

直接发一个回答给源以太网。ARP响应包的意思是:"是的,你所说的目标IP地 

址就是我的IP地址 ,让我把我的物理地址告诉你吧!" ARP响应包把"发包人/收 

包人"域交换以不同域ARP请求包,它的结构是这样的: 

  

                --------------------------------------- 

                |Sender IP Address   223.1.2.2        | 

                |Sender Enet Address 08-00-28-00-38-A9| 

                --------------------------------------- 

                |Target IP Address   223.1.2.1        | 

                |Target Enet Address 08-00-39-00-2F-C3| 

                --------------------------------------- 

                     表 3.  ARP响应包 

  

    发送请求包的计算机会收到响应,这样以太网驱动程序检查以太网帧中的 

属性域然后把ARP包送给ARP模块。ARP模块检查ARP包然后把发送ARP响应包 

的计算机的IP地址和物理地址写到其ARP地址转换表中去。 

  

    更新后的ARP地址转换象下面的样子: 

  

                   ---------------------------------- 

                   |IP address     Ethernet address | 

                   ---------------------------------- 

                   |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 地址转换表 

  

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地址,他同样分配一个网络号给这个以太网。 

  

                          A      B      C 

                          |      |      | 

                        --o------o------o-- 

                        Ethernet 1 

                        IP network "development" 

  

                       图 6.  一个IP网络 

  

    当A发送一个IP给B ,则IP头包括A的IP地址作为源IP地址,物理帧头包括A的 

物理地址作为源物理地址。同样,IP头包括B的IP地址作为目的地址,物理帧头包 

括包括B的物理地址作为目的物理地址。 

  

                ---------------------------------------- 

                |address            source  destination| 

                ---------------------------------------- 

                |IP header          A       B          | 

                |Ethernet header    A       B          | 

                ---------------------------------------- 

                    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地址和物理地址。 

  

  

          A      B      C      ----D----      E      F      G 

          |      |      |      |   |   |      |      |      | 

        --o------o------o------o-  |  -o------o------o------o-- 

        Ethernet 1                 |  Ethernet 2 

        IP network "development"   |  IP network "accounting" 

                                   | 

                                   | 

                                   |     H      I      J 

                                   |     |      |      | 

                                 --o-----o------o------o-- 

                                  Ethernet 3 

                                  IP network "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的。 

 

  

                ---------------------------------------- 

                |address            source  destination| 

                ---------------------------------------- 

                |IP header          A       E          | 

                |Ethernet header    A       D          | 

                ---------------------------------------- 

                 表 6.IP包的物理帧中的地址表示 

                          (从A到E(D之前)) 

  

    D的IP模块收到IP包然后向上解析目的IP地址,发现:"这不是我的IP地址,"就 

直接把IP包传递给了E。 

  

  

                ---------------------------------------- 

                |address            source  destination| 

                ---------------------------------------- 

                |IP header          A       E          | 

                |Ethernet header    D       E          | 

                ---------------------------------------- 

                   表 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.4 IP地址 

  

     网络管理员根据计算机隶属于什么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.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"只有一个条目尽管它有3 个IP地址。因此Delta能够用3个中的 

任意一个IP地址登录,用哪一个是没有关系的。当Delta 收到一个IP包并检查它 

的目的地址,它会认可3个中的任意一个IP地址。 

  

   IP网络同样有自己的名字,如果你有3个IP网络,你的用以存储这些名字的 

"network"文件会是下面的样子: 

  

        223.1.2     development 

        223.1.3     accounting 

        223.1.4     factory 

  

    网络号在第一列,对应的名字在第二列。 

  

    从这个例子中你可能已经发现了计算机"alpha"是网络"development"上的 

1号计算机,beta是2号计算机诸如此类。你同样可以说"alpha"是"developme 

nt.1",beta是 "development.2"诸如此类。 

  

    对用户来说上述的hosts文件就已经足够了,但是网络管理员可能用下面的 

行代表delta: 

  

        223.1.2.4     devnetrouter    delta 

        223.1.3.1     facnetrouter 

        223.1.4.1     accnetrouter 

  

    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.直接路由选择细节 

  

   为了解释这个问题,让我们来看一看路由选择的位置(前面我们已经学过): 

  

                        ---------         --------- 

                        | alpha |         | beta  | 

                        |    1  |         |  1    | 

                        ---------         --------- 

                             |               | 

                     --------o---------------o- 

                      Ethernet 1 

                      IP network "development" 

  

               图8.  Close-up View of One IP Network 

  

   在alpha内的路由表可能是这样的: 

     -------------------------------------------------------------- 

     |network      direct/indirect flag  router   interface number| 

     -------------------------------------------------------------- 

     |development  direct                <blank>  1               | 

     -------------------------------------------------------------- 

                  表 8.  Example Simple Route Table 

  

    这些信息在UNIX系统下可以用"netstar -r"命令得到。在这个简单的网络里,所 

有的计算机有统一的路由表。 

  

    为了讨论,这张表再次打印出来(没有网络号到网络名的对应关系): 

  

          -------------------------------------------------------------- 

         |network      direct/indirect flag  router   interface number| 

         -------------------------------------------------------------- 

          |223.1.2      direct                <blank>  1               | 

          -------------------------------------------------------------- 

                表 9.  Example Simple Route Table with Numbers 

  

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.间接路由选择细节 

  

    现在,让我们来看一看复杂的路由选择步骤。 

 

 

 

 

 

          ---------           ---------           --------- 

          | alpha |           | delta |           |epsilon| 

          |    1  |           |1  2  3|           |   1   | 

          ---------           ---------           --------- 

               |               |  |  |                | 

       --------o---------------o- | -o----------------o-------- 

        Ethernet 1                |     Ethernet 2 

        IP network "Development"  |     IP network "accounting" 

                                  | 

                                  |     -------- 

                                  |     | iota |&