📄 rfc1180.txt
字号:
| | | | | | | | |
--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路由器
和多种类型的物理网络.当网络管理员为了使广播信息尽量本地化而将一个大的网络分割成几个小网络的时候,就
会出现本例中的情况.
5.3 IP模块路由准则
上面的内容只介绍了路由时发生了什么,没有介绍它是怎么发生的.现在,让我们仔细了解一下IP模块使用的路由
准则,或者称之为路由的运算法则:
对于一个向外发送的IP包来说,它从上层协议进入IP,IP必须决定应该直接还是间接发送这个IP包,IP还必须选
择一个底层的网络接口设备.这些决定都是在查询路由表之后做出的.
对于一个接收到的IP包来说,它从下层接口进入IP,IP必须决定应该将它转发还是传向上层协议.如果这个IP包
将被转发,它又会被当作一个向外发送的IP包来对待.
当一个接收的IP包到达后,它绝不会从同一个网络接口被转发回去.
这些决定是在IP包传给底层网络接口和查询ARP表之前作出的.
5.4 IP地址
网络管理员根据一台计算机所属的网络来给它分配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获得你的网络号.如果你坚持使用自己决定的网络号,那
么当你的网络和其他网络相连接的时候就有可能发生混乱.
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"的计算机在这个文件里
只有一个条目,尽管它实际上有三个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的时候,这些文
件不是必不可少的,但是他们的确能给我们带来不少方便.
5.6 IP路由表
IP发送IP包的时候,它是怎么知道应该使用哪一个底层网络接口的呢?首先,IP从目的IP地址中分解出IP网络号,
然后以此为关键值在路由表中进行搜索,从而实现这一选择.
每一条路由在路由表中都占有一行.路由表中主要的列有:IP网络号,直接/间接标记,路由器IP地址,接口号.这个
表根据每个向外发送的IP包的IP地址进行查询.
在大多数计算机上,路由表可以用"route"命令来修改.路由表的内容由网络管理员规定,因为IP地址也是由网络
管理员分配给每台计算机的.
5.7 直接路由详情
为了了解它是如何使用的,让我们详细分析一下前面例子中的路由情况.
--------- ---------
| alpha | | beta |
| 1 | | 1 |
--------- ---------
| |
--------o---------------o-
以太网 1
IP网络 "development"
图 8. 一个IP网络的详图
alpha内部的路由表是这个样子:
--------------------------------------------------------------
|网络 直接/间接标记 路由器 接口号 |
--------------------------------------------------------------
|development direct <blank> 1 |
--------------------------------------------------------------
表 8. 一个简单路由表的例子
这样的路由表在大多数UNIX操作系统下可以用"netstat -r"命令查看.在这个简单的网络里,所有计算机都有同样
的路由表.
为了便于讨论,下面再次列出这个路由表,但没有把网络号转换成网络名字.
--------------------------------------------------------------
|网络 直接/间接标记 路由器 接口号 |
--------------------------------------------------------------
|223.1.2 direct <blank> 1 |
--------------------------------------------------------------
表 9. 用网络号表示的路由表
5.8 直接路由过程
alpha向beta发送一个IP包.这个IP包正处于alpha的IP模块,目的IP地址是beta或223.1.2.2.IP从这个IP地址中分
离出网络地址部分,并且从路由表的第一列中查询匹配项在这个网络中,第一项就符合匹配条件..
第一项中的其它部分内容说明这个网络上的计算机可以通过一号接口直接到达.然后,ARP表查询完毕,beta的IP地
址被解析为以太地址,最后,以太帧通过一号接口之际发送给beta.
如果一个应用程序试图向一个development网络上不存在地IP地址发送数据.IP将无法在路由表中查到匹配项.因
此IP将丢弃这个IP包.有些计算机会提供一个"网络不可到达"的出错提示信息.
5.9 间接路由详情
下面,让我们对前面提到的复杂的网络路由进行更细致的分析.
--------- --------- ---------
| 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 <blank> 1 |
|accounting indirect devnetrouter 1 |
|factory indirect devnetrouter 1 |
---------------------------------------------------------------------
表 10. Alpha 路由表
为了便于讨论,下面再次列出这个路由表,但没有把网络号转换成网络名字.
--------------------------------------------------------------------
|网络 直接/间接标记 路由器 接口号 |
--------------------------------------------------------------------
|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的路由表
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -