?? rfc1982.txt
字號:
組織:中國互動出版網(http://www.china-pub.com/)
RFC文檔中文翻譯計劃(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
譯者:李密(smartsnake smartsnake@sina.com)
譯文發(fā)布時間:2002-1-30
版權:本中文翻譯文檔版權歸中國互動出版網所有。可以用于非商業(yè)用途自由轉載,但必須保留本文檔的翻譯及版權信息。
序列號算法
(RFC1982——Serial Number Arithmetic)
本備忘錄狀態(tài)
本文檔描述了一個用于Internet社團的Internet標準跟蹤協(xié)議,希望得到有關進一步改進的討論及建議。有關本協(xié)議的標準狀態(tài)及狀態(tài),請參照“Internet正式協(xié)議標準”(STD1) 的當前版本。本備忘錄的發(fā)布不受任何限制。
摘要
本備忘錄定義了用于DNS的序列號算法。域名系統(tǒng)長期依賴于序列號算法,盡管序列號算法已經得到了廣泛地理解,但它是一個從未被真正定義過的概念,當然在IETF的文檔中也一樣。本備忘錄提供這份被遺忘的定義,它將用于更新RFC1034和RFC1035兩份文檔。
1.介紹
在RFC1035中定義SOA資源檔案的序列號領域如下:
序列號 在存儲區(qū)中原份拷貝的32位無符號數(shù)碼。傳送拷貝時保留這個數(shù)據。這個數(shù)據被封裝并通過空間序列算法來進行比較。
當對副服務器存儲區(qū)連接程序進行定義時,RFC1034使用相同的術語。
但是“空間序列算法”這個術語不僅沒有在RFC1034或RFC1035中進行定義,也沒有在它們的參考文獻中提供更多的信息。
這個術語似乎一直試圖在TCP序列號[RFC793]中指定算法并在[IEN-74]中進行定義。
不幸的是,在[IEN-74]中定義的這個算法并不適合DNS的需要,因為它沒有定義通用的比較運算符。
為了避免在這個單一領域中出現(xiàn)更多的問題,這份文件將對這個領域及相關可能的操作進行定義。這份定義僅僅是試圖澄清RFC1034和RFC1035中的有關意圖而且將主要遵循當前已經生效的聲明。然而,某些舊的、淘汰的聲明將序列號看成是一個簡單的無符號整數(shù),并不試圖實現(xiàn)任何形式的“空間序列算法”。雖然它們已經被解釋過,但卻忽略了數(shù)據封裝的要求。只有放棄這些聲明,否則用它們什么都干不成。
2.序列號算法
序列號是由非負整數(shù)組成的,它是所有整數(shù)列的一個有限子集。用于這個目的的每個子集中最小的整數(shù)是零,最大的總是比2的乘方小1。
當一個數(shù)被看成是一個序列號,那么無論它的值是多少都不具備任何特殊的含義,沒有最小的或者是最大的序列號,每個數(shù)值都有一個前繼和一個后繼。
用這種方式來定義一個序列號,必須給定序列號的空間大小。這個數(shù)值,稱之為“比特位”,是2的乘方,比相應序列號的最大值大1。同樣,指定的位數(shù)必須在已經定義好的序列號的可能數(shù)值范圍之中。序列號的操作方法如下章所示。
3.序列號的操作
對序列號僅定義了兩種操作,一個是有限正整數(shù)數(shù)列的加法,另一個是同其他序列號進行對比。
3.1 加法
序列號可以通過加上一個正整數(shù)n來增大數(shù)值,其中n屬于整數(shù)列[0 .. (2^(比特位 - 1) - 1)]。設原序列號為s,增加后的序列號為s', s'的計算公式如下:
s'=(s + n) 模 (2 ^ 比特位)
這兒增加數(shù)值的加法和取模操作都是利用整數(shù)運算的一般法則來求得的一個非負極限值。
在[0 .. (2^(比特位 - 1) - 1)]之外的數(shù)的加法沒有定義。
3.2 比較
任何兩個序列號,s1和s2,都能進行比較。比較的結果定義如下:
為了建立這個定義,先比較兩個整數(shù),i1和i2,這兩個數(shù)都是非負的極限值,i1是s1的極限值,i2是s2的極限值。求得i1和i2的運算和比較符合普通的極限運算法則。
如果i1等于i2,那么就認為s1和s2相等。如果是其他情況,那么s1和s2不相等。
如果有(i1 < i2 and i2 - i1 < 2^(比特位 - 1)) 或 (i1 > i2 and i1 - i2 > 2^(比特位 - 1))成立,那么s1小于s2。
如果有(i1 < i2 and i2 - i1 > 2^(比特位 - 1))或(i1 > i2 and i1 - i2 < 2^(比特位 - 1))成立,那么s1大于s2。
值得注意的是存在某些數(shù)組使得s1和s2不相等,但是同時s1既不大于也不小于s2。試圖用這種數(shù)組進行的操作將得到不確定的結果。
造成這樣的原因是這些數(shù)組是僅作了簡單的定義,如(s1,s2)定義為s1比s2小,這樣當數(shù)組為(s2,s1)時就是s2比s1小。這將意味著對某個測試的不同選擇順序將使得計算結果發(fā)生變化,最終導致不可預測的執(zhí)行結果。
當不使用這種方式定義測試時,不等式將不會出現(xiàn)這個奇怪的性質;但若被定義為適合所有的數(shù)值時,那么這種定義將導致沒必要的繁瑣執(zhí)行結果,而且難于理解,甚至會導致當s1 < s2卻有 (s1 + 1) > (s2 + 1)這樣明顯不符合邏輯的結果出現(xiàn)。
因此,這個問題被留下未作定義,執(zhí)行結果將返回任意的可能結果,或者是一個實際值,或者標志一個錯誤,所以用戶必須注意不要依賴于任何特殊的返回值。通常這將意味著用戶要避免允許讓那些特殊的數(shù)組導致退出程序。
兩個序列號的關系是大于等于還是小于等于,服從以上所作的普通定義。
4.推論
這些定義得到以下推論。
4.1推論1
對于任意序列號s和任意整數(shù)n,n加上s的結果定義為 (s + n) >= s,當且僅當n=0時,才有(s + n) = s,而對于其他數(shù)值均有:(s + n) > s 。
4.2推論2
設序列號s加上一個不為零的整數(shù)n的結果為s',m為另一個整數(shù)且能夠和一個序列號相加,s''是m和s'相加的結果,那么盡管可以肯定s''和s不相等,但并不明確s''究竟是大于s還是小于s
4.3推論3
如果s''是從先前的結果增加而來的,那么將不再明確s和s''之間的關系。
4.4推論4
如果在推論2中,(n + m)確定是序列號s的增加值,那么將產生一個有定義的結果,由推論1可知,s''是大于s的。
5.例子
5.1一個簡單的例子
最簡單的序列號,其比特位等于2。在這種情況下,符合這個條件的整數(shù)有0,1,2,3。那是因為3 = 2^比特位 - 1 。
推廣這個結果,那么能和一個序列號相加的最大的整數(shù)應該為2^(比特位 - 1) - 1 ,即1 。
因此,若定義0+1 = 1, 1+1 = 2, 2+1 = 3, 并且 3+1 = 0,那么我們得到1 > 0, 2 > 1, 3 > 2, 且 0 > 3 。但究竟是2 > 0 還是 0 > 2 或者 1 > 3 還是 3 > 1 ,這個沒有作出定義。
5.2一個稍微復雜的例子
假設在這個例子中,比特位為8。那么符合這個序列號比特位條件的整數(shù)是0,1,2,... 254, 255 。其中255=2^比特位 - 1 。
在這種情況下,能和一個序列號相加的最大的整數(shù)為2^(比特位 - 1) - 1 ,即127 。
這時,加法被期望作如下定義,例:255+1 = 0, 100+100 = 200, 200+100 = 44 。
比較大小將變得更為有趣,如:1 > 0, 44 > 0, 100 > 0, 100 > 44, 200 > 100, 255 > 200, 0 > 255, 100 > 255, 0 > 200, 44 > 200 。
注意到如下情況:100+100 > 100, 但是 (100+100)+100 < 100 。對一個序列號進行加法將導致它變得“更小”。當然,如果和一個足夠小的數(shù)值相加將使得序列號變大而不是變小。我們要避免上述情況發(fā)生,因為這將導致某些奇怪的錯誤,或者將它定義為代表一個序列號的減小也可以使得這種情況變得有用。
從0 和128, 1 和 129, 2 和 130, 直到 127 和 255 ,這些數(shù)組都不相等,但在每一對數(shù)中,既沒有定義哪個比哪個大,或哪個比哪個小。
當然,對于以上的問題,我們能夠通過改變比較運算符來定義(非常武斷地)128 > 0, 129 > 1,130 > 2, ..., 255 > 127 ,然而值得注意的是會導致如下問題:由于0 < 128 ,所以有(255 + 1) < (127 + 1) ,但是實際上255 > 127 。這樣的定義,即使不武斷,也將在處理中付出昂貴的代價。
6.引用
這個已定義的算法除了用于DNS序列號,還能夠用于其他領域,所有這些都將參考于“序列號算法”(RFC1982)。任何參考都意味著本文檔的第2章到第5章的規(guī)則將應用于一定數(shù)值的計算。
7.DNS SOA序列號
用于DNS SOA資源檔案的序列號即上述所定義的具有32個比特位的序列號。這意味著,這個序列號是一個非負整數(shù),其數(shù)值從0 一直到 4294967295 。這也就是一個32位無符號整數(shù)的范圍。
最大的增加值是2147483647 = (2^31 - 1) 。
值得注意的是,在SOA.expire的數(shù)值內,不能一步或多步增加序列號數(shù)值,使之超過上述的最大值。否則,將可能導致一些副服務器出現(xiàn)存儲區(qū)數(shù)據越限,使得序列號比主服務器的序列號還要“大”。當然,特殊的環(huán)境下可能需要放棄這個規(guī)則,例如,由于某種原因需要降低序列號數(shù)值的時候。如果這種情況出現(xiàn)了,請密切關注所有的服務器在主服務器的序列號變化的每一步下是否工作正常。
請注意,對于序列號的每一個增量都必須看作是為了這個目的所得到的一個新序列的開始。同樣,這也是SOA.expire所指定的期限中所有先前序列繼續(xù)的開端。
同樣值得注意的是將序列號清零的情況。因為這個數(shù)值在序列號算法中沒有任何特殊作用,而且在DNS SOA序列號中,DNS執(zhí)行管理器會錯誤地把零當作一個特殊的情況,賦予特殊的性質。如果零用作一個DNS SOA序列號,那么將有可能導致一些不平常的處理結果。
8.文檔更新
RFC1034和RFC1035被看作是“序列空間算法”的參考,它將被這個文檔中所定義的序列號算法所取代。
9.安全考慮
這份文檔沒有考慮安全因素。
在這份文檔中沒有加入了任何安全條款,即使它可能存在于DNS之中,與此同時,也沒有加入任何降低系統(tǒng)安全的條款。
參考文獻
[RFC1034] Domain Names - Concepts and Facilities,
P. Mockapetris, STD 13, ISI, November 1987.
[RFC1035] Domain Names - Implementation and Specification
P. Mockapetris, STD 13, ISI, November 1987
[RFC793] Transmission Control protocol
Information Sciences Institute, STD 7, USC, September 1981
[IEN-74] Sequence Number Arithmetic
William W. Plummer, BB&N Inc, September 1978
致謝
感謝Rob Austein的建議,它澄清了一些未定義的比較算符,感謝Michael Patton為了這份文檔查找了其他的參考書。同樣還要感謝IETF DNSIND 1995-6 工作組的成員們,特別是Paul Mockapetris 。
作者的地址
Robert Elz
Computer Science University of Melbourne Parkville, Vic, 3052 Australia.
EMail: kre@munnari.OZ.AU
Randy Bush
RGnet, Inc. 10361 NE Sasquatch Lane Bainbridge Island, Washington, 98110 United States.
EMail: randy@psg.com
RFC1982——Serial Number Arithmetic 序 列 號 算 法
1
RFC文檔中文翻譯計劃
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -