This is a static archive of our old Q&A Site. Please post any new questions and answers at

TCP MSS in uplink and downlink speed


Hi experts,

I want to understand MSS impact in uplink and downlink speed. While I understand lower MSS size i.e. mss < 1460 will directly impact heavy data transfers & may add certain delay as well as addition CPU cycles on resepctive nodes - I want to understand -

  1. in a single TCP stream - is there separate MSS value for uplink and downlink both ? From RFC I could find following information. I want to understand how practical these guidelines are ? Does vendor necessarily implement distinct MSS configurations for uplink & downlink respectively ?

    RFC 879 :

        3.  The TCP Maximum Segment Size Option
       TCP provides an option that may be used at the time a connection is
       established (only) to indicate the maximum size TCP segment that can
       be accepted on that connection.  This Maximum Segment Size (MSS)
       announcement (often mistakenly called a negotiation) is sent from the
       data receiver to the data sender and says &quot;I can accept TCP segments
       up to size X&quot;. The size (X) may be larger or smaller than the
       default.  The MSS can be used completely independently in each
       direction of data flow.  The result may be quite different maximum
       sizes in the two directions</code></pre></li><li><p>If we reduce MSS size to 1360 (for ex.) what could be possible impact ?</p></li><li>How should I measure this impact for analysis ? Any possible hints on criteria ?</li><li>Is it possible to see slow uplink speed as compared to reasonable downlink speed on the same TCP stream ? What could be possible reasons ?</li></ol><p>Regards, Vijay</p></div><div id="question-tags" class="tags-container tags"><span class="post-tag tag-link-performance" rel="tag" title="see questions tagged &#39;performance&#39;">performance</span> <span class="post-tag tag-link-mss" rel="tag" title="see questions tagged &#39;mss&#39;">mss</span> <span class="post-tag tag-link-tcp" rel="tag" title="see questions tagged &#39;tcp&#39;">tcp</span></div><div id="question-controls" class="post-controls"></div><div class="post-update-info-container"><div class="post-update-info post-update-info-user"><p>asked <strong>01 Oct '17, 21:45</strong></p><img src=";d=identicon&amp;r=g" class="gravatar" width="32" height="32" alt="Vijay%20Gharge&#39;s gravatar image" /><p><span>Vijay Gharge</span><br />

    accept rate: 0%

One Answer:

  1. Both endpoints signal their MSS in the SYN or SYN/ACK packet, which is deducted from the local MTU. While not exactly a negotiation, both will use the lower of the two MSS values automatically, because it wouldn't make any sense to send more than what can either MTU allows (which would require fragmentation otherwise).
  2. Less data transfer efficiency compared to 1460 for example, so the maximum bandwidth will be lower
  3. My main criteria would be "MBit per second throughput", averaged over the whole data transfer. It should be higher for 1460 compared to 1360.
  4. First of all, most connections are very asymmetric - sending a request takes a small amount of bandwidth while receiving the requested data my be using a huge amount of bandwidth. This makes it hard to compare speeds. I'd normally go and check for signs of trouble in the TCP stream: long delta times between packets, packet loss, DUP ACKs, etc.

answered 02 Oct '17, 02:43

Jasper's gravatar image

Jasper ♦♦
accept rate: 18%

thanks for response. This helps a lot.

(02 Oct '17, 23:59) Vijay Gharge