Общий метод для преобразования целого числа в другое представление с другим основанием (но основание < = 10 из-за использования только цифр 0..9 для представления):
function convertIntvalToBase () # (Val Base)
{
val=$1
base=$2
result=""
while [ $val -ne 0 ] ; do
result=$(( $val % $base ))$result #residual is next digit
val=$(( $val / $base ))
done
echo -n $result
}
, например
convertIntvalToBase $ip1 2 # converts $ip1 into binary representation
Я изучил IP-сеть из TCP / IP Illustrated . Настоятельно рекомендуется.
Это может не помочь вам узнать это, но анализатор пакетов, например Wireshark даст вам некоторое представление о том, как выглядят данные в довольно низкоуровневом протоколе (TCP / IP).
Как вы, очевидно, заметили, юниверс не начинается и не заканчивается протоколом IP. Взгляните на 7-уровневую модель OSI , где IP - это протокол уровня 3 (сетевой). Обычные IP-маршрутизаторы будут работать на этом уровне, но вам, вероятно, следует понять более сложную задачу на уровнях канала передачи данных и на физическом уровне, прежде чем вы начнете кодировать свои собственные сетевые стеки.
Начните с основ передачи данных во всех ее бесчисленных формах и продвигайтесь вверх по стеку, пока не доберетесь до того места, где вам нужно остановиться. Передача данных, компьютерные сети и открытые системы - хороший фундаментальный текст, а затем ищите более подробную информацию по каждой области, на которой вам нужно сосредоточиться. Предыдущие ответы включают хорошие ссылки для IP и TCP / IP,
Материалы CISCO CCNA содержат отличные основы сети, но не влияют на аспекты программирования. Я не уверен, что есть официальная бесплатная ссылка, но вы можете попробовать их найти.
Есть ли у вас опыт программирования встраиваемых систем? В таком случае я рекомендую вам купить одну из этих плат для разработки . Они дешевы и позволяют работать со всеми частями сетевого стека, а все необходимые программные инструменты бесплатны.
Обратите внимание, что начать это непросто, и в конце концов я прочитал техническое описание микросхемы CS8900, чтобы узнать, как заставить ее взаимодействовать с процессором на базе ARM7. Но если вам нравятся подобные вещи (как и мне), тогда они очень веселые.
Вы должны вооружиться компилятором переменного тока и необходимыми библиотеками и заголовками для вашей ОС и поэкспериментировать. Вы можете прочитать, например:
http://snap.nlc.dcccd.edu/learn/fuller3/chap13/chap13.html
В моем восхитительном аккаунте было еще несколько ссылок, но все они не работали цифровой сток; -)
Я обнаружил, что главы о сетевых технологиях в "понимании ядра Linux" и "понимании внутреннего устройства сети Linux" от oreilly очень полезны.
Стек TCP / IP - это очень хорошее начало, но есть гораздо больше и хорошее понимание того, как работает Ethernet и как Ethernet! = IP! = The-interweb будет иметь большое значение.
книги по сетевой безопасности часто дают неплохую, если не сказать полезную работу, объясняя, как работают сети, в кратком контексте.
что действительно помогло мне реализовать NAT :)
Этот курс сработал для меня: COS 461 в Принстоне . Обратите внимание, что это предполагает наличие опыта программирования на системном уровне с C.
Практически все чтения и лекции доступны в Интернете в разделе «Syllabus». И вы также можете попробовать назначения (к сожалению, у вас не будет доступа к системе виртуальной сети).