Hello, I have been selected as the Routing Directorate reviewer for this draft. The Routing Directorate seeks to review all routing or routing-related drafts as they pass through IETF last call and IESG review, and sometimes on special request. The purpose of the review is to provide assistance to the Routing ADs. For more information about the Routing Directorate, please see http://trac.tools.ietf.org/area/rtg/trac/wiki/RtgDir Although these comments are primarily for the use of the Routing ADs, it would be helpful if you could consider them along with any other IETF Last Call comments that you receive, and strive to resolve them through discussion or by updating the draft. Document: draft-ietf-homenet-dncp-05.txt Reviewer: Thomas Heide Clausen Review Date: June 16, 2015 IETF LC End Date: Intended Status: Standards Track Summary: o I have significant concerns about this document and recommend that the Routing ADs discuss these issues further with the authors. Comments: o Is there any good reason why the authors have no listed affiliation? o It is somewhat contradictory that the abstract talks about "...describes a protocol" and then later "...leaves some details to be specified in profiles, which define actual implementable DNCP based protocols" Does that not mean, then, that this document specifies an algorithm, a framework, and not a protocol? o On that, I see "DNCP protocol" several places. Expanded, that becomes "Dynamic Network Configuration Protocol Protocol" ... o In general, and despite actually knowing some of the core algorithms somewhat before this review, I found the document really tough to read, with convoluted sentences, inconsistent requirements-language, and a lack of introductory "here's the 1000ft view of the protocol, what it does, how it works, and under which conditions it works". o On that, I do not find the chosen structure of the document to be optimal for conveying an unambiguous protocol specification. For one, the same concepts are occasionally described slightly differently. For another, it is often hard to find the information needed to parse a specific mandated processing (for example). I provide an example of what I would suggest a better structure in the below. The goal is to provide first concepts and an overview, followed by a single, easy to identify place for "precise and unambiguous definitions of concepts", and then use those in the detailed expression of the protocol. Note that this is just an example, of course: Section "Terminology:" The Network State Hash is a hash value which represents the current state of the network, as known by a node. Section "Protocol Overview and Functioning" When receiving a FOO TLV, the DNCP node compares the received Network State Hash with its own Network State Hash. This represents the consistency check rom RFC6206. If same, then...if not, then .... Section "Protocol Information Bases" For the purpose of this specification, the Protocol Information Bases are orgnaized as sets of tuples ... any implementation can chose whatever representation it wants. The Network State Information Base in a DNCP node is a set of tuples: (x, y, z, w) where x is ..., y is ..., z is ..., and w is ... Section "How to calculate the Network State Hash": The network State Hash is calculated using the information from the Network State Information Base, as follows: 1. First, the tuples in that information base are sorted in ascending order based on .... 2. Second, .... (concatenation) 3. Third, the hash function from is used 4. Fourth, the first n bits of the resulting hash value, are retained, witn n being from . And then, in remaining sections simply reference the Network State Hash, which is now ubiquitously defined in a single place. I am taking this example, since when reading section 5.3 I found myself chasing through the document, finding multiple slightly different definitions of "Network State Hash" -- but beyond this example, it generally does apply to the document as a whole, and certainly to all of the processing and generation considerations in section 5. o As a general comment, the document would do well with a good editorial overhaul to bring consistency in language usage, consistency in 2119 terminology, coherence in defined terms and their definition, document structure, etc. Major Issues: o The introduction does not read well; it contains parts of something that could be considered as part of an applicability statement (without it being called out as such, and without forming a complete applicability statement), and does not actually introduce the protocol. Reading just the introduction and the abstract, it is very obscure if this is a framework, a protocol, a building block, an architecture, an algorithm -- and, if either of those, what it is actually accomplishing, and why one would chose to use DNCP. It does, however, transpire that "whatever it is", it has two "modes" and that it requires something (presumably a routing protocol) to provide each "node" with a topology map. Suggest that a proper introduction consisting of three parts would be beneficial: (i) what this document is, (ii) what doing DNCP actually gets you, and (iii) the operating conditions under which the DNCP is applicable. On the latter point, given that you state that DNCP requires profiles to provide "actual implementable DNCP based protocols", it appears important to understand what the limits for "what a profile can give you" are. I am calling this out as a major issue, since I believe that it is not just editorial, but is a matter of scoping this document correctly, and in particular not falling into the trap of "claiming applicability where it's not". o The document, in my understanding, defines an exchange format with limited ability to evolve, as simply "a steam of TLVs". As long as there's never a need to evolve the TLV format itself, and as long as you do not run out of TLV types, that's not going to be a problem. The doc sets aside a 16bit TLV type space, that's reasonable enough, but I worry if eventually a DNCPv2 will need to evolve the format. One purely hypothetical example could be if a "sequence number" would be needed in each DNCP message to detect "link success rates", or something of that sort. I do not have an actual example in mind -- and that's exactly the point: to be evolutive for the unknown future and (at the very least) be able to discriminate between "old" and "new". A discussion could be had if a "version number" in each TLV would do, or if a concept of "protocol message with a version number" is preferential. I do not believe, however, that "no version number" is viable. o Noting that the "overhearing n reduncant transmissions" is a key retransmission suppression mechanism in Trickle, and that this seems to assume broad/multicast, using unicast seems to contradict the statement of "consists of Trickle", at least in the way the algorithm is defined in RFC6206. Note: it's fine to use an algorithm outside of its initial scope, but it should be with the caveat of "which of the characteristics still hold, and which do not" o DNCP claims to be trickle based, yet supports unicast. It also (apparently) is a request/reply protocol. It doesn't have messages. This document needs a good, and pedagogical, "protocol overview and functioning" section somewhere: one needs to get through the end of Section 5 before having even a vague idea of how DNCP works. o The use of normative language is not as tight as could be desired. For example, a number of SHOULDs seem to really ought to be "MAYs" since not following the SHOULD won't break the algorithm. It would be good to walk through the document and take a careful look at these to either MUST/MAY the SHOULDs, or to qualify the SHOULDs remaining. o I am going to go out on a limb here, and say that "the protocol is underspecified". That's a deliberately provocative statement, but it was honestly how I felt upon having completed the review. The document does not help the reader get an intuitive understanding of the protocol functioning, but jumps right into minute details -- requiring the reader to "build up her or his own model of how DNCP works". On having read the document a few times, I think that I understand it -- but there's nothing permitting me to verify my understanding, and thereby I'd not feel confident to be able to provide an interoperable and independent implementation. I've given some comments in the "Comments" section as to what I think would be viable ways to improve this point. o Section 5.3, penultimate paragraph: "If keep-alives specified in Section 6.1 are NOT sent by the peer (either the DNCP profile does not specify the use of keep-alives or the particular peer chooses not to send keep-alives), some other means MUST be employed to ensure its presence. When the peer is no longer present, the Neighbor TLV and the local DNCP peer state MUST be removed." "...some other means MUST be employed to ensure its presence." -- followed by more MUST verage when a peer disappears...I am not sure that that's conductive to interoperable implementations. Two implementatons may chose different "means" and then turn off keep- alives - and be non-interoperable. For interoperability, we need: o A mandatory to implement mechanism, that always is present, but can be complemented by another "means", or o A mandatory to implement mechanism, which by way of a specified negotiation mechanism can be turned off between two peers, to allow them to use another "means". If you argument is "...this will be specified in the profile", then you still should provide the two above in this document, with the note that "...and a profile may specify which from among these MUST be used in a given deployment" o Section 8: Interesting; I am not a security expert, but I am very curious to see the SEC-DIR review of this document. That said, section 8.3.1 contains normative verbage: "A node MUST be trusted for participating in the DNCP network if and only if..." Which I think needs a qualifier of the "If the certificate based trust model is used, then a node must be trusted for ...." Same goes for the subsequent SHOULD - it really reads as-if this certificate based mechanism initially was intended as MTI, but then was backed away from subsequently without a complete cleanup of the text? I do actually question the value of having a laundry-list of trust management methods, and for one of those (certs) a laundry-list of all sorts of trust relationship establishment methods, in this document; this in no small part as the lists are explicitly indicated as "non-exhaustive" and that none are listed as "mandatory to implement". Was any thought given to factoring this into a seperate document, and focusing in this document on one, mandatory-to-implement, security mechanism? Minor Issues: Introduction: o 1st paragraph: "reachable nodes"; two things: - I always have a problem with the term "node"; it is often used as a shorthand for "routers and hosts, both". I was given to understand that homenet specifically did not want to consider host changes? - "Reachable" - does that mean something as in "radio range", does it mean "on the same link", does it mean within a specific (DNCP?) domain, or does it mean simply "on the Internet somewhere"? o 2nd paragraph: "nodes that are currently accounted for": - What does that mean? - Also, the conclusion "Therefore unlike Time-To-Live (TTL) based solutions, it does not require periodic re-publishing of the data by the nodes" does actually not follow from the previous sentence in that paragraph. - I actually do not think that the introduction describes what DNCP does, and so the comparison to TTL-based solutions is rather hard to get here. - Continuing: "On the other hand, it does require the topology to be visible to every node that wants to be able to identify unreachable nodes and therefore remove old, stale data." This reads a lot more like an applicability statement than an introduction; the take-away when reading this is: "Each node must have something that maintains a topology map of the entire network, such as a (LS) routing protocol, for DNCP to function" Is that actually the intent here? - "DNCP is most suitable for data that changes only gradually" How is the reader to interpret "gradually"? Do you mean "infrequently", or do you really mean "gradualy"? o Last paragraph: "DNCP has relatively few requirements for the underlying transport; it requires some way of transmitting either unicast datagram or stream data to a peer" This is a bit of a forward comment, but we now have "nodes that are accounted for" and "peers". I see neither defined in the terminology section. "and, if used in multicast mode, a way of sending multicast datagrams." This is the first mention of two "modes" of this protocol. This loops back to an earlier comment, that the introduction actually does not introduce the protocol, but rather is an incomplete applicability statement. "If security is desired and one of the built-in security methods is to be used, support for some TLS-derived transport scheme - such as TLS [RFC5246] on top of TCP or DTLS [RFC6347] on top of UDP - is also required." I am not pretending to be a security expert, but "some TLS-derived...such as ... on top of TCP or DTLS..." (i) does not sound like it could lead to interoperable implementations, and (ii) does not sound sufficiently tight as a MTI security mechanism to pass security reviews. Again, I am no security expert, but perhaps getting one looped in early would be advicable? Terminology: o Suggest adding "In this document ..." somewhere to this text: "For readability, any DNCP profile specific parameters with a profile-specific fixed value are prefixed with DNCP_." o DNCP network: I read this twice, and came away with two different understandings, perhaps you can clarify which it is: o A set of nodes running DNCP, within the same domain, and for which a path betwen any two DNCP nodes includes only other DNCP nodes; i.e., a DNCP network forms a connected component with only other DNCP nodes. o A set of nodes running DNCP. They may be anywhere on the Internet, they are part of the same DNCP network as long as they (through other means) have learned of each others addresses. In the former, that'd be (for example) a deployment within my home -- in the latter, it could be a node in my home and a node in your home forming a DNCP network. The text is not quite clear on this point. o Link: a point of clarification here. In "DNCP network", there was talk about "unidirectional links" and "bidirectional links"; in "Link" the definition is somewhat vague "directly connected" and "can communicate". Could something like "without decrementing TTL/ hop-count" be added, and could a statement on bidirectionality (IOW, that this is just an IP link) be added? o "Interface" is overloading the term "port" (IP port) which can be confusing o "Endpoint" - The definition "locally configured use of DNCP" is not clear -- are you really not talking about a DNCP process? I am not sure that it is clear how a DNCP process can be "attached to ... a specific remote unicast address, or to a range of unicast addresses that are allowed to contact" I can see how a DNCP process can be configured to allow connections from a specific range of addresses, or can be configured to connect to a specific remote unicast address. Is that what you mean instead? o "Peer" - states that two peers "communicate directly". For link, the definition is "directly connected nodes can communicate". Would it then not be easier to say "a DNCP node on the same link as ..." ? o "Node state" "The hash function and the number of bits used are defined in the DNCP profile." Suggest: "The hash function and the length of the hash value are defined in the DNCP profile." o "Network state hash" - same comment as for node state (above) Data model: o "Latest update sequence number" This may just be my personal taste, but does it hurt to mandate a specific way of doing the looping comparison? The reason I suggest this is, that it's one of those things where creativity in an implementation seems to simply be an invitation for bugs, and for little gain o "Relative time delta" Document talks about "a 32 bit number on the wire" -- does that mean that wireless links are excluded? o Related to terminology, there seems to be some fuzzyness around node and endpoint. For example, in data model one of the things that a DNCP node may have is: "Unicast address: the DNCP node it should connect with" Does that mean *any* DNCP process (i.e., *any* endpoint) at that address, or a *specific* DNCP process at that address? The same, but inverse, for "Range of addresses: the DNCP nodes that are allowed to connect" - is this "any DHCP process (i.e., *any* endpoint) on any of these addresses? Following, the same section reads: "For each remote (peer, endpoint) pair detected on a local endpoint, a DNCP node has..." the following text indicating that there's some sort of distinction between which endpoint. This whole thing needs some clarification. Operation o First a generic comment that Trickle itself has some operating conditions which scopes its applicability, and it would behove this document to, in its own applicability statement, call out those. o On the same token, while the use of Trickle in an unicast fashion is possible, I wonder if (in general) unicast use is advicable. I appreciate that some links are point-to-point and so a broadcast across it becomes an unicast -- but, does that necessitate being called out? IF the reason for this "because we can use TCP", then be explicit about this - but, also, that you're then not exactly using Trickle where and how it was intended. I wonder if you could be explicit as to what consequences this "alternate use of Trickle" have? It seems that the use of unicast is directly contradicting the main operating consideration of Trickle? o 2nd paragraph states: "the multicast transport does not have to be particularly secure" What is the definition of "not have to be particularly secure"? Is cleartext OK? Authentication? Encryption? Should I do something more? 5.1 Trickle-driven status updates o First paragraph: "Multicast MUST be employed on a multicast-capable interface; otherwise, unicast can be used as well" If the interface is not multicast-capable, then unicast can be used as well as what? Certainly not multicast, since the interface is not multicast capable...? o Continuing: "If possible, most recent," What would make it "not possible"? "recently changed, or best of all, all known Node State TLVs" OK, so assuming that for some reason (MTU limitation) it is not possible, does the above represent an order that I MUST respect, or is it "take a pick from among these, according to your whim of the day"? "(Section 7.2.3) SHOULD be also included," SHOULD is a strong statement, especially when prefixed by "if possible". That, essentially, renders it a MAY. "unless it is defined as undesirable for some reason by the DNCP profile Now it DEFINITELY is a MAY since apparently a profile can state that these TLVs MUST NOT be included -- and, I assume, since the document permits it to do so, it is possible without breaking the algorithm. o And, continuing again: "If the DNCP profile supports dense broadcast link optimization (Section 6.2), and if a node does not have the highest node identifier on a link, the endpoint may be in a unicast mode in which multicast traffic is only listened to. In that mode, multicast updates MUST NOT be sent." Really hard to parse. Is that not equivalent to saying: "If a DNCP endpoint is not configured to be in multicast mode, then it MUST NOT send multicast updates" ? If it is, then say that -- if it is not, then a rewrite is needed, as that's what I manage to extract from the text. 5.2. Processing of Received TLVs o First paragraph reads: "The DNCP profile may specify criteria based on which particular TLVs are ignored." Criteria for what? Do you perhaps mean: "The DNCP profile may specify which TLVs to process, and which to ignore"? Auxiliary question, then, and related to my penultimate comment to 5.1, are there any constraints on that, any risks from ignoring (or not) specific TLVs to the operation of the network? o I am also confused by the 3rd sentence in the first paragraph: "Any ’reply’ mentioned in the steps below denotes sending of the specified TLV(s) via unicast to the originator of the TLV being processed." This confusion is likely due to the lack of a "protocol overview and functioning" description [either as its own section, or as part of the introduction]. I know how trickle works. Trickle is a distributed consistency algorithm. When an inconsistency is detected, then an action is triggered that rectifies that inconsistency. DNCP claims to be trickle based, but apparently also a sort of request/reply mechanism. Combined with trickle-over-unicast-links, I am not sure what the protocol logic actually is. Reading through to the end of Section 5, I think that I understand the idea, but I am not sure. And the old "when in doubt, look at the state machines" didn't help either, there aren't any. The point to this comment is, that the document immediately jumps into the details -- but forgets to give the "10000ft view" of the protocol functioning. o First paragraph states two SHOULD. Would those not be MUST? What breaks if not respecting those criteria? o 2nd paragraph, a "valid address", that definition is rather unclear. I understand that that's something specified in "the profile", but what is the relationship to the different addresses discussed in the data model section? It is not clear what the parenthesis to this paragraph means, but that is probably again a case of the "use case" and "protocol overview" not being documented - the document so far has nowhere described interaction with outside processes. o First bullet, but generally through these, and other, bullets: I had a really hard time deciphering this. First: "The receiver MUST reply with a Network State TLV (Section 7.2.2) and a Node State TLV (Section 7.2.3) for each node data used to calculate the network state hash" Alright, off to find "network state hash". The terminology tells me that it is: "a hash value which represents the current state of the network. The hash function and the number of bits used are defined in the DNCP profile. Whenever a node is added, removed or updates its published node data this hash value changes as well. It is calculated over each reachable nodes' update number concatenated with the hash value of its node data. For calculation these tuples are sorted in ascending order of the respective node's node identifier. Searching further, I find Section 5.1, but that simply states: "The Trickle state for all endpoints is considered inconsistent and reset if and only if the locally calculated network state hash changes." Next occurence is in these bullets, and then just before Section 6, "During the grace period, the nodes that were not marked reachable in the most recent graph traversal MUST NOT be used for calculation of the network state hash, be provided to any applications that need to use the whole TLV graph, or be provided to remote nodes." Alright, now I know what I can't use for calculating it. A few occurences later, in section 7.2.2, in what looks like a section laying out the packet -- sorry, TLV -- format, I see for "Network State TLV": "This TLV contains the current locally calculated network state hash. It is calculated over each reachable nodes' update number concatenated with the hash value of its node data in ascending order of the respective node identifiers" Phew. Now, it does seem a little at odds with the terminology. The terminology states something about tuples that are ordered. While those tuples are not defined (they should be), at least what is described is clear and possibly can be implemented. What is in 7.2.2 is not ant cannot. This is an instance of a general issue that I have with this document: that it doesn't take a step back, and properly define things in a proper order, but dives into (and repeats) details. o Also to section 5.2, for each of the cases that are described, could a conceptual description of "what this corresponds to" be added? For example: Upon reciept of a Node State TLV: If the node identifier matches the local node identifier and the TLV has a higher update sequence number than its current local value, or the same update sequence number and a different hash, the node SHOULD re-publish its own node data with an update sequence number 1000 higher than the received one. It's not clear why it is a "SHOULD re-publish" (not MUST, nor what happens if SHOULD is not followed). And it is not clear why 1000 ... [I just pick this example, but it applies to all processing bullets] o In the same cases, it is a lot more readable (IMO) to do nested bullets: o If FOO; and either of: - BAR - GNYF - BLAB Then do all of the following: - ... - ... - ... o Otherwise, if not-FOO, ... That's a personal preference, though, so feel free to disregard this comment. o Section 5.3 and elsewhere, suggest replacing: "If it comes via..." by: "If received over ..." o Last paragraph in 5.3: Same comment as 3rd comment to 5.1 made above. o Section 5.4, first sentence: "DNCP validates the set of data within it ..." Should that not be: "A DNCP instance validates the data within its data sets ..." ? Also, "nodes that are currently accounted for; what's the definition of "accounted for"? o Section 5.4, first paragraph The statement: "therefore, unlike Time-To-Live (TTL) based solutions, it does not require periodic re-publishing of the data by the nodes. On the other hand, it does require the topology to be visible to every node that wants to be able to identify unreachable nodes and therefore remove old, stale data." which also appeared in the introduction, is copied verbatimly. Once more, the statement is a claim which is not supported, and that which follows "therefore" is not a consequence of that which comes before "therefore". o Section 5.4, first paragraph "When a Neighbor TLV or a whole node is added or removed, the neighbor graph SHOULD be traversed, starting from the local node. The edges to be traversed are identified by looking for Neighbor TLVs on both nodes, that have the other node’s identifier in the neighbor node identifier, and local and neighbor endpoint identifiers swapped. Each node reached should be marked currently reachable." First comment, why SHOULD and not MUST? Second comment, and now you made me go look...."neighbor" sounds like "someone on the same link as me" so the "neighbor graph" is really just a set relating "this node" and "another node which is on the same link as this node". Yet, looking in the terminology, I see "Neighbor graph" defined as: "the undirected graph of DNCP nodes produced by retaining only bidirectional peer relationships between nodes. Which doesn't sound as much like a "neighbor graph" as it does a "topology graph" for the whole network. So, is the terminology wrong, or is the definition wrong? o Section 5.4, 3rd paragraph Is it actually important that the content of that graph be "purged"? That sounds like an implementation detail -- rather, it sounds like the elements of the graph should "not be used for calculations and MAY be removed". Or, is there a specific requirement that I am missing? o Section 6.1, I do not understand the parenthesis in this sentence: Trickle-driven status updates (Section 5.1) provide a mechanism for handling of new peer detection (if applicable) on an endpoint Under what conditions is that applicable, and under which is it not? o Section 6.2: "An upper bound for the number of neighbors that are allowed for a (particular type of) link that an endpoint runs on SHOULD be provided by a DNCP profile, user configuration, or some hardcoded default in the implementation." A couple of things to that: 1) Can you explain the parenthesis? What type of link? 2) How does "an endpoint runs on" a link? 3) Why SHOULD? 4) Is this specification seriously suggesting "some hardcoded default in the implementation" as a SHOULD? [I am tempted to upgrade this to a "Major issue" simply because of 4) ] Also to 6.2, this particular optimization, do you have any quantification of its actual benefit? What should I look for to determine if this "optimization" yields a benefit or not? What are you trying to optimize? Over what link types does this function? I am dubious that it "optimizes" much, if anything, across an Ethernet, for example ... o Section 7 As indicated previously, having to search through the frame format diagrams for "how to calculate the value" isn't ideal. o Section 7.2.3, I worry when I see something like this: "The whole network should have roughly the same idea about the time since origination of any particular published state." What is the definition of "roughly"? Is the "should" intentionally in non-caps? What're the consequences if not? [Note that trickle almost mechanically makes information propagate with non-trivial jitter across a network, so how do you ensure this?] o Section 7.2.4, CUSTOM-DATA TLV. Given the description: "This TLV can be used to contain anything; the URI used should be under control of the author of that specification." It seems that (i) the description is self-contradictory: it cannot contain *anything* but can contain an URI? Secondly, how is this supposed to work, what does it mean [for DNCP] that "the URI is under control of the author"? Thirdly, what does "that specification" refer to? Fourthly, why lower-case should? Indeed, why is the "control" of the URI of any importance to DNCP? o Section 9, the bullet: "When receiving messages, what sort of messages are dropped, as specified in Section 5.2" Seems at odds with Section 5.2, which discusses TLV processing. Nits: Requirement Language: o Please reflect Errata 499 for RFC2119 in the boilerplate o The RFC2119 boilerplate could conveniently be in the terminology section, given that it is terminology.