Tom, Lucy, Osama,
A) Technical Review of GUE 'As-is'
B) Editorial Review <--- This email
C) Redesign of parts of GUE
*B/ EDITORIAL PROBLEMS**
*
*1/ Problem**/Motivation?
***Although I said earlier "Don't unnecessarily constrain your protocol
design solely to the use-case(s) you have in mind," the draft doesn't
actually do a good job of describing the problems it does aim to solve.
It could (at least) refer forward to section 6 on Motivation from the
Introduction.
Also section 6 on "Motivation" doesn't do a good job of saying which
problems other related protocols solve that GUE doesn't, or vice versa.
Perhaps you could at least tabulate whether GUE satisfies the
requirements in draft-ietf-nvo3-dataplane-requirements, altho I think
the remit of GUE has become wider than NVO3.
Use-cases I found in the draft (not all clearly identified in the same
place):
* Flow ID entropy for atypical/new protocols over IP (but see A4.9/ in
my technical review email which questions this claim);
* Maximize deliverability of atypical/new protocols over IP (but see
caveat below);
* Encapsulation of standardised optional data such as a virtual network
ID, security data;
* Encapsulation of private-use / experimental optional data;
* Tunnel control messaging;
Additional use-cases not identified in the draft:
* Endpoint control of path diversity (e.g. for MPTCP to create multiple
paths between the same pair of IP addresses)
* potential as a "path layer" (see PLUS/SPUD)
* IPv6 extensibility (see 2.4/ "GUE: a potential solution to the IPv6
extension header discard problem" in my separate email).
Deliverability caveat: GUE encapsulation both helps and hinders
deliverability.
X) muddlebox Y) meddlebox
a) Atypical protocols Better No worse
b) Atypical TCP options Better Worse, or no better
Legend:
a) new/atypical protocols over IP (e.g. SCTP, DCCP) or
b) new options in existing protocols over IP (e.g. new TCP options)
X) muddlebox: NATs, performance enhancers, etc. that unintentionally
discard atypical protocols;
Y) meddlebox: security functions, e.g. firewalls, Web filters, that
intentionally discard incoming UDP datagrams as well as atypical
protocols and options.
Also, at least one non-goal needs to be mentioned:
* No intent to bypass intentional firewall discard of "high-risk"
atypical protocols, although non-GUE-aware firewalls may be traversable
in the outgoing direction until they are updated.
*2/ Terminology**
*You cannot expect to write a readable document about encapsulation
without defining terms and keeping strictly to those terms. E.g.:
* "various/arbitrary IP protocols" (used twice in the abstract and
introduction) => "protocols encapsulated by IP" (which could include
Ethernet, IPv4, IPv6. TCP, DCCP, ICMP)
* "a UDP packet" (S.2) => a UDP header in an IP header (v4 or v6)
* "encapsulated packet" (S.6) => payload encapsulated by GUE;
* "encapsulation header" (S.6) => GUE header.
*3/ Transport encap**: Addressing concepts
*S5.2:
The addresses in the IP header refer to both the
endpoints of the encapsulation and the endpoints for terminating the
the transport protocol.
This sentence omits the main point of this mode of encapsulation, which
is fundamentally encapsulation of one set of ports within another,
rather than one set of network addresses within another.
S5.3 contains similar problematic text:
In either case,
the intended target (decapsulator) is indicated by the outer
destination IP address.
Add: "and the destination port in the UDP header."
This applies in both network and transport modes, proved by the fact
that the UDP header is removed on decap as well as the IP header.
*4/ Checksums**: Missing context
*S.5.7 (including subsections 5.7.1, 5.7.2, 5.7.3)
This section is hard to follow - the reader feels like they have just
been parachuted into the middle of an argument, and all they read is
some disconnected points and the final compromise, but not what the
argument was about or what the original problem was.
Given GUE adds a header with a checksum field to a packet that is
typically already checksummed, it would seem a reasonable requirement to
ideally avoid double checksum coverage. This requirement is not listed.
Then, if the compromises written in S5.7 followed the line of reasoning
written out below, I think it could be written more succinctly and make
more sense:
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
It would seem sensible for the two GUE endpoints to solely checksum the
fields that GUE adds/removes, because knowledge of which fields GUE
adds/removes is contained in all GUE code (ie. out-of-band knowledge).
However, if GUE placed the checksum of these fields in the outer UDP
checksum field, middleboxes on the path that attempted to verify the
outer UDP checksum would not be party to this out of band agreement, so
they would reject the checksum and discard all GUE packets.
GUE could use UDP-LITE which is based on UDP but redefines the length
field to specify the checksum coverage. However, UDP-Lite has a
different protocol number to UDP, so its traversal of middleboxes is
also very poor. Therefore, the design of GUE has had to consider no
checksum coverage at all for the headers it adds, otherwise GUE encap
and decap will involve calculation of a checksum over the whole payload
of every packet, which will heavily impact performance.
Originally, not covering a UDP header by using a zero checksum [RFC768]
was allowed but not recommended [RFC1122] for IPv4 (which has its own
header checksum). However, the UDP checksum was required to be non-zero
in a UDP/IPv6 packet [RFC2460], because IPv6 does not have its own
header checksum. RFC 6935 updated the IPv6 spec, to allow a zero UDP
checksum with IPv6 in certain tunnelling scenarios. However, lack of
coverage comes with risks, as explained in the guidance on the
applicability of using zero checksums [RFC6936]. Not only would there be
a risk of undetected corruption of the outer UDP+GUE+options, but also
corruption of any /added/ outer IPv6 header.
Note that GUE does not add an IP header in transport encap mode, but it
does in network encap mode. Therefore in network encap mode,
IPv6+UDP+GUE+options would not be covered if a zero checksum were used.
Both RFCs 6935 (S.4.3) & 6936 (S.1.3.4) raise the possibility that
middleboxes (esp. firewalls) will exist that drop UDP/IPv6 datagrams
with a zero checksum. This further complicates the decision on whether
GUE should use a zero checksum. However, no data on the likelihood of a
zero checksum UDP datagram being discarded (for IPv4 or IPv6) is given
in RFC6935 or RFC 6936.
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
S5.7.3:
This section contradicts itself. It starts by saying
For UDP in IPv6, the UDP checksum MUST be processed as specified in
[RFC768 <https://tools.ietf.org/html/rfc768>] and [RFC2460
<https://tools.ietf.org/html/rfc2460>]
I assume this first sentence should have been removed, because the
section goes on to allow zero UDP checksum and other possibilities which
contravene this first sentence. Whatever, repetition of the same rule in
different words needs removing from the first para, otherwise it will
also be prone to inconsistency during later editing.
*5/ Nits**
*
S3.1: first sentence and in the header diagram: Strictly version 0b00
would be better than 0x0, which implies 4 bits.
S3.1: The definitions of the "C flag", "ctype", "Flags", "Fields" and
"Private data" are all inadequate and/or circular and it doesn't state a
principled difference between the Control and Protocol types of header
(note: all headers are control messages for the protocol they encapsulate).
I think the (unstated) difference is that:
* A control message with a Ctype field (C flag set) carries options and
a message that are both implicitly addressed to the decapsulator (at
port 6080) to monitor or control the state or behaviour of the tunnel;
whereas
* A data message with a Proto field (C flag clear) carries an
encapsulated packet addressed to the encapsulated protocol stack,
optionally including options and/or private data that are implicitly
addressed to the decapsulator, but give /stateless/ control information
associated solely with the encapsulated datagram.
I finally worked this out after much head-scratching - but if these
definitions aren't correct, then I'm still confused.
S3.1 The name "Fields" is too ambiguous for a field! Please choose another.
S3.2.1 s/though other means/through other means/
s/parse packets the packet based on/parse the packet based on/
S3.3: This section ("Flags and optional fields") is completely
incomprehensible unless you already know what it is trying to mean (I
worked it out once I read the examples in other docs, but it's too
abstract without examples).
S3.6: "GUE transform field" is used (twice) without explaining what it
is, and with no reference.
S5. s/server/host/ numerous times, in text and figure.
S5.3
If an encapsulator is tunneling packets, that is encapsulating
packets of layer 2 or layer 3 protocols (e.g. EtherIP, IPIP, ESP
tunnel mode), it should follow standard conventions for tunneling of
one IP protocol over another.
Clearly, it cannot "follow standard conventions for tunneling of one IP
protocol over another" if it is not tunnelling an IP protocol. For
non-IP-in-IP cases, RFC2983 is generally applicable for Diffserv-like
fields in L2 protocols. For ECN propagation between L3 & L2 there is a
draft BCP nearly finished in tsvwg at the moment:
draft-ietf-tsvwg-ecn-encap-guidelines.
S5.4 Current:
If a packet is acceptable, the UDP and GUE headers are
removed and the packet is resubmitted for protocol processing or
control message processing if it is a control message.
I suggest this is made clearer by treating each case (C or not-C)
separately, and in the case of not-C, saying that Fields and Private
Data are also removed. Also, clarify that "is resubmitted" means to the
protocol handler of the outer header (IPv4, v6 etc).
S.5.9.
s/rather/whether/
s/then congestion control at the encapsulation layer must be provided./
/then RFC5405 says congestion control at the encapsulation layer
"MUST" be provided./
Rationale: Rather than restating a rule that is already stated with all
the appropriate caveats in another RFC, it is best to refer to the original.
Also, the above text formulation at least only refers to RFC5405, it
neither agrees nor disagrees with it, which makes RFC5405 easier to
rescind later ;)
s/may used/may be used/
s/may warranted/may be warranted/
S.5.10 s/independent to/independent of/
5.11.1
s/load balancing (statistical multiplexing)/load balancing/
[Statistical multiplexing is the opposite of load balancing - it
involves aggregating flows together, not spreading them out.]
s/corresponds the flow of the inner packet/corresponds to the flow of
the inner packet/
s/examples of deriving an flow entropy/examples of deriving flow entropy/
S.5.11.2
s/...the ephemeral port range. IANA suggests this range to be 49152 to
65535/
/...the ephemeral port range (49152 to 65535) [RFC6335]/
S.6. You might want to add a citation of RFC6438 "Using the IPv6 Flow
Label for Equal Cost Multipath Routing and Link Aggregation in Tunnels"
as an alternative way to introduce flow entropy in a tunnel.
S.7. The term "security" needs to be expanded somewhere before using it
in the following:
Security for GUE can be provided by lower layers or through GUE
security extensions. [...] , including
security for the GUE header and payload,
And here:
| Bit 1..2 | 01->8 bytes | Security | [GUEEXTENS
<https://tools.ietf.org/html/draft-ietf-nvo3-gue-04#ref-GUEEXTENS>] |
| | 10->16 bytes | | |
| | 11->32 bytes | | |
Pls just say somewhere that the Security option means "origin
authentication and integrity protection of the GUE header".
Alternatively use a more meaningful name, e.g. "Authentication option".
S.8.3:
s/New values are assigned via Standards Action [RFC5226]./
/New values for control types 1-127 are assigned via Standards Action
[RFC5226]./
S.10.1 Every normative reference has been duplicated.
A2.2 s/to validate an checksums/to validate checksums/
In draft-herbert-gue-extensions-00, in the Security option section
<https://tools.ietf.org/html/draft-herbert-gue-extensions-00#section-5.1>:
s/The format of the fragmentation option is:/The format of the
security option is:/
--
________________________________________________________________
Bob Briscoe http://bobbriscoe.net/
_______________________________________________
nvo3 mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/nvo3