Internet DRAFT - draft-boudreault-ipv6-ntp-refid
draft-boudreault-ipv6-ntp-refid
Network Working Group J-F. Boudreault
Internet-Draft Marc Blanchet
Expires: May 13, 2002 Viagenie inc.
November 13, 2001
Reference ID for NTPv6
draft-boudreault-ipv6-ntp-refid-00.txt
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This Internet-Draft will expire on May 13, 2002.
Copyright Notice
Copyright (C) The Internet Society (2001). All Rights Reserved.
Abstract
This document proposes a solution to solve the reference ID
issue for IPv6 NTP secondary server.
Table of Contents
1. Definition of Reference ID in NTP Protocol
2. Problem Statement
3. Protocol Change
3.1 Description
3.2 Impacts
3.3 Implementation
4. Using Timestamps
4.1 Description
4.2 Impacts
4.3 Implementation
5. Ipv6 Address Compression
5.1 Description
5.2 Impacts
5.3 Implementation
6. Discussion on solutions
7. Acknowledgements
1. Definition of reference ID in NTP protocol
According to RFC 1305 (Network Time Protocol Version 3),
Reference Clock Identifier "is a 32-bit code identifying the
particular reference clock. In the case of stratum 0 (unspecified)
of stratum 1 (primary reference), this is a four-octet,
left-justified, zero-padded ASCII string. [...] In the case of
stratum 2 and greater (secondary reference) this is the four-octet
Internet address of the primary reference host." Reference ID is
included as a 32-bits field in every NTP packet.
This reference ID is essential to avoid 'loopback' during the
selection of synchronization source for NTP server. A 'loopback' happens
when a NTP server choose a reference source that is a secondary NTP server
who use itself as a source. This result in false synchronization.
Reference ID being the IPv4 address of the reference source, one can avoid
'loopback' by comparing this field (from NTP server reply packet) with our
IPv4 address, and reject the potential source if they are equal.
2. Problem Statement
The Reference ID is a 32 bits field in the NTP packet definition.
It is enough for IPv4 32 bits addresses but not enough for IPv6 128 bits
addresses. There is a problem if a secondary server is using a IPv6-only
NTP server as reference source. We need a way to avoid 'loopback' for
synchronization of secondary NTP server with a IPv6-only NTP server.
In this document we present our understanding of three
possible solutions. The first solution is to change the size of
reference ID field in NTP packet definition from 32 bits to 128 bits.
The second solution is to use timestamps informations to avoid 'loopback'.
The third solution is to apply an algorithm the IPv6 address to compress
it to 32 bits and use these IPv6-compressed address in reference ID.
3. Protocol Change
3.1 Description
A solution is to change the reference ID field from 32 bits to
128 bits. This way one could put IPv6 source as reference ID
and IPv6 embedded IPv4 for IPv4 source. We need to change NTP
packet definition to modify reference ID field from 32 bits to
128 bits.
3.2 Impacts
By using a new protocol definition for ntp packet, this breaks
the support for old version of ntp. To support them, one needs
to implement both versions of ntp packet, one with 32 bits
reference id and one with 128 bits reference id. When a server
receives a packet, it first puts it in a buffer structure to
look at the version field, and decide which structure to use
according to ntp version. When server will reply to request,
it will need to make sure it respond with the same version
and use the correct packet definition that the client support.
If a secondary server using IPv6 reference source receive a
request from an old version client, it will need to ignore it
because it will not be able to put his reference id in the old ntp
packet definition. This will need an important redefinition
of ntp specifications.
3.3 Implementation
To change the size of reference ID, one needs to modify
the definition of NTP packet structure. This will have
big impact on compatiblity with older versions of NTP.
To maintain this compatiblity, one will need to support
old packet format. It means that it needs to implement
both NTP packet structure definitions, one with a
32 bits reference ID field and one with a 128 bits
reference ID field.
In reception procedure, the server will need to first put the
packet in a NTP structure buffer, analyze the version
of the packet and put it in the correct NTP packet
structure.
In transmission procedure, the server will need to first know
the NTP version of the destination, and put
informations in correct packet format. In every
procedure that use reference ID, one will need to support
both versions and test every time to know which version
is used.
4. Using Timestamps
4.1 Description
This was first proposed by David L. Mills in RFC 2030 (Simple Network
Time Protocol Version 4) to resolve reference id problem for IPv6
source. By using other informations from ntp packet, one could avoid
loopback by comparing timestamps of the last transmitted packet from
reference source and originate timestamp of the reply from ntp server.
When a reference source is selected, each time ntp server receive a
packet from this source, it will update his reference id to the low
32 bits of transmit timestamp field from this ntp packet.
When a ntp server is looking for synchronization source, it will
compare the low 32 bits from originate timestamp field of ntp reply
packet (this will correspond to his transmit timestamp from request)
with reference id field. If they are equal, that is because this server
updated his reference id after received the request packet, and
that means that it is using this server as synchronization source.
In this case it needs to be discarded.
4.2 Impacts
It could append that a ntp request packet is send to a
ntp server at the same time than the reference source of
this server send it a packet. By this way, the ntp
server will adjust his reference id to transmit time from
his ntp source. If this value is the same than the
transmit timestamp of ntp request packet, the requester
will reject this server even if it is not using itself
as a source. This way could reject a good potential
source of synchronization.
4.3 Implementation
In clock update procedure, when the stratum of system
is more than 1 (secondary server), the server will put the low
32 bits from transmit timestamp of the last received
NTP packet from reference source.
In clock selection procedure, the server needs to modifiy
loopback detection test to compare reference ID
field with originate timestamp field.
In reception procedure, every time the server receive a packet
from our reference source, it will need to update reference
ID with the low 32 bits of the transmit timestamp field.
Depending on the exact implementation of NTP, one need
to be sure we can obtain the informations we need to
use this solution. That could be a problem in some
implementations.
5. IPv6 Address Compression
5.1 Description
By applying a compression algorithm, one could compress
IPv6 addresses to 32 bits and put the compressed address
as the Reference Id. The proposed way is to ignore
some bits because of some assumptions in the use of these
bits in the IPv6 address.
In order to avoid to overlap the IPv4 address space in the
reference ID field, the leftmost 3 bits of the Reference ID
field is '111'b when an IPv6 address is compressed in the
reference ID. '111' in the first 3 bits correspond to the
Class D and E IPv4 addresses. Since this address space is
not used for Reference ID field, this gives no overlap between
the two spaces.
The IPv6 address architecture [RFC2373] defines specific
boundaries in the address as shown below.
| 3 | 13 | 32 | 16 | 64 bits |
+---+-----+---------------------+--------+-----------------+
|001| TLA | NLA ID | SLA ID | Interface ID |
+---+-----+---------------------+--------+-----------------+
The last 64 bits is the interface ID. If the NTP server uses
autoconfig with a unique layer2 identifier, then this is identified
by a "uniqueness" bit in the EUI-64 format used in the Interface ID.
This identifier is used for the Reference ID. If the identifier is
more than 32 bits (for example: Ethernet 48 bits), then the
last rightmost 28 bits (32 - 3 - 1 bits) are used for the Reference ID.
and one bit is 1 for identifying a unique address.
If the NTP server is not having a unique interface identifier
in its address, then the following assumptions are made:
- we expect that most NTP server sites that are interconnected
will only have one or a few NTP servers. This means that the
differentiator is mostly based on the identification of the site
instead of the host. The algorithm will try to use most of the
site identification (the first 48 bits) instead of the subnet id
(the next 16 bits) or interface id (the last 64 bits).
- because of the compression of 0 in writing IPv6 addresses makes
easier to put most zeros in a manually assigned address, then
most of the leftmost bits in the rightmost 64 bits of the
address will be all zeros. So this compression algorithm will
only use the rightmost 4 bits of the rightmost 64 bits of the
address.
- for the same reason of zero compression for writing, the
SLA ID will usually have many zeros at the left. This algorithm
only uses the rightmost 4 bits of this field.
- since the current addressing architecture is only defined for
the 001 as the first three bits, these bits are redundant and
not used.
- this leaves us with 45 bits of TLA/NLA bits and only 32-3-4-4=21
bits left. For no real reasons except the basis of the current
allocation policies, this algorithm uses the
rightmost 4 bits of the TLA field and the rightmost 17 bits of the
NLA field.
The chosen bits are identified with the number of bits below
the following figure.
| 3 | 13 | 32 | 16 | 64 bits |
+---+-----+---------------------+--------+-----------------+
|001| TLA | NLA ID | SLA ID | Interface ID |
+---+-----+---------------------+--------+-----------------+
|4| | 16 | |4| |4|
5.2 Algorithm
5.2.1 Unique Interface ID of the IPv6 address based on EUI-64
If the IPv6 address has the "uniqueness" bit on, then
the reference ID is composed of the following fields:
| 4 | 4 | 24 |
+----+----+-------------------------+
|1111| A | B |
+----+----+-------------------------+
| 32 |
The compression algorithm is the following:
- the first leftmost 4 bits are '1111'b.
- the next 4 bits, identified as A in the previous figure,
are the 16-19 bits of the Interface ID
of the IPv6 address, counting with 0 as the leftmost bit
of the Interface ID field (of 64 bits).
- the next 24 bits, identified as B in the previous figure,
are the rightmost 24 bits of the IPv6 address.
TBD: discussion on 64 bits EUI-64 identifiers
5.2.2 Non unique Interface ID
The reference ID is then composed of the following fields:
| 4 | 4 | 16 | 4 | 4 |
+----+----+-----------------+----+----+
|1110| A | B | C | D |
+----+----+-----------------+----+----+
| 32 |
The compression algorithm is the following:
- the rightmost 3 bits are '111'b
- the next field, identified as A, is of 4 bits and the bits
are the 12-15th bits of the IPv6 address, starting with zero as the
leftmost bit.
- the next field, identified as B, is of 16 bits and the bits
are the 42-47th bits of the IPv6 address, starting with zero as the
leftmost bit.
- the next field, identified as C, is of 4 bits and the bits
are the 60-63th bits of the IPv6 address, starting with zero as
the leftmost bit.
- the last field, identified as D, is of 4 bits and the bits
are the rightmost 4 bits of the IPv6 address.
5.2 Impacts
This compression algorithm is obviously going to produce some
false hits. Our current understanding of the previous proposal
based on Timestamps tells us that that proposal also exhibits
some false hits. Which one is more probable than the other
is difficult to guess. We consider for now essentially equal
unless the contrary is demonstrated.
By compressing IPv6 address, it could append that two
IPv6 addresses give the same 32-bits compressed address.
If this append, a ntp server could reject a source that
use a reference server with the same IPv6-compressed
address. So we could reject a good potential source of
synchronization due to IPv6-compressed addresses conflict.
TBD: discussion on other addresses: link-local, site-local,
ipv4-compatible, 6to4, ...
5.3 Implementation
Each time one uses IPv6 address to create or compare reference id, we
just need to apply the algorithm to obtain 32 bits IPv6-compressed
address that will fit the field. By this way we will be able to
avoid 'loopback' by comparing reference source IPv6-compressed
address with our IPv6-compressed address. They will be the same if
we are the reference source and we apply the same algorithm to
compress IPv6 address.
Every time we set reference ID from IP address or
compare IP address with reference ID, we will apply
a algorithm to the IP address. This algorithm will
return a 32 bits address corresponding to the complete
IPv4 address or compressed IPv6 address.
The key advantage of this proposal is the fact that it is very
easy to compute the reference ID. In fact, it has been implemented
with a small C macro on the current IPv6 branch of the ntpd code.
It also brings backward compatibility with IPv4 servers already
in place.
6. Discussion on Solutions
There is no 'perfect' solution for this problem. Every
solutions has some consequences. In both case of using
timestamps or IPv6 compressed address, we could have
conflicts and reject good potential source of reference.
And changing of the protocol definition without braking
compatibility with older version has important implications
for deployment and version negociation.
We believe that using IPv6-compressed address is the
better solution. Being easy to implement, we could
minimise the possiblity of conflict with a good
compression algorithm.
7. Acknowledgements
TBD
8. References
TBD
9. Authors' Addresses
Jean-Francois Boudreault
Viagenie inc.
2875 boul. Laurier, bureau 300
Sainte-Foy, QC G1V 2M2
Canada
Phone: +1 418 656 9254
EMail: Jean-Francois.Boudreault@viagenie.qc.ca
URI: http://www.viagenie.qc.ca/
Marc Blanchet
Viagenie inc.
2875 boul. Laurier, bureau 300
Sainte-Foy, QC G1V 2M2
Canada
Phone: +1 418 656 9254
EMail: Marc.Blanchet@viagenie.qc.ca
URI: http://www.viagenie.qc.ca/
Full Copyright Statement
Copyright (C) The Internet Society (2001). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgement
Funding for the RFC Editor function is currently provided by the
Internet Society.