Re[5]: Сетевое программирование
От: syrompe  
Дата: 23.08.25 18:33
Оценка:
Pzz>Там есть еще OOB — кажется, это единствнный TCP-based протокол с OOB.

У меня точно не было. Возможно есть отдельная опция под это, но на нее как раз можно и отказ послать.

КА, кстати, в сетевом аспекте очень полезная штука. На них по сути то все и держится. А современные программисты начинают сразу ентерпрайз дичь писать при их виде.
Re[6]: Сетевое программирование
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 23.08.25 18:53
Оценка:
Здравствуйте, Pzz, Вы писали:

M>>А, ну так-то да. Но это не совсем таки HTTP 0.9, заголовки-то и в нём были.

M>>И взад получаешь скорее всего не двоичный файл, навскидку сейчас не скажу, но скорее всего base64

Pzz>Неа.


Pzz>https://http.dev/0.9


Да, действительно, проще некуда. Я наверное спутал HTTP/1.0 и HTTP/1.1. Но HTTP 0.9 предполагает передачу только html файлов, а не абы каких.


Pzz>>>В принципе, да. Но большинство практическеских сетей предпочитает прикидываться Ethernet-ом. Мне из исключений приходит в голову только PPP и SLIP...


M>>Тем не менее, локалку можно на TokenRing или ArcNet сделать, связь с аплинком — точка-точка — и всё, никаких MAC, а и Internet сделать можно


Pzz>У токенринга тоже MAC-адреса, в стиле Ethernet. У ArcNet-а не знаю.


Ну да, возможно. Но ничего не мешает сделать аналог TokenRing, который оперирует не MAC-адресами, а IP-адресами.

А вообще, у IBM TokenRing физически комп подключался к концентратору одним кабелем, и всё, и кольцо там уже реализовывалось, унутре. Т.е. снаружи видится как точка-точка со звездообразным коммутатором.
В общем, можно сделать звездообразный интернет без всяких MAC-ов.


M>>Интересный вопрос. Я не знаю ответа Тем более, так чтобы прям событие. Теоретически, наверное можно глянуть через IOCTL, осталось ли что-то в буфере на отправку, но не уверен, что это хороший способ


Pzz>При чем тут IOCTL? Как сетевой стек решает, когда очередной пакет послать?


Ошибся, не IOCTL, а getsockopt c SOL_SOCKET. Думал, есть опция узнать сколько места, но есть только ф-я узнать размер буфера — SO_SNDBUF


Pzz>Hint: не по таймеру.


Не знаю
Маньяк Робокряк колесит по городу
Re[7]: Сетевое программирование
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.08.25 19:38
Оценка:
Здравствуйте, Marty, Вы писали:

Pzz>>https://http.dev/0.9


M>Да, действительно, проще некуда. Я наверное спутал HTTP/1.0 и HTTP/1.1. Но HTTP 0.9 предполагает передачу только html файлов, а не абы каких.


Ему всё равно.

M>Ну да, возможно. Но ничего не мешает сделать аналог TokenRing, который оперирует не MAC-адресами, а IP-адресами.


Даже и в Ethernet можно IP-адрес вместо младших 4-х байт адреса затолкать. Только так обычно не делают.
Re[6]: Сетевое программирование
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.08.25 19:44
Оценка:
Здравствуйте, Marty, Вы писали:

LVV>>В новой книжке, ссыль на которую я давал в первом посте, написано, что названия функций не совпадают.

LVV>>И вообще ioctl и fnctl отсутствуют.

M>По моему, это единственное отличие. ioctl называется ioctlsocket.


Заметная разница начинается, когда хочется, например, мультикастинга. Между вариантами UNIX, кстати, тоже.
Re[4]: Сетевое программирование
От: Слава  
Дата: 23.08.25 21:18
Оценка: +2
Здравствуйте, Marty, Вы писали:

LVV>>И 2 операционных системах. В винде же сокеты немного другие.


M>Чем же они в винде другие?


В винде IOCP, проактор, в линуксе epoll, реактор. Есть конечно io_uring, но эта штука для линуксов новая.

