]> pere.pagekite.me Git - homepage.git/blob - reports/rfc/draft-ietf-dnsind-serial-03.txt
Generated.
[homepage.git] / reports / rfc / draft-ietf-dnsind-serial-03.txt
1
2 Network Working Group Robert Elz
3 Internet Draft University of Melbourne
4 Expiration Date: October 1996
5 Randy Bush
6 RGnet, Inc.
7
8 April 1996
9
10
11 Serial Number Arithmetic
12
13 draft-ietf-dnsind-serial-03.txt
14
15
16 1. Status of this Memo
17
18 This document is an Internet-Draft. Internet-Drafts are working
19 documents of the Internet Engineering Task Force (IETF), its areas,
20 and its working groups. Note that other groups may also distribute
21 working documents as Internet-Drafts.
22
23 Internet-Drafts are draft documents valid for a maximum of six months
24 and may be updated, replaced, or obsoleted by other documents at any
25 time. It is inappropriate to use Internet-Drafts as reference
26 material or to cite them other than as "work in progress."
27
28 To learn the current status of any Internet-Draft, please check the
29 "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
30 Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
31 munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
32 ftp.isi.edu (US West Coast).
33
34 2. Abstract
35
36 This draft defines serial number arithmetic, as used in the Domain
37 Name System. The DNS has long relied upon serial number arithmetic,
38 a concept which has never really been defined, certainly not in an
39 IETF document, though which has been widely understood. This draft
40 supplies the missing definition. It is intended to update RFC1034
41 and RFC1035.
42
43
44
45
46
47
48
49
50
51
52
53 kre/randy [Page 1]
54 \f
55 Internet Draft draft-ietf-dnsind-serial-03.txt April 1996
56
57
58 3. Introduction
59
60 The serial number field of the SOA resource record is defined in
61 RFC1035 as
62
63 SERIAL The unsigned 32 bit version number of the original copy of
64 the zone. Zone transfers preserve this value. This value
65 wraps and should be compared using sequence space
66 arithmetic.
67
68 RFC1034 uses the same terminology when defining secondary server zone
69 consistency procedures.
70
71 Unfortunately the term "sequence space arithmetic" is not defined in
72 either RFC1034 or RFC1035, nor do any of their references provide
73 further information.
74
75 This phrase seems to have been intending to specify arithmetic as
76 used in TCP sequence numbers [RFC793], and defined in [IEN-74].
77
78 Unfortunately, the arithmetic defined in [IEN-74] is not adequate for
79 the purposes of the DNS, as no general comparison operator is
80 defined.
81
82 To avoid further problems with this simple field, this document
83 defines the field and the operations available upon it. This
84 definition is intended merely to clarify the intent of RFC1034 and
85 RFC1035, and is believed to generally agree with current
86 implementations. However, older, superseded, implementations are
87 known to have treated the serial number as a simple unsigned integer,
88 with no attempt to implement any kind of "sequence space arithmetic",
89 however that may have been interpreted, and further, ignoring the
90 requirement that the value wraps. Nothing can be done with these
91 implementations, beyond extermination.
92
93 4. Serial Number Arithmetic
94
95 Serial numbers are formed from non-negative integers from a finite
96 subset of the range of all integer values. The lowest integer in
97 every subset used for this purpose is zero, the maximum is always one
98 less than a power of two.
99
100 When considered as serial numbers however no value has any particular
101 significance, there is no minimum or maximum serial number, every
102 value has a successor and predecessor.
103
104 To define a serial number to be used in this way, the size of the
105 serial number space must be given. This value, called "SERIAL_BITS",
106
107
108
109 kre/randy [Page 2]
110 \f
111 Internet Draft draft-ietf-dnsind-serial-03.txt April 1996
112
113
114 gives the power of two which results in one larger than the largest
115 integer corresponding to a serial number value. This also specifies
116 the number of bits required to hold every possible value of a serial
117 number of the defined type. The operations permitted upon serial
118 numbers are defined in the following section.
119
120 5. Operations upon the serial number
121
122 Only two operations are defined upon serial numbers, addition of a
123 positive integer of limited range, and comparison with another serial
124 number.
125
126 5.1. Addition
127
128 Serial numbers may be incremented by the addition of a positive
129 integer n, where n is taken from the range of integers
130 [0 .. (2^(SERIAL_BITS - 1) - 1)]. For a sequence number s, the
131 result of such an addition, s', is defined as
132
133 s' = (s + n) modulo (2 ^ SERIAL_BITS)
134
135 where the addition and modulus operations here act upon values that
136 are non-negative values of unbounded size in the usual ways of
137 integer arithmetic.
138
139 Addition of a value outside the range
140 [0 .. (2^(SERIAL_BITS - 1) - 1)] is undefined.
141
142 5.2. Comparison
143
144 Any two serial numbers, s1 and s2, may be compared. The definition
145 of the result of this comparison is as follows.
146
147 For the purposes of this definition, consider two integers, i1 and
148 i2, from the unbounded set of non-negative integers, such that i1 and
149 s1 have the same numeric value, as do i2 and s2. Arithmetic and
150 comparisons applied to i1 and i2 use ordinary unbounded integer
151 arithmetic.
152
153 Then, s1 is said to be equal to s2 if and only if i1 is equal to i2,
154 in all other cases, s1 is not equal to s2.
155
156 s1 is said to be less than s2 if, and only if, s1 is not equal to s2,
157 and
158
159 (i1 < i2 and i2 - i1 < 2^(SERIAL_BITS - 1)) or
160 (i1 > i2 and i1 - i2 > 2^(SERIAL_BITS - 1))
161
162
163
164
165 kre/randy [Page 3]
166 \f
167 Internet Draft draft-ietf-dnsind-serial-03.txt April 1996
168
169
170 s1 is said to be greater than s2 if, and only if, s1 is not equal to
171 s2, and
172
173 (i1 < i2 and i2 - i1 > 2^(SERIAL_BITS - 1)) or
174 (i1 > i2 and i1 - i2 < 2^(SERIAL_BITS - 1))
175
176 Note that there are some pairs of values s1 and s2 for which s1 is
177 not equal to s2, but for which s1 is neither greater than, nor less
178 than, s2. An attempt to use these ordering operators on such pairs
179 of values produces an undefined result.
180
181 The reason for this is that those pairs of values are such that any
182 simple definition that were to define s1 to be less than s2 where
183 (s1, s2) is such a pair, would also usually cause s2 to be less than
184 s1, when the pair is (s2, s1). This would mean that the particular
185 order selected for a test could cause the result to differ, leading
186 to unpredictable implementations.
187
188 While it would be possible to define the test in such a way that the
189 inequality would not have this surprising property, while being
190 defined for all pairs of values, such a definition would be
191 unnecessarily burdensome to implement, and difficult to understand,
192 and would still allow cases where
193
194 s1 < s2 and (s1 + 1) > (s2 + 1)
195
196 which is just as non-intuitive.
197
198 Thus the problem case is left undefined, implementations are free to
199 return either result, or to flag an error, and users must take care
200 not to depend on any particular outcome. Usually this will mean
201 avoiding allowing those particular pairs of numbers to co-exist.
202
203 The relationships greater than or equal to, and less than or equal
204 to, follow in the natural way from the above definitions.
205
206 6. Corollaries
207
208 These definitions give rise to some results of note
209
210 6.1. Corollary 1
211
212 For any sequence number s and any integer n such that addition of n
213 to s is well defined, (s + n) >= s. Further (s + n) == s only when
214 n == 0, in all other defined cases, (s + n) > s.
215
216
217
218
219
220
221 kre/randy [Page 4]
222 \f
223 Internet Draft draft-ietf-dnsind-serial-03.txt April 1996
224
225
226 6.2. Corollary 2
227
228 If s' is the result of adding the integer n to the sequence number s,
229 and m is another integer from the range defined as able to be added
230 to a sequence number, and s" is the result of adding m to s', then it
231 is undefined whether s" is greater than, or less than s, though it is
232 known that s" is not equal to s.
233
234 6.3. Corollary 3
235
236 If s" from the previous corollary is further incremented, then there
237 is no longer any known relationship between the result and s.
238
239 6.4. Corollary 4
240
241 If in corollary 2 the value (n + m) is such that addition of the sum
242 to sequence number s would produce a defined result, then corollary 1
243 applies, and s" is known to be greater than s.
244
245 7. Examples
246
247 7.1. A trivial example
248
249 The simplest meaningful serial number space has SERIAL_BITS == 2. In
250 this space, the integers that make up the serial number space are 0,
251 1, 2, and 3. That is, 3 == 2^SERIAL_BITS - 1.
252
253 In this space, the largest integer that it is meaningful to add to a
254 sequence number is 2^(SERIAL_BITS - 1) - 1, or 1.
255
256 Then, as defined 0+1 == 1, 1+1 == 2, 2+1 == 3, and 3+1 == 0.
257 Further, 1 > 0, 2 > 1, 3 > 2, and 0 > 3. It is undefined whether
258 2 > 0 or 0 > 2, and whether 1 > 3 or 3 > 1.
259
260 7.2. A slightly larger example
261
262 Consider the case where SERIAL_BITS == 8. In this space the integers
263 that make up the serial number space are 0, 1, 2, ... 254, 255.
264 255 == 2^SERIAL_BITS - 1.
265
266 In this space, the largest integer that it is meaningful to add to a
267 sequence number is 2^(SERIAL_BITS - 1) - 1, or 127.
268
269 Addition is as expected in this space, for example: 255+1 == 0,
270 100+100 == 200, and 200+100 == 44.
271
272 Comparison is more interesting, 1 > 0, 44 > 0, 100 > 0, 100 > 44,
273 200 > 100, 255 > 200, 0 > 255, 100 > 255, 0 > 200, and 44 > 200.
274
275
276
277 kre/randy [Page 5]
278 \f
279 Internet Draft draft-ietf-dnsind-serial-03.txt April 1996
280
281
282 Note that 100+100 > 100, but that (100+100)+100 < 100. Incrementing
283 a serial number can cause it to become "smaller". Of course,
284 incrementing by a smaller number will allow many more increments to
285 be made before this occurs. However this is always something to be
286 aware of, it can cause surprising errors, or be useful as it is the
287 only defined way to actually cause a serial number to decrease.
288
289 The pairs of values 0 and 128, 1 and 129, 2 and 130, etc, to 127 and
290 255 are not equal, but in each pair, neither number is defined as
291 being greater than, or less than, the other.
292
293 It could be defined (arbitrarily) that 128 > 0, 129 > 1,
294 130 > 2, ..., 255 > 127, by changing the comparison operator
295 definitions, as mentioned above. However note that that would cause
296 255 > 127, while (255 + 1) < (127 + 1), as 0 < 128. Such a
297 definition, apart from being arbitrary, would also be more costly to
298 implement.
299
300 8. Citation
301
302 As this defined arithmetic may be useful for purposes other than for
303 the DNS serial number, it may be referenced as Serial Number
304 Arithmetic from RFCXXXX. Any such reference shall be taken as
305 implying that the rules of sections 4 to 7 of this document apply to
306 the stated values.
307
308 9. The DNS SOA serial number
309
310 The serial number in the DNS SOA Resource Record is a Serial Number
311 as defined above, with SERIAL_BITS being 32. That is, the serial
312 number is a non negative integer with values taken from the range
313 [0 .. 4294967295]. That is, a 32 bit unsigned integer.
314
315 The maximum defined increment is 2147483647 (2^31 - 1).
316
317 Care should be taken that the serial number not be incremented, in
318 one or more steps, by more than this maximum within the period given
319 by the value of SOA.expire. Doing so may leave some secondary
320 servers with out of date copies of the zone, but with a serial number
321 "greater" than that of the primary server. Of course, special
322 circumstances may require this rule be set aside, for example, when
323 the serial number needs to be set lower for some reason. If this
324 must be done, then take special care to verify that ALL servers have
325 correctly succeeded in following the primary server's serial number
326 changes, at each step.
327
328 Note that each, and every, increment to the serial number must be
329 treated as the start of a new sequence of increments for this
330
331
332
333 kre/randy [Page 6]
334 \f
335 Internet Draft draft-ietf-dnsind-serial-03.txt April 1996
336
337
338 purpose, as well as being the continuation of all previous sequences
339 started within the period specified by SOA.expire.
340
341 Caution should also be exercised before causing the serial number to
342 be set to the value zero. While this value is not in any way special
343 in serial number arithmetic, or to the DNS SOA serial number, many
344 DNS implementations have incorrectly treated zero as a special case,
345 with special properties, and unusual behaviour may be expected if
346 zero is used as a DNS SOA serial number.
347
348 10. Document Updates
349
350 RFC1034 and RFC1035 are to be treated as if the references to
351 "sequence space arithmetic" therein are replaced by references to
352 serial number arithmetic, as defined in this document.
353
354 11. Security Considerations
355
356 This document does not consider security.
357
358 It is not believed that anything in this document adds to any
359 security issues that may exist with the DNS, nor does it do anything
360 to lessen them.
361
362 12. References
363
364 [RFC1034] Domain Names - Concepts and Facilities,
365 P. Mockapetris, ISI, November 1987.
366
367 [RFC1035] Domain Names - Implementation and Specification
368 P. Mockapetris, ISI, November 1987
369
370 [RFC793] Transmission Control protocol
371 Information Sciences Institute, USC, September 1981
372
373 [IEN-74] Sequence Number Arithmetic
374 William W. Plummer, BB&N Inc, September 1978
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389 kre/randy [Page 7]
390 \f
391 Internet Draft draft-ietf-dnsind-serial-03.txt April 1996
392
393
394 13. Acknowledgements
395
396 Thanks to Rob Austein for suggesting clarification of the undefined
397 comparison operators, and to Michael Patton for attempting to locate
398 another reference for this procedure. Thanks also to members of the
399 IETF DNSIND working group of 1995-6, in particular, Paul Mockapetris.
400
401 14. Authors' Addresses
402
403 Robert Elz
404 Computer Science
405 University of Melbourne
406 Parkville, Vic, 3052
407 Australia.
408
409 Randy Bush
410 RGnet, Inc.
411 9501 SW Westhaven
412 Portland, Oregon, 97225
413 United States.
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445 kre/randy [Page 8]