Полагаю, логика (ошибочная) была другая, а именно: что бы показать, что мы сделали полноценный HTTP-сервер продемонстируем, что можем к нему обратиться из браузера (популярный браузер — это авторитетная вещь) и получить ответ.
На самом деле, можно продемонстрировать работу клиента и «авторитетной вещи», например, обратившись к «google.com» по порту 80.
Или на «ya.ru» с запросом:
GET / HTTP/1.1
Host: ya.ru
И, включив отладку в браузере (Ctrl+Shift+I) и показав, что тоже самое видит и браузер.
И для этого совсем не обязательно даже писать программу, достаточно использовать telnet.
что за всем этим стоит не более чем пересылка текстовых сообщений определенного содержания
Ну это же неверно.
Вся суть HTTP — именно в спецификациях. Посмотрите, например, как лишь малую часть спецификации обсуждают в этой этой недавней теме REST страсти по 200.
Это опасно, чрезмерно упрощать тему и ставить акценты совершенно на другой уровень. Это сильно вводит в заблуждение.
Если хотите показать работу с сокетами, то сделайте простой чат.
Слишком простой пример, что бы называться «Простейшим HTTP-сервером на Java».
Если хотите показать, как работают сокеты, что сделайте чат на сокетах.
Если хотите рассказать про HTTP, то нужно рассказывать про стандарты и реализации, иначе вы сделаете для студентов только хуже, упростив пример ниже допустимого минимума.
Отправляемый пакет подписывается по стандарту HMAC MD5 (другие я счёл слишком длинными для коротеньких UDP пакетов), на входе делается проверка. Принимать или нет пакет без подписи — оставлено на откуп прикладному коду.
Напрашивается вполне логичный вопрос.
Если злоумышленник перехватил пакет с подписью, а потом сам через некоторое время отсылает этот пакет, то что будет?
Использовать RDTSC я не стал из-за того, что на разных ядрах у него ТОЧНО разные значения и частота его инкрементации зависит от частоты процессора
Я выше в комментарии уже упомянул, что есть RDTSCP — инвариантная версия RDTSC, у которой такой зависимости нет. Так же, RDTSCP выполнится не раньше, чем все предыдущие команды, стоящие до него.
… аппаратура наряду со значением TSC может также предоставлять ID того CPU, на котором это значение прочитано (см. интеловскую инструкцию RDTSCP, «Intel 64 and IA-32 Architectures Software Developer's Manual», Volume 2)...
Какое-то странное пояснение. Как я понимаю, фишка RDTSCP — инвариантность:
...The invariant TSC will run at a constant rate in all ACPI P-, C-. and T-states. This is the architectural behavior moving forward. On processors with invariant TSC support, the OS may use the TSC for wall clock timer services (instead of ACPI or HPET timers)...
...The invariant TSC means that the TSC continues at a fixed rate regardless of the C-state or frequency of the processor...
кроме этого:
...The RDTSCP instruction waits until all previous instructions have been executed before reading the counter. However, subsequent instructions may begin execution before the read operation is performed...
в отличии от:
...The RDTSC instruction is not a serializing instruction. It does not necessarily wait until all previous instructions have been executed before reading the counter...
Агентом может выступать… микроагент на базе маленьких ARM-компьютеров вроде Raspberry PI
А можете поподробнее что-то написать про эти микроагенты, по оборудованию? Какие есть возможности, какая ОС, стоимость?
Как оборудование в сравнении с таким продуктом: 3G роутер TELEOFIS RTU968 V2? Это штука на базе OpenWRT, для диапазона температур от -40 до +70, имеет 4 универсальных входа и стоит примерно от 12 тыс. руб. в зависимости от комплектации (опциональны WiFi, GPS и т.п.)
Ну хорошо, тогда дополнительный вопрос.
Если «код» сделали числом, то почему «метод» тоже не сделали числом?
Боятся, что что чисел для идентификации методов не хватит? :)
И еще. Почему код — это число, а не строка? Как так?
Вот тут сразу виден недостаток стандарта (или следствие наличия «бонуса» в виде batch-операций):
метод закодирован в теле сообщения!
С точки зрения простоты протоколирования, мониторинга, возможности перекрытия реализации метода, балансировки и т.п. это неудобно.
Все таки название метода в пути, может, и не идеальное, но вполне удачное решение.
А здесь «бонус» вильнул собакой.
По моему мнению, это введение в заблуждение.
Если вы сделаете «Простой HTTP/1.0-клиент», то претензий к вам, по сути, не будет.
Если вы заявляете, что сделали «Простой HTTP-сервер», то это опасное введение в заблуждение.
На самом деле, можно продемонстрировать работу клиента и «авторитетной вещи», например, обратившись к «google.com» по порту 80.
Или на «ya.ru» с запросом:
GET / HTTP/1.1
Host: ya.ru
И, включив отладку в браузере (Ctrl+Shift+I) и показав, что тоже самое видит и браузер.
И для этого совсем не обязательно даже писать программу, достаточно использовать telnet.
А упор при рассказе про HTTP нужно делать на понятия, стандарты, сценарии, демонстрации с помощью браузерного инструмента разработчика: developers.google.com/web/tools/chrome-devtools/network
Если хочется показать работу сокетов на примере HTTP, то нужно делать «простейший HTTP/1.0-клиент», а не сервер.
А преподавать что-то не зная сути вопроса я бы вообще не рискнул. Больше будет вреда, чем пользы.
Ну это же неверно.
Вся суть HTTP — именно в спецификациях. Посмотрите, например, как лишь малую часть спецификации обсуждают в этой этой недавней теме REST страсти по 200.
Это опасно, чрезмерно упрощать тему и ставить акценты совершенно на другой уровень. Это сильно вводит в заблуждение.
Если хотите показать работу с сокетами, то сделайте простой чат.
Если ходите рассказать сетевую модель, то покажите это: ru.wikipedia.org/wiki/Сетевая_модель_OSI
Если хотите показать, как работают сокеты, что сделайте чат на сокетах.
Если хотите рассказать про HTTP, то нужно рассказывать про стандарты и реализации, иначе вы сделаете для студентов только хуже, упростив пример ниже допустимого минимума.
Напрашивается вполне логичный вопрос.
Если злоумышленник перехватил пакет с подписью, а потом сам через некоторое время отсылает этот пакет, то что будет?
Пакет будет принят, как подлинный?
Имеется в виду эта тема: github.com/flutter/flutter/issues/14330
blog.cloudflare.com/tag/quic
Кстати, посмотрел, на моем ноутбучном i3 2014 года этот бит стоит, т.е. у меня в системе инвариантный TSC.
Извиняюсь, ввел в заблуждение.
RDTSCP — это выполнение LFENCE (или в какой-то мере аналог) + чтение TSC (то же, что дает RDTSC) + чтение ID
И инвариантный TSC — это отдельная фича, проверяется CPUID.80000007H:EDX[8].
Если эта фича есть, то что RDTSC, что RDTSCP дают значения, которые не зависят от изменения частоты ядер.
Я выше в комментарии уже упомянул, что есть RDTSCP — инвариантная версия RDTSC, у которой такой зависимости нет. Так же, RDTSCP выполнится не раньше, чем все предыдущие команды, стоящие до него.
Только в статье про это почему-то не написано.
Какое-то странное пояснение. Как я понимаю, фишка RDTSCP — инвариантность:
...The invariant TSC will run at a constant rate in all ACPI P-, C-. and T-states. This is the architectural behavior moving forward. On processors with invariant TSC support, the OS may use the TSC for wall clock timer services (instead of ACPI or HPET timers)...
...The invariant TSC means that the TSC continues at a fixed rate regardless of the C-state or frequency of the processor...
кроме этого:
...The RDTSCP instruction waits until all previous instructions have been executed before reading the counter. However, subsequent instructions may begin execution before the read operation is performed...
в отличии от:
...The RDTSC instruction is not a serializing instruction. It does not necessarily wait until all previous instructions have been executed before reading the counter...
Как обстоят сейчас дела с отладкой кода на Rust?
А можете поподробнее что-то написать про эти микроагенты, по оборудованию? Какие есть возможности, какая ОС, стоимость?
Как оборудование в сравнении с таким продуктом: 3G роутер TELEOFIS RTU968 V2? Это штука на базе OpenWRT, для диапазона температур от -40 до +70, имеет 4 универсальных входа и стоит примерно от 12 тыс. руб. в зависимости от комплектации (опциональны WiFi, GPS и т.п.)
По-моему, это какая-то реальная подстава. Полагаю, что про нее многие даже и не знают…
Если кому-то интересно, еще ссылки по теме:
how to disable Neighbor Unreachability Detection?
Disabling Neighbor Unreachability Detection