Так-то конечно сокеты Беркли одни и те же, если брать базовый connect/listen/accept/select.
Re: Сетевое программирование
От: Слава  
Дата: 23.08.25 21:26
Оценка:
Здравствуйте, LaptevVV, Вы писали:

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

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

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

LVV>Дали мне.
LVV>Я в этом деле практически полный чайник.
LVV>Поэтому обращаюсь к народу за помощью.

LVV>Пара книжек есть: Таненбаум и Олиферы.

LVV>Вроде все, что там без программирования нужно рассказать — там есть.

Возьмите старую книжку "TCP/IP крупным планом", она была где-то на старом Citforum. Базовые вещи про маршрутизацию в ней рассказаны.

Пусть напишут чатик на TCP, под винду, под линукс, снаала с select, затем с WSA(не помню как его там) и с poll. Пусть передадут файл через TCP, измеряя скорость передачи. Пусть допишут к чатику функцию поиска иных экземпляров чата в локальной сети, через broadcast UDP, ну и разумеется функцию отклика на broadcast. И возьмите какую-нибудь популярную библиотеку для С++ или что вы им преподаёте, boost.asio или libuv для голого С, и пусть на них сделают то же самое. Пусть заодно научатся отличать listen на 0.0.0.0 и на конкретном интерфейсе.
Re: ну, и вопрос еще
От: LaptevVV Россия  
Дата: 24.08.25 06:02
Оценка: 2 (1)
Суперски тут народ все растолковал — СПАСИБО.
Но важный для меня вопрос.
Пока я с localhost работаю на своей машине — я могу в клиент-серверной архитектуре изгаляться как угодно.
Но ведь студентам интересно будет переслать файлы друг другу на машины.
Это ж ip надо конкретное знать.
Тут я краем уха читал, что ip (помимо 127) еще как-то расклассифицированы — для локальных сетей, например.
Но пока подробностей не знаю.

А студентов удобно разбить на пары — и пусть изгаляются.
Сначала один будет сервером, потом другой.
И при каждой смене ролей — какая-нить дополнительная примочка.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: ну, и вопрос еще
От: Stanislaw K СССР  
Дата: 24.08.25 06:21
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Суперски тут народ все растолковал — СПАСИБО.

LVV>Но важный для меня вопрос.
LVV>Пока я с localhost работаю на своей машине — я могу в клиент-серверной архитектуре изгаляться как угодно.
LVV>Но ведь студентам интересно будет переслать файлы друг другу на машины.
LVV>Это ж ip надо конкретное знать.

Это просто. над каждым местом повесить лист с адресом. по порядку — 127.0.0.1, 127.0.0.2, 127.0.0.3...

хотя это, наверное, просто, лучше так: 127.26.73.4 127.16.48.31 127.45.91.0 127.58.23.255..

LVV>Тут я краем уха читал, что ip (помимо 127) еще как-то расклассифицированы — для локальных сетей, например.

LVV>Но пока подробностей не знаю.
Все проблемы от жадности и глупости
Re[2]: Сетевое программирование
От: LaptevVV Россия  
Дата: 24.08.25 06:22
Оценка:
LVV>>Пара книжек есть: Таненбаум и Олиферы.
LVV>>Вроде все, что там без программирования нужно рассказать — там есть.
С>Возьмите старую книжку "TCP/IP крупным планом", она была где-то на старом Citforum. Базовые вещи про маршрутизацию в ней рассказаны.
Спасибо. Нашел.
С>Пусть напишут чатик на TCP, под винду, под линукс, снаала с select, затем с WSA(не помню как его там) и с poll. Пусть передадут файл через TCP, измеряя скорость передачи. Пусть допишут к чатику функцию поиска иных экземпляров чата в локальной сети, через broadcast UDP, ну и разумеется функцию отклика на broadcast. И возьмите какую-нибудь популярную библиотеку для С++ или что вы им преподаёте, boost.asio или libuv для голого С, и пусть на них сделают то же самое. Пусть заодно научатся отличать listen на 0.0.0.0 и на конкретном интерфейсе.
Спасибо!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Сетевое программирование
От: Miroff Россия  
Дата: 24.08.25 06:59
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Пара книжек есть: Таненбаум и Олиферы.


Не смущает, что они на четверть века устарели?

LVV>Но практика вызывает у меня вопросы.

