|
|
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.