|
|
1.1 root 1: .\" Copyright (c) 1986 The Regents of the University of California.
2: .\" All rights reserved.
3: .\"
4: .\" Redistribution and use in source and binary forms are permitted
5: .\" provided that the above copyright notice and this paragraph are
6: .\" duplicated in all such forms and that any documentation,
7: .\" advertising materials, and other materials related to such
8: .\" distribution and use acknowledge that the software was developed
9: .\" by the University of California, Berkeley. The name of the
10: .\" University may not be used to endorse or promote products derived
11: .\" from this software without specific prior written permission.
12: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
13: .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
14: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
15: .\"
16: .\" @(#)timed.ms 6.3 (Berkeley) 3/7/89
17: .\"
18: .TL
19: The Berkeley
20: .UX
21: .br
22: Time Synchronization Protocol
23: .AU
24: Riccardo Gusella, Stefano Zatti, and James M. Bloom
25: .AI
26: Computer Systems Research Group
27: Computer Science Division
28: Department of Electrical Engineering and Computer Science
29: University of California, Berkeley
30: Berkeley, CA 94720
31: .FS
32: This work was sponsored by the Defense Advanced Research Projects Agency
33: (DoD), monitored by the Naval Electronics Systems
34: Command under contract No. N00039-84-C-0089, and by the Italian CSELT
35: Corporation.
36: The views and conclusions contained in this document are those of the
37: authors and should not be interpreted as representing official policies,
38: either expressed or implied, of the Defense Research Projects Agency,
39: of the US Government, or of CSELT.
40: .FE
41: .LP
42: .OH 'The Berkeley UNIX Time Synchronization Protocol''SMM:22-%'
43: .EH 'SMM:22-%''The Berkeley UNIX Time Synchronization Protocol'
44: .SH
45: Introduction
46: .PP
47: The Time Synchronization Protocol (TSP)
48: has been designed for specific use by the program \fItimed\fP,
49: a local area network clock synchronizer for
50: the UNIX 4.3BSD operating
51: system.
52: Timed is built on the DARPA UDP protocol [4] and
53: is based on a master slave scheme.
54: .PP
55: TSP serves a dual purpose.
56: First, it supports messages for the synchronization of the clocks
57: of the various hosts in a local area network.
58: Second, it supports messages for the election that occurs
59: among slave time daemons when, for any reason, the master disappears.
60: The synchronization mechanism and the election procedure
61: employed by the program timed are described
62: in other documents [1,2,3].
63: .PP
64: Briefly, the synchronization software, which works in a
65: local area network, consists of a collection of \fItime daemons\fP
66: (one per machine) and is based on a master-slave
67: structure.
68: The present implementation keeps processor clocks synchronized
69: within 20 milliseconds.
70: A \fImaster time daemon\fP measures the time
71: difference between the clock of the machine on which it
72: is running and those of all other machines. The current implementation
73: uses ICMP \fITime Stamp Requests\fP [5] to measure the clock difference
74: between machines.
75: The master computes the \fInetwork time\fP as the average of the
76: times provided by nonfaulty clocks.\**
77: .FS
78: A clock is considered to be faulty when its value
79: is more than a small specified
80: interval apart from the majority of the clocks
81: of the machines on the same network.
82: See [1,2] for more details.
83: .FE
84: It then sends to each \fIslave time daemon\fP the
85: correction that should be performed on the clock of its machine.
86: This process is repeated periodically.
87: Since the correction is expressed as a time difference rather than an
88: absolute time, transmission delays do not interfere with synchronization.
89: When a machine comes up and joins the network,
90: it starts a slave time daemon, which
91: will ask the master for the correct time and will reset the machine's clock
92: before any user activity can begin.
93: The time daemons therefore maintain a single network time in spite of
94: the drift of clocks away from each other.
95: .PP
96: Additionally, a time daemon on gateway machines may run as
97: a \fIsubmaster\fP.
98: A submaster time daemon functions as a slave on one network that
99: already has a master and as master on other networks.
100: In addition, a submaster is responsible for propagating broadcast
101: packets from one network to the other.
102: .PP
103: To ensure that service provided is continuous and reliable,
104: it is necessary to implement an election algorithm that will elect a
105: new master should the machine running the current master crash, the master
106: terminate (for example, because of a run-time error), or the network be
107: partitioned.
108: Under our algorithm, slaves are able to realize when the master has
109: stopped functioning and to elect a new master from among themselves.
110: It is important to note that since the failure of the master results
111: only in a gradual divergence of clock values, the election
112: need not occur immediately.
113: .PP
114: All the communication occurring among time daemons uses the TSP
115: protocol.
116: While some messages need not be sent in a reliable way,
117: most communication in TSP requires reliability not provided by the underlying
118: protocol.
119: Reliability is achieved by the use of acknowledgements, sequence numbers, and
120: retransmission when message losses occur.
121: When a message that requires acknowledgment is not acknowledged after
122: multiple attempts,
123: the time daemon that has sent the message will assume that the
124: addressee is down.
125: This document will not describe the details of how reliability is
126: implemented, but will only point out when
127: a message type requires a reliable transport mechanism.
128: .PP
129: The message format in TSP is the same for all message types;
130: however, in some instances, one or more fields are not used.
131: The next section describes the message format.
132: The following sections describe
133: in detail the different message types, their use and the contents
134: of each field. NOTE: The message format is likely to change in
135: future versions of timed.
136: .sp 2
137: .SH
138: Message Format
139: .PP
140: All fields are based upon 8-bit bytes. Fields should be sent in
141: network byte order if they are more than one byte long.
142: The structure of a TSP message is the following:
143: .IP 1)
144: A one byte message type.
145: .IP 2)
146: A one byte version number, specifying the protocol version which the
147: message uses.
148: .IP 3)
149: A two byte sequence number to be used for recognizing duplicate messages
150: that occur when messages are retransmitted.
151: .IP 4)
152: Eight bytes of packet specific data. This field contains two 4 byte time
153: values, a one byte hop count, or may be unused depending on the type
154: of the packet.
155: .IP 5)
156: A zero-terminated string of up to 256 \s-2ASCII\s+2 characters with the name of
157: the machine sending the message.
158: .PP
159: The following charts describe the message types,
160: show their fields, and explain their usages.
161: For the purpose of the following discussion, a time daemon can
162: be considered to be in
163: one of three states: slave, master, or candidate for election to master.
164: Also, the term \fIbroadcast\fP refers to
165: the sending of a message to all active time daemons.
166: .sp 1
167: .DS L
168: .SH
169: Adjtime Message
170: .so time
171: .LP
172: Type: TSP_ADJTIME (1)
173: .sp 1
174: .PP
175: The master sends this message to a slave to communicate
176: the difference between
177: the clock of the slave and
178: the network time the master has just computed.
179: The slave will accordingly
180: adjust the time of its machine.
181: This message requires an acknowledgment.
182: .sp 1
183: .DE
184: .DS L
185: .SH
186: Acknowledgment Message
187: .so unused
188: .LP
189: Type: TSP_ACK (2)
190: .sp 1
191: .PP
192: Both the master and the slaves use this message for
193: acknowledgment only.
194: It is used in several different contexts, for example
195: in reply to an Adjtime message.
196: .sp 1
197: .DE
198: .DS L
199: .SH
200: Master Request Message
201: .so unused
202: .LP
203: Type: TSP_MASTERREQ (3)
204: .sp 1
205: .PP
206: A newly-started time daemon broadcasts this message to
207: locate a master. No other action is implied by this packet.
208: It requires a Master Acknowledgment.
209: .sp 1
210: .DE
211: .DS L
212: .SH
213: Master Acknowledgement
214: .so unused
215: .LP
216: Type: TSP_MASTERACK (4)
217: .sp 1
218: .PP
219: The master sends this message to acknowledge the Master Request message
220: and the Conflict Resolution Message.
221: .sp 1
222: .DE
223: .DS L
224: .SH
225: Set Network Time Message
226: .so date
227: .LP
228: Type: TSP_SETTIME (5)
229: .sp 1
230: .PP
231: The master sends this message to slave time daemons to set their time.
232: This packet is sent to newly started time daemons and when the network
233: date is changed.
234: It contains the master's time as an approximation of the network time.
235: It requires an acknowledgment.
236: The next
237: synchronization round will eliminate the small time difference
238: caused by the random delay in the communication channel.
239: .sp 1
240: .DE
241: .DS L
242: .SH
243: Master Active Message
244: .so unused
245: .LP
246: Type: TSP_MASTERUP (6)
247: .sp 1
248: .PP
249: The master broadcasts this message to
250: solicit the names of the active slaves.
251: Slaves will reply with a Slave Active message.
252: .sp 1
253: .DE
254: .DS L
255: .SH
256: Slave Active Message
257: .so unused
258: .LP
259: Type: TSP_SLAVEUP (7)
260: .sp 1
261: .PP
262: A slave sends this message to the master in answer to a Master Active message.
263: This message is also sent when a new slave starts up to inform the master that
264: it wants to be synchronized.
265: .sp 1
266: .DE
267: .DS L
268: .SH
269: Master Candidature Message
270: .so unused
271: .LP
272: Type: TSP_ELECTION (8)
273: .sp 1
274: .PP
275: A slave eligible to become a master broadcasts this message when its election
276: timer expires.
277: The message declares that the slave wishes to become the new master.
278: .sp 1
279: .DE
280: .DS L
281: .SH
282: Candidature Acceptance Message
283: .so unused
284: .LP
285: Type: TSP_ACCEPT (9)
286: .sp 1
287: .PP
288: A slave sends this message to accept the candidature of the time daemon
289: that has broadcast an Election message.
290: The candidate will add the slave's name to the list of machines that it
291: will control should it become the master.
292: .sp 1
293: .DE
294: .DS L
295: .SH
296: Candidature Rejection Message
297: .so unused
298: .LP
299: Type: TSP_REFUSE (10)
300: .sp 1
301: .PP
302: After a slave accepts the candidature of a time daemon, it will reply
303: to any election messages from other slaves
304: with this message.
305: This rejects any candidature other than the first received.
306: .sp 1
307: .DE
308: .DS L
309: .SH
310: Multiple Master Notification Message
311: .so unused
312: .LP
313: Type: TSP_CONFLICT (11)
314: .sp 1
315: .PP
316: When two or more masters reply to a Master Request message, the slave
317: uses this message to inform one of them that more than one master exists.
318: .sp 1
319: .DE
320: .DS L
321: .SH
322: Conflict Resolution Message
323: .so unused
324: .LP
325: Type: TSP_RESOLVE (12)
326: .sp 1
327: .PP
328: A master which has been informed of the existence of other masters
329: broadcasts this message to determine who the other masters are.
330: .sp 1
331: .DE
332: .DS L
333: .SH
334: Quit Message
335: .so unused
336: .LP
337: Type: TSP_QUIT (13)
338: .sp 1
339: .PP
340: This message is sent by the master in three different contexts:
341: 1) to a candidate that broadcasts an Master Candidature message,
342: 2) to another master when notified of its existence,
343: 3) to another master if a loop is detected.
344: In all cases, the recipient time daemon will become a slave.
345: This message requires an acknowledgement.
346: .sp 1
347: .DE
348: .DS L
349: .SH
350: Set Date Message
351: .so date
352: .LP
353: Type: TSP_SETDATE (22)
354: .sp 1
355: .PP
356: The program \fIdate\fP\|(1) sends this message to the local time daemon
357: when a super-user wants to set the network date.
358: If the local time daemon is the master, it will set the date;
359: if it is a slave, it will communicate the desired date to the master.
360: .sp 1
361: .DE
362: .DS L
363: .SH
364: Set Date Request Message
365: .so date
366: .LP
367: Type: TSP_SETDATEREQ (23)
368: .sp 1
369: .PP
370: A slave that has received a Set Date message will communicate the
371: desired date to the master using this message.
372: .sp 1
373: .DE
374: .DS L
375: .SH
376: Set Date Acknowledgment Message
377: .so unused
378: .LP
379: Type: TSP_DATEACK (16)
380: .sp 1
381: .PP
382: The master sends this message to a slave in acknowledgment of a
383: Set Date Request Message.
384: The same message is sent by the local time daemon to the program
385: \fIdate(1)\fP to confirm that the network date has been set by the
386: master.
387: .sp 1
388: .DE
389: .DS L
390: .SH
391: Start Tracing Message
392: .so unused
393: .LP
394: Type: TSP_TRACEON (17)
395: .sp 1
396: .PP
397: The controlling program \fItimedc\fP sends this message to the local
398: time daemon to start the recording in a system file of
399: all messages received.
400: .sp 1
401: .DE
402: .DS L
403: .SH
404: Stop Tracing Message
405: .so unused
406: .LP
407: Type: TSP_TRACEOFF (18)
408: .sp 1
409: .PP
410: \fITimedc\fP sends this message to the local
411: time daemon to stop the recording of
412: messages received.
413: .sp 1
414: .DE
415: .DS L
416: .SH
417: Master Site Message
418: .so unused
419: .LP
420: Type: TSP_MSITE (19)
421: .sp 1
422: .PP
423: \fITimedc\fP sends this message to the local time daemon to find out
424: where the master is running.
425: .sp 1
426: .DE
427: .DS L
428: .SH
429: Remote Master Site Message
430: .so unused
431: .LP
432: Type: TSP_MSITEREQ (20)
433: .sp 1
434: .PP
435: A local time daemon broadcasts this message to find the location
436: of the master.
437: It then uses the Acknowledgement message to
438: communicate this location to \fItimedc\fP.
439: .sp 1
440: .DE
441: .DS L
442: .SH
443: Test Message
444: .so unused
445: .LP
446: Type: TSP_TEST (21)
447: .sp 1
448: .PP
449: For testing purposes, \fItimedc\fP sends this message to a slave
450: to cause its election timer to expire. NOTE: \fItimed\fP
451: is not normally compiled to support this.
452: .sp 1
453: .DE
454: .SH
455: .DS L
456: .SH
457: Loop Detection Message
458: .so loop
459: .LP
460: Type: TSP_LOOP (24)
461: .sp 1
462: .PP
463: This packet is initiated by all masters occasionally to attempt to detect loops.
464: All submasters forward this packet onto the networks over which they are master.
465: If a master receives a packet it sent out initially,
466: it knows that a loop exists and tries to correct the problem.
467: .DE
468: .SH
469: References
470: .IP 1.
471: R. Gusella and S. Zatti,
472: \fITEMPO: A Network Time Controller for Distributed Berkeley UNIX System\fP,
473: USENIX Summer Conference Proceedings, Salt Lake City, June 1984.
474: .IP 2.
475: R. Gusella and S. Zatti, \fIClock Synchronization in a Local Area Network\fP,
476: University of California, Berkeley, Technical Report, \fIto appear\fP.
477: .IP 3.
478: R. Gusella and S. Zatti,
479: \fIAn Election Algorithm for a Distributed Clock Synchronization Program\fP,
480: University of California, Berkeley, CS Technical Report #275, Dec. 1985.
481: .IP 4.
482: Postel, J., \fIUser Datagram Protocol\fP, RFC 768.
483: Network Information Center, SRI International, Menlo Park, California,
484: August 1980.
485: .IP 5.
486: Postel, J., \fIInternet Control Message Protocol\fP, RFC 792.
487: Network Information Center, SRI International, Menlo Park, California,
488: September 1981.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.