LVV>Непонятно, с чего начинать и чем заканчивать.

Начать с физического уровня: модуляция, полоса пропускания, теорема Котельникова-Найквиста, контроль четности. И дальше по модели OSI вверх. Если есть электронная лаба -- прекрасно: два микроконтроллера, кусок провода и вперед, писать приемник и передатчик. До студентов через руки дойдет почему что такое IP, чем TCP отличается от UDP и зачем нужен CAN.

Заканчивать кастомным протоколом прикладного уровня. Типа протокола синхронизации состояния в реальном времени для многопользовтельской онлайн игры, устойчивого к потере пакетов и замены порядка пакетов.

LVV>Но студенты зададут вопрос: а зачем nginx, IIS и прочие всякие апачи, если сервер надо писать самим?


Справедливый вопрос. В индустрии, HTTP сервер не нужно писать самому практически никогда. Поэтому и причин учить студентов этому нет.
Re[2]: Сетевое программирование
От: LaptevVV Россия  
Дата: 24.08.25 07:25
Оценка:
LVV>>Пара книжек есть: Таненбаум и Олиферы.
M>Не смущает, что они на четверть века устарели?
1. А я откуда об этом знаю?
2. Таненбаум Компьютерные сети у меня 2016 года
3. Почему старая книжка Стивенса по сетевому программирования не устарела еще, а Таненбаум устарел ?

LVV>>Но практика вызывает у меня вопросы.

LVV>>Непонятно, с чего начинать и чем заканчивать.
M>Начать с физического уровня: модуляция, полоса пропускания, теорема Котельникова-Найквиста, контроль четности. И дальше по модели OSI вверх. Если есть электронная лаба -- прекрасно: два микроконтроллера, кусок провода и вперед, писать приемник и передатчик. До студентов через руки дойдет почему что такое IP, чем TCP отличается от UDP и зачем нужен CAN.
В стандарте Программной инженерии физики нет вообще.

M>Заканчивать кастомным протоколом прикладного уровня. Типа протокола синхронизации состояния в реальном времени для многопользовтельской онлайн игры, устойчивого к потере пакетов и замены порядка пакетов.


LVV>>Но студенты зададут вопрос: а зачем nginx, IIS и прочие всякие апачи, если сервер надо писать самим?

M>Справедливый вопрос. В индустрии, HTTP сервер не нужно писать самому практически никогда. Поэтому и причин учить студентов этому нет.
Типа автор nginx сам всему этому научился ?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Сетевое программирование
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.08.25 16:35
Оценка: +3
Здравствуйте, Miroff, Вы писали:

M>Начать с физического уровня: модуляция, полоса пропускания, теорема Котельникова-Найквиста, контроль четности. И дальше по модели OSI вверх. Если есть электронная лаба -- прекрасно: два микроконтроллера, кусок провода и вперед, писать приемник и передатчик. До студентов через руки дойдет почему что такое IP, чем TCP отличается от UDP и зачем нужен CAN.


Зачем?

Есть шутливый RFC о передаче IP-пакетов с почтовыми голубями: https://www.rfc-editor.org/rfc/rfc1149

Шутка-шуткой, но так тоже можно. Предлагаешь заодно в курс сетевого программирования включить изучение биологии голубей?

IP прекрасен тем, что достаточно мало зависит от среды передачи. Я думаю, эту часть вопроса можно пропустить.

Для продвинутых можно обсудить packet loss в wifi и связанные с этим особенности мултикастинга. Но может и не стоит в это углубляться.

M>Справедливый вопрос. В индустрии, HTTP сервер не нужно писать самому практически никогда. Поэтому и причин учить студентов этому нет.


HTTP — это очень базовый протокол для современного интернета. Очень хорошо было бы знать, как он устроен и почему именно так. А лучший способ это понять — попробовать самому. Поэтому не соглашусь, сделать свою реализацию на сокетах — весьма осмысленное упражнение.
Re[3]: Сетевое программирование
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.08.25 16:39
Оценка: 19 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>>>Но студенты зададут вопрос: а зачем nginx, IIS и прочие всякие апачи, если сервер надо писать самим?

