network programming
Есть две более частные области:
1. распределенные вычисления
2. подключение к удаленным сервисам
Соответственно, в первом случае стоит ботать идеологию распределенных вычислений,
во втором случае, стоит изучать основные протоколы по которым происходит взаимодействия с сервисами (сейчас это http, rest, json, xml, web services, soap)
ps
также network programming тесно связан с многопоточным программированием, и второе желательно заботать и понимать, если хочется не только клиентские части писать, но и серверные.
Здесь стоит изучать идеологию построения таких сетей и способы обхода NAT-а.
тут нужно для начала получить базовые знания о устройстве сетевого стэка, его программных интерфейсах и варианты устройства сетевых серверов и существующие актуальные реализации.
имхо сетевое программирование стоит начинать с racing conditions и программировании многопоточных приложений
именно под этим понимает спрашивающий. А многопоточное
программирование надо слать в топку до поры до времени.
---
"Мой диалектический метод по своей основе не только отличается
от гегелевского, но является прямой его противоположностью."
в какие-то дебри ты уже залез, человек же написал что программированием никогда сильно не увлекался.имхо, в любом случае стоит идти от решаемых задач, а не от технических возможностей.
Соответственно, я перечислил возможные варианты решаемых задач при использовании network programming
ты перескочил пару-тройку ступеней технологий и знаний
Заинтересовался я сабжем, но программированием никогда сильно не увлекался.И, хочешь увлечься программированием (network programming) или нет?
Встал вопрос с чего начинать изучеие.Что именно «увлекает» тебя в сетевом программировании? Драйвера, протоколы, инструменты или приложения?
Начать с общего описания разных протоколов а затем уже переходить на конкретный язык или сразу писать по ходу разбираясь в различных протоколах?Если ты хочешь просто писать сетевые приложения под Unix, то достаточно будет заботать Richard Stevens, TCP-IP Illustrated, Volume 1 и UNIX Network Programming, Volume 1.
имхо сетевое программирование стоит начинать с racing conditions и программировании многопоточных приложений
интересует написание сетевых прилжений
Встал вопрос с чего начинать изучеие.Рискну навлечь на себя гнев высказавшихся выше, как правильно это делать, но я бы начал с того, что поставил бы себе модельную задачку - например, сделать консольный чатик - и решил бы ее.
Конкретнее, от этого зависит правильный ответ, так как единого
"сетевого программирования" нет. Может быть, тебе нужно всего
лишь изучить какой-нибудь Twisted, а не Стивенса читать.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Не стоит решать задачи не имея нормального бакграунда. Иначе в результате всегда получается фигня и рождается ещё один миф про магические основы мироздания.При обратном подходе (начинании с основ) чаще всего вообще ничего не появляется, потому что мотивация умирает почти сразу.
интересует написание сетевых прилженийХорошо, теперь по вкусу надо выбрать следующее — под какую операционку, на каком языке программирования, какой протокол application layer'а всего более интересен, и, ответив на эти вопросы, пишешь простейший сервер и клиент, общающиеся путём выбранного application layer, реализованного на выбранном языке программирования, работающие на выбранной операционке. Попутно можно поискать готовые решения и поисследовать их исходные коды, понять, почему оно работает как нужно, попробовать слегка поменять код и посмотреть, как меняется поведение клиента и сервера. Да, и нужно хорошо освоить инструменты дампа сетевого траффика.
Если начнёшь выполнять такую задачу и будешь по ходу выявлять и изучать всё недостающее из сопутствующей твоему случаю справочной литературы, то, когда решишь задачу, будешь в выбранной подобласти неплохо разбираться.
вот, теперь то самое интересное и начинается, язык спп, операционка - не принципиально, есть и мак и юникс и винда, а вот в протоколах я не в зуб ногой
Короче, напиши, что конкретно ты хочешь сделать, мы тебе порекомендуем стек технологий и соответствующую литературу.
> а вот в протоколах я не в зуб ногой
На язык, операционку и протоколы --- покласть.
Ты объясни по-русски: что именно ты хочешь?
Уметь общаться с "фейсбуками?"
Уметь общаться с телефонами?
Уметь общаться с маршрутизаторами?
Уметь маршрутизировать самому?
---
A44: Ламеры в гамаке пусть в тапках трахаются --- это их проблемы.
Я в своём гамаке хочу полноценно трахаться на лыжах.
язык спп, операционка - не принципиально, есть и мак и юникс и виндаНо выбрать для начала какой-то один набор нужно. Например, если C и Unix, то начни читать Стивенса, те две книжки, что рекомендовал выше.
а вот в протоколах я не в зуб ногойВ TCP/IP Illustrated, Volume 1 в частности описываются такие application layer protocol'ы: Telnet/Rlogin, FTP, SMTP, DNS, TFTP, BOOTP, SNMP и даже ONC RPC. Этого будет даже более чем достаточно для начала. Потом можно самостоятельно и за HTTP взяться
Да, ещё один момент чуть не забыл, по большому счёту большинство протоколов очень тщательно и детально описаны в RFC'ях, если попутно к задаче или в процессе изучения возникают какие-то вопросы, то нужно не лениться открывать и читать соответствующие RFC, хочу заметить, что это достаточно приятное чтиво, но и тут есть нюанс, солидная часть документов RFC устарела.
Кстати, тут есть теорминимум, с которым вроде большая часть раздела согласна:
Сетевое программирование никак не соотносится с многопоточным.
Стивенса тоже читать не надо, пока не прояснили, что же
называется сетевым программированием.
И этот "теорминимум," он, конечно, содержит какие-то хорошие вещи,
но в довесок к ним содержит кучу откровенной ерунды, наподобие
"Thrift" или "Protocol buffers," а уж некоторые вещи совсем не
нужны для "сетевого программирования" в каком-либо виде.
Некоторые вещи даже откровенно вредны для любого вида программирования.
---
Q26: а вот в линухе провалилась эпопея с XXX и её из главветки убрали...
A26: я с самого начала считал её неудачным схемным реЩением!
да и не юзал никогда. мамой клянусь!
Всё это просто офигительно нужные протоколы для начинающего программиста.
Особенно rlogin.
> но и тут есть нюанс, солидная часть документов RFC устарела.
Почему бы тогда не посоветовать ещё и документы CCITT/ITU? Или ещё 3GPP?
---
Q51: Hарод, а вы стабильным софтом пользоваться не пробовали?
A51: Пробовали, но мэйнфреймы с дизель-генераторами не везде есть.
Удельный вес плюсового задротства со временем падает, появилось несколько других более годных языков
ExtJS в веба нужно заменить на Angular
php хитрости тоже не нужны, это уже лигаси
Сетевое программирование есть частный случай многопоточного, когда средства межпроцессного взаимодействия ограничены сокетами.Нет, при ограничении на user space/virtual memory per process межпроцессное взаимодействие (multitasking) не является частным случаем и не выводится из многопоточного взаимодействия (multithreading а наоборот верно, потоки суть процессы в контексте shared memory, но отношения к сетевому программированию тут никакого нет. Сетевое программирование — это разработка и отчасти использование протоколов передачи данных.
> Telnet/Rlogin, FTP, SMTP, DNS, TFTP, BOOTP, SNMP и даже ONC RPC.Да, это офигительно нужные протоколы для изучения начинающим сетевым программистом, который хочет в дальнейшем специализироваться на разработке собственных протоколов в application layer'е.
Всё это просто офигительно нужные протоколы для начинающего программиста.
Особенно rlogin.
Почему бы тогда не посоветовать ещё и документы CCITT/ITU? Или ещё 3GPP?Слишком узкоспециально и менее общедоступно.
> использование протоколов передачи данных.
Это --- твоё понимание. Но даже для этого совершенно не нужно
знать работу rlogin и SMTP, так как для "разработки протокола
передачи данных" достаточно написать схему ASN.1, договориться
о кодировании и о том, как передаются запросы и ответы
(сколько каналов используется, синхронно или асинхронно, BER,
PER или XER). Но "тонкости"-то возникают именно из-за того,
что ASN.1 придумали слишком поздно, а общаться надо по уже
существующим протоколам, которые почти всегда плохо разработаны,
плохо формализованы и плохо реализованы.
---
"Мы диалектику учили не по Гегелю.
Бряцанием боёв она врывалась в стих..."
>> Всё это просто офигительно нужные протоколы для начинающего программиста.
>> Особенно 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. Список можно продолжать долго.
---
"Истина грядёт --- её ничто не остановит!"
достаточно написать схему ASN.1Отличный инструмент для дизайна протоколов, но не уверен, что прямо с него стоит начинать изучение предмета, тем более, как ты заметил, далеко не все популярные протоколы основаны на нём. Внимательный читатель у Стивенса в главе про SNMP найдёт краткое описание ASN.1 и BER с ссылкой на Rose & McCloghrie RFC 1155, а оттуда и на ISO 8824.
Знание ASN.1 куда лучше для разработчика протоколов, чем всё тоДа, но все эти протоколы объективно популярно используются и поддерживаются, закрывать глаза на них или пренебрегать их изучением для специалиста — непрактичный снобизм.
барахло, которым являются, в основном, RFC. В особенности ---
протоколы из RFC небольших номеров, такие, как: DNS, RLOGIN, TELNET,
FTP, SMTP, TFTP, BOOTP, DHCP, HTTP, IMAP. Список можно продолжать долго.
Слишком узкоспециальноLOL
Вроде 3GPP не более специфичен, чем твои протоколы, просто находится на более низком уровне стека.
Вроде 3GPP не более специфичен, чем твои протоколы, просто находится на более низком уровне стека.Во-первых, протоколы не мои. Во-вторых, после выяснения предпочтений топик-стартера, в этом треде я употребил словосочетание ¨application layer¨ 4 раза, да, уже 5 раз.
Это rlogin-то? Кем и как он поддерживается?
В ваших линуксах он вообще к базовой системе прилагается?
Или же его только руками можно доставить? (Если вообще
скомпилированный бывает...)
BOOTP "используется и поддерживается" только потому, что он встроен в DHCP.
TFTP "используется и поддерживается" только потому, что он тоже,
в некотором смысле, "встроен в DHCP".
От FTP все постепенно избавляются уже много лет,
сейчас уже и от HTTP начали избавляться в пользу HTTPS.
DNS, SMTP, POP3 и IMAP существуют только потому, что это ранние системы,
которые когда-то захватили площадь, и только поэтому их трудно вычистить.
Причём почтовые протоколы постепенно отмирают в пользу чуть
более универсального HTTP. Вдобавок, ещё и чуть лучше расширяемого.
Что касается "непрактичности," изначально ты утверждал, что
сетевое программирование --- это разработка протоколов и только
изредка использование готовых. Изучать изредка используемые
протоколы, причём спроектированные, по нынешним временам,
отвратительно, это глупость. Либо же глупостью было твоё
определение сетевого программирования.
---
"Мы диалектику учили не по Гегелю.
Бряцанием боёв она врывалась в стих..."
> краткое описание ASN.1 и BER с ссылкой на Rose & McCloghrie
> RFC 1155, а оттуда и на ISO 8824.
К сведению, внимательный человек, не обязательно читавший Стивенса,
может просто пойти и узнать, какая организация выпустила стандарты
про ASN.1 и кодирование соответствующих данных. (Нет, это не IETF
и не ISO.)
---
"Прогресс науки обратно пропорционален числу выходящих журналов."
BOOTP "используется и поддерживается" только потому, что он встроен в DHCP.Но при этом они используются и поддерживаются. А FTP я вообще последний раз использовал сегодня.
TFTP "используется и поддерживается" только потому, что он тоже,
в некотором смысле, "встроен в DHCP".
И то что они хреновые - это не просто так и не случайность. Заметь, хреновых протоколов значительно больше чем хороших, считай хоть по штукам, хоть по популярности.
Можно конечно посмотреть на какой-то идеальный протокол в вакууме для обучения, но потом все равно следует заботать весь тот шлак на котором стоит интернет, потому что это то, что выживает на практике.
Они поддерживаются только постольку, поскольку.
В частности, поскольку используются в довольно частных сценариях.
> А FTP я вообще последний раз использовал сегодня.
Я тоже его использую. Но всё это очень старые службы
с двадцатилетней историей, а новые службы работают через HTTP, все.
---
"И опыт, сын ошибок трудных, и гений, парадоксов друг..."
Помнится, программистам-заочникам в одном заборостроительном вузе на 4 курсе давали задачи из разряда "реализовать обмен данными по SMTP" и т.п.
когда то я был молод и юн и думал заботать все яву
я заботал много чего и 98% из этого вообще никода не пригодилось.
Учи то что нужно для текущей задачей
остальное все тлен
Учи то что нужно для текущей задачейЭто ты сейчас поделился типа историей успеха?
остальное все тлен
наоборот, он же написал: его действия оказались ошибочны, но теперь у него есть очередная теория как надо правильно.
прошу не вдаваться в такие детали, все что вы написали - это круто, я тоже хочу рабираться во всем этом .,но вопрос в другом. а именно, просто начать читать того де стрвенса, или же сначала начать прогать и по ходу осваивать теории по различным сетям.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
наро, народ!тред не читал. Перед тобой уже стоит задача? Типа написать такую-то такую-то прогу? Без этого ничего путного не выйдет.
прошу не вдаваться в такие детали, все что вы написали - это круто, я тоже хочу рабираться во всем этом .,но вопрос в другом. а именно, просто начать читать того де стрвенса, или же сначала начать прогать и по ходу осваивать теории по различным сетям.
или же сначала начать прогать и по ходу осваивать теории по различным сетямначинай сразу, но правильно, вот например:
http://learnyousomeerlang.com
Оставить комментарий
xoki87
сорри за баян, интересно мнение бывалых прогеров. Заинтересовался я сабжем, но программированием никогда сильно не увлекался. Встал вопрос с чего начинать изучеие. Начать с общего описания разных протоколов а затем уже переходить на конкретный язык или сразу писать по ходу разбираясь в различных протоколах?