Как происходит переупорядочение пакетов в MPTCP и как это влияет на производительность?
Я пытаюсь понять, как MPTCP отличается от "обычных" реализаций TCP, работающих по нескольким путям.
В частности, я хочу знать, действительно ли лучшие имплементации TCP действительно менее устойчивы к переупорядочению пакетов, чем реализации MPTCP.
Я столкнулся с двумя интересными источниками, во-первых , анализом переупорядочения пакетов в TCP Linux. Он описывает различные способы, которыми реализации TCP могут обрабатывать переупорядочение более или менее эффективно. Это не о MPTCP, а о TCP по нескольким путям! В диссертации подчеркивается интересная стратегия, по-видимому, реализованная в стандартном решении Linux linux (и, что интересно, также используемая в более экспериментальных реализациях TCP Westwood) (здесь "интересная стратегия", о которой я говорю, заключается в использовании DSACK для различения переупорядоченных пакеты за потерю пакетов).
Как ни странно, последняя ссылка сравнивает решение Linux TCP с MPTCP и приходит к выводу, что MPTCP менее эффективен. Это, однако, из-за низкой пропускной способности порядка мегабайт в секунду. Пропускная способность MPTCP очень стабильна, но, по-видимому, в целом менее эффективна, чем Linux TCP.
Теперь я рассмотрел анализ производительности MPTCP за 2012 год, который показывает, что в нескольких местах MPTCP сильно страдает от переупорядочения, когда трафик проходит по каналам с сильно различающимися RTT (что типично для переупорядочения пакетов), а также Гигабайтные ссылки.
Теперь мой вопрос... как и где MPTCP страдает от переупорядочения? MPTCP описывает себя как создание подпотоков для каждой отдельной ссылки, где подпоток - это, по сути, небольшое TCP-соединение. Что я не понимаю, так это то, что если MPTCP проверяет порядок поступления своих пакетов в каждом отдельном потоке, как он все еще может страдать от переупорядочения пакетов?
Моя интуиция заключается в том, что, когда подпотоки "сливаются", может возникнуть необходимость в переупорядочении пакетов, но не должно быть никакого недоразумения относительно того, были ли пакеты потеряны или просто задержаны (вышли из строя), что означает отсутствие значительного потеря производительности должна быть засвидетельствована из-за вышедших из строя пакетов.
1 ответ
Я нашел достаточный ответ в этой статье MPTCP. По сути, MPTCP имеет порядок последовательности для "общего" потока, а также для каждого потока. Это означает, что теоретически MPTCP не должен иметь никаких преимуществ перед TCP в области переупорядочения пакетов.
Приемник MPTCP использует порядковый номер уровня соединения для повторной сборки потоков данных, поступающих из другого порядка [SubFlows] (sic), чтобы передать их в последовательность приложений (sic). Поэтому MPTCP использует преобразование последовательности данных (DSM) для преобразования между двумя последовательностями. DSM может быть четко изображен на фиг.1, где пакет (5-S2), например, имеет порядковый номер данных, равный 5, и порядковый номер подпотока, равный 2. Говорят, что поступающий пакет является последовательным, если и только если последовательность подпотока и последовательность данных соответствуют ожидаемым.