Протокол  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 не используется



     Если   ваша   сеть   будет  использоваться  только  внутри
организации, и машины не будут иметь непосредственного выхода в
интернет, то адреса для нее можно брать "с потолка".

В документе 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  эти  адреса  не  маршрутизируют, что
добавляет им(адресам) безопасности.



Конфигурация сети на 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



Объявляем, что машины с адресами вида 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



Придумайте  сетевое имя вашего компьютера. Пусть вы решили, что
ваш компьютер  должен  называться  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. Перезагрузитесь.




Первый-то 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



Если   машины   нормально   сконфигурированы   для  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.



Чтобы  писать программы, работающие с сетью, программист должен
пользоваться каким-либо набором системных вызовов и функций. От
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-адрес




Для   этого  ничего  делать  не  надо.  Врочем,  в  дальнейшем,
возможно, вам придется этим заниматься. Настройки 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 -  содержит  помимо имен хостов несколько других
информационных баз, но зато поддерживается только в рамках сети
одной организации.



       В  большинстве  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}


Популярность: 23, Last-modified: Sun, 23 Oct 2005 20:05:37 GmT