Subject: Re: [tram] draft-ietf-tram-stun-pmtud-06 review

From: Marc Petit-Huguenin <[email-masked]>
Date: Sat, 3 Mar 2018 07:42:23 -0800

Thanks for the review, please see inline.

As the cutoff is Monday afternoon, I'll publish -07 just after sending this email.

On 02/17/2018 09:40 PM, Asveren, Tolga wrote:
> Marc, Gonzalo,
> 
> Some comments/questions for draft-ietf-tram-stun-pmtud-06:
> 
> i- 4.
> 
>   Implementations supporting this specification MUST implement the
>    server side of both the Simple Probing mechanism (Section 4.1) and
>    the Complete Probing mechanism (Section 4.2).
>    Implementations supporting this specification MUST implement the
>    client side of the Complete Probing mechanism.  They MAY implement
>    the client side of the Simple Probing mechanism.
> 
> I don't see the rationale behind mandating this behavior. Such semantics in general are taken care of in the context of a capability negotiation mechanism, which this document does not specify. As it stands right now, I think this is best left to local policy and bilateral agreements and I would suggest not to use anything stronger than "RECOMMEND".

It took me some time to remember why that was the case.  IIRC, one of the reasons of doing this is because of the implicit probe support in section 5.2.  Because there is no explicit signaling there, we need the server side (which was previously the client side) to be ready to respond to both Simple and Complete Probing.  Hence the "server must do both, client choose what they want to do" rule.

The other reason is that if we let implementers choose, then Complete Probing - which is the correct way of doing probing - will never be used.

> ii- 4.1
> DF bit set over UDP.
> ==>
> DF bit in IP Header.
> Right?  (the same in 4.2)

Not really, the Probe Request is still sent over UDP, so I changed the text to that (twice):

 The Simple Probing mechanism is implemented by sending a Probe
 Request with a PADDING [RFC5780] attribute over UDP with the DF bit
 set in the IP header.  A router on the path to the server can reject
 this request with an ICMP message or drop it.

 The Complete Probing mechanism is implemented by sending one or more
 Probe Indications with a PADDING attribute over UDP with the DF bit
 set in the IP header followed by a Report Request to the same server.

> 
> iii- 4.1.1
> A client MUST NOT send a probe if it does not have knowledge that the
>    server supports this specification.  This is done either by external
>    signalling or by a mechanism specific to the UDP protocol to which
>    PMTUD capabilities are added or by one of the mechanisms specified in
>    Section 5.
> I suggest adding text for possible use of local policy/bilateral agreements for this purpose.

I am not sure what to add to what is said.  Do you have text to suggest?

> 
> iv-  4.2
> Some protocols may already have a way of identifying each individual
>    UDP packet, in which case these identifiers SHOULD be used in the
>    IDENTIFIERS attribute of the Report Response.
> What is meant here as "some protocols"? Are you referring  to what is carried as payload of UDP or what is used below UDP?

The former.  I changed the text to "application layer protocols:"

> 
> v- 4.2
> In the first packet identification mechanism, the server computes a
>    checksum over each packet received and sends back to the sender the
>    list of checksums ordered chronologically.  The client compares this
>    list to its own list of checksums.
> What if there are two probes with the same checksum right after each other and one of them is lost? How can client disambiguate such a case in  the response?

I am not sure to get the problem here.  The sender keeps a chronologically ordered list of the checksums of the sent packets (data and probes), so in that case there is a sequence of two identical checksums in that list.  The server sends back a list of checksums, but with only one of that value (or even 0).  The loss can be detected.

> 
> v- 7
> The Simple Probing mechanism may be used without authentication
>    because this usage by itself cannot trigger an amplification attack
>    because the Probe Response is smaller than the Probe Request.
> Isn't the same true for Sum(Probe Requests) > (Report Response)?

I think that mechanism was set following a review that was worried about amplification attack.  We have the simple probe mechanism without authentication to keep the barrier to entry very low, i.e. the minimum required implementation possible.

Security expert can chime in.

> 
> vii- nit
> == The copyright year in the IETF Trust and authors Copyright Line does not
>      match the current year
> 
>   -- The document date (September 1, 2017) is 169 days in the past.  Is this
>      intentional?

Will be upgraded with the next publication.

-- 
Marc Petit-Huguenin
Email: [email-masked]
Blog: https://marc.petit-huguenin.org
Profile: https://www.linkedin.com/in/petithug

---

From: "Asveren, Tolga" <[email-masked]>
Date: Sun, 4 Mar 2018 15:03:12 +0000

Hi Marc,

Please see inline for comments/answers/questions.

Thanks,
Tolga

