9

In Linux, how do you set the maximum segment size that is allowed on a TCP connection? I need to set this for an application I did not write (so I cannot use setsockopt to do it). I need to set this ABOVE the mtu in the network stack.

I have two streams sharing the same network connection. One sends small packets periodically, which need absolute minimum latency. The other sends tons of data--I am using SCP to simulate that link.

I have setup traffic control (tc) to give the minimum latency traffic high priority. The problem I am running into, though, is that the TCP packets that are coming down from SCP end up with sizes up to 64K bytes. Yes, these are broken into smaller packets based on mtu, but this unfortunately occurs AFTER tc prioritizes the packets. Thus, my low latency packet gets stuck behind up to 64K bytes of SCP traffic.

This article indicates that on Windows you can set this value.

Is there something on Linux I can set? I've tried ip route and iptables, but these are applied too low in the network stack. I need to limit the TCP packet size before tc, so it can prioritize the high priority packets appropriately.

4

5 に答える 5

9

NICへのtcpセグメンテーションオフロードを使用していますか?(「ethtool-k $ your_network_device」を使用してオフロード設定を確認できます。)これは、デバイスMTUが1500の64ktcpパケットが表示されることを私が知る限り、唯一の方法です。これで質問に答えることはできませんが、誤診を避けるのに役立つかもしれません。

于 2012-10-31T18:42:07.753 に答える
3

アドバタイズされた TCP MSS の上限は、最初のホップ ルートの MTU です。64k セグメントが表示されている場合は、最初のホップ ルートの MTU が大きすぎることを示している傾向があります。テストにループバックなどを使用していますか?

于 2010-10-05T01:46:01.523 に答える
-1

あなたは間違いなく問題を誤診しています。他の誰かが指摘したように、tc は TCP パケットを認識せず、IP パケットを認識し、それらはその時点で既にチャンクになっています。

あなたはおそらくbufferbloatを経験しているだけです: 完全に別のデバイス (おそらく DSL モデムまたはケーブル モデム) でアウトバウンド キューを過負荷にしています。唯一の解決策は、送信帯域幅をモデムの帯域幅未満に制限するように tc に指示することです。TBFを使用。

于 2011-02-08T04:38:35.510 に答える