天天看點

RFC1219-- On the Assignment of Subnet Numbers

使用這種技術純碎是本地的事情,不會影響其他網絡。此技術的使用是自由決定的。

綜述:

       RFC-950 指定了用掩碼進行子網的劃分。RFC-950沒有指明同一個網絡的不同子網是不是要有不同的掩碼。這種歧義令人遺憾,因為這導緻了路由協定不支援不同掩碼。

       網絡管理者必須決定每個子網的掩碼。這包括估計每個子網的主機數。因為預測每個子網的增長速度是不可能的,效率低的決策經常被采取,同時導緻其他子網的使用率不足或因為超過最大主機數而導緻重新編号。

       該備忘錄指明了一個省去估計子網規模的配置設定子網的方法。

       在新的子網路遮罩中,主機無需改變位址。

       這不是新技術,但也很少有人知道,甚至幾乎沒有人實作。随着新的諸如OSPF路由協定的發展,好好利用這個技術是有可能的。該備忘錄的目的,是使該技術廣為人知,完全準确地詳細說明它。

1.       動機

      子網劃分标準,也就是RFC-950,指定了主機位可以被分為兩部分-------子網号和主機号。這給了IP位址3級繼承結構,同時也伴随防火牆和路由開銷的節省。也介紹了位址配置設定增加的低效率。

         低效源自這樣一個事實,網絡管理者會高估單個子網的主機數,為了不在未來重新配置設定子網.這也會發生在這樣一種情況,如果在用的路由協定不能在不同長度的子網下工作,網絡管理者必須給每個子網一個等同于被最大子網接受的大小。

         假設掩碼是255.255.255.0,A的子網是1.0  B是2.0  C是3.0,如果B的主機數超過254台,如果我們隻想改變B的掩碼而不改變主機号,但是比B大和比B小的子網号被A和C占走了.(如果3.0沒有被占走,那麼隻要将B的掩碼改為255.255.254.0即可).隻要沒有連續的掩碼被使用,B就有可能讓掩碼的其他位置為0.然而,不連續的掩碼不太受人喜歡,因為這樣做就對路由算法産生了限制.是以RFC-950不建議這樣使用。

         是以,網絡管理者可行的選擇有 1)從現存的網絡中組成兩個子網 2)重編号子網.第一個選擇隻能在實體上或是邏輯上實作其中一個。實體上構成兩個子網要求分割子網,在兩個分區間插入一個網關。因為一些顯而易見的原因,這樣的做法很不理想。邏輯上組織兩個子網可以簡簡單單地給相同的子網再配置設定比如4.0的位址,然後在新的子網下配置設定主機位址。

邏輯上這樣配置設定的結果導緻不同子網号碼下的主機不能識别相同子網下的主機,會給預設網關而不是直接給主機傳送包。事實上,這并不是一個很不好的解決方法,因為假設網關可以識别一個子網下的不同子網編号,網關會僅僅給主機發送一個ICMP回執,随後的包會直接發送給主機(這也許不會在所有主機下都能正常工作)。

         然而,這都是不可接受和不可能的,接下來網絡管理者必須給B配置設定一個新的子網編号,是以要給存在的主機重編号,修改DNS下的條目,然後改變任何其他在子網B中主機的電路位址的檔案配置。

2.       一個更靈活有效的方法

為了幫助解釋新技術,我們應該隻是現在所做的有什麼錯誤。現在,很多子網是把主機分為兩部分來配置設定的,分别是子網号和主機号。子網對應的掩碼為1,主機位對應的掩碼為0.(在我們的所有位址中,最小為在右邊,最大位在左邊。)

MSB                                LSB      
--------------------------------------      
| subnet field    | host field         |      
--------------------------------------      

子網位是根據子網大小可變長的。舉個例子,一個網絡有兩個很大的子網和一些小的子網.然後網絡管理者也許會配置設定兩種類型的位址:

--------------------------------------      
| subnet |               host          |  large subnets      
--------------------------------------      
--------------------------------------      
|         subnet             |  host   |  small subnets      
--------------------------------------      

在這種情況下,子網号碼的全部範圍對于小的子網來說将不可用,因為小的子網的bits對應的大的子網沒有相同的值。舉個例子,大的子網有4個位,小的子網有8個位。如果大的子網的值是0001和0010,然後再0001000到00101111的子網号碼不能配置設定給小的子網,否則就會有映射到兩個子網的位址了。

在任何情況下,一個網絡管理者會給兩個子網按數字序列配置設定号碼。舉個例子,給定一個指定的子網,主機會被标注為1,2,3等等。在給定的網絡下,子網也會被配置設定為1,2,3等等。結果就是子網和主機的右邊位會是1而左邊是0.0的位代表了增長的空間。

