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