Здравствуйте, mrTwister, Вы писали:
Pzz>>Может это не такое уж и обязательное знание, если о нём почти никто ничего не знает?
T>Может быть, не знаю. Но для меня странно, что доставка пакетов из точки А в точку Б на другом конце света объясняется магией и это всем ок
Зачем магией? BGP полезен, спору нет, но можно обойтись и статическими таблицами маршрутизации
Здравствуйте, PlushBeaver, Вы писали:
PB>То есть учиться программировать сокеты нужно из любви к искусству?
вообще что-либо делать без любви довольно хреново...
PB>Потому что в голове преподавателя нарисован такой образ сетевого программиста?
я не имею понятия, что в вашей голове находится о том, что находится в голове преподавателя
PB>Программирование на сокетах нужно: PB>* Для реализации кастомных протоколов, которые нужны:
хосспади, да ему начать надо с хелловорлда.
Хорошо, если так хочется конкретной задачи — пожалуйста.
Вот есть индустриальный протокол XYZ, и надо его реализовать для отечественного PLC.
Какие там оверхэды... да насрать, потому что выбор протокола определяется существующими устройствами, которыми, собсна, и надо управлять, и разработчики этих устройств уже выбрали протокол.
PB>* Сокетов может не быть в микроконтроллере без ОС.
сделать ещё одну лабу, где две доски с МК говорят друг с другом по последовательному порту.
PB>Аналогично есть причины изучать протоколы, диагностику сети и сокетов. PB>Какие из причин релевантны для студентов в рамках дисциплины — зависит от специальности и учебной программы.
очевидно, что все вопросы, свазанные с сетевым взаимодействием, в рамках одного курса не осветить
PB>Видим, что send/sendto отрабатывает одинаково успешно, данные одинаково не приходят. PB>Тут-то и начинается настоящая лаба с инспекцией системы и трафика
Так разработать эксперимент — сама по себе инженерная задача.
Типа, пишут, что TCP что-то там гарантирует. Докажи.
PB>Правда, всё еще непонятно, зачем для этого уметь программировать сокеты.
Если не нравится такая задачка, можно другую придумать.
Вопрос же основной был про лабы, а это по определению строение велосипедов.
Здравствуйте, PlushBeaver, Вы писали:
PB>То есть учиться программировать сокеты нужно из любви к искусству? PB>Потому что в голове преподавателя нарисован такой образ сетевого программиста?
К сожалению, более высокоуровневые абстракции (скажем, HTTP) то там то сям немного подтекают.
librats is a modern P2P networking library designed for superior performance and simplicity.
Built from the ground up in C++17, it provides enterprise-grade P2P networking capabilities with minimal overhead and maximum efficiency.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Marty, Вы писали:
T>>Может быть, не знаю. Но для меня странно, что доставка пакетов из точки А в точку Б на другом конце света объясняется магией и это всем ок
M>Зачем магией? BGP полезен, спору нет, но можно обойтись и статическими таблицами маршрутизации
FullView не каждый маршрутизатор операторского уровня потянет и придется надолго забыть о 100 мбитных скоростях.
Здравствуйте, Stanislaw K, Вы писали:
M>>Зачем магией? BGP полезен, спору нет, но можно обойтись и статическими таблицами маршрутизации
SK>FullView не каждый маршрутизатор операторского уровня потянет и придется надолго забыть о 100 мбитных скоростях.
Здравствуйте, Marty, Вы писали:
M>>>Зачем магией? BGP полезен, спору нет, но можно обойтись и статическими таблицами маршрутизации
SK>>FullView не каждый маршрутизатор операторского уровня потянет и придется надолго забыть о 100 мбитных скоростях.
M>Можно поподробнее?
Под статические таблицы маршрутизации потребуется на порядок больше ресурсов (памяти и процессора), соответственно стоимость маршрутизатора будет в разы выше, а производительность в разы (десятки раз) ниже.
Это не домашний роутер, в котором собственно работа по маршрутизации фактически отсутствует, там каждый пакет придётся роутить по полной.
Здравствуйте, Stanislaw K, Вы писали:
SK>>>FullView не каждый маршрутизатор операторского уровня потянет и придется надолго забыть о 100 мбитных скоростях.
M>>Можно поподробнее?
SK>Под статические таблицы маршрутизации потребуется на порядок больше ресурсов (памяти и процессора), соответственно стоимость маршрутизатора будет в разы выше, а производительность в разы (десятки раз) ниже.
SK>Это не домашний роутер, в котором собственно работа по маршрутизации фактически отсутствует, там каждый пакет придётся роутить по полной.
Всё равно не понятно, как BGP позволяет уменьшить таблицы маршрутизации
Pzz>Желательно было бы иметь учебный эмулятор, который умеет случайным образом терять пакеты в пределах заданного процента потерь и вставлять задержки, случайно распределенные в заданном диапазоне.
LVV>>Случился тут форс-мажор — некому преподавать LVV>>Дали мне. S>1. Что за курс? Я не вижу в списке преподаваемых у вас дисциплин "Сетевое программирование". S>Есть Сетевые приложения.
Один фиг...
Программу, очевидно, писал Алтуфьев Мишка — мой дипломник.
И писал, очевидно, под запросы другого моего дипломника и аспиранта, который тоже у нас преподает.
Но он уехал.
А утверждал третий мой выпускник... S>2. Если курс новый — должна быть характеристика дисциплины. Исходить надо из неё.
Ну, конечно, в поручении тоже Сетевые приложения.
Но меня программа не совсем устраивает — там Додиез и винда.
Давно переходить на линукс.
S>3. У нас есть Сетевые технологии. Двадцать с лишним лет тому я практические занятия по ним строил примерно так, как советует сейчас коллега Pzz (https://ccfit.nsu.ru/fit/courses/NetTech/tasks/). S>Сейчас её ведет один из тех, кому я тогда преподавал . Он существенно переделал курс: https://www.nsu.ru/n/information-technologies-department/education_fit/programs/OOP/09-03-01/piikn/rabochie-programmy/09.03.01_PIiKN_B1.B.16.pdf
А вот за это большое спасибо!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Кстати, я с Мишкой вчера связался в телеге.
Он мне написал, какие лабы он давал.
----
Сетевые приложения: https://professorweb.ru/my/csharp/web/level1/web_index.php
Можете почитать на досуге, но вообще мы это будем рассматривать потихоньку.
Лабы:
1. Выдача ответа на запрос по протоколу http (Raw Socket). Выдача ответа на запрос по протоколу file (Web Request). Выдача ответа на запрос dns (Shell Exec).
2. Client+Server — выдача на сервере текстовой строки, переданной клиентом с помощью Socket (использовать протокол TCP).
3. Сканер открытых портов локального IP адреса. Использовать Raw Socket.
4. Сканер локальной сети на предмет имеющихся IP адресов и открытых портов. Использовать Raw Socket.
5. Сниффер пакетов. Использовать Raw Socket. НЕ надо парсить заголовки. Но если хочется, то можно.
6. Чат на TCP-сокетах:
— Клиенты подключаются к серверу с указанием IP:port.
— Клиенты могут передавать сообщения и файлы.
— Клиенты могут создавать групповые и личные чаты.
— Сервер хранит список клиентов.
— Сервер обновляет список клиентов при его изменении и отправляет новый клентам.
— Сервер обеспечивает поддержание списка в актуальном соостоянии (например, при обрыве связи с клиентом).
— Сервер поддерживает возможность создаия групповых и p2p чатов.
— Сервер обеспечивает передачу сообщений и файлов в трёх режимах: личный, групповой, общий.
----
Лучше писать на C#
Можно писать на Java, Kotlin, [C++, Swift, Objective C] — для месье, Go, Rust, Elixir...
Нельзя на: JS, Dart, Ruby, Python.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Marty, Вы писали:
M>Зачем магией? BGP полезен, спору нет, но можно обойтись и статическими таблицами маршрутизации
И как ими обмениваться? По почте? В интернете пятизначное число активных автономных систем (~провайдеров).
PB>То есть учиться программировать сокеты нужно из любви к искусству? PB>Потому что в голове преподавателя нарисован такой образ сетевого программиста?
Мне кажется с сокетов нужно начинать, потому, что это базовый уровень реализованный в каждой современной ОС (ну, про всякую экзотику и микроконтроллеры не говорим).
И хоть сокетов и нет в стандартной библиотеки С/C++ есть почти одинаковое API на С для всех ОС.
Это и не слишком высокий и не слишком низкий уровень. Когда студент сможет переслать с одной машины на другую "Hello world", у него уже будет какое-то минимальное базовое понимание.
А дальше от этого можно идти на более высокий уровень (всякие HTTP, web сервисы, разные протоколы прикладного уровня), так и на более низкий (залезсть внутрь ядра, разбираться в системных протоколах).
Сеть вообще вещь сложная и очень объемная, мне кажется студентов серьезными специалистами быстро не сделать. Мне кажется можно научить их на практике пользоваться сокетами, написать простой клиент сервер.
И обзорно и кратко дать как можно больше широких знаний как о библиотеках и протоколов и сервисов более высокого уровня, так и о низкоуровневой реализации, чтобы потом студенты понимали в какую сторону им копать, если что-то понадобится.
Здравствуйте, LaptevVV, Вы писали:
LVV>---- LVV>Лучше писать на C# LVV>Можно писать на Java, Kotlin, [C++, Swift, Objective C] — для месье, Go, Rust, Elixir... LVV>Нельзя на: JS, Dart, Ruby, Python.
Какое его дело, на чём писать?
Если на питоне написать, незачёт поставит что ли?
Ну бред же.
LVV>>---- LVV>>Лучше писать на C# LVV>>Можно писать на Java, Kotlin, [C++, Swift, Objective C] — для месье, Go, Rust, Elixir... LVV>>Нельзя на: JS, Dart, Ruby, Python. __>Какое его дело, на чём писать? __>Если на питоне написать, незачёт поставит что ли? __>Ну бред же.
не бред.
Реальное знание контингента и их уровня знаний.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!