M>>Справедливый вопрос. В индустрии, HTTP сервер не нужно писать самому практически никогда. Поэтому и причин учить студентов этому нет.
LVV>Типа автор nginx сам всему этому научился ?

Мне типа в опенсорсных проектах 2020-го года пришлось написать HTTP-клиента. Не потому, что я всегда всё пишу сам и не доверяю сторонним библиотекам, а потому, что выбора не было (я долго отлынивал от этого поворота судьбы). Причем один из проектов на Go, а вот жеж всё равно пришлось полклиента руками написать, несмотря на прекрасную библиотечную реализацию.
Re: Сетевое программирование
От: Janus Россия  
Дата: 24.08.25 21:48
Оценка: +2
Здравствуйте, LaptevVV, Вы писали:



LVV>В общем, основной вопрос: чего давать в лабах.


Модель osi . 90% программистов очень далеки от ее понимания.
... Хорошо уметь читать между строк. Это иногда
приносит большую пользу
Re[2]: ну, и вопрос еще
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 24.08.25 22:09
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Это ж ip надо конкретное знать.


Ну, запускаешь на локальной машине ipconfig, он тебе выдаст всю сетевую конфигурацию, на ВУЗовских компах, думаю, немного будет, это у меня пара десятков различных сетевых интерфейсов для всяких виртуалок и пр
Вот этот IP коллеге у нужно сказать для подключения к твоему компу


LVV>Тут я краем уха читал, что ip (помимо 127) еще как-то расклассифицированы — для локальных сетей, например.


Раньше были классы сетей — A, B, C. 192.168... — это C, предназначена для частных локалок, сейчас сети бесклассовые, всё определяется маской подсети
Маньяк Робокряк колесит по городу
Re[2]: Сетевое программирование
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.08.25 22:16
Оценка:
Здравствуйте, Janus, Вы писали:

LVV>>В общем, основной вопрос: чего давать в лабах.


J>Модель osi . 90% программистов очень далеки от ее понимания.


Она слишком академичная. Стек TCP/IP плохо на неё ложится.
Re[2]: ну, и вопрос еще
От: PlushBeaver  
Дата: 25.08.25 21:04
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>А студентов удобно разбить на пары — и пусть изгаляются.

LVV>Сначала один будет сервером, потом другой.
LVV>И при каждой смене ролей — какая-нить дополнительная примочка.

Не делайте этого! Один из пары будет гирей на ноге другого. Как отвечал в другом разделе — дайте готовые ответные части.
Такое упражнение стоит дать раз-другой и уже после освоения базы, чтобы они научились описывать друг другу протокол и разбираться, что же на самом деле шлет другая сторона.
Например, дома сделать клиент/сервер и описание протокола, потом вслепую во избежание мордобития раздать чужие описания и exe, задача — написать сервер/клиент.
Re: Сетевое программирование
От: landerhigh Пират  
Дата: 25.08.25 22:54
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

LVV>1. С++. Стандартной библиотеки нет.


asio практически стандарт.

LVV>В общем, основной вопрос: чего давать в лабах.


Беда, на самом деле.
Есть предпололжение, что среди группы будет несколько студентов, которым не надо объяснять, чем отличается UDP от IP (pun intended).
Их я бы отвел тихо в сторонку и задал бы сразу писать курсач по теме "реализация системы доставки сообщений с низкой задержкой и высокой надежностью посредством протокола UDP" (да, пусть пишут лайтовый вариант LBM). И чтобы даже на лекции по предмету не ходили, иначе остальным обломают желание что-то учить и делать.

А для оставшихся вот этот план выглядит неплохо
Автор: Pzz
Дата: 23.08 19:48
.
Re: Сетевое программирование
От: mrTwister Россия  
Дата: 26.08.25 08:21
Оценка:
Здравствуйте, LaptevVV, Вы писали:

ИМХО сокеты — это не сетевое программирование, это прикладной уровень. Сетевое программирование — это DPDK, eBPF и пр.
лэт ми спик фром май харт
Re[2]: Сетевое программирование
От: mrTwister Россия  
Дата: 26.08.25 08:29
Оценка: +1
Здравствуйте, Pzz, Вы писали:

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


Про маршрутизацию не хватает: OSPF, BGP
лэт ми спик фром май харт
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.