--------------------------------------      
| subnet field    | host field         |      
|-----+-----------+-------+------------|      
|     |           |       |            |      
| 0's | 1's & 0's |  0's  | 1's & 0's  |      
/\                /\      
||                ||      
subnets can         hosts can grow here      
grow here      

現在,讓我們假設主機号碼在一個特定的子網下增長到了所給定的最大值,但是子網還有潛力配置設定更多的位址。我們便有了如下的結果:

--------------------------------------      
| subnet field    | host field         |      
|-----+-----------+--------------------|      
|     |           |                    |      
| 0's | 1's & 0's |     1's & 0's      |      

主機号無法再增長。問題是因為增長的位址被放好了,接下來的增長隻能有效為子網保留。什麼應該代替配置設定子網号碼使得這能夠正确工作呢。這種情況下我們得到下列情況:

--------------------------------------      
| subnet field    | host field         |      
|-----------+-------------+------------|      
|           |             |            |      
| 1's & 0's |    0's      | 1's & 0's  |      
/\      
||      
Both hosts and subnets can      
grow here      

現在,主機号和子網号都個字有很大的增長空間了,雖然組合的增長空間是一樣的。因為一個人幾乎不可能預測一個子網中會有多少主機,或者最終應該有多少子網,這種布局發揮了增長的最大靈活性。

實際上,先前的圖有誤導作用。主機和子網的域分界線在增長區的中間。然後,界限可以在增長區的任何一個位置。注意一點,是掩碼來決定界限的位置。1指定子網的位,0指定主機位。我們之後會介紹實際上界限應該位于中間某處。将界限放在此處會減少主機位中掩碼被改變的次數。

2-1 新技術的說明書

        已經給了足夠的介紹材料,現在我們能詳細說明子網配置設定的步驟了。

       Mirrot-image Counting:

              比如有這樣的子網号碼

0       (reserved to mean "this host")      
01      
10      
011      
100      
101      
:      
:      
11...1110      
11...1111       (reserved to mean "all hosts")      
應該轉變成如下形式      
0       (reserved to mean "this subnet")      
10      
01      
110      
001      
101      
:      
:      
011...11      
111...11        (reserved to mean "all subnets")      

直接舉例子來說明算法

假設有一個C類網絡,舉這個例子是因為網絡号占了3個byte,比較友善。首先以3個子網A,B,C開始。h代表主機位,g代表可拓展位,h可以是0或1而g肯定是0.

Subnet  Address         Mask      
A       10gg ghhh       1111 0000      
B       01gg ghhh       1111 0000      
C       110g ghhh       1111 0000      
通常給子網配置設定較多的mask,這樣當拓展主機号時隻需要修改特定的mask,但增加子網時會導緻修改已存在的其他子網的mask。      
另外,可以發現C的前面是110而不是11這是因為11是廣播位址。      
接下來,我們再增加一個子網D,值應該是100根據MC變為001      
Subnet  Addr            Mask      
A       10gg ghhh       1111 0000      
B       01gg ghhh       1111 0000      
C       110g ghhh       1111 0000      
D       001g ghhh       1111 0000      
這時候其他子網并沒有産生任何變化。      
當我們再加一個子網E時,如下      
Subnet  Addr            Mask      
A       100g ghhh       1111 0000      
B       01gg ghhh       1111 0000      
C       110g ghhh       1111 0000      
D       001g ghhh       1111 0000      
E       101g ghhh       1111 0000      
我們發現A變成了100,這是因為如果A還是10,那會和E産生沖突。另外注意如果A的mask初始設為11000000那麼現在就必須要修改為11100000      
接下來,往A和C中增加8台主機      
Subnet  Addr            Mask      
A       100g hhhh       1111 0000      
B       01hh hhhh       1100 0000      
C       110g hhhh       1111 0000      
D       001g ghhh       1111 0000      
E       101g ghhh       1111 0000      
就要使用3th-bit變為h      
之後,我們再添加一個子網F      
Subnet  Addr            Mask      
A       100g hhhh       1111 0000      
B       01hh hhhh       1100 0000      
C       110g hhhh       1111 0000      
D       001g ghhh       1111 0000      
E       101g ghhh       1111 0000      
F       1110 ghhh       1111 0000      
大家會很奇怪為什麼F是1110,計算出來不是011麼。原因是:011會和B發生沖突,而B已經無法拓展了,因為B的mask已經達到了11000000.是以我們繼續直到找到合适的值為止。      
最後,移除子網E      
Subnet  Addr            Mask      
A       10gg hhhh       1111 0000      
B       01hh hhhh       1100 0000      
C       110g hhhh       1111 0000      
D       001g ghhh       1111 0000      
F       1110 ghhh       1111 0000      
因為移除了E,是以A也可以變回10了。      

繼續閱讀