mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-27 19:52:18 -05:00
Initial commit of Path MTU protoXEP
This commit is contained in:
parent
7eaa3962a8
commit
958aad87ab
193
inbox/pathmtu.xml
Normal file
193
inbox/pathmtu.xml
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<!DOCTYPE xep SYSTEM 'xep.dtd' [
|
||||||
|
<!ENTITY % ents SYSTEM 'xep.ent'>
|
||||||
|
%ents;
|
||||||
|
]>
|
||||||
|
<?xml-stylesheet type='text/xsl' href='xep.xsl'?>
|
||||||
|
<xep><header>
|
||||||
|
<title>Stanza size limit discovery</title>
|
||||||
|
<abstract>This documents describes a mechanism for communicating stanza size limits across streams in order to help avoid reaching those limits.</abstract>
|
||||||
|
&LEGALNOTICE;
|
||||||
|
<number>xxxx</number>
|
||||||
|
<status>ProtoXEP</status>
|
||||||
|
<type>Standards Track</type>
|
||||||
|
<sig>Standards</sig>
|
||||||
|
<dependencies/>
|
||||||
|
<supersedes/>
|
||||||
|
<supersededby/>
|
||||||
|
<shortname>NOT_YET_ASSIGNED</shortname>
|
||||||
|
<author>
|
||||||
|
<firstname>Kim</firstname>
|
||||||
|
<surname>Alvefur</surname>
|
||||||
|
<email>zash@zash.se</email>
|
||||||
|
<jid>zash@zash.se</jid>
|
||||||
|
</author>
|
||||||
|
<revision>
|
||||||
|
<version>0.0.1</version>
|
||||||
|
<date>2021-08-20</date>
|
||||||
|
<initials>ka</initials>
|
||||||
|
<remark>
|
||||||
|
<p>Early draft</p>
|
||||||
|
</remark>
|
||||||
|
</revision>
|
||||||
|
<revision>
|
||||||
|
<version>nil</version>
|
||||||
|
<date>2021-08-25</date>
|
||||||
|
<initials>ka</initials>
|
||||||
|
<remark>
|
||||||
|
<p>more work</p>
|
||||||
|
</remark>
|
||||||
|
</revision>
|
||||||
|
<revision>
|
||||||
|
<version>nil</version>
|
||||||
|
<date>2021-08-28</date>
|
||||||
|
<initials>ka</initials>
|
||||||
|
<remark>
|
||||||
|
<p>more words</p>
|
||||||
|
</remark>
|
||||||
|
</revision>
|
||||||
|
</header>
|
||||||
|
<section1 topic="Introduction" anchor="intro">
|
||||||
|
|
||||||
|
<p>This documents describes a mechanism for communicating the stanza size
|
||||||
|
limit that is in effect on a particular stream, in order to allow the
|
||||||
|
other party to avoid reaching those limits.</p>
|
||||||
|
|
||||||
|
<section2 topic="Problem statement" anchor="problem-statement">
|
||||||
|
|
||||||
|
<p>When stanza size limits have been deployed, very often this leads to
|
||||||
|
problems with large stanzas causing connection outages, most often
|
||||||
|
vCards and Avatar stanzas.</p>
|
||||||
|
|
||||||
|
<p>If stanza size limit violations are met with stream errors then this may
|
||||||
|
lead to temporary connection outage, which may a few seconds to recover
|
||||||
|
from.</p>
|
||||||
|
|
||||||
|
<p>Especially vCard and Avatar stanzas may be very large and sometimes
|
||||||
|
exceed the stanza size limit imposed.</p>
|
||||||
|
|
||||||
|
</section2></section1><section1 topic="Requirements" anchor="reqs">
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Enable discovery of the stanza size limit in use on a stream.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<section2 topic="TODO" anchor="todo">
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>bi-directional?</li>
|
||||||
|
<li>disco too?</li>
|
||||||
|
<li>some sort of path mtu discovery method?</li>
|
||||||
|
<li>error condition?</li>
|
||||||
|
<li>rewrite large iq-result to error?</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</section2></section1><section1 topic="Glossary" anchor="glossary">
|
||||||
|
|
||||||
|
<p>OPTIONAL.</p>
|
||||||
|
|
||||||
|
</section1><section1 topic="Use Cases" anchor="usecases">
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>An XMPP client could attempt to apply more compression if it sees
|
||||||
|
that an avatar it is about to upload would be too large.</li>
|
||||||
|
<li>A PubSub server could limit the number of items in an <tt><items/></tt>
|
||||||
|
query to ensure it can be delivered.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</section1><section1 topic="Business Rules" anchor="rules">
|
||||||
|
|
||||||
|
<p>If after serialization to XML a stanza is too large, like, don’t send
|
||||||
|
it. Synthesize an error condition, most likely a (modify,
|
||||||
|
policy-violation), and pretend the remote entity replied with this.</p>
|
||||||
|
|
||||||
|
</section1><section1 topic="Implementation Notes" anchor="impl">
|
||||||
|
|
||||||
|
<p>Something about margins, due to variations in XML serialization, added
|
||||||
|
attributes (e.g. the <tt>from</tt> attribute stamped by servers) or elements
|
||||||
|
(delay tags)</p>
|
||||||
|
|
||||||
|
<p>Because the stanza size limit is known ahead of time, entities can check
|
||||||
|
this against stanzas they are about to send and take appropriate action,
|
||||||
|
such as preemptively pretending that the stanza was rejected by the
|
||||||
|
receiving entity.</p>
|
||||||
|
|
||||||
|
<p>A client could for example try to apply more compression to an avatar or
|
||||||
|
ask the user to select a smaller picture.</p>
|
||||||
|
|
||||||
|
</section1><section1 topic="Accessibility Considerations" anchor="access">
|
||||||
|
|
||||||
|
<p>OPTIONAL.</p>
|
||||||
|
|
||||||
|
<p>Not relevant?</p>
|
||||||
|
|
||||||
|
</section1><section1 topic="Internationalization Considerations" anchor="i18n">
|
||||||
|
|
||||||
|
<p>OPTIONAL.</p>
|
||||||
|
|
||||||
|
<p>Not relevant?</p>
|
||||||
|
|
||||||
|
</section1><section1 topic="Determining support" anchor="determining-support">
|
||||||
|
|
||||||
|
<p>The responding entity advertises the stanza size limit it enforces
|
||||||
|
by including it as an integer in a stream feature element
|
||||||
|
<tt>stanza-size-limit</tt> in the namespace <tt>urn:xmpp:tmp:TBD</tt>. An example of
|
||||||
|
stream features prior to authentication follows:</p>
|
||||||
|
|
||||||
|
<example><![CDATA[<stream:features>
|
||||||
|
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
|
||||||
|
<mechanism>SCRAM-SHA-1</mechanism>
|
||||||
|
<mechanism>PLAIN</mechanism>
|
||||||
|
</mechanisms>
|
||||||
|
<stanza-size-limit xmlns="urn:xmpp:tmp:TBD">10000</stanza-size-limit>
|
||||||
|
</stream:features>]]></example>
|
||||||
|
|
||||||
|
<p>Entities may wish to have hire limits after authentication and would
|
||||||
|
advertise it the same way after the stream restart:</p>
|
||||||
|
|
||||||
|
<example><![CDATA[<stream:features>
|
||||||
|
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
|
||||||
|
<required/>
|
||||||
|
</bind>
|
||||||
|
<stanza-size-limit xmlns="urn:xmpp:tmp:TBD">262144</stanza-size-limit>
|
||||||
|
</stream:features>]]></example>
|
||||||
|
|
||||||
|
</section1><section1 topic="Security Considerations" anchor="security">
|
||||||
|
|
||||||
|
<p>REQUIRED.</p>
|
||||||
|
|
||||||
|
<p>Very large stanzas may incur memory and processing costs on the
|
||||||
|
receiving entity. Advertising the actual limits could inform an attacker
|
||||||
|
of how large a stanza to construct in order to maximize e.g. DoS
|
||||||
|
effectiveness. Best combined with network level rate limits on raw
|
||||||
|
bytes.</p>
|
||||||
|
|
||||||
|
<p>Also see https://xmpp.org/rfcs/rfc6120.html#rfc.section.13.12</p>
|
||||||
|
|
||||||
|
<p>TBD Recommendations for limits?</p>
|
||||||
|
|
||||||
|
</section1><section1 topic="IANA Considerations" anchor="iana">
|
||||||
|
|
||||||
|
<p>None.</p>
|
||||||
|
|
||||||
|
</section1><section1 topic="XMPP Registrar Considerations" anchor="registrar">
|
||||||
|
|
||||||
|
<p>Need the stream feature registered.</p>
|
||||||
|
|
||||||
|
</section1><section1 topic="Design Considerations" anchor="design">
|
||||||
|
|
||||||
|
<p>RECOMMENDED.</p>
|
||||||
|
|
||||||
|
<p>Design? I just typed words and code into my computer!</p>
|
||||||
|
|
||||||
|
</section1><section1 topic="XML Schema" anchor="schema">
|
||||||
|
|
||||||
|
<p>REQUIRED for protocol specifications.</p>
|
||||||
|
|
||||||
|
<code><![CDATA[type: integer
|
||||||
|
xml:
|
||||||
|
name: stanza-size-limit
|
||||||
|
namespace: urn:xmpp:tmp:TBD]]></code>
|
||||||
|
</section1>
|
||||||
|
</xep>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user