network programming

xoki87

сорри за баян, интересно мнение бывалых прогеров. Заинтересовался я сабжем, но программированием никогда сильно не увлекался. Встал вопрос с чего начинать изучеие. Начать с общего описания разных протоколов а затем уже переходить на конкретный язык или сразу писать по ходу разбираясь в различных протоколах?

Dasar

имхо, нет такой области как network programming. В том смысле, что рассмотреть такое направление, конечно, можно, но при этом сложно будет в нем выделить основные задачи и подходы.
Есть две более частные области:
1. распределенные вычисления
2. подключение к удаленным сервисам
Соответственно, в первом случае стоит ботать идеологию распределенных вычислений,
во втором случае, стоит изучать основные протоколы по которым происходит взаимодействия с сервисами (сейчас это http, rest, json, xml, web services, soap)
ps
также network programming тесно связан с многопоточным программированием, и второе желательно заботать и понимать, если хочется не только клиентские части писать, но и серверные.

Dasar

еще можно выделить направление в виде построения p2p-сетей.
Здесь стоит изучать идеологию построения таких сетей и способы обхода NAT-а.

vall

в какие-то дебри ты уже залез, человек же написал что программированием никогда сильно не увлекался.
тут нужно для начала получить базовые знания о устройстве сетевого стэка, его программных интерфейсах и варианты устройства сетевых серверов и существующие актуальные реализации.

yroslavasako

имхо сетевое программирование стоит начинать с racing conditions и программировании многопоточных приложений

Ivan8209

"Сетевое программирование" надо начинать изучать с вопроса, что
именно под этим понимает спрашивающий. А многопоточное
программирование надо слать в топку до поры до времени.
---
"Мой диалектический метод по своей основе не только отличается
от гегелевского, но является прямой его противоположностью."

Dasar

в какие-то дебри ты уже залез, человек же написал что программированием никогда сильно не увлекался.
имхо, в любом случае стоит идти от решаемых задач, а не от технических возможностей.
Соответственно, я перечислил возможные варианты решаемых задач при использовании network programming

vall

Не стоит решать задачи не имея нормального бакграунда. Иначе в результате всегда получается фигня и рождается ещё один миф про магические основы мироздания.
ты перескочил пару-тройку ступеней технологий и знаний

Anturag

Заинтересовался я сабжем, но программированием никогда сильно не увлекался.
И, хочешь увлечься программированием (network programming) или нет?
Встал вопрос с чего начинать изучеие.
Что именно «увлекает» тебя в сетевом программировании? Драйвера, протоколы, инструменты или приложения?
Начать с общего описания разных протоколов а затем уже переходить на конкретный язык или сразу писать по ходу разбираясь в различных протоколах?
Если ты хочешь просто писать сетевые приложения под Unix, то достаточно будет заботать Richard Stevens, TCP-IP Illustrated, Volume 1 и UNIX Network Programming, Volume 1.

Anturag

имхо сетевое программирование стоит начинать с racing conditions и программировании многопоточных приложений
 :shocked: :confused: :crazy: :facepalm:

xoki87

интересует написание сетевых прилжений

erotic

Встал вопрос с чего начинать изучеие.
Рискну навлечь на себя гнев высказавшихся выше, как правильно это делать, но я бы начал с того, что поставил бы себе модельную задачку - например, сделать консольный чатик - и решил бы ее.

Ivan8209

Сетевых приложений в каком смысле?
Конкретнее, от этого зависит правильный ответ, так как единого
"сетевого программирования" нет. Может быть, тебе нужно всего
лишь изучить какой-нибудь Twisted, а не Стивенса читать.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

Dasar

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

Anturag

интересует написание сетевых прилжений
Хорошо, теперь по вкусу надо выбрать следующее — под какую операционку, на каком языке программирования, какой протокол application layer'а всего более интересен, и, ответив на эти вопросы, пишешь простейший сервер и клиент, общающиеся путём выбранного application layer, реализованного на выбранном языке программирования, работающие на выбранной операционке. Попутно можно поискать готовые решения и поисследовать их исходные коды, понять, почему оно работает как нужно, попробовать слегка поменять код и посмотреть, как меняется поведение клиента и сервера. Да, и нужно хорошо освоить инструменты дампа сетевого траффика.
Если начнёшь выполнять такую задачу и будешь по ходу выявлять и изучать всё недостающее из сопутствующей твоему случаю справочной литературы, то, когда решишь задачу, будешь в выбранной подобласти неплохо разбираться.

