Re: [Idr] why has 4096 bytes limit on BGP messages size?

Danny McPherson <danny@tcb.net> Thu, 14 June 2007 22:37 UTC

Return-path: <idr-bounces@ietf.org>
Received: from [127.0.0.1] (helo=stiedprmman1.va.neustar.com) by megatron.ietf.org with esmtp (Exim 4.43) id 1HyxwD-00075r-Ai; Thu, 14 Jun 2007 18:37:09 -0400
Received: from [10.91.34.44] (helo=ietf-mx.ietf.org) by megatron.ietf.org with esmtp (Exim 4.43) id 1HyxwC-00075m-3g for idr@ietf.org; Thu, 14 Jun 2007 18:37:08 -0400
Received: from cat.tcb.net ([64.78.150.134] helo=dog.tcb.net) by ietf-mx.ietf.org with esmtp (Exim 4.43) id 1HyxwA-0003tA-QM for idr@ietf.org; Thu, 14 Jun 2007 18:37:08 -0400
Received: from [192.168.1.7] (VDSL-151-118-149-96.DNVR.QWEST.NET [151.118.149.96]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by dog.tcb.net (Postfix) with ESMTP id 690E76434E; Thu, 14 Jun 2007 15:37:07 -0600 (MDT)
In-Reply-To: <77ead0ec0706141127i61017d2av74151c7dd4004044@mail.gmail.com>
References: <20070614105451.9C6C11140496@mail.zjgsu.edu.cn> <20070614135339.GA10519@scc.mi.org> <77ead0ec0706141127i61017d2av74151c7dd4004044@mail.gmail.com>
Mime-Version: 1.0 (Apple Message framework v752.3)
Content-Type: text/plain; charset="US-ASCII"; delsp="yes"; format="flowed"
Message-Id: <0D5A1AAC-03A5-468B-8D56-9FE5818BF5A0@tcb.net>
Content-Transfer-Encoding: 7bit
From: Danny McPherson <danny@tcb.net>
Subject: Re: [Idr] why has 4096 bytes limit on BGP messages size?
Date: Thu, 14 Jun 2007 16:36:52 -0600
To: idr <idr@ietf.org>
X-Mailer: Apple Mail (2.752.3)
X-Spam-Score: 0.0 (/)
X-Scan-Signature: 7aafa0432175920a4b3e118e16c5cb64
X-BeenThere: idr@ietf.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Inter-Domain Routing <idr.ietf.org>
List-Unsubscribe: <https://www1.ietf.org/mailman/listinfo/idr>, <mailto:idr-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www1.ietf.org/pipermail/idr>
List-Post: <mailto:idr@ietf.org>
List-Help: <mailto:idr-request@ietf.org?subject=help>
List-Subscribe: <https://www1.ietf.org/mailman/listinfo/idr>, <mailto:idr-request@ietf.org?subject=subscribe>
Errors-To: idr-bounces@ietf.org

In RFC 1105 the maximum message size was 1024 octets.  I suspect
because RFC 1163 added the capability to support multiple prefixes
(i.e., compression/update packing) they bumped the size to 4096. Note
that RFC 1163's Appendix 2 states the UPDATE format was changed
to support multiple "path attributes", when I think they actually meant
multiple "prefixes".

As for why it was constrained in the first place, RFC 1164 talks to this
a bit in section 6.3.  In particular, I suspect the size was constrained
initially because of this:

    Due to the stream nature of TCP, all the data for received messages
    does not necessarily arrive at the same time
    [...]
    This can make it difficult to process the data as messages,
    especially on systems such as BSD Unix where it is not possible to
    determine how much data has been received but not yet processed.

One might hypothesize that the selection of the original value of 1024
had something to the 4.2 BSD-derived systems TCP segment size
common settings of 1024.

RFC 1267 incorporated some of the RFC 1164 text directly, in section
5.2.

Of course, I'm just a youngster compared to some of the old folk here,
especially Yakov, so I'll happily defer  ;-)

-danny

---
RFC 1267

5.2  Processing Messages on a Stream Protocol

    BGP uses TCP as a transport mechanism.  Due to the stream nature of
    TCP, all the data for received messages does not necessarily arrive
    at the same time. This can make it difficult to process the data as
    messages, especially on systems such as BSD Unix where it is not
    possible to determine how much data has been received but not yet
    processed.

    One method that can be used in this situation is to first try to  
read
    just the message header. For the KEEPALIVE message type, this is a
    complete message; for other message types, the header should  
first be
    verified, in particular the total length. If all checks are
    successful, the specified length, minus the size of the message
    header is the amount of data left to read. An implementation that
    would "hang" the routing information process while trying to read
    from a peer could set up a message buffer (4096 bytes) per peer and
    fill it with data as available until a complete message has been
    received.

_______________________________________________
Idr mailing list
Idr@ietf.org
https://www1.ietf.org/mailman/listinfo/idr