Сетевые протоколы предоставляют так называемые службы канала данных и составляют нижние три уровня модели OSI. Эти протоколы обрабатывают информацию адресации и маршрутизации, контроль ошибок и запросы повторной пересылки. Сетевые протоколы определяют также правила для коммуникации в сетевом окружении, таком как Ethernet или Token Ring. Наиболее популярные сетевые протоколы перечислены ниже:
1. IP (Internet Protocol), протокол TCP/IP для маршрутизации и пересылки пакетов.
2. IPX (Internetwork Packet Exchange), протокол NetWare для пересылки пакетов и маршрутизации.
3. NWLink, реализация Microsoft протокола IPX/SPX.
4. NetBEUI, транспортный протокол, который предоставляет службы транспорта данных для сеансов NetBIOS и приложений.
5. DDP (Datagram Delivery Protocol), протокол транспорта данных AppleTalk.
Мы увидели, как эти протоколы укладываются в модель OSI, и получили представление о функциях каждого из них. Теперь следует рассмотреть, как все это отображается в совокупности, после чего можно исследовать различия в поведении этих протоколов, как используется каждый из них, а также различные уровни функциональности.
Заголовок SPX состоит из следующих семи полей:
• Управление соединением — 1 байт
• Тип потока данных — 1 байт
• Идентификатор соединения источника — 2 байта
• Идентификатор соединения места назначения — 2 байта
• Номер последовательности - 2 байта
• Номер подтверждения — 2 байта
• Номер размещения — 2 байта
Управление соединением Остановимся на некоторых функциях, предоставляемых полем управления соединением. Эквивалент флагов TCP, которые были показаны в главе 2, управление соединением предоставляет механизм двунаправленного потока данных, управления перегрузкой и другие связанные с этим возможности. Поле управления соединением указывает три типа пакетов управления соединением. Эти значения могут быть либо логическими, либо могут быть заданы вместе с несколькими флагами. Сначала рассмотрим флаг конца сообщения.
• Флаг "Конец сообщения" (End-of-message). Этот флаг устанавливается, когда в поле управления соединением появляется 0x10. Он используется для указания конца сообщения партнеру по передаче. Так как SPX является транспортным протоколом на основе сообщений, посылающая сторона задает этот флаг для указания, что сообщение завершено. После того как получающая сторона получит этот пакет, она передаст данные в буфер сообщения вышележащего приложения. Это не запрос конца соединения, но скорее указание, что текущий обмен сообщениями закончился.
• Флаг "Требуется подтверждение" (Acknowledgment-Required). Флаг требования подтверждения устанавливается, когда в поле управления соединением появляется 0x40. Он используется для указания, что данные были посланы партнеру по передаче и требуется подтверждение. Прежде чем будут отправлены новые данные, должно быть получено подтверждение для этого пакета.
• SPX требует подтверждения посланных данных; когда они получены, устанавливает флаг, сигнализирующий "конец сообщения" для партнера. Число является комбинацией 0x40 и 0x10 и равно 0x50.
• Флаг "Системный пакет" (System-Packet). Флаг системного пакета устанавливается, когда в поле управления соединением появляется 0x80. Это пакет подтверждения, используемый внутренне протоколом SPX для подтверждения, что партнер по сеансу работает и соединение существует. Это сообщение типа "Я здесь".
• Флаг "Комбинация системных пакетов" (System-Packet combination). Флаг комбинации системных пакетов устанавливается, когда в поле управления соединением появляется ОхСО. ОхСО является суммой 0x80 и 0x40. Он используется внутренне протоколом SPX, показывая, что соединение все еще существует, требуя подтверждения (АСК) от партнера по коммуникации. Это пакет типа "Вы еще здесь?".
Тип потока данных (DataStream) сообщает, какой тип данных переносится внутри пакета. Он может быть задан как специальное число, определенное приложением через Winsock. Самой важной функцией этого поля является обеспечение аккуратного разъединения сеанса. По умолчанию это будет одно из двух следующих сообщений:
• Конец соединения (End-of-Connection). Если тип потока данных задан как OxFE, то партнер по сеансу хочет прекратить сеанс.
• Конец соединения (End-of-Connection). Если тип потока данных задан как OxFF, то пакет передается, так как был получен запрос конца соединения.
Некоторые из других записей, встречающиеся в этом поле, включают числа, перечисленные в таблице
Идентификатор соединения источника и места назначения Это третье и четвертое поля из семи полей заголовка SPX. Поля идентификаторов сое динения источника и места назначения занимают два байта и используются для демультиплексирования сеансов SPX через единственный сокет на уровне IPX. Если идентификатор соединения места назначения задан как 0XFFFF, значит, это пакет начального соединения.
Порядковый номер Пятое поле в заголовке SPX является полем порядкового номера. Это двухбайтовое поле, содержащее счетчик переданных пакетов данных. Это число будет увеличиваться после получения подтверждения о передаче пакета данных.
Номер подтверждения Шестое поле является полем номера подтверждения, сообщающим номер последовательности следующего пакета SPX, который ожидается от партнера SPX.
Номер размещения Последнее поле заголовка SPX является полем номера размещения. Это поле сообщает номер буфера получения, который доступен на рабочей станции. Этот номер почти всегда больше, чем номер подтверждения. Доступность свободных буферов вычисляется, как размер окна, который равен номеру размещения минус номер подтверждения плюс один. Это поле используется как механизм управления потоком. Он работает следующим образом. Когда получающая сторона посылает номер размещения меньше номера подтверждения, отправитель не будет больше посылать данные, пока получающая сторона не пошлет пакет с номером размещения больше номера подтверждения.
Пример создания соединения Трассировка сетевого монитора, приведенная ниже, показывает последовательность успешной инициализации сеанса. Отметим, что идентификатор соединения места назначения задан как OxFFFF, а номер размещения как OxFFFF. Эта последовательность пакетов называется квитированием SPX.
Следующие рекомендации могут оказаться полезными при выделении проблемы.
• Можно видеть несколько идентификаторов сеансов, приходящих с одного компьютера. Попробуйте изолировать трассировку для определенного идентификатора сеанса, чтобы проверить его правильность.
• Посмотрите на число переходов и сравните физический уровень Ethernet с Token Ring. Проблема может быть связана с промежуточными маршрутизаторами или с размером пакета. Помните, что SPX не выполняет согласования пакетов.
• Обратите внимание на номер размещения и проверьте, что он больше номера подтверждения. Это проверка того, что отсутствует какая-либо проблема, связанная с переполнением буфера. В основном это происходит с 16-разрядными клиентами в реальном режим .
• Проверьте все повторные передачи пакетов данных. Обычно проблема повторной передачи проявляется как вопрос производительности. Проверьте интервал времени между отправкой данных и получением пакета АСК, чтобы проверить наличие временной задержки.
Ограничения протокола SPX Хотя SPX предоставляет транспорт с поддержкой соединения, SPX имеет несколько ограничений.
• Только один пакет может ожидать в любой момент времени.
• Коммуникация на основе SPX не делает никакого согласования пакета.
• SPX II использует максимальный размер пакета, допустимый сетью. Пример: 1518 байтов для Ethernet (SPX имеет максимум 576 байтов).
• Окна SPX II допускают несколько ожидающих пакетов и позволяют передавать отрицательное подтверждение (NAK), чтобы указать, что некоторые пакеты не были получены.
• SPX II допускает согласование пакетов. Пакет запроса согласования размера может посылаться в любое время в процессе коммуникации, если пакеты не доходят до места назначения.
Идентификатор соединения с источником Это поле содержит двухбайтовый номер соединения SPX, присвоенный станцией источника SPX и используемый для отслеживания различных виртуальных соединений SPX, которые может поддерживать сокет. Этот номер появится в идентификаторе соединения места назначения, когда прибудут пакеты от партнера по соединению для этой станции.
Идентификатор соединения с местом назначения Это поле содержит двухбайтовый номер соединения SPX, присвоенный станции места назначения SPX. Он используется для отслеживания различных виртуальных соединений SPX, которые может поддерживать сокет. Этот номер появится в идентификаторе соединения источника, когда пакеты посылаются партнеру по соединению.
Порядковый номер SPX присваивает порядковый номер каждому пакету данных, посланных партнеру по соединению. Этот номер увеличивается, когда пакет данных подтверждается, что обеспечивает упорядоченную передачу пакетов из источника в место назначения партнера по соединению. Это поле не увеличивается для пакетов, которые не содержат данных (системных пакетов).
Номер подтверждения Это ожидаемый номер последовательности для следующего пакета данных от партнера по соединению в месте назначения. Это поле не увеличивается для пакетов, которые не содержат данных (системных пакетов).
Номер размещения Этот номер используется для вычисления количества доступных для получения пакетов буферов, посланных из места назначения соединения. Он соответствует номеру последовательности пакета, который подготовлен для отправки, но еще не послан. Источник соединения не может превысить номер размещения. Когда источник соединения генерирует ЕСВ (блок управления событиями) приема, SPX увеличивает номер размещения. Это поле не увеличивается для пакетов, которые не содержат данных (системных пакетов).
Данные Запись данных (если они присутствуют) содержит любые данные или коды, которые посылаются на сервер и с сервера.
Поле сокета указывает пакет SPX, посылаемый клиентом на сервер. Со-кет клиента сервера будет 8060. Пакет содержит также некоторые имеющие отношение к SPX данные для целей соединения. Запись управления соединением в заголовке SPX показывает код COh, означающий, что пакет является системным пакетом, который требует подтверждения от сервера при получении.
Протокол IPX является протоколом третьего уровня без поддержки соединения, предназначенным для передачи дейтаграмм. Компания Novell адаптировала его из старого протокола межсетевых дейтаграмм (протокол IDP) стека Xerox (XNS).
Протокол без соединения
Поскольку он является протоколом без поддержки соединения, то когда процесс, выполняющийся на определенном узле, использует IPX для коммуникации с процессом на другом узле, между двумя узлами не устанавливается соединение. Таким образом, пакеты IPX адресуются и посылаются к своему месту назначения, но нет гарантии или проверки успешной доставки. Любое подтверждение пакета или управление соединением обеспечиваются протоколами выше IPX, такими как SPX. Термин дейтаграмма означает, что каждый пакет интерпретируется как отдельная сущность, не имеющая логической или последовательной связи с любым другим пакетом.
Работа на сетевом уровне модели 0SI
Как протокол сетевого уровня IPX адресует и маршрутизирует пакеты из одного местоположения в другое при межсетевом обмене IPX. IPX принимает решения о маршрутизации, просматривая поля адресов заголовка и на основе информации, которую он получает из RIP или NLSP. IPX использует эту информацию для пересылки пакетов в их узел назначения или следующему маршрутизатору, предоставляющему путь к узлу назначения.
Структура пакета
Так как протокол IPX был адаптирован из старого протокола XNS ГОР, не удивительно, что их структуры похожи. Пакет IPX состоит из двух частей. Первая часть является 30-байтовым заголовком, который содержит адреса сети, узла и сокета для машин источника и места назначения. Вторая часть является разделом данных, который иногда содержит заголовок протокола более высокого уровня, такого как SPX. Минимальный пакет IPX имеет 30 байтов (не считая заголовок MAC). Максимальный размер маршрутизированных пакетов IPX обычно имеет только 576 байтов, включая заголовок IPX и нагрузку данных. Однако при использовании IPX II это число возрастает до 1500 байтов.
Как было отмечено в главе 2 о TCP, сетевой уровень следует за заголовком MAC, поэтому IPX помещается после заголовка MAC и перед полезной нагрузкой. На рис. 3.2 показано, что заголовок IPX помещается внутри протокола MAC таким же образом, как описано в главе 2.
