この文書はRFC1982の日本語訳です。 この文書の翻訳内容の正確さは保障できないため、 正確な知識を求める方は原文を参照してください。 翻訳者はこの文書によって読者が被り得る如何なる損害の責任をも負いません。 この翻訳内容に誤りがある場合、訂正版の公開や、 誤りの指摘は適切です。 この文書の配布は元のRFC同様に無制限です。
Network Working Group R. Elz Request for Comments: 1982 University of Melbourne Updates: 1034, 1035 R. Bush Category: Standards Track RGnet, Inc. August 1996 Serial Number Arithmetic シリアル番号演算 Status of this Memo この文書の状態 This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited. この文書はインターネット共同体のためのインターネット標準化作業中のプ ロトコルを指定して、そして改良のために議論と提案を求めます。標準化状 態とこのプロトコル状態は「インターネット公式プロトコル標準」(STD 1)の現在の版を参照してください。このメモの配布は無制限です。 Abstract 概要 This memo defines serial number arithmetic, as used in the Domain Name System. The DNS has long relied upon serial number arithmetic, a concept which has never really been defined, certainly not in an IETF document, though which has been widely understood. This memo supplies the missing definition. It is intended to update RFC1034 and RFC1035. この文書は、ドメインネームシステムで使われるシリアル番号演算を定義し ます。DNSは長い間、考え方は広く理解されていたが少なくともIETF 文書で定義されていなかったシリアル番号演算に依存しています。この文書 は欠けている定義を供給します。これはRFC1034とRFC1035を更新することを 意図します。 1. Introduction 1. はじめに The serial number field of the SOA resource record is defined in RFC1035 as SOA資源レコードのシリアル番号フィールドはRFC1035で次のように定義され ます、 SERIAL The unsigned 32 bit version number of the original copy of the zone. Zone transfers preserve this value. This value wraps and should be compared using sequence space arithmetic. シリアル番号 符号なし32ビットのゾーンの原本のバージョン番号。ゾー ン転送がこの値を維持します。この値は巡回していて、連続空間 演算を使って比較されるべきです。 RFC1034 uses the same terminology when defining secondary server zone consistency procedures. RFC1034がセカンダリサーバーのゾーン整合手順を定義する時に同じ用語を使 います。 Unfortunately the term "sequence space arithmetic" is not defined in either RFC1034 or RFC1035, nor do any of their references provide further information. 不幸にも「連続空間演算」という用語はRFC1034やRFC1035で定義されず、そ れらの参照する文献にも情報がありません This phrase seems to have been intending to specify arithmetic as used in TCP sequence numbers [RFC793], and defined in [IEN-74]. この表現はTCPシリアル番号[RFC793]で使われ[IEN-74]で定義された演算を指 定するつもりであったように思われます。 Unfortunately, the arithmetic defined in [IEN-74] is not adequate for the purposes of the DNS, as no general comparison operator is defined. 不幸にも[IEN-74]で定義された演算は一般的な比較演算が定義されないので DNSの目的に対して十分ではありません。 To avoid further problems with this simple field, this document defines the field and the operations available upon it. This definition is intended merely to clarify the intent of RFC1034 and RFC1035, and is believed to generally agree with current implementations. However, older, superseded, implementations are known to have treated the serial number as a simple unsigned integer, with no attempt to implement any kind of "sequence space arithmetic", however that may have been interpreted, and further, ignoring the requirement that the value wraps. Nothing can be done with these implementations, beyond extermination. この単純フィールドでこれ以上の問題を避けるために、この文書はフィール ドとフィールドで利用可能な演算を定義します。この定義はただRFC1034と RFC1035の意志を明確にするように意図され、現在の実行と合致すると信じら れます。しかし、古いすでにない実装がシリアル番号を単純な符号なし整数 と扱い、どう読替えても「連続空間演算」を実装もしてなかったことが知ら れています。絶滅を待つ以外、これらの実装に関してなにもできません。 2. Serial Number Arithmetic 2. シリアル番号演算 Serial numbers are formed from non-negative integers from a finite subset of the range of all integer values. The lowest integer in every subset used for this purpose is zero, the maximum is always one less than a power of two. シリアル番号は非負整数で、有限限界を持ちます。この目的で使われる数値 は最小値が0で最大値が2のべき乗より1小さい数です。 When considered as serial numbers however no value has any particular significance, there is no minimum or maximum serial number, every value has a successor and predecessor. 全てのシリアル番号の値に特定の意味がないとすると、最小や最大のシリア ル番号値はなく、全ての値に大小関係があります。 To define a serial number to be used in this way, the size of the serial number space must be given. This value, called "SERIAL_BITS", gives the power of two which results in one larger than the largest integer corresponding to a serial number value. This also specifies the number of bits required to hold every possible value of a serial number of the defined type. The operations permitted upon serial numbers are defined in the following section. このように使うシリアル番号を定義する際は、シリアル番号空間の大きさを 与えなくてはなりません。この値は「シリアルビット」と呼ばれ、2のシリ アルビット乗の値より1小さい数ががシリアル番号に対応する整数の最もの 大きなものになります。これはまたどのようなシリアル番号値でも記憶でき るビットの数を指定します。上記シリアル番号に使える演算は次章で定義し ます。 3. Operations upon the serial number 3. シリアル番号の演算 Only two operations are defined upon serial numbers, addition of a positive integer of limited range, and comparison with another serial number. シリアル番号には2つの演算だけが定義されます、限界付きの正の整数の加 算演算と、異なる2つのシリアル番号の比較です。 3.1. Addition 3.1. 加算 Serial numbers may be incremented by the addition of a positive integer n, where n is taken from the range of integers [0 .. (2^(SERIAL_BITS - 1) - 1)]. For a sequence number s, the result of such an addition, s', is defined as シリアル番号は正の整数nの加算で増加するかもしれません、nは0以上 (2^(SERIAL_BITS - 1) - 1)以下です。シリアル番号sに対して加算結果 s'は次のように定義されます。 s' = (s + n) modulo (2 ^ SERIAL_BITS) where the addition and modulus operations here act upon values that are non-negative values of unbounded size in the usual ways of integer arithmetic. ここで加算と割り算の余りは、無限まで可能な通常の非負整数の演算です。 Addition of a value outside the range [0 .. (2^(SERIAL_BITS - 1) - 1)] is undefined. 0以上(2^(SERIAL_BITS - 1) - 1)以下以外の加算値は定義されません 3.2. Comparison 3.2. 比較 Any two serial numbers, s1 and s2, may be compared. The definition of the result of this comparison is as follows. 任意の2つシリアル番号s1とs2は比較できます。この比較の結果の定義は次 の通りです。 For the purposes of this definition, consider two integers, i1 and i2, from the unbounded set of non-negative integers, such that i1 and s1 have the same numeric value, as do i2 and s2. Arithmetic and comparisons applied to i1 and i2 use ordinary unbounded integer arithmetic. この定義の目的のため、2つの限界なしの非負整数i1とi2を考え、i1と s1が同じ値、i2とs2が同じ値とします。i1とi2に適用する演算と 比較は普通の無制限の整数算数を使います。 Then, s1 is said to be equal to s2 if and only if i1 is equal to i2, in all other cases, s1 is not equal to s2. そして、i1がi2と等しい場合に限り、s1とs2は等しいと言い、そうで なければs1とs2は等しくないといいます。 s1 is said to be less than s2 if, and only if, s1 is not equal to s2, and s1がs2より小さいとは、s1とs2が異なりかつ以下が満たされる場合と します。 (i1 < i2 and i2 - i1 < 2^(SERIAL_BITS - 1)) or (i1 > i2 and i1 - i2 > 2^(SERIAL_BITS - 1)) s1 is said to be greater than s2 if, and only if, s1 is not equal to s2, and s1がs2より大きいとは、s1とs2が異なりかつ以下が満たされる場合と します。 (i1 < i2 and i2 - i1 > 2^(SERIAL_BITS - 1)) or (i1 > i2 and i1 - i2 < 2^(SERIAL_BITS - 1)) Note that there are some pairs of values s1 and s2 for which s1 is not equal to s2, but for which s1 is neither greater than, nor less than, s2. An attempt to use these ordering operators on such pairs of values produces an undefined result. ペア(s1、s2)に対してs1がs2と等しくも大きくも小さくもないこ とがあります。このような(s1、s2)に対して比較演算を行うと不確定 な結果がおきます。 The reason for this is that those pairs of values are such that any simple definition that were to define s1 to be less than s2 where (s1, s2) is such a pair, would also usually cause s2 to be less than s1, when the pair is (s2, s1). This would mean that the particular order selected for a test could cause the result to differ, leading to unpredictable implementations. この理由は、このような(s1、s2)に対して単純な定義でs1がs2よ り小さいとすると(s2,s1)に対してs2がs1より小さくなるからで す。これは試験の際に用いた順序次第で異なる結果になる、予想できない実 装になる事を意味します。 While it would be possible to define the test in such a way that the inequality would not have this surprising property, while being defined for all pairs of values, such a definition would be unnecessarily burdensome to implement, and difficult to understand, and would still allow cases where 全ての値の組合せに対して比較の結果がはっきりするように比較方法を定義 することは可能でしょうが、このような定義は利用するのが不必要に厄介で、 理解が難しく、以下のような場合がありえます。 s1 < s2 and (s1 + 1) > (s2 + 1) which is just as non-intuitive. これは直観的でありません。 Thus the problem case is left undefined, implementations are free to return either result, or to flag an error, and users must take care not to depend on any particular outcome. Usually this will mean avoiding allowing those particular pairs of numbers to co-exist. そのため上記の問題は不確定なままにしてます、実装によっていずれかの結 果を返すかエラーフラグを付けるかは自由で、ユーザーは特殊な結果に依存 しないように気を付けなければなりません。通常これはそれらの特定対の番 号の利用を避けることを意味するでしょう。 The relationships greater than or equal to, and less than or equal to, follow in the natural way from the above definitions. 以上と以下の関係は上の定義よりより自然な方法に従います。 4. Corollaries 4. 結果 These definitions give rise to some results of note. これらの定義はノートのいくつかの結果を向上します。 4.1. Corollary 1 4.1. 結果1 For any sequence number s and any integer n such that addition of n to s is well defined, (s + n) >= s. Further (s + n) == s only when n == 0, in all other defined cases, (s + n) > s. 任意のシーケンス番号sと任意の整数nに対して、nとsの加算は明確に定 義され(s + n) >= sです。n == 0の場合だけ(s + n) == sで、そのほかの場合は (s + n) > sです。 4.2. Corollary 2 4.2. 結果2 If s' is the result of adding the non-zero integer n to the sequence number s, and m is another integer from the range defined as able to be added to a sequence number, and s" is the result of adding m to s', then it is undefined whether s" is greater than, or less than s, though it is known that s" is not equal to s. もしs'がシーケンス番号sにゼロでない整数nを足した結果で、mが他の整数 で範囲が上記のシーケンス番号の加算のとおりで、s''がs'にmを足した結果 なら、s''がsより大きいか小さいかわかりませんがs''とs'は異なります。 4.3. Corollary 3 4.3. 結果3 If s" from the previous corollary is further incremented, then there is no longer any known relationship between the result and s. 前の結果のs''の値をさらに増加した場合、その結果とsの関係はわからない。 4.4. Corollary 4 4.4. 結果4 If in corollary 2 the value (n + m) is such that addition of the sum to sequence number s would produce a defined result, then corollary 1 applies, and s" is known to be greater than s. もし結果2で値(n + m)の合計をシーケンス番号sに足したら、結果1が適用さ れるので、s''はsより大きくなります。 5. Examples 5. 例 5.1. A trivial example 5.1. 些細な例 The simplest meaningful serial number space has SERIAL_BITS == 2. In this space, the integers that make up the serial number space are 0, 1, 2, and 3. That is, 3 == 2^SERIAL_BITS - 1. 最も単純な有意シリアル番号空間はシリアルビット==2です。この空間でシ リアル番号を構成する整数は0と1と2と3です。つまり3==2^シリアル ビット−1です。 In this space, the largest integer that it is meaningful to add to a sequence number is 2^(SERIAL_BITS - 1) - 1, or 1. この空間でシーケンス番号に加算できる最も大きな整数は 2^(シリアルビット−1)−1つまり1です。 Then, as defined 0+1 == 1, 1+1 == 2, 2+1 == 3, and 3+1 == 0. Further, 1 > 0, 2 > 1, 3 > 2, and 0 > 3. It is undefined whether 2 > 0 or 0 > 2, and whether 1 > 3 or 3 > 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. A slightly larger example 5.2. すこし大きな例 Consider the case where SERIAL_BITS == 8. In this space the integers that make up the serial number space are 0, 1, 2, ... 254, 255. 255 == 2^SERIAL_BITS - 1. シリアルビットが8の場合を考えます。この空間でシリアル番号を構成する 整数は0、1、2...254、255です。255==2^シリアルビット−1。 In this space, the largest integer that it is meaningful to add to a sequence number is 2^(SERIAL_BITS - 1) - 1, or 127. この空間でシーケンス番号に加えられる最も大きな整数は 2^(シリアルビット−1)−1つまり127です。 Addition is as expected in this space, for example: 255+1 == 0, 100+100 == 200, and 200+100 == 44. この空間で期待される加算は、例えば:255+1==0、 100+100== 200、200+100== 44。 Comparison is more interesting, 1 > 0, 44 > 0, 100 > 0, 100 > 44, 200 > 100, 255 > 200, 0 > 255, 100 > 255, 0 > 200, and 44 > 200. 比較はより面白く、1>0、44>0、100>0、100>44、 200>100、255>200、0>255、100>255、 0>200、44>200です。 Note that 100+100 > 100, but that (100+100)+100 < 100. Incrementing a serial number can cause it to become "smaller". Of course, incrementing by a smaller number will allow many more increments to be made before this occurs. However this is always something to be aware of, it can cause surprising errors, or be useful as it is the only defined way to actually cause a serial number to decrease. 100+100>100ですが(100+100)+100<100に気付 いてください。シリアル番号を増やすと値が「小さく」なることがあります。 もちろん、小さな数を加算する場合、このような現象が生じるまで何度も加 算ができます。これがびっくりするようなエラーを起こすかもしれませんが、 シリアル番号を減少させる唯一の定義された方法なので、有用です。 The pairs of values 0 and 128, 1 and 129, 2 and 130, etc, to 127 and 255 are not equal, but in each pair, neither number is defined as being greater than, or less than, the other. 0と128、1と129、2と130、・・・、127と255は定義によ り等しくもどちらかが大きくもないです。 It could be defined (arbitrarily) that 128 > 0, 129 > 1, 130 > 2, ..., 255 > 127, by changing the comparison operator definitions, as mentioned above. However note that that would cause 255 > 127, while (255 + 1) < (127 + 1), as 0 < 128. Such a definition, apart from being arbitrary, would also be more costly to implement. 上記のとおり、比較演算の定義を変えて(独断的に)128>0、129>1、 130>2、・・・、255>127と定義する事はできます。しかし、 255>127だが、0<128なので(255+1)<(127+1)とな る事に注意してください。このような定義は、独断的なのは別としても、実装 するのにコストがかかるでしょう。 6. Citation 6. 引用 As this defined arithmetic may be useful for purposes other than for the DNS serial number, it may be referenced as Serial Number Arithmetic from RFC1982. Any such reference shall be taken as implying that the rules of sections 2 to 5 of this document apply to the stated values. この定義された演算がDNS以外の目的で役立つかもしれず、これはRFC1982シ リアル番号演算と参照されるかもしれません。このような参照がこの文書の 2章から5章の規則が当てはまる事を意味すると捉えるべきです。 7. The DNS SOA serial number 7. DNS SOAシリアル番号 The serial number in the DNS SOA Resource Record is a Serial Number as defined above, with SERIAL_BITS being 32. That is, the serial number is a non negative integer with values taken from the range [0 .. 4294967295]. That is, a 32 bit unsigned integer. DNS SOA資源レコードのシリアル番号は、シリアルビットが32の上に 定義されるシリアル番号です。つまりシリアル番号は0以上4294967295以下 の範囲の値の非負整数です。すなわち、32ビット符号なしの整数です。 The maximum defined increment is 2147483647 (2^31 - 1). 定義された最大加算数は2147483647(2^31−1)です。 Care should be taken that the serial number not be incremented, in one or more steps, by more than this maximum within the period given by the value of SOA.expire. Doing so may leave some secondary servers with out of date copies of the zone, but with a serial number "greater" than that of the primary server. Of course, special circumstances may require this rule be set aside, for example, when the serial number needs to be set lower for some reason. If this must be done, then take special care to verify that ALL servers have correctly succeeded in following the primary server's serial number changes, at each step. SOA.expireの値で与えられた期間のシリアル番号が上記値以上増加しないよ うに注意すべきです。そうなるとセカンダリサーバーは古いゾーンのコピー を持っていて、そのシリアル番号がプライマリサーバーのシリアル番号より 大きくなりえます。もちろん、特別な状況ではこれに近い値を設定知りよう に要求されるでしょう、例えば何らかの理由でシリアル番号に小さな値を設 定しなければならない時です。もしこうしなければならないなら、すべての サーバーが各ステップで正確にプライマリサーバのシリアル番号に変わって いるか特別な面倒を見てください。 Note that each, and every, increment to the serial number must be treated as the start of a new sequence of increments for this purpose, as well as being the continuation of all previous sequences started within the period specified by SOA.expire. シリアル番号の各加算は、前の加算がSOA.expire期間内が続きながら、新し い加算のSOA.expire期間内の始めと扱わなければなりません。 Caution should also be exercised before causing the serial number to be set to the value zero. While this value is not in any way special in serial number arithmetic, or to the DNS SOA serial number, many DNS implementations have incorrectly treated zero as a special case, with special properties, and unusual behaviour may be expected if zero is used as a DNS SOA serial number. 同じくシリアル番号に0を設定する前に注意すべきです。ゼロはシリアル番 号演算やDNSのSOAシリアル番号の特別な数字ではないのですが、多く のDNS実装が間違ってゼロを特別な数字と扱いましす、そしてDNSのS OAシリアル番号にゼロを設定すると異常な行動がおきるかもしれません。 8. Document Updates 8. 文書更新 RFC1034 and RFC1035 are to be treated as if the references to "sequence space arithmetic" therein are replaced by references to serial number arithmetic, as defined in this document. RFC1034とRFC1035で「連続空間演算」を参照する部分は、この文書で定義さ れるシリアル番号演算への参照に置き換えられると扱うはずです。 9. Security Considerations 9. セキュリティの考慮 This document does not consider security. この文書はセキュリティを考慮しません。 It is not believed that anything in this document adds to any security issues that may exist with the DNS, nor does it do anything to lessen them. この文書がDNSにセキュリティ問題を増やしたり解決したりすると信はじ られません。 References 参考文献 [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 Acknowledgements 謝辞 Thanks to Rob Austein for suggesting clarification of the undefined comparison operators, and to Michael Patton for attempting to locate another reference for this procedure. Thanks also to members of the IETF DNSIND working group of 1995-6, in particular, Paul Mockapetris. 不確定な比較演算の解釈の提案に対してRob Austeinに、この手順のもう1つ の参考文献の場所を突き止める試みに対してMichael Pattonに感謝します。 1995年から1996年のIETFのDNSINDワークグループ、特に Paul Mockapetrisに感謝します。 Authors' Addresses 著者のアドレス Robert Elz Randy Bush Computer Science RGnet, Inc. University of Melbourne 10361 NE Sasquatch Lane Parkville, Vic, 3052 Bainbridge Island, Washington, 98110 Australia. United States. EMail: kre@munnari.OZ.AU EMail: randy@psg.com