Re: [Int-area] 答复: 答复: 答复: 答复: Is the UDP destination port number resource running out?// re: I-D Action: draft-ietf-intarea-gue-04.txt

Joe Touch <> Thu, 25 May 2017 17:44 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 4FB22129B84 for <>; Thu, 25 May 2017 10:44:49 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -0.002
X-Spam-Status: No, score=-0.002 tagged_above=-999 required=5 tests=[BAYES_20=-0.001, RP_MATCHES_RCVD=-0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 7kCu9e5-aYgr for <>; Thu, 25 May 2017 10:44:48 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 1C543127011 for <>; Thu, 25 May 2017 10:44:48 -0700 (PDT)
Received: from [] ([]) (authenticated bits=0) by (8.13.8/8.13.8) with ESMTP id v4PHiS8j018101 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Thu, 25 May 2017 10:44:29 -0700 (PDT)
To: Tom Herbert <>, Xuxiaohu <>
Cc: "" <>
References: <> <> <> <> <> <> <> <> <> <> <>
From: Joe Touch <>
Message-ID: <>
Date: Thu, 25 May 2017 10:44:28 -0700
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1
MIME-Version: 1.0
In-Reply-To: <>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-US
X-MailScanner-ID: v4PHiS8j018101
X-ISI-4-69-MailScanner: Found to be clean
Archived-At: <>
Subject: Re: [Int-area] =?utf-8?b?562U5aSNOiDnrZTlpI06IOetlOWkjTogIOetlA==?= =?utf-8?q?=E5=A4=8D=3A_Is_the_UDP_destination_port_number_resource_runnin?= =?utf-8?q?g_out=3F//_re=3A_I-D_Action=3A_draft-ietf-intarea-gue-04=2Etxt?=
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: IETF Internet Area Mailing List <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Thu, 25 May 2017 17:44:49 -0000

Hi, Tom,

On 5/25/2017 9:00 AM, Tom Herbert wrote:
> IPv4 and IPv6 can be directly encapsulated since they have a protocol
> number (can be encapsulated by version 0).
> As I mentioned previously, Ethernet could be directly encapsulated via
> EtherIP that has a 4 bit version number at the beginning of its
> header. The way this would work is to set a version 1 pattern to
> indicate EtherIP. For example, we could specify that 0101  would be
> EtherIP. When GUE receives such a packet it will notice it's version
> one and then see that it is EtherIP (differentiated from IPv4 0100 and
> IPv6 0110 values). The first four bits are then overwritten by 0011 to
> make it a valid EtherIP header and then the packet is resubmitted to
> the stack as EtherIP.
If you use the first 4 bits as the type identifier (which I think you
should, as noted below), then you could easily support a bunch of
encapsulations without needing the 4-byte overhead.

    0000 = GUE control (your "Version 0")
    0100 = IPv4
    0101 = IPv6

That leaves 13 other codes you can use for other protocols (including
MPLS, Ethernet, etc.), as long as you burn at least those 4 bits.

EtherIP effectively burns 2 bytes rather than 4 bits, but has the same
net effect.

> Transport protocols (TCP, UDP, SCTP) might also be nice to support
> with direct encapsulation in version 1, but unfortunately since they
> start with a variable port number there's no way to do that.
That works the same way as EtherIP - burn at least 4 bits indicating the


>From my previous post:

When we look at the first 2 bits of a GUE packet, we see:
    00 = GUE version 0
    01 = IPv4 or IPv6
    10 = undefined
    11 = undefined

That's nearly the same as looking at the first 4 bits as simply the IP
version number, and defining some of the unused IP versions as control:
    0000 (IPv0) = GUE control
    0001 (IPv1) = GUE control
    0010 (IPv2) = GUE encapsulation using the GUE header
    0011 (IPv3) = GUE encapsulation using the GUE header
    0100 (IPv4) = direct encapsulation of IPv4, with no intervening GUE
    0101 (IPv5) = direct encapsulation of IPv5 (ST), with no intervening
GUE header
    0110 (IPv6) = direct encapsulation of IPv6, with no intervening GUE
    0111 (IPv7) = direct encapsulation of IPv7 (TP/IX), with no
intervening GUE header
    1000 (IPv8) = direct encapsulation of IPv8 (PIP), with no
intervening GUE header
    1001 (IPv9) = direct encapsulation of IPv9 (TUBA), with no
intervening GUE header
    1010 (IPv10) = direct encapsulation of IPv10, when assigned
    1010 (IPv11) = direct encapsulation of IPv11, when assigned
    1010 (IPv12) = direct encapsulation of IPv12, when assigned
    1010 (IPv13) = direct encapsulation of IPv13, when assigned
    1010 (IPv14) = direct encapsulation of IPv14, when assigned
    1010 (IPv15) = direct encapsulation of IPv15, when assigned

I.e., all you're basically doing is defining the first four version
numbers of IP as your control plane. Unless we come back and assign them
in the future, any mechanism that encapsulates IP packets (which should,
IMO, be able to handle ALL IP versions, by definition) should be able to
include GUE-style signaling.

IMO, it's simpler to explain this all using this fixed-field
demultiplexer - in which case, you could even use just the IPv0 pattern
for control and the IPv1 pattern for encapsulation using the GUE header,
leaving the IPv2 and IPv3 equivalent patterns for future expansion.