Как я могу научиться действительно низкоуровневому сетевому программированию? - PullRequest
26 голосов
/ 05 июня 2009

Итак, я хочу узнать все о сетях. Хорошо ниже розетки, вплоть до сырых розеток и прочего. И я хочу понять концентраторы, маршрутизаторы, точки доступа и т. Д. Например, я хотел бы иметь возможность писать свое собственное программное обеспечение для такого рода вещей. * Есть ли отличный источник для такого рода информации?

Я знаю, что здесь я спрашиваю МНОГО, и что для полного объяснения всего этого требуется от высокого уровня до низкого уровня. Я предполагаю, что ищу источник, похожий по объему и глубине на Прикладная криптография , но о сетях.

Спасибо всем, кто может помочь направить меня (и других, как я?) В правильном направлении.

* Да, я понимаю, что использование любого из моих кодов сетевого стека, созданного вручную, было бы огромной проблемой безопасности, и я только собираюсь сделать это, чтобы узнать:)

Аналогичный вопрос: здесь . Однако я ищу больше, чем просто «что находится ниже сокетов TCP / UDP?».

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

Ответы [ 11 ]

18 голосов
/ 05 июня 2009

Я изучил IP-сеть из Иллюстрированный TCP / IP . Настоятельно рекомендуется.

13 голосов
/ 05 июня 2009

Это может не помочь вам изучить его, но анализатор пакетов, такой как Wireshark , даст вам некоторое представление о том, как выглядят данные при довольно низкоуровневом протоколе (TCP / IP).

8 голосов
/ 05 июня 2009

Как вы, очевидно, поняли, юниверс не начинается и не заканчивается протоколом IP. Взгляните на OSI 7 Layer Model , где IP - это протокол уровня 3 (сети). Обычные IP-маршрутизаторы будут работать на этом уровне, но есть большая сложность, которую вы, вероятно, должны понять на канальном и физическом уровнях, прежде чем начинать кодировать собственные сетевые стеки.

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

6 голосов
/ 05 июня 2009

Материалы CISCO CCNA содержат отличные основы сети, но не влияют на программный аспект. Я не уверен, что есть официальная бесплатная ссылка, но вы можете попытаться найти их.

4 голосов
/ 05 июня 2009

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

Обратите внимание, что приступить к работе нелегко, и в итоге я прочитал таблицу данных CS8900 IC, чтобы узнать, как заставить его взаимодействовать с процессором на базе ARM7. Но если вам нравятся такие вещи (как и мне), то это очень весело.

3 голосов
/ 05 июня 2009

Хммм ... Вы смотрели в Компьютерные сети от Таненбаума?

2 голосов
/ 13 июня 2009

Я нашел очень полезной главу по сетям в «понимании ядра Linux» и «понимании внутренних компонентов сети Linux» от oreilly.

Стек TCP / IP - очень хорошее начало, но есть еще много и хорошее понимание того, как работает ethernet и как ethernet! = IP! = Межсетевое взаимодействие будет иметь большое значение.

книги по сетевой безопасности часто делают приличную, если не упитанную работу, объясняя, как сети работают в кратком контексте.

что действительно помогло мне, приняв работу по внедрению NAT :)

2 голосов
/ 05 июня 2009

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

http://snap.nlc.dcccd.edu/learn/fuller3/chap13/chap13.html

У меня было еще несколько ссылок в моем восхитительном аккаунте, но все они пошли вниз по цифровому каналу; -)

1 голос
/ 28 января 2014

Проверьте это .. это хороший сбор информации: http://www.tcpipguide.com/free/t_toc.htm

1 голос
/ 13 июня 2009

Этот курс работал для меня: COS 461 в Принстоне . Обратите внимание, что он предполагает опыт программирования на уровне системы с C.

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

...