Протокол TCP/IP (Transmission Control Protocol/Internet Proto-
col) является базовым транспортным сетевым протоколом в
UNIX'е. В заголовке TCP/IP пакета указывается:
IP-адрес отправителя
IP-адрес получателя
Номер порта (Фактически - номер прикладной программы,
которой этот пакет предназначен)
TCP/IP-ишные пакеты имеют интересную особенность: они способны
"добраться" до адресата, пройдя сквозь разнородные локальные
сети, используя разнообразные физические носители. "Маршрутиза-
цию" IP-пакета (переброску его в требуемую сеть) осуществляют
"на добровольных началах" компьютеры, входящие в TCP/IP сеть.
Все компютеры мира, поддерживающие протокол TCP/IP и каким-либо
образом подключенные друг к другу, образуют глобальную
всемирную сеть TCP/IP "Internet". Темпы роста "Internet":
100000 IP-адресов в месяц. В настоящий момент (конец 1994 года)
к Internet'у подключено около:
20,000 сетей
4,000,000 компьютеров
35,000,000 пользователей
Каждая машина в мире имеет свой уникальный IP-адрес.
IP-адрес - 32-битное число, которое принято записывать в сме-
шанном 16-рично-десятичном формате, в виде 4 чисел, разделенных
точками. Например:
193.124.148.73
128.8.2.1
Каждое десятичное число здесь представляет на самом деле два
шестнадцатеричных разряда. Может принимать значения от 0 до
255. Допустима также шестнадцатеричная запись:
c1.7c.94.49 или 0xC17C9449
80.08.02.01 или 0x80080201
В условиях корректно сконфигуренной локальной сети, и при усло-
вии подключения ее к всемирной сети Internet, протокол TCP/IP
позволяет вашей сетевой программе работать с ЛЮБЫМ компьютером
в мире, как если бы он находился в вашей локальной сети.
Уникальность IP-адресов поддерживается просто. Они выдаются
централизованно. Контора, которая этим занимается, называется
NIC - Network Informational Center. Европейское отделение NIC
расположено в Амстердаме. Она ВЫДАЕТ IP-адреса. В адрес NIC
нужно послать форму-запрос установленного образца, и через не-
которое время вам пришлют "пачку" IP-адресов, выделенных для
вашей сети. E-mail адрес, по которому нужно послать запрос:
hostmaster@sri-nic.net
Московский узел, раздающий IP-адреса, а так же домены *.ru
доступен по адресу
РосНИИРОС xSU/RU NetworkInformationalCenter
ncc@ripn.net или ncc@ussr.eu.net
www.ripn.net/nic/ripn-docs/
IP-сеть - "пачка" из 2**n IP-адресов, ИДУЩИХ ПОДРЯД. Самый
младший - резервируется. Этот адрес называется адресом IP-сети.
Например 128.8.0.0, или 193.125.149.64 . Адрес сети использует-
ся, когда требуется указать всю сеть целиком, например, когда
задается маршрутизация до этой сети.
Маска сети - фактически размер сети, задает число адресов в се-
ти. Задается либо количеством битов в маске сети (например 8бит
- 256 адресов, 6 бит - 64 адреса), либо битовой маской вида
b'111...11100...00'
число^^ ^^ битов
которую тоже принято записывать в десятично-побайтной записи,
например:
255.255.255.192 - маска на 64 адреса
255.255.255.0 - маска на 256 адресов
255.255.0.0 - маска на 64Kb адресов
Broadcast адрес сети - самый старший адрес в сети. Резерви-
руется для передачи сообщений типа "все-всем-всем" (в сети).
128.8.255.255
Сети делятся на классы:
Класс A. "Огромные" сети.
Адреса этих сетей лежат в промежутке: 1 - 126.
Маска сети: 255.0.0.0
Содержит до 16387064 адресов (256*256*256).
Адреса хостов в этих сетях вида: 125.*.*.*
Класс B. "Средние" сети.
Адреса этих сетей лежат в промежутке: 128.0 - 191.255
Маска сети: 255.255.0.0
Содержит до 64516 адресов (256*256).
Адреса хостов в этих сетях вида: 136.12.*.*
Класс C. "Маленькие" сети.
Адреса сетей лежат в интервале: 192.0.0 - 255.254.255
Маска сети: 255.255.255.0
Содержит 254 адреса.
Адреса хостов в этих сетях вида: 195.136.12.*
Класс D. "Multicast-сети" (групповая адресация) (в стадии разработки)
Адреса сетей лежат в интервале: 224-239
Класс E. "Экспериментальные" 240-250
Адреса 0, 127, 255 - специальные и для обычных IP не используется
2.1. Private Address Space
Если ваша сеть будет использоваться только внутри
организации, и машины не будут иметь непосредственного выхода в
интернет, то адреса для нее можно брать "с потолка".
В документе RFC 1597 "Address Allocation for Private Internets"
March 1994:
The Internet Assigned Numbers Authority (IANA) зарезервировал
три блока IP адресов для использования во внутренних сетях:
10.0.0.0 - 10.255.255.255 Класс A
172.16.0.0 - 172.31.255.255 Класс B
192.168.0.0 - 192.168.255.255 Класс C
Роутеры большинства ISP эти адреса не маршрутизируют, что
добавляет им(адресам) безопасности.
2. Объявляем IP-адрес на наш ethernet'ный контроллер.
Конфигурация сети на UNIX-машине обычно делается автоматически
при начальной загрузке. Вкратце ее можно описать так:
Определение трех однотипных карт в Linux (1*ISA, 2*PnP):
/etc/conf.modules
alias eth0 ne
alias eth1 ne
alias eth2 ne
options ne io=0x220,irq=5
Объявляем, что наш IP-адрес 198.8.2.1 и он поднят на
ethernet'ную карту по имени elx70 . В случае Motorol'ы так на-
зывается ethernet, торчащий из главной системной платы - платы
с процессором.
ifconfig e1x70 198.8.2.1 up
Объявляем, что наш второй контроллер с именем m3760 (нижняя
плата) имеет IP-адрес 198.8.3.1
ifconfig m3760 198.8.3.1 up
3. Маршрутизация локальной сети.
Объявляем, что машины с адресами вида 198.8.2.* *=1,...,254 си-
дят на нашем верхнем локальном сегменте ethernet, и разговари-
вать с ними надо напрямую, через верхний ethernet, соответству-
ющий нашему адресу 198.8.2.1 - т.е. - elx70. А с машинами, име-
ющими адреса вида 198.8.3.* - через нижний ethernet - с адресом
198.8.3.1
route add net 198.8.2.0 198.8.2.1 netmask 255.255.255.0 0
route add net 198.8.3.0 198.8.3.1 netmask 255.255.255.0 0
Сетевые пакеты для IP-адресов, которые не лежат в нашей локаль-
ной сети, переправлять на машину с сетевым адресом 198.8.2.107
- а уж она сама будет разбираться, что с ними делать, и как
доставить их до конкретных адресатов.
route add default 198.8.2.107 1
Последний аргумент команды route - метрика. Ее можно интерпре-
тировать как "расстояние" до "того" gateway'я, или "сколько пе-
ресадок между gateway'ями придется сделать IP-пакету по дороге
туда. Поскольку IP-адреса 198.8.2.1 и 198.8.3.1 соответствуют
нашим собственный платам ethernet, то и метрика (расстояние) до
них 0. 198.8.2.107 - другая машина - "расстояние до нее" 1.
Смотрим, что у нас получилось
netstat -rn # распечатать таблицу маршрутизации
ping -s fedfond # "прозвонить" узлы сети
ping -s fedfond-gate
ping -s 198.8.2.107
netstat -i # статистика о работе сетевых интерфейсов
Настала пора объяснить, что такое lo0 и localhost. Это так на-
зываемый Loop-back интерфейс. Он имитирует сетевой интерфейс
локально, не выходя за границы нашего компьютера. Loop-back ин-
терфейсу соответствует зарезервированный за ним IP-адрес
127.0.0.1
4. Конфигурирование TCP/IP на Мотороле 922.
Придумайте сетевое имя вашего компьютера. Пусть вы решили, что
ваш компьютер должен называться fedfond, и иметь IP-adres
198.8.2.1 . Однако не забывайте, что у Моторолы ДВА ether
net-контроллера, и КАЖДЫЙ из них ДОЛЖЕН иметь свой УНИКАЛЬНЫЙ
IP-адрес. Мы решаем, что второй наш ethernet будет иметь
IP-адрес 198.8.3.1, ну и этому адресу можно назначить вполне
человеческое имя, например "fedfond-gate".
ВНИМАНИЕ: если вы внимательно рассмотрите содержание файла
/etc/inet/rc.inet, особенно строку вида
/usr/sbin/ifconfig e1x70 `uname -n`-gate $net_mask up
то поймете, что второй ethernet должен называться именно
fedfond-gate , и никак иначе.
Итак, чтобы установить сетевое имя и IP-адреса нашего host'а
1. командой sysadm установите "nodename" . ВНИМАНИЕ: именно
nodename (имя узла) а не systemname (имя операционной системы)
2. В файл /etc/hosts вставьте строчки, привязывающие IP-адреса
к имени fedfond и, ВНИМАНИЕ!, fedfond-gate
198.8.2.1 fedfond
198.8.3.1 fedfond-gate
3. Перезагрузитесь.
Конфигурирование 2-го ethernet в Linux
Первый-то ethernet конфигурится с раздачи - сложность появится,
когда мы захотим увидеть второй. Например можно в
/etc/rc.d/rc.local поставить такие команды:
# подгрузка дравера с дековским чипом 2140
insmod /lib/modules/2.0.18/de4x5.o io=0
# выделение IP # статический роутинг на вторую сетку
ifconfig eth1 10.232.172.1
route add -net 10.232.172.0 gw 10.232.172.1 netmask 255.255.255.0
Если дравер 2-го ethernet'а вкомпилирован в ядро, то
активизировать его можно так: в файл /etc/lilo.conf вписать
append="ether=0,0,eth0 ether=0,0,eth1" # если сработает autoprobe
# в случае явного задания параметров карт
append="ether=10,0x300,0xe800,eth0 ether=12,0x280,eth1"
Включить роутинг:
echo 1 > /proc/sys/net/ipv4/ip_forward
Как узнать hardware адрес ethernet'ной карты
Если машины нормально сконфигурированы для TCP/IP, то
достаточно попинговать их явно или по броадкасту, затем arp -a
ping [-s] 123.456.789.255
arp -a
Почти всегда можно разобрать машину, и посмотреть адрес,
напечатанный на самой плате.
Linux: Адрес печатается при загрузке ядра.
Если карта сконфигурирована, то адрес сообщает команда
ifconfig
Sun: Адрес печатается boot-монитором при старте
Hardware адрес ethernet'а на Sun можно произвольно менять
находясь в boot-мониторе, или командой ifconfig
подробности см. в Sun NVRAM & hostid FAQ
HP-UX: Адрес можно узнать командой lanscan. На рабочих станциях
адрес можно узнать еще и из boot-монитора PDC.
5. Прикладные интерфейсы.
Чтобы писать программы, работающие с сетью, программист должен
пользоваться каким-либо набором системных вызовов и функций. От
BSD-Unix'а в жизнь вошел получивший большую популярность API
Berkеlеy-sockets. AT&T System V породила TLI (Transport Level
Interface) - построенный на технологии "потоков" (streams).
SVR4 поддерживает и то, и другое. Поддержку сокетов
обеспечивает демон inetd (Internet Super Server), поддержку TLI
обеспечивает демон listen (Network Listener).
Демон listen управляется специальной базой данных, в которую
необходимо вписать IP-адрес нашего host'а. Делается это "один
раз в жизни". IP-адрес задается в хитрой шестнадцатеричной за-
писи.
Итак, если наши IP-адреса 198.8.2.1 и 198.8.3.1, их шестнадца-
теричная запись C6080201, C6080301 , то мы должны единовременно
выполнить три команды:
nlsadmin -i tcp
nlsadmin -l '\x00020acec60802010000000000000000' tcp
nlsadmin -l '\x00020acec60803010000000000000000' tcp
"волшебное ^^^^^^^^шестнадцать нулей
слово 0acе" |
|
сюда вписывается наш фактический IP-адрес
7. Конфигурация BSD сокетов.
Для этого ничего делать не надо. Врочем, в дальнейшем,
возможно, вам придется этим заниматься. Настройки inetd лежат в
файлах:
/etc/inetd.conf название сетевого --> имя обслуживающей
сервиса программы
/etc/services номер порта --> название сетевого сервиса
Состояние текущих соединений можно посмотреть командой:
netstat (или netstat -ta - если у вас Linux)
ARP - Address Resolution Protocol
Протокол низкого уровня. Поддерживается на уровне ядра и/или
дравера сетевой платы. Для определения, какой ethernet'ный
адрес имеет машина, если известен ее IP-адрес. Работает по
принципу broadcаst: "эй, все, все, все: IP-такой_то -
отзовись", и он один отзывается.
arp -a # распечатать известные нам IP-адреса и их eth-адреса
RARP - Reverse Address Resolution Protocol.
Для оповещения бездисковых клиентов, какой у них IP-адрес. На
сервере запускается демон rarpd. У него есть файл-таблица:
ether-адрес -> IP-адрес. По запросу-broadcast'у бездискового
клиента вида: "эй, все,все,все, мой eth-адрес такой-то. Как
меня зовут?" rarpd сообщает ему, какой у него IP (а другой де-
мон bootparamd сообщает ему дополнительную информацию - где ему
брать свою корневую файловую систему, например).
Для обмена информацией о роутинге (маршрутизации) используются
протоколы RIP, BGP, EGP, ICMP.
RIP - Routing Information Protocol
Внутренний протокол роутинга (внутри автономной системы). Его
поддерживают демоны routed и/или gated.
BGP - Border Gateway Protocol
EGP - External Gateway Protocol
Роутинг между автономными системами. Их поддерживает демон
gated
ICMP - Internet Control Message Protocol
передает сообщения об ошибках в TCP/IP (например "port
unreachable"), используется программами ping, traceroute, может
передавать сообщение о нерациональном роутинге типа "redirect":
"вообще-то можно направлять пакеты через меня, однако есть и бо-
лее короткий путь".
Для обмена информацией о символических именах host'ов,
пользователей, групах пользователей и пр. используются
протоколы DNS и NIS/YP
DNS - Domain Name System.
Позволяет использовать символические имена хостов помимо цифро-
вых IP-номеров, и организовывать "деревянную" структуру наиме-
нования доменов (типа pc101.fedfond.msk.su , ftp.sco.com и
т.п.) Сервер DNS - хост, на котором запущен демон bind, и хра-
нятся имена хостов в зоне(домене). На остальных хостах для оп-
ределения IP-адреса по имени используются библиотечные функции
библиотеки "resolver" - gethostbyname, gethostbyaddr, которые
обращаются по сети к ближайшему серверу DNS, и выясняют у него
IP-адрес машины по ее имени (domain-name).
NIS/YP - Network Information System (используется так же
название, пришедшее от фирмы Sun - Yellow Pages). Позволяет
хранить на одном NIS-сервере (с демоном ypserv) информацию,
единую для всей локальной сети: имена хостов, имена и права
пользователей, групп пользователей, название их домашних
каталогов, символические имена портов и т.д. и т.п.
Еще раз об отличиях DNS от NIS/YP: DNS - система "глобальная" -
действует в рамках всего Интернета, но содержит ТОЛЬКО имена
хостов. NIS/YP - содержит помимо имен хостов несколько других
информационных баз, но зато поддерживается только в рамках сети
одной организации.
Конфигурирование TCP/IP на скорую руку
В большинстве unix-ов имеется простая менюшная утилита
позволяющая сконфигурировать основные параметры компьютера: Имя
хоста, IP адрес и параметры сети, DNS сервера
HP/UX: /etc/set_parms initial
Linux Slackware: net_config
Solaris: /etc/???
В redhat-оподобных Linux
/sbin/ifup-pre-local
/sbin/ifdown-pre-local
/sbin/ifup-local
/sbin/ifdown-local
Если они есть и исполняемы, то до/после поднятия/опускания интерфейсов
они будут вызываться с параметром ${DEVICE}
Last-modified: Sun, 23 Oct 2005 20:05:37 GMT