📄 rfc1180.txt
字号:
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 |
| | 1 |
| --------
| |
--o--------o--------
Ethernet 3
IP network "factory"
图 9. Close-up View of Three IP Networks
在alpha中的路由表是这样的:
---------------------------------------------------------------------
|network direct/indirect flag router interface number|
---------------------------------------------------------------------
|development direct <blank> 1 |
|accounting indirect devnetrouter 1 |
|factory indirect devnetrouter 1 |
---------------------------------------------------------------------
表 10. Alpha路由表
为了讨论路由表,用数字代替名字再把表画一遍:
--------------------------------------------------------------------
|network direct/indirect flag router interface number|
--------------------------------------------------------------------
|223.1.2 direct <blank> 1 |
|223.1.3 indirect 223.1.2.4 1 |
|223.1.4 indirect 223.1.2.4 1 |
--------------------------------------------------------------------
表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)然后扫描它的路由表寻
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -