Re[7]: Сетевое программирование
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 27.08.25 14:10
Оценка:
Здравствуйте, mrTwister, Вы писали:

Pzz>>Может это не такое уж и обязательное знание, если о нём почти никто ничего не знает?


T>Может быть, не знаю. Но для меня странно, что доставка пакетов из точки А в точку Б на другом конце света объясняется магией и это всем ок


Зачем магией? BGP полезен, спору нет, но можно обойтись и статическими таблицами маршрутизации
Маньяк Робокряк колесит по городу
Re[3]: Сетевое программирование
От: student__  
Дата: 27.08.25 14:30
Оценка:
Здравствуйте, PlushBeaver, Вы писали:

PB>То есть учиться программировать сокеты нужно из любви к искусству?


вообще что-либо делать без любви довольно хреново...

PB>Потому что в голове преподавателя нарисован такой образ сетевого программиста?


я не имею понятия, что в вашей голове находится о том, что находится в голове преподавателя

PB>Программирование на сокетах нужно:

PB>* Для реализации кастомных протоколов, которые нужны:

хосспади, да ему начать надо с хелловорлда.
Хорошо, если так хочется конкретной задачи — пожалуйста.
Вот есть индустриальный протокол XYZ, и надо его реализовать для отечественного PLC.
Какие там оверхэды... да насрать, потому что выбор протокола определяется существующими устройствами, которыми, собсна, и надо управлять, и разработчики этих устройств уже выбрали протокол.

PB>* Сокетов может не быть в микроконтроллере без ОС.


сделать ещё одну лабу, где две доски с МК говорят друг с другом по последовательному порту.

PB>Аналогично есть причины изучать протоколы, диагностику сети и сокетов.

PB>Какие из причин релевантны для студентов в рамках дисциплины — зависит от специальности и учебной программы.

очевидно, что все вопросы, свазанные с сетевым взаимодействием, в рамках одного курса не осветить

PB>Видим, что send/sendto отрабатывает одинаково успешно, данные одинаково не приходят.

PB>Тут-то и начинается настоящая лаба с инспекцией системы и трафика

Так разработать эксперимент — сама по себе инженерная задача.
Типа, пишут, что TCP что-то там гарантирует. Докажи.

PB>Правда, всё еще непонятно, зачем для этого уметь программировать сокеты.


Если не нравится такая задачка, можно другую придумать.
Вопрос же основной был про лабы, а это по определению строение велосипедов.
Re[3]: Сетевое программирование
От: Pzz Россия https://github.com/alexpevzner
Дата: 27.08.25 15:36
Оценка: +2
Здравствуйте, PlushBeaver, Вы писали:

PB>То есть учиться программировать сокеты нужно из любви к искусству?

PB>Потому что в голове преподавателя нарисован такой образ сетевого программиста?

К сожалению, более высокоуровневые абстракции (скажем, HTTP) то там то сям немного подтекают.

https://en.wikipedia.org/wiki/Leaky_abstraction

Поэтому невредно знать, что у неё там внутри, чтобы не очень удивляться, когда оно оттуда вытечет.
Re: А тут интересно
От: LaptevVV Россия  
Дата: 28.08.25 04:36
Оценка:
https://github.com/DEgitx/librats
A high-performance, lightweight peer-to-peer networking library written in C++17

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.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[8]: Сетевое программирование
От: Stanislaw K СССР  
Дата: 28.08.25 09:58
Оценка:
Здравствуйте, Marty, Вы писали:

T>>Может быть, не знаю. Но для меня странно, что доставка пакетов из точки А в точку Б на другом конце света объясняется магией и это всем ок


M>Зачем магией? BGP полезен, спору нет, но можно обойтись и статическими таблицами маршрутизации


FullView не каждый маршрутизатор операторского уровня потянет и придется надолго забыть о 100 мбитных скоростях.
Все проблемы от жадности и глупости
Re[9]: Сетевое программирование
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.08.25 10:02
Оценка:
Здравствуйте, Stanislaw K, Вы писали:

M>>Зачем магией? BGP полезен, спору нет, но можно обойтись и статическими таблицами маршрутизации


SK>FullView не каждый маршрутизатор операторского уровня потянет и придется надолго забыть о 100 мбитных скоростях.


Можно поподробнее?
Маньяк Робокряк колесит по городу
Re[10]: Сетевое программирование
От: Stanislaw K СССР  
Дата: 28.08.25 10:32
Оценка:
Здравствуйте, Marty, Вы писали:

M>>>Зачем магией? BGP полезен, спору нет, но можно обойтись и статическими таблицами маршрутизации


SK>>FullView не каждый маршрутизатор операторского уровня потянет и придется надолго забыть о 100 мбитных скоростях.


M>Можно поподробнее?


Под статические таблицы маршрутизации потребуется на порядок больше ресурсов (памяти и процессора), соответственно стоимость маршрутизатора будет в разы выше, а производительность в разы (десятки раз) ниже.

Это не домашний роутер, в котором собственно работа по маршрутизации фактически отсутствует, там каждый пакет придётся роутить по полной.
Все проблемы от жадности и глупости
Re[11]: Сетевое программирование
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.08.25 16:49
Оценка:
Здравствуйте, Stanislaw K, Вы писали:

SK>>>FullView не каждый маршрутизатор операторского уровня потянет и придется надолго забыть о 100 мбитных скоростях.


M>>Можно поподробнее?


SK>Под статические таблицы маршрутизации потребуется на порядок больше ресурсов (памяти и процессора), соответственно стоимость маршрутизатора будет в разы выше, а производительность в разы (десятки раз) ниже.


SK>Это не домашний роутер, в котором собственно работа по маршрутизации фактически отсутствует, там каждый пакет придётся роутить по полной.



Всё равно не понятно, как BGP позволяет уменьшить таблицы маршрутизации
Маньяк Робокряк колесит по городу
Re[3]: Сетевое программирование
От: L.Long  
Дата: 29.08.25 13:55
Оценка: +1
Здравствуйте, mrTwister, Вы писали:

Pzz>>Я тут подумал, и у меня в голове нарисовался след. учебный план.


T>Про маршрутизацию не хватает: OSPF, BGP


Маршрутизация — это отдельного курса заслуживает.
Чем совершеннее технически средство, тем более примитивные, никчемные и бесполезные сведения при его помощи передаются.(с)Станислав Лем
Re: Сетевое программирование
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.08.25 14:44
Оценка: 38 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>Чего-то в сетевом форуме мой вопрос никто тне прочитал.

LVV>Повторяю здесь

LVV>Случился тут форс-мажор — некому преподавать

LVV>Дали мне.
1. Что за курс? Я не вижу в списке преподаваемых у вас дисциплин "Сетевое программирование".
Есть Сетевые приложения.
2. Если курс новый — должна быть характеристика дисциплины. Исходить надо из неё.
3. У нас есть Сетевые технологии. Двадцать с лишним лет тому я практические занятия по ним строил примерно так, как советует сейчас коллега Pzz (https://ccfit.nsu.ru/fit/courses/NetTech/tasks/).
Сейчас её ведет один из тех, кому я тогда преподавал . Он существенно переделал курс: 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
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Сетевое программирование
От: m2user  
Дата: 29.08.25 22:30
Оценка:
Pzz>Желательно было бы иметь учебный эмулятор, который умеет случайным образом терять пакеты в пределах заданного процента потерь и вставлять задержки, случайно распределенные в заданном диапазоне.

В Linux kernel есть модуль NetEm (https://man7.org/linux/man-pages/man8/tc-netem.8.html). Для эмуляции сетей с задержками его использовал.
Re[2]: Сетевое программирование
От: LaptevVV Россия  
Дата: 30.08.25 13:22
Оценка: 84 (1)
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
А вот за это большое спасибо!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Сетевое программирование
От: LaptevVV Россия  
Дата: 31.08.25 05:10
Оценка:
Кстати, я с Мишкой вчера связался в телеге.
Он мне написал, какие лабы он давал.
----
Сетевые приложения:
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.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[8]: Сетевое программирование
От: Skorodum Россия  
Дата: 02.09.25 10:37
Оценка:
Здравствуйте, Marty, Вы писали:

M>Зачем магией? BGP полезен, спору нет, но можно обойтись и статическими таблицами маршрутизации

И как ими обмениваться? По почте? В интернете пятизначное число активных автономных систем (~провайдеров).
Re[3]: Сетевое программирование
От: ksandro Мухосранск  
Дата: 08.09.25 15:00
Оценка: +2
Здравствуйте, PlushBeaver, Вы писали:



PB>То есть учиться программировать сокеты нужно из любви к искусству?

PB>Потому что в голове преподавателя нарисован такой образ сетевого программиста?


Мне кажется с сокетов нужно начинать, потому, что это базовый уровень реализованный в каждой современной ОС (ну, про всякую экзотику и микроконтроллеры не говорим).
И хоть сокетов и нет в стандартной библиотеки С/C++ есть почти одинаковое API на С для всех ОС.

Это и не слишком высокий и не слишком низкий уровень. Когда студент сможет переслать с одной машины на другую "Hello world", у него уже будет какое-то минимальное базовое понимание.
А дальше от этого можно идти на более высокий уровень (всякие HTTP, web сервисы, разные протоколы прикладного уровня), так и на более низкий (залезсть внутрь ядра, разбираться в системных протоколах).



Сеть вообще вещь сложная и очень объемная, мне кажется студентов серьезными специалистами быстро не сделать. Мне кажется можно научить их на практике пользоваться сокетами, написать простой клиент сервер.
И обзорно и кратко дать как можно больше широких знаний как о библиотеках и протоколов и сервисов более высокого уровня, так и о низкоуровневой реализации, чтобы потом студенты понимали в какую сторону им копать, если что-то понадобится.
Re[4]: Сетевое программирование
От: student__  
Дата: 12.09.25 15:58
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>----

LVV>Лучше писать на C#
LVV>Можно писать на Java, Kotlin, [C++, Swift, Objective C] — для месье , Go, Rust, Elixir...
LVV>Нельзя на: JS, Dart, Ruby, Python.

Какое его дело, на чём писать?
Если на питоне написать, незачёт поставит что ли?
Ну бред же.
Re[5]: Сетевое программирование
От: LaptevVV Россия  
Дата: 12.09.25 16:23
Оценка:
LVV>>----
LVV>>Лучше писать на C#
LVV>>Можно писать на Java, Kotlin, [C++, Swift, Objective C] — для месье , Go, Rust, Elixir...
LVV>>Нельзя на: JS, Dart, Ruby, Python.
__>Какое его дело, на чём писать?
__>Если на питоне написать, незачёт поставит что ли?
__>Ну бред же.
не бред.
Реальное знание контингента и их уровня знаний.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.