Окостенение протокола — это потеря гибкости, расширяемости и эволюционируемости сетевых протоколов . Это во многом связано с промежуточными устройствами , которые чувствительны к образу протокола в сети и могут прерывать или мешать сообщениям, которые являются допустимыми, но которые промежуточное устройство не распознает правильно. Это нарушение принципа сквозного соединения . Вторичные причины включают негибкость в реализациях протоколов на конечных точках.
Окостенение является серьезной проблемой в разработке и развертывании интернет -протоколов, поскольку оно может помешать развертыванию новых протоколов или расширений в Интернете или наложить ограничения на разработку новых протоколов; новые протоколы, возможно, придется инкапсулировать в уже развернутый протокол или имитировать сетевой образ другого протокола. Из-за окостенения протокол управления передачей (TCP) и протокол пользовательских датаграмм (UDP) являются единственными практичными вариантами для транспортных протоколов в Интернете, а сам TCP значительно окостенел, что затрудняет расширение или модификацию протокола.
Рекомендуемые методы предотвращения окостенения включают шифрование метаданных протокола и обеспечение того, чтобы точки расширения были задействованы, а изменчивость образа провода была представлена как можно полнее; устранение существующего окостенения требует координации между участниками протокола. QUIC — первый транспортный протокол IETF , разработанный с намеренными антиокостеневающими свойствами.
К 2005 году в Интернете произошло значительное окостенение , и в том же году были опубликованы анализы этой проблемы; [1] Аммар (2018) предполагает, что окостенение стало следствием того, что Интернет достиг глобальных масштабов и стал основной коммуникационной сетью. [2]
Multipath TCP был первым расширением основного интернет-протокола, которое радикально противостояло окостенению протокола на этапе его разработки. [3]
В 2014 году IETF создала рабочую группу по транспортным службам (TAPS). [4] Ее задача — смягчить окостенение на уровне транспортных протоколов . [5]
QUIC — первый транспортный протокол IETF , намеренно минимизирующий свой сетевой образ, чтобы избежать окостенения. [6]
Совет по архитектуре Интернета определил проектные соображения, касающиеся раскрытия информации протокола сетевым элементам, как «развивающуюся область» в 2023 году. [7]
Основной причиной окостенения протокола является вмешательство промежуточных устройств , [8] делающее недействительным принцип сквозного соединения . [9] Промежуточные устройства могут полностью блокировать неизвестные протоколы или нераспознанные расширения известных протоколов, мешать согласованию расширений или функций или выполнять более инвазивную модификацию метаданных протокола. [10] Не все модификации промежуточных устройств обязательно являются окостеневающими; из тех, которые потенциально вредны, они непропорционально направлены к границе сети. [11] Промежуточные устройства развертываются сетевыми операторами в одностороннем порядке для решения конкретных проблем, [12] включая оптимизацию производительности, требования безопасности (например, брандмауэры), трансляцию сетевых адресов или улучшение контроля сетей. [13] Эти развертывания промежуточных устройств обеспечивают локализованную краткосрочную полезность, но ухудшают глобальную долгосрочную развиваемость Интернета, проявляя трагедию общин . [12]
Изменения в протоколе должны быть допущены всеми посредниками на пути; если желательно широкое развертывание изменения в Интернете, то это распространяется на большую часть посредников в Интернете. Промежуточный узел должен допускать широко используемые протоколы, как они использовались во время его развертывания, но может не допускать новые протоколы или изменения существующих, фактически создавая порочный круг , поскольку новые образы проводов не могут получить достаточно широкого развертывания, чтобы заставить промежуточные узлы допускать новый образ проводов по всему Интернету. [9] Даже то, что все участники допускают протокол, не является гарантией использования: при отсутствии механизма согласования или обнаружения конечные точки могут по умолчанию использовать протокол, который считается более надежным. [14]
Помимо промежуточных устройств, окостенение может быть вызвано недостаточной гибкостью в реализации конечной точки. Ядра операционных систем медленно изменяются и развертываются, [14] а протоколы, реализованные в оборудовании, также могут неправильно фиксировать детали протокола. [15] Широко используемый интерфейс прикладного программирования (API), который делает предположения о работе базовых протоколов, может препятствовать развертыванию протоколов, которые не разделяют эти предположения. [9]
Совет по архитектуре Интернета рекомендовал в 2019 году заменить неявные сигналы для наблюдателей сигналами, намеренно предназначенными для потребления этими наблюдателями, а сигналы, не предназначенные для их потребления, не должны быть им доступны (например, путем шифрования); а также чтобы метаданные протокола были защищены целостностью , чтобы они не могли быть изменены промежуточными устройствами. [16] Однако даже полностью зашифрованные метаданные не могут полностью предотвратить окостенение в сети, поскольку образ провода протокола все еще может показывать закономерности, на которые можно положиться. [17] Операторы сетей используют метаданные для различных безвредных целей управления, [18] и исследования Интернета также информируются о данных, собранных из метаданных протокола; [19] разработчик протокола должен сбалансировать сопротивление окостенению с наблюдаемостью для операционных или исследовательских нужд. [17] Аркко и др. (2023) дает дополнительные указания по этим соображениям: раскрытие информации протоколом в сети должно быть преднамеренным, [20] осуществляться с согласия как получателя, так и отправителя, [21] аутентифицированным в возможной и необходимой степени, [22] выполняться только в соответствии со степенью ее достоверности, [23] и быть сведенным к минимуму и предоставленным минимальному количеству субъектов. [24] [25]
Активное использование точек расширения необходимо, если они не должны окостенеть. [26] Сокращение количества точек расширения, документирование инвариантов, на которые участники протокола могут положиться, в отличие от случайных деталей, на которые нельзя полагаться, и быстрое обнаружение проблем в развернутых системах могут помочь в обеспечении активного использования. [27] Однако даже активное использование может использовать только узкую часть протокола, и окостенение все еще может происходить в частях, которые остаются инвариантными на практике, несмотря на теоретическую изменчивость. [28] [29] «Смазывание» точки расширения, когда некоторые реализации указывают на поддержку несуществующих расширений, может гарантировать, что фактически существующие, но нераспознанные расширения будут допустимы (ср. хаос-инжиниринг ). [30] Заголовки HTTP являются примером точки расширения, которая успешно избежала значительной окостенелости, поскольку участники, как правило, игнорируют нераспознанные заголовки. [31]
Новый протокол может быть разработан для имитации проводного образа существующего закостенелого протокола; [32] в качестве альтернативы новый протокол может быть инкапсулирован в существующий, допустимый протокол. Недостатком инкапсуляции является то, что обычно есть накладные расходы и избыточная работа (например, внешние контрольные суммы, которые становятся избыточными из-за внутренних проверок целостности). [33]
Помимо middlebox, можно противостоять и другим источникам окостенения. Реализация протоколов в пользовательском пространстве может привести к более быстрой эволюции. Если новый протокол инкапсулирован в UDP, то реализация в пользовательском пространстве возможна. [34] [35] Если поддержка протоколов неопределенна, участники могут одновременно пробовать альтернативные протоколы, за счет увеличения объема отправляемых данных. [36]
При достаточных усилиях и координации окостенение может быть напрямую обращено вспять. День флага , когда участники протокола вносят изменения согласованно, может разорвать порочный круг и установить активное использование. Этот подход был использован для развертывания EDNS , который ранее не допускался серверами. [37]
Протокол управления передачей пострадал от окостенения. [38] Одно измерение показало, что треть путей через Интернет сталкиваются по крайней мере с одним посредником, который изменяет метаданные TCP, и 6,5% путей сталкиваются с вредными окостеневающими эффектами от посредников. [39] Расширения TCP были затронуты: конструкция MPTCP была ограничена поведением промежуточного устройства, [3] [40] и развертывание TCP Fast Open также было затруднено. [41] [38]
Протокол передачи управления потоком был мало распространен в Интернете из-за нетерпимости со стороны промежуточных устройств [9] , а также из-за очень распространенного API сокетов BSD, плохо соответствующего его возможностям. [42] На практике единственными пригодными для использования транспортными протоколами Интернета являются TCP и UDP . [43]
Transport Layer Security (TLS) пережил окостенение. TLS был исходным контекстом для введения точек расширения смазки. TLS 1.3 , как изначально было задумано, оказался непригодным для развертывания в Интернете: промежуточные устройства окостенели в параметре версии протокола. Это было обнаружено на поздних этапах процесса разработки протокола, во время экспериментальных развертываний веб-браузерами . В результате версия 1.3 имитирует образ провода версии 1.2. [44]
QUIC был специально разработан для развертывания, развития и для того, чтобы иметь анти-окостенение свойства; [45] это первый транспортный протокол IETF , который намеренно минимизирует свой проводной образ для этих целей. [6] Он смазан, [30] он имеет явно указанные инварианты протокола, [46] он инкапсулирован в UDP, и его метаданные протокола зашифрованы. [45] Тем не менее, приложения, использующие QUIC, должны быть готовы откатиться к другим протоколам, поскольку UDP блокируется некоторыми промежуточными устройствами. [47]