回答:
2バイトのBGPメッセージ長。では、なぜbgpメッセージの最大サイズを65535にできないのでしょうか。なぜ4096なのですか?
IDRリストでこの質問に答えたときのTony Liの引用:
1a)固定サイズにすると、プロトコルの実装が容易になります。メリットがない場合は、実装が複雑であっても意味がありません。大きなメッセージは、パス属性と関連する接頭辞を伝えるのに十分な大きさである必要があるため、すばらしいメリットはありません。この目的のためには、おそらく4kで十分です。
1b)歴史的に、4kは少し無駄であると考えられていました。もちろん、断片化されたパケットを使用するEGPと比較すると、それは驚くほど簡単でした。16kのジャンボグラムを解析しますか?それをデバッグしますか?私を信じて、それは楽しいことではありません。
2)4kメッセージサイズは、TCPウィンドウサイズから完全に独立しています。実装では、任意の数のメッセージを自由に作成できます。各メッセージは4kの制限内です。実装は、そのTCPのバッファリング制限まで、TCPソケットに任意の数のメッセージを詰め込むことができます。
2a)したがって、実装で実際にメッセージがいっぱいになる可能性がある場合を除いて、メッセージサイズはパフォーマンスの制限ではありません。現在の実装を維持している人々は、これを見るかどうかについてここで呼びかけるかもしれません。
したがって、要約すると、はい、4kのメッセージサイズの制限は、BGPの動作とジョブの動作にとって、BGPにとって適切な状況です。これは、4kが最も一般的なMTUを超える他のプロトコル(OSPFなど)に必ずしも一般化するわけではありません。そのような場合、断片化が発生し、それは悪いことです。
65536/4096 = 16
BGPの一時的なRAM要件を16倍にすることを本当に望んでいますか?内部では、多くのBGP実装がCで記述されていることを思い出してください。これは、BGPがmalloc
すべてのメッセージに対して最大メッセージサイズまでスペースを確保する必要があることを意味します。
必須の修辞的な質問...
long long
ですか?100,000のBGPプレフィックスがあり、15,000の一意の属性の組み合わせがあるとします。また、BGP実装BGP UPDATE
が100%の効率でメッセージにプレフィックスをパックすると仮定しましょう。したがって、15,000のBGP UPDATE
メッセージが必要です。
15000メッセージ* 4096バイト/メッセージ=使用される58MBの集約BGPメッセージバッファリング
15000メッセージ* 65536バイト/メッセージ= 937MBの合計BGPメッセージバッファリングを使用