Принцип устойчивости - Robustness principle

В вычисление, то принцип устойчивости это руководство по разработке программного обеспечения:

Будьте консервативны в том, что вы делаете, будьте либеральны в том, что вы принимаете от других (часто переформулируется как «Будьте консервативны в том, что вы отправляете, будьте либеральны в том, что вы принимаете»).

Этот принцип также известен как Закон Постела, после Джон Постел, который написал в ранней спецификации TCP:[1]

Реализации TCP должны следовать общему принципу устойчивости: быть консервативным в том, что вы делаете, быть либеральным в том, что вы принимаете от других.

Другими словами, программы, которые отправляют сообщения на другие машины (или другие программы на той же машине), должны полностью соответствовать спецификациям, но программы, которые получают сообщения, должны принимать несоответствующий ввод, если смысл ясен.

Среди программистов производить совместимые функции, принцип также известен в виде быть контравариантным по типу ввода и ковариантным по типу вывода.

Интерпретация

RFC 1122 (1989) расширил принцип Постела, рекомендуя программистам «предполагать, что сеть заполнена злонамеренными сущностями, которые будут посылать пакеты, предназначенные для достижения наихудшего эффекта».[2] Протоколы должны позволять добавлять новые коды для существующих полей в будущих версиях протоколов, принимая сообщения с неизвестными кодами (возможно, регистрируя их). Программистам следует избегать отправки сообщений с «законными, но неясными функциями протокола», которые могут выявить недостатки в приемниках, и разрабатывать свой код «не только для того, чтобы выжить на других неправильно функционирующих хостах, но и для сотрудничества, чтобы ограничить количество нарушений, которые такие хосты могут вызвать для общего доступа. средство связи ».[3]

Критика

В 2001, Маршалл Роуз охарактеризовал несколько проблем развертывания при применении принципа Постела при разработке нового протокола приложения.[4] Например, дефектная реализация, которая отправляет несоответствующие сообщения, может использоваться только с реализациями, которые допускают эти отклонения от спецификации, пока, возможно, через несколько лет она не соединится с менее терпимым приложением, которое отклоняет свои сообщения. В такой ситуации часто бывает сложно определить проблему, а внедрение решения может быть дорогостоящим. Поэтому Роуз рекомендовал «явные проверки согласованности в протоколе ... даже если они накладывают накладные расходы на реализацию».

С 2015 по 2018 год в серии Интернет-проекты, Мартин Томсон утверждает, что принцип устойчивости Постела на самом деле приводит к недостаток надежности, включая безопасность:[5]

Недостаток может стать стандартом де-факто. Для воспроизведения аномального поведения требуется любая реализация протокола, в противном случае он не будет совместим. Это является как следствием применения принципа устойчивости, так и результатом естественного нежелания избегать условий фатальной ошибки. Обеспечение совместимости в этой среде часто называют стремлением «обеспечить совместимость с ошибками».

В 2018 г. технологии повышения конфиденциальности Флорентин Роше и Оливье Перейра показали, как использовать принцип устойчивости Постеля внутри Tor протокол маршрутизации чтобы поставить под угрозу анонимность onion-сервисов и Tor-клиентов.[6]

Смотрите также

Рекомендации

  1. ^ Постел, Джон, изд. (Январь 1980 г.). Протокол управления передачей. IETF. Дои:10.17487 / RFC0761. RFC 761. Получено 9 июня, 2014.
  2. ^ Брейден, Р., изд. (Октябрь 1989 г.). Требования к Интернет-хостам: уровни связи. IETF. Дои:10.17487 / RFC1122. RFC 1122. Получено 9 июня, 2014.
  3. ^ Уайльд, Эрик (2012) [1999]. WWW Уайльда: Технические основы всемирной паутины. Springer ‑ Verlag. п.26. Дои:10.1007/978-3-642-95855-7. ISBN  978-3-642-95855-7.
  4. ^ Роуз, М. (Ноябрь 2001 г.). О разработке прикладных протоколов. IETF. Дои:10.17487 / RFC3117. RFC 3117. Получено 9 июня, 2014.
  5. ^ Томсон, Мартин (май 2019 г.). Вредные последствия принципа устойчивости. IETF. Получено 4 октября, 2019.
  6. ^ Роше, Флорентин; Перейра, Оливье (2018). «На грани: гибкость и подтверждение трафика в протоколах луковой маршрутизации» (PDF). Материалы симпозиума по технологиям повышения конфиденциальности. De Gruyter Open (2): 27–46. ISSN  2299-0984.

внешняя ссылка