Subject: [quicwg/base-drafts] ad334a: Address validation for connection migration

From: Martin Thomson <[email-masked]>
Date: Mon, 14 Aug 2017 19:44:35 -0700

Branch: refs/heads/proof-of-receipt
  Home:   https://github.com/quicwg/base-drafts
  Commit: ad334a4193453ef6fe0488852514dcd1cbf7c28d
      https://github.com/quicwg/base-drafts/commit/ad334a4193453ef6fe0488852514dcd1cbf7c28d
  Author: Martin Thomson <[email-masked]>
  Date:   2017-08-14 (Mon, 14 Aug 2017)

  Changed paths:
    M draft-ietf-quic-transport.md

  Log Message:
  -----------
  Address validation for connection migration

This has been much-discussed, and it's a relatively isolated change, so I did it.

This modifies PING to have an optional payload and adds a PONG frame to echo
the PING.  An empty PING generates an ACK; a PING with a payload demands a
PONG.

Generating an unguessable PING is the basis of mid-connection address
validation.  If the PING is sent on the new path, and the PONG comes back, then
the remote address is probably OK to use.

I've taken the discussion in the issue into consideration here.  There's a lot
of potential nuance to capture in terms of how an endpoint might reduce and
restore send rates, but I've done what I can to thread the gap between allowing
unbounded sending along new and untested paths and allowing connections to get
back to doing business.

It's annoying that this makes PING and PONG so disparate.  I think that we have
a re-ordering of frames in our near future to correct minor infidelities like
this.  I didn't want to do that here and pollute this PR though.

Closes #161.