-----Original Message-----
From: Marc Petit-Huguenin <[email-masked]> 
Sent: Saturday, March 3, 2018 10:42 AM
To: Asveren, Tolga <[email-masked]>; Gonzalo Salgueiro ([email-masked]) <[email-masked]>; [email-masked]
Subject: Re: [tram] draft-ietf-tram-stun-pmtud-06 review

The other reason is that if we let implementers choose, then Complete Probing - which is the correct way of doing probing - will never be used.
[TOLGA] If client does not get replies for a mechanism it SHOULD try the other one. Honestly I don’t see a compelling reason to mandate anything on the server side. There is no negotiation mechanism and that can’t be enforced on protocol level anyhow. I suggest to use RECOMMNED for server and add a sentence for client behavior that it SHOULD try the other mechanism if one does not get any replies at all.

 The Simple Probing mechanism is implemented by sending a Probe  Request with a PADDING [RFC5780] attribute over UDP with the DF bit  set in the IP header.  A router on the path to the server can reject  this request with an ICMP message or drop it.

 The Complete Probing mechanism is implemented by sending one or more  Probe Indications with a PADDING attribute over UDP with the DF bit  set in the IP header followed by a Report Request to the same server.
[TOLGA] Looks good, I just wanted to make sure about the "DF bit in IP header" part.

I am not sure what to add to what is said.  Do you have text to suggest?
[TOLGA] Maybe by just adding something like:
"Information about client/server support for this specification, for example, could be based on local policy and bilateral agreements among relevant organizations."

[TOLGA] Thanks.

I am not sure to get the problem here.  The sender keeps a chronologically ordered list of the checksums of the sent packets (data and probes), so in that case there is a sequence of two identical checksums in that list.  The server sends back a list of checksums, but with only one of that value (or even 0).  The loss can be detected.
[TOLGA] Loss can be detected but which one is lost?

Probe-n  (checksum-A)
Probe-n+1 (checksum-A)

Only a single reply for (checksum-A) is received.

Is Probe-n or Probe-n+1 lost?

Security expert can chime in.
[TOLGA] I think that would be good. Who would be that?

[TOLGA] Thanks.

---

From: Marc Petit-Huguenin <[email-masked]>
Date: Sun, 11 Mar 2018 05:35:08 -0700

See inline.

> [TOLGA] If client does not get replies for a mechanism it SHOULD try the other one. Honestly I don’t see a compelling reason to mandate anything on the server side. There is no negotiation mechanis…

No, not making the Complete Probing mandatory in the server removes the compliance with RFC 4821, which is the whole point of this document.  If people do not want compliance with RFC 4821, they just have to not implement that RFC-to-be.

After Complete Probing is implemented on the server side, it's easy to add Simple Probing, so making it mandatory too does not add much burden on the implementer.

But if you insist of making the server support as RECOMMEND, then I'll split the RFC-to-be in two RFCs, one for Complete Probing and compliance with RFC 4821, and the other for Simple Probing.

> "Information about client/server support for this specification, for example, could be based on local policy and bilateral agreements among relevant organizations."

See above.

> Only a single reply for (checksum-A) is received.

Replies are only for the Simple Probing mechanism, a mechanism that does not need to identify UDP packets.

> Is Probe-n or Probe-n+1 lost?

If the same probe is sent multiple times but some are dropped then we know that, we just do not know exactly which one.

The whole point of this is to separate the packets drops because of a network condition (which should not affect the PMTU) from the the packets drops because of an oversized packet, which does not require to know exactly which packet was dropped, as they are all dropped.  Note that two probes with different lengths will have different checksum, so we can isolate exactly what probe was rejected and why.

That said, RFC 4821 leaves the client free to implement whatever algorithm it want, so there may be some future algorithm that could use the knowledge of exactly which packet was dropped.  IN that case the future RFC that will describe how to recognize the UDP packets for a specific protocol will just have to choose a method that permits to differentiate individual packets in the Report response.

---

From: "Asveren, Tolga" <[email-masked]>
Date: Sun, 11 Mar 2018 13:40:24 +0000

Marc,

Thanks for the explanations/answers. I am happy with the current version based these. I don’t think any changes are needed and I don’t have further comments.

Thanks,
Tolga

-----Original Message-----
From: Marc Petit-Huguenin <[email-masked]> 
Sent: Sunday, March 11, 2018 8:35 AM
To: Asveren, Tolga <[email-masked]>; Gonzalo Salgueiro ([email-masked]) <[email-masked]>; [email-masked]
Subject: Re: [tram] draft-ietf-tram-stun-pmtud-06 review

See inline.

See above.