xoki87

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

agaaaa

Короче, напиши, что конкретно ты хочешь сделать, мы тебе порекомендуем стек технологий и соответствующую литературу.

Ivan8209

> язык спп, операционка - не принципиально, есть и мак и юникс и винда,
> а вот в протоколах я не в зуб ногой
На язык, операционку и протоколы --- покласть.
Ты объясни по-русски: что именно ты хочешь?
Уметь общаться с "фейсбуками?"
Уметь общаться с телефонами?
Уметь общаться с маршрутизаторами?
Уметь маршрутизировать самому?
---
A44: Ламеры в гамаке пусть в тапках трахаются --- это их проблемы.
Я в своём гамаке хочу полноценно трахаться на лыжах.

Anturag

язык спп, операционка - не принципиально, есть и мак и юникс и винда
Но выбрать для начала какой-то один набор нужно. Например, если C и Unix, то начни читать Стивенса, те две книжки, что рекомендовал выше.
а вот в протоколах я не в зуб ногой
В TCP/IP Illustrated, Volume 1 в частности описываются такие application layer protocol'ы: Telnet/Rlogin, FTP, SMTP, DNS, TFTP, BOOTP, SNMP и даже ONC RPC. Этого будет даже более чем достаточно для начала. Потом можно самостоятельно и за HTTP взяться :)
Да, ещё один момент чуть не забыл, по большому счёту большинство протоколов очень тщательно и детально описаны в RFC'ях, если попутно к задаче или в процессе изучения возникают какие-то вопросы, то нужно не лениться открывать и читать соответствующие RFC, хочу заметить, что это достаточно приятное чтиво, но и тут есть нюанс, солидная часть документов RFC устарела.

yroslavasako

Сетевое программирование есть частный случай многопоточного, когда средства межпроцессного взаимодействия ограничены сокетами.
Кстати, тут есть теорминимум, с которым вроде большая часть раздела согласна:

Ivan8209

> Сетевое программирование есть частный случай многопоточного,
Сетевое программирование никак не соотносится с многопоточным.
Стивенса тоже читать не надо, пока не прояснили, что же
называется сетевым программированием.
И этот "теорминимум," он, конечно, содержит какие-то хорошие вещи,
но в довесок к ним содержит кучу откровенной ерунды, наподобие
"Thrift" или "Protocol buffers," а уж некоторые вещи совсем не
нужны для "сетевого программирования" в каком-либо виде.
Некоторые вещи даже откровенно вредны для любого вида программирования.
---
Q26: а вот в линухе провалилась эпопея с XXX и её из главветки убрали...
A26: я с самого начала считал её неудачным схемным реЩением!
да и не юзал никогда. мамой клянусь!

Ivan8209

> Telnet/Rlogin, FTP, SMTP, DNS, TFTP, BOOTP, SNMP и даже ONC RPC.
Всё это просто офигительно нужные протоколы для начинающего программиста.
Особенно rlogin.
> но и тут есть нюанс, солидная часть документов RFC устарела.
Почему бы тогда не посоветовать ещё и документы CCITT/ITU? Или ещё 3GPP?
---
Q51: Hарод, а вы стабильным софтом пользоваться не пробовали?
A51: Пробовали, но мэйнфреймы с дизель-генераторами не везде есть.

okis

Стоит также учесть, что он был составлен некоторое время назад
Удельный вес плюсового задротства со временем падает, появилось несколько других более годных языков
ExtJS в веба нужно заменить на Angular
php хитрости тоже не нужны, это уже лигаси

Anturag

Сетевое программирование есть частный случай многопоточного, когда средства межпроцессного взаимодействия ограничены сокетами.
Нет, при ограничении на user space/virtual memory per process межпроцессное взаимодействие (multitasking) не является частным случаем и не выводится из многопоточного взаимодействия (multithreading а наоборот верно, потоки суть процессы в контексте shared memory, но отношения к сетевому программированию тут никакого нет. Сетевое программирование — это разработка и отчасти использование протоколов передачи данных.

Anturag

> Telnet/Rlogin, FTP, SMTP, DNS, TFTP, BOOTP, SNMP и даже ONC RPC.
Всё это просто офигительно нужные протоколы для начинающего программиста.
Особенно rlogin.
Да, это офигительно нужные протоколы для изучения начинающим сетевым программистом, который хочет в дальнейшем специализироваться на разработке собственных протоколов в application layer'е.
Почему бы тогда не посоветовать ещё и документы CCITT/ITU? Или ещё 3GPP?
Слишком узкоспециально и менее общедоступно.

Ivan8209

> Сетевое программирование - это разработка и отчасти
> использование протоколов передачи данных.
Это --- твоё понимание. Но даже для этого совершенно не нужно
знать работу rlogin и SMTP, так как для "разработки протокола
передачи данных" достаточно написать схему ASN.1, договориться
о кодировании и о том, как передаются запросы и ответы
(сколько каналов используется, синхронно или асинхронно, BER,
PER или XER). Но "тонкости"-то возникают именно из-за того,
что ASN.1 придумали слишком поздно, а общаться надо по уже
существующим протоколам, которые почти всегда плохо разработаны,
плохо формализованы и плохо реализованы.
---
"Мы диалектику учили не по Гегелю.
Бряцанием боёв она врывалась в стих..."

Ivan8209

>>> Telnet/Rlogin, FTP, SMTP, DNS, TFTP, BOOTP, SNMP и даже ONC RPC.

>> Всё это просто офигительно нужные протоколы для начинающего программиста.
>> Особенно rlogin.
> Да, это офигительно нужные протоколы для изучения начинающим
> сетевым программистом, который хочет в дальнейшем
> специализироваться на разработке собственных протоколов в
> application layer'е.
За одним небольшим исключением (SNMP все упомянутые протоколы
должны уйти в топку, вместе с их проектировщиками. Учиться на
мёртвых протоколах (rlogin, ONC RPC) и протоколах, не разделяющих
кодирование и смысловую часть (особенно касается DNS это
не просто бесполезно, это вредно. Это, в частности, один из прямых
путей к индусячеству.
>> Почему бы тогда не посоветовать ещё и документы CCITT/ITU? Или ещё 3GPP?
> Слишком узкоспециально и менее общедоступно.
Знание ASN.1 куда лучше для разработчика протоколов, чем всё то
барахло, которым являются, в основном, RFC. В особенности ---
протоколы из RFC небольших номеров, такие, как: DNS, RLOGIN, TELNET,
FTP, SMTP, TFTP, BOOTP, DHCP, HTTP, IMAP. Список можно продолжать долго.
---
"Истина грядёт --- её ничто не остановит!"

Anturag

достаточно написать схему ASN.1
Отличный инструмент для дизайна протоколов, но не уверен, что прямо с него стоит начинать изучение предмета, тем более, как ты заметил, далеко не все популярные протоколы основаны на нём. Внимательный читатель у Стивенса в главе про SNMP найдёт краткое описание ASN.1 и BER с ссылкой на Rose & McCloghrie RFC 1155, а оттуда и на ISO 8824.

Anturag

Знание ASN.1 куда лучше для разработчика протоколов, чем всё то
барахло, которым являются, в основном, RFC. В особенности ---
протоколы из RFC небольших номеров, такие, как: DNS, RLOGIN, TELNET,
FTP, SMTP, TFTP, BOOTP, DHCP, HTTP, IMAP. Список можно продолжать долго.
Да, но все эти протоколы объективно популярно используются и поддерживаются, закрывать глаза на них или пренебрегать их изучением для специалиста — непрактичный снобизм.

agaaaa

Слишком узкоспециально
LOL
Вроде 3GPP не более специфичен, чем твои протоколы, просто находится на более низком уровне стека.

Anturag

Вроде 3GPP не более специфичен, чем твои протоколы, просто находится на более низком уровне стека.
Во-первых, протоколы не мои. Во-вторых, после выяснения предпочтений топик-стартера, в этом треде я употребил словосочетание ¨application layer¨ 4 раза, да, уже 5 раз.

Ivan8209

> Да, но все эти протоколы объективно популярно используются и поддерживаются
Это rlogin-то? Кем и как он поддерживается?
В ваших линуксах он вообще к базовой системе прилагается?
Или же его только руками можно доставить? (Если вообще
скомпилированный бывает...)
BOOTP "используется и поддерживается" только потому, что он встроен в DHCP.
TFTP "используется и поддерживается" только потому, что он тоже,
в некотором смысле, "встроен в DHCP".
От FTP все постепенно избавляются уже много лет,
сейчас уже и от HTTP начали избавляться в пользу HTTPS.
DNS, SMTP, POP3 и IMAP существуют только потому, что это ранние системы,
которые когда-то захватили площадь, и только поэтому их трудно вычистить.
Причём почтовые протоколы постепенно отмирают в пользу чуть
более универсального HTTP. Вдобавок, ещё и чуть лучше расширяемого.
Что касается "непрактичности," изначально ты утверждал, что
сетевое программирование --- это разработка протоколов и только
изредка использование готовых. Изучать изредка используемые
протоколы, причём спроектированные, по нынешним временам,
отвратительно, это глупость. Либо же глупостью было твоё
определение сетевого программирования.
---
"Мы диалектику учили не по Гегелю.
Бряцанием боёв она врывалась в стих..."

Ivan8209

> Внимательный читатель у Стивенса в главе про SNMP найдёт
> краткое описание ASN.1 и BER с ссылкой на Rose & McCloghrie
> RFC 1155, а оттуда и на ISO 8824.
К сведению, внимательный человек, не обязательно читавший Стивенса,
может просто пойти и узнать, какая организация выпустила стандарты
про ASN.1 и кодирование соответствующих данных. (Нет, это не IETF
и не ISO.)
---
"Прогресс науки обратно пропорционален числу выходящих журналов."

ppplva

BOOTP "используется и поддерживается" только потому, что он встроен в DHCP.
TFTP "используется и поддерживается" только потому, что он тоже,
в некотором смысле, "встроен в DHCP".
Но при этом они используются и поддерживаются. А FTP я вообще последний раз использовал сегодня.
И то что они хреновые - это не просто так и не случайность. Заметь, хреновых протоколов значительно больше чем хороших, считай хоть по штукам, хоть по популярности.
Можно конечно посмотреть на какой-то идеальный протокол в вакууме для обучения, но потом все равно следует заботать весь тот шлак на котором стоит интернет, потому что это то, что выживает на практике.

Ivan8209

> Но при этом они используются и поддерживаются.
Они поддерживаются только постольку, поскольку.
В частности, поскольку используются в довольно частных сценариях.
> А FTP я вообще последний раз использовал сегодня.
Я тоже его использую. Но всё это очень старые службы
с двадцатилетней историей, а новые службы работают через HTTP, все.
---
"И опыт, сын ошибок трудных, и гений, парадоксов друг..."

kusto

Помнится, программистам-заочникам в одном заборостроительном вузе на 4 курсе давали задачи из разряда "реализовать обмен данными по SMTP" и т.п.

stm6692945

автору я советую ботать то что нужно под текущую задачу
когда то я был молод и юн и думал заботать все яву
я заботал много чего и 98% из этого вообще никода не пригодилось.
Учи то что нужно для текущей задачей
остальное все тлен

stm5872449

Учи то что нужно для текущей задачей
остальное все тлен
Это ты сейчас поделился типа историей успеха?

6yrop

наоборот, он же написал: его действия оказались ошибочны, но теперь у него есть очередная теория как надо правильно.

xoki87

наро, народ!
прошу не вдаваться в такие детали, все что вы написали - это круто, я тоже хочу рабираться во всем этом .,но вопрос в другом. а именно, просто начать читать того де стрвенса, или же сначала начать прогать и по ходу осваивать теории по различным сетям.

Ivan8209

Тебе нужно определиться, что именно ты хочешь.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

Serab

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

hillout

для начала можно попробовать
http://www.coursera.org/course/comnetworks
http://www.coursera.org/course/posa

Ushkvarok

или же сначала начать прогать и по ходу осваивать теории по различным сетям
начинай сразу, но правильно, вот например:
http://learnyousomeerlang.com
Оставить комментарий
Имя или ник:
Комментарий: