3.1.1.3 MTU Negotiation

The largest data payload that can be transferred over this protocol is negotiated during the 3-way UDP handshake process, called MTU negotiation. The size of the Internet Protocol (IP) or MAC layer headers and other underlying network headers is not a part of this negotiation.

The RDP-client advertises the largest payload it can send (uUpStreamMtu) and the largest payload it can receive (uDownStreamMtu) as a part of the SYN datagram, as specified in section 2.2.2.5. The minimum of these values and the data payload sizes the server can send or receive determines the negotiated MTU, as shown in the following equation.

Negotiated uUpStreamMtu = minimum (Advertised uUpStreamMtu, Received uDownStreamMtu, 1232) + Maximum size of the RDPUDP_ACK_VECTOR_HEADER Structure (section 2.2.2.7)

Negotiated uDownStreamMtu = minimum (Advertised uDownstreamMtu, Received uUpStreamMtu, 1232) + Maximum size of the RDPUDP_ACK_VECTOR_HEADER Structure (section 2.2.2.7)

The server sends these values to the client as a part of the SYN+ACK packet (section 3.1.5.1.3); this is the final negotiated MTU size. The client MUST NOT send a data payload larger than the value specified in uUpStreamMtu, and the server MUST NOT send data larger than uDownStreamMtu. Values that do not fall within this range are unacceptable. If such oversized payloads are detected, either endpoint MUST ignore such UDP datagrams. This could possibly lead to a connection termination, initiated by any layer in the RDP stack, because some part of the data was lost.

The range of uUpStreamMtu and uDownStreamMtu is in the closed interval [1132, 1232]. The advertised MTU MUST NOT be smaller than 1132 or larger than 1232.