Организация и функционирование компьютеров
bf1271d8

Межсетевой протокол IP


Модуль IP является базовым элементом технологии Интернет. При отправке данных этот модуль инкапсулирует переданное ему сообщение в IP-пакет, добавляя в заголовок поля, из которых основными являются IP-адрес источника, IP-адрес места назначения и поле «протокол». В поле «протокол» указывается тот модуль, которому должно быть передано инкапсулированное внутри IP-пакета сообщение. Центральной частью IP-модуля является его таблица маршрутов. Модуль IP использует эту таблицу при принятии всех решений о маршрутизации IP-пакетов. Чтобы понять технику межсетевого взаимодействия, нужно понять то, как используется таблица маршрутов. Пример таблицы маршрутов указан на рис.2.

Номер сети

Прямая / косвенная маршрутизация

IP-адрес шлюза

Номер сетевого интерфейса

223.1.2



Прямая

1

223.1.3

Косвенная

223.1.4.1

2

                                         Рис.2. Таблица маршрутов

Пусть модуль IP должен отправить IP-пакет другому компьютеру B. Для этого надо определить, через какой сетевой интерфейс сообщение должно быть отправлено и какой Ethernet-адрес должен быть указан в качестве адреса назначения пакета. Пусть компьютер B имеет IP-адрес  223.1.2.2. Ключом поиска служит номер IP-сети, выделенный из IP-адреса места назначения IP-пакета. Модуль IP с помощью маски подсети выделяет номер сети из IP-адреса B. Номер сети равен 223.1.2. В таблице маршрутов ему соответствует первая строка. В этой строке указано, что флаг маршрутизации имеет значение «прямая», а посылать сообщение надо через 1-й интерфейс. С помощью ARP-таблицы выполняется преобразование IP-адреса 223.1.2.2 в соответствующий Ethernet-адрес, и через 1-й интерфейс Ethernet-кадр посылается узлу В.

Пусть теперь узел IP-модуль посылает IP-пакет узлу В с адресом 223.1.3.2. Сетевому номеру 223.1.3 в таблице маршрутов соответсвует вторая строка. Поскольку флаг маршрутизации во второй строке имеет значение «косвенная», сообщение должно быть послано через шлюз C, IP-адрес которого 223.1.4.1 указан в третьем столбце.
Модуль IP осуществляет поиск в ARP-таблице, с помощью которого определяет Ethernet-адрес, соответствующий адресу шлюза 223.1.4.1. Но на место IP- адреса вставляется не адрес шлюза C, а адрес узла B, то есть IP-адрес назначения в этом пакете не соответствует Ethernet-адресу назначения. Затем пакет посылается через интерфейс 2, указанный во второй строке, шлюзу С. IP-пакет принимается сетевым интерфейсом в узле С и передается модулю IP компьютера C. Модуль проверяет IP-адрес места назначения, и, поскольку он не соответствует ни одному из собственных IP-адресов С, шлюз решает ретранслировать IP-пакет. Следуя тому же алгоритму, модуль IP в узле С выделяет сетевой номер из IP-адреса места назначения IP-пакета (223.1.3) и ищет соответствующую запись уже в своей таблице маршрутов. Если соответствующая строка характеризуется прямой маршрутизацией, пакет ретранслируется напрямую, в противном случае он опять направляется в шлюз и т.д. После того, как IP-пакет достигнет узла B,  содержащееся в IP-пакете сообщение передается протокольному модулю верхнего уровня (согласно значению поля «протокол»).

Если прикладная программа пытается послать данные по IP-адресу, который не принадлежит сети, то модуль IP не сможет найти соответствующую запись в таблице маршрутов. В этом случае модуль IP отбрасывает IP-пакет. Некоторые реализации протокола возвращают сообщение об ошибке "Сеть не доступна".

Итак, для отправляемых IP-пакетов, поступающих от модулей верхнего уровня, модуль IP должен определить способ доставки - прямой или косвенный - и выбрать сетевой интерфейс. Этот выбор делается на основании результатов поиска в таблице маршрутов. Для принимаемых IP-пакетов, поступающих от сетевых драйверов, модуль IP должен решить, нужно ли ретранслировать IP-пакет по другой сети или передать его на верхний уровень другому модулю (TCP или UDP). Если модуль IP решит, что IP-пакет должен быть ретранслирован, то дальнейшая работа с ним осуществляется также, как с отправляемыми IP-пакетами.


Входящий IP- пакет никогда не ретранслируется через тот же сетевой интерфейс, через который он был принят. Решение о маршрутизации принимается до того, как IP-пакет передается сетевому драйверу, и до того, как происходит обращение к ARP-таблице.

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

Адресное пространство сети TCP/IP может быть разделено на непересекающиеся подпространства - "подсети", с каждой из которых можно работать как с обычной сетью TCP/IP. Таким образом единая IP-сеть организации может строиться как объединение подсетей. Как правило, подсеть соответствует одной физической сети, например, одной сети Ethernet. Конечно, использование подсетей необязательно. Можно просто назначить для каждой физической сети свой сетевой номер. Однако такое решение имеет два недостатка. Первый, и менее существенный, заключается в пустой трате сетевых номеров.

Более серьезный недостаток состоит в том, что если ваша организация имеет несколько сетевых номеров, то машины вне ее должны поддерживать записи о маршрутах доступа к каждой из этих IP-сетей. Таким образом, структура IP-сети организации становится видимой для всего мира. При каких-либо изменениях в IP-сети информация о них должна быть учтена в каждой из машин, поддерживающих маршруты доступа к данной IP-сети. Подсети позволяют избежать этих недостатков. Ваша организация должна получить один сетевой номер, например, номер класса B. Стандарты TCP/IP определяют структуру IP-адресов. Для IP-адресов класса B первые два байта являются номером сети. Оставшаяся часть IP-адреса может использоваться как угодно. Например, вы можете решить, что третий байт будет определять номер подсети, а четверый байт - номер узла в ней. Вы должны описать конфигурацию подсетей в файлах, определяющих маршрутизацию IP-пакетов. Это описание является локальным для вашей организации и не видно вне ее. Все машины вне вашей организации видят одну большую IP-сеть.


Следовательно, они должны поддерживать только маршруты доступа к шлюзам, соединяющим вашу IP-сеть с остальным миром. Изменения, происходящие в IP-сети организации, не видны вне ее. Вы легко можете добавитьновую подсеть, новый шлюз и т.п.

После того, как решено использовать подсети или множество IP-сетей,вы должны решить, как назначать им номера. Обычно это довольно просто. Каждой физической сети, например, Ethernet или Token Ring, назначается отдельный номер подсети или номер сети. В некоторых случаях имеет смысл назначать одной физической сети несколько подсетевых номеров. Например, предположим, что имеется сеть Ethernet, охватывающая три здания. Ясно,что при увеличении числа машин, подключенных к этой сети, придется ее разделить на несколько отдельных сетей Ethernet. Для того, чтобы избежать необходимости менять IP-адреса, когда это произойдет, можно заранее выделить для этой сети три подсетевых номера - по одному на здание. (Это полезно и в том случае, когда не планируется физическое деление сети. Просто такая адресация позволяет сразу определить, где находится та или иная машина).

Вы также должны выбрать "маску подсети". Она используется сетевым программным обеспечением для выделения номера подсети из IP-адресов. Биты IP-адреса, определяющие номер IP-сети, в маске подсети должны бытьравны 1, а биты, определяющие номер узла, в маске подсети должны бытьравны 0. Как уже отмечалось, стандарты TCP/IP определяют количество байтов, задающих номер сети. Часто в IP-адресах класса B третий байт используется для задания номера подсети. Это позволяет иметь 256 подсе-тей, в каждой из которых может быть до 254 узлов. Маска подсети в такой системе равна 255.255.255.0. Но, если в вашей сети должно быть больше подсетей, а в каждой подсети не будет при этом более 60 узлов, то можно использовать маску 255.255.255.192. Это позволяет иметь 1024 подсети и до 62 узлов в каждой. (Напомним, что номера узлов 0 и "все единицы" используются особым образом). Обычно маска подсети указывается в файле стартовой конфигурации сетевого программного обеспечения.


Протоколы TCP/ IP позволяют также запрашивать эту информацию по сети.

Можно определить маршрут по умолчанию, который используется в тех случаях, когда IP-адрес места назначения не встречается в таблице маршрутов явно. Обычно маршрут по умолчанию указывает IP-адрес шлюза, который имеет достаточно информации для маршрутизации IP-пакетов со всеми возможными адресами назначения. Если ваша IP-сеть имеет всего один шлюз, тогда все, что нужно сделать, - это установить единственную запись в таблице маршрутов, указав этот шлюз как маршрут по умолчанию. После этого можно не заботиться о формировании маршрутов в других узлах (конечно, сам шлюз требует больше внимания).

Предположим, что нужно посылать IP-пакеты по IP-адресу 128.6.7.23. Первый IP-пакет пойдет на шлюз по умолчанию, так как это единственный подходящий маршрут, описанный в таблице. Однако шлюз128.6.4.27 знает, что существует лучший маршрут, проходящий через шлюз128.6.4.30. (Как он узнает об этом, мы сейчас не рассматриваем. Существует довольно простой метод определения лучшего маршрута.) В этом случае шлюз 128.6.4.27 возвращает сообщение перенаправления, где указывает, что IP-пакеты для узла 128.6.7.23 должны посылаться через шлюз 128.6.4.30. Модуль IP на машине-отправителе должен добавить соответствующую запись в таблицу маршрутов. Все последующие IP-пакеты для узла 128.6.7.23 будут посланы прямо через указанный шлюз.

Несколько более специальная проблема связана с бездисковыми рабочими станциями. По своей природе бездисковые машины сильно зависят от сети и от файл-серверов, с которых они осуществляют загрузку программ, и где располагается их область своппинга. Исполнение программ, следящих за широковещательными передачами в сети, на бездисковых машинах связано с большими трудностями. Протоколы маршрутизации построены в основном на широковещательных передачах. Например, все сетевые шлюзы могут широковещательно передавать содержание своих таблиц маршрутов через каждые 30 секунд. Программы, которые следят за такими передачами, должны быть загружены на бездисковые станции через сеть.На достаточно занятой машине программы, которые не используются в течение нескольких секунд, обычно отправляются в область своппинга. Поэтому программы, следящие за маршрутизацией, большую часть времени находятся в своппинге. Когда они вновь активизируются, должна производиться подкачка из своппинга. Как только посылается широковещательное сообщение, все машины активизируют программы, следящие за маршрутизацией. Это приводит к тому, что многие бездисковые станции будут выполнять подкачку из своппинга в одно и тоже время. Поэтому в сети возникнет временная перегрузка. Таким образом,исполнение программ, прослушивающих широковещательные передачи, на бездисковых рабочих станциях очень нежелательно.


Содержание раздела