ATM (Asynchronous Transfer Mode, асинхронный режим передачи) является службой с поддержкой соединения и с негарантированной доставкой. Он хорошо масштабируется и используется в LAN и WAN. АТМ отличается от Frame Relay тем, что вместо разбиения сообщений на кадры переменного размера все сообщения разбиваются на ячейки одинакового размера. Каждая ячейка имеет пятибайтовый заголовок и 48-байтовое поле данных. Так как все ячейки имеют одинаковый размер, коммутация может быть сделана очень быстрой, и поэтому необходимость в буферизации исчезает.
Поскольку это асинхронный метод, нет необходимости в технике TDM. При использовании АТМ станция может посылать ячейки, когда ей это понадобится, а не ожидать очереди передачи, как в случае TDM.
Хотя АТМ не соответствует точно модели OSI, большинство его функций можно соотнести с канальным и сетевым уровнями. Поэтому он может действовать во множестве различных физических сред передачи, включая SONET и FDDI. Уровень адаптации АТМ соответствует сеансовому и транспортному уровням модели OSI. Он отвечает за получение данных для протоколов более высокого уровня, такого как IP, и сегментирует данные в 48-байтовые ячейки для передачи через сеть АТМ. ISDN Это коммуникационный протокол, предложенный телефонными компаниями, который позволяет телефонным сетям передавать данные, голос и другие источника трафика по телефонным линиям. ISDN построен на двух основных типах коммуникационных каналов. Первым является канал-носитель, или В-канал (Bearer), который может переносить голос, данные или изображения со скоростью 64 Кбит/сек, а вторым является канал данных, или D-канал (Data), который имеет скорость 16 Кбит/сек и используется для контрольной информации, передачи сигналов и данных управления линией. ISDN реализуется обычно в двух версиях: ISDN Basic Rate Interface (BRI) с двумя каналами В и одним каналом D и ISDN Primary Rate Interface (PRI) с 23 каналами В и каналом D.
HDLC Синхронный бит-ориентированный протокол канального уровня, разработанный ISO. Производный от SDLC, HDLC определяет метод инкапсуляции данных на синхронных последовательных линиях, используя символы обрамления кадра и контрольные суммы. Данные переносятся в кадрах, которые могут содержать переменный объем данных.
SLIP Используется как метод инкапсуляции последовательного канала, поэтому является простым протоколом кадрирования пакетов. SLIP определяет несколько символов, которые обрамляют пакеты IP в последовательном канале. Это техника с минимальными накладными расходами, которая не предоставляет согласования адресации, идентификации протокола, обнаружения ошибок или механизма сжатия. Созданный для использования на медленных последовательных линиях связи (например, модемах), он определяет два специальных символа, которые применяются для обрамления кадра.
Первый — символ END (ОхСО), который используется для определения конца дейтаграммы IP. Второй символ — ESC (OxDB) используется для указания, когда символ ОхСО встречается внутри дейтаграммы IP. ESC-символ SLIP отличается от ESC-символа ASCII (0x1В).
SLIP использует технику, называемую символьным заполнением, для предотвращения появления символа END в середине дейтаграммы IP. Если символ END (ОхСО) встречается внутри исходной дейтаграммы IP, то он заменяется последовательностью OxDB-DC. Если символ ESC (OxDB) встречается внутри дейтаграммы IP, то он заменяется последовательностью OxDB-DD. Это предотвращает зависание модема в середине передачи.
Максимальный размер дейтаграммы IP для SLIP обычно ограничен 1500 байтами на более новых системах или 1006 байтами на реализациях Berkley UNIX версии 4.2. Однако эта распространенная практика не определена в стандартах.
Чтобы сократить объем накладных расходов на потенциально медленных последовательных линиях связи, в RFC 1144 определен метод сжатия заголовков IP и TCP в заголовок размером от 3-х до 5-ти байтов, который известен как OSLIP или Compressed SLIP.
РРР Протокол РРР — наследник SLIP. PPP предоставляет соединения маршрутизатор-маршрутизатор и хост-сеть через синхронные последовательные линии связи, такие как ISDN или SONET, а также асинхронные каналы, например типичные телефонные коммутируемые линии. Он исправляет недостатки SLIP.
РРР является семейством протоколов, которые предоставляют мульти-протокольную инкапсуляцию, протокол контроля линии (LCP) для создания, конфигурирования и тестирования соединения канала данных, и семейство протоколов управления сетью (NCP) для создания и конфигурирования протоколов различных сетевых уровней.
Как можно видеть на рис, РРР устанавливает флаг как 0х7Е (01111110), чтобы указать начало и конец кадра РРР. В последовательных кадрах РРР будет задан только один символ флага. Поле адреса используется для адресации пакета для узла места назначения. В двухточечной линии связи узел назначения адресовать не нужно. Поэтому в РРР поле адреса задается как OxFF, т.е. как адрес широковещания.
В среде HDLC контрольное поле используется для функции подтверждения и упорядочивания уровня канала данных; однако в РРР контрольное поле задано как 0x03 для указания кадра ненумерованной информации (UI). Это то же самое, что и бит, который задается в методах кадрирования Ethernet.
Поле протокола имеет два байта и используется для идентификации протокола в полезной нагрузке РРР. Если поле задано как 0x00-21, то оно указывает на дейтаграмму IP. Контрольная последовательность кадра (FCS) является двухбайтовой CRC, аналогичной тому, что используется для инкапсуляции Ethernet.
Как и SLIP, РРР имеет метод, предотвращающий появление символа флага в середине данных. В синхронной линии связи, такой как ISDN, используется заполнение битами для вставки дополнительных битов, чтобы отметить, когда появляется символ флага. Закодированное представление байтов может содержать более 8 битов, но дополнительные биты добавляются и удаляются аппаратурой синхронной линии связи.
РРР использует также заполнение символами (подобно SLIP) на асинхронных линиях для предотвращения появления флага внутри кадра РРР. Если символ 0х7Е появляется в исходной дейтаграмме IP, то он заменяется строкой символов 0x7D-5D. Если символ ESC (0x7D) возникает в исходной дейтаграмме, то он заменяется последовательностью 0x7D-5D снова в 0x7D.
Символы меньше 0x20 также модифицируются, чтобы последовательные драйверы не интерпретировали их как управляющие символы, посылая 0x7D, а затем исходный символ с дополненным шестым битом.
Максимальная получаемая единица данных (MRU) равна 1500 байтам.
РРТР Протокол РРТР является способом взять существующий кадр РРР и инкапсулировать его через межсетевой обмен IP. РРТР позволяет создать в Интернете защищенные виртуальные частные сети (VPN). РРТР может использоваться независимо от того, поддерживает VPN провайдер услуг Интернета (ISP) или нет. Требуется только сервер, поддерживающий РРТР, и клиент, который может создать соединение РРТР. ,
Инкапсуляция кадров РРР реализуется с помощью протокола инкапсуляции базовой маршрутизации (GRE), который использует ID протокола IP, равный 47 (0x2F). Для использования его с РРТР протокол GRE был усовершенствован, чтобы предоставить поле подтверждения.
Как показано на рис. 1.15, кадр РРТР имеет заголовок среды и заголовок IP, прежде чем добраться до заголовка GRE. После заголовка GRE следует заголовок РРР, а затем полезная нагрузка РРР.
Заголовок GRE начинается с двух байтов для флагов. Эти флаги указывают, присутствует ли полезная нагрузка GRE и номера последовательности и подтверждения. Поле типа протокола содержит значение Ethernet, которое соответствует РРР (0х88-0В). Длина полезной нагрузки равна размеру полезной нагрузки GRE в байтах. Идентификатор (ID) вызова является информацией идентификации сеанса для этого пакета РРТР, за которым следуют номера последовательности и номер подтверждения — самый большой номер последовательности, полученный посылающим узлом этого сеанса. Номер последовательности используется для управления потоком, а не для повторной передачи потерянных кадров РРТР.
Как упоминалось в предыдущей главе, TCP/IP — это не просто один-два протокола; обычно реализуется сразу целый набор протоколов, или, как иногда называют, стек протоколов. В предыдущей главе мы познакомились с соответствием между протоколами из стека TCP/IP и эталонной моделью OSI, но теперь рассмотрим этот стек более подробно. Как можно видеть на рис, стек TCP/IP состоит из четырех уровней: уровень приложений, транспортный уровень, уровень Интернета и сетевой уровень. В совокупности эти четыре уровня охватывают все функции модели OSI.
Внизу стека находится уровень сетевого интерфейса, который соответствует физическому уровню модели OSI. Этот уровень отвечает за перенос кадров в среду передачи и за извлечение кадров из среды передачи. Необходимо отметить, что это независимый от среды передачи уровень. Не имеет значения, будет ли это медный провод, волоконно-оптический кабель, лазер, инфракрасные лучи или радио. Кроме того, он не зависит от метода доступа к среде. Поэтому в локальной вычислительной сети (LAN) стек TCP/IP можно использовать поверх Ethernet, Token Ring или FDDI, и, конечно, можно использовать TCP/IP совместно с различными технологиями глобальных сетей (WAN), таких как последовательный канал, использующий старый протокол SLIP, или протокол РРР, который был создан как усовершенствование старого стандарта SLIP. РРР предоставляет службы канального уровня, которые включают обнаружение ошибок, управление конфигурацией, а также методы безопасности. Другим типом технологий WAN является коммутация пакетов, например Frame Relay или ATM.
Следующим уровнем снизу является уровень Интернета, который предоставляет функции, соответствующие второму (канальному) и третьему (сетевому) уровням модели OSI. Уровень Интернета отвечает за инкапсуляцию пакетов в дейтаграммы IP и выполняет все необходимые алгоритмы маршрутизации. Здесь имеются четыре протокола IP: протокол управляющих сообщений Интернета (Internet Control Message Protocol, iCMP), протокол управления группами Интернет (Internet Group Management Protocol, IGMP), протокол Интернет (Internet Protocol, IP) и протокол преобразования адресов (Address Resolution Protocol, ARP). Протокол ICMP используется для отправки сообщений и сообщений об ошибках относительно доставки пакетов. Он осуществляет это от имени IP. ICMP не делает IP "надежным" протоколом, но он может предоставить определенный уровень обратной связи по специальным условиям. Сами сообщения ICMP переносятся как дейтаграммы, т.е. без обеспечения надежности. Следующим протоколом, представленным на этом уровне, является IGMP. Он используется компьютерами для сообщения о своем членстве в определенной группе, чтобы получать широковещательные рассылки от маршрутизаторов, которые поддерживают широковещание. Эти рассылки передаются как дейтаграммы, т.е. являются ненадежной формой коммуникации. Последними двумя протоколами Интернета, о которых необходимо сказать, являются IP и ARP. В связи с важностью сетевой коммуникации мы рассмотрим их более детально. Остановимся сначала на протоколе IP.
IP отвечает за адресацию и маршрутизацию пакетов между компьютерами и сетями. (Каждое устройство в сети IP, имеющее IP-адрес, называется хостом; иногда хостами называют компьютеры, маршрутизаторы, принтеры и даже управляемые концентраторы.) Именно поэтому адрес, присвоенный хосту, поддерживающему стек TCP/IP, называется IP-адресом. Это протокол без поддержки соединения, т.е. он не создает сеанс перед передачей данных. В этом отношении он является ненадежным протоколом, так как не гарантирует доставку, не требуя подтверждения, что данные получены в месте назначения. Следующим протоколом уровня Интернета является протокол ARP.
ARP используется для поиска аппаратного адреса машины в сети. Этот адрес, называемый иногда адресом МАС или адресом платы Ethernet, требуется, если два компьютера собираются общаться друг с другом. Адрес МАС должен быть преобразован в адрес IP, чтобы хосты общались с помощью протокола IP. ?RP преобразует адрес с помощью широковещательной рассылки для всех хостов в локальной сети. Компьютер места назначения будет отвечать пакетом, который содержит IP-адрес и адрес МАС. Эта информация будет затем храниться в кэше ARP на локальной машине. Последующая информация предназначена для удаленного хоста; сначала будет проверяться кэш ARP, а затем посылаться другое широковещательное сообщение.
Второй уровень сверху является транспортным уровнем, отвечающим за обеспечение сеансов коммуникации между компьютерами. В стеке существуют два транспортных протокола. Это протокол управления передачей (Transmission Control Protocol, TCP) и протокол пользовательских дейтаграмм (User Datagram Protocol, UDP). Для наличия двух транспортных протоколов в стеке есть серьезная причина, так как они работают по-разному. ТСР является протоколом с поддержкой соединения, т.е. сначала он создает соединение с другой машиной. Используемый, когда требуется надежное соединение, он обеспечивает подтверждение доставки каждого пакета. Если подтверждение не получено, то посылающий компьютер пошлет информацию повторно. С другой стороны, UDP является протоколом без поддержки соединения, он не требует соединения и не гарантирует доставку пакета. Это протокол, работающий без гарантии доставки: он оставляет задачу отслеживания пакетов и управление потоком данных приложению, которое обращается к транспортному уровню.
Вверху модели находится уровень приложений. В стандартной реализации стека протоколов TCP/IP на этом уровне существует множество утилит. Такие протоколы, как FTP (File Transfer Protocol, протокол передачи файлов), Telnet, SNMP (Simple Network Management Protocol, простой протокол управления сетью), DNS (служба имен доменов) находятся на этом уровне, так как именно здесь приложения получают доступ к сети. В реализации TCP/IP компании Microsoft есть два способа, которыми приложения могут получить доступ к сети: либо через NetBIOS, либо через Windows Sockets. Интерфейс NetBIOS позволяет протоколам TCP/IP или NetBEUI использовать службы именования и сообщений, используя соглашение об именах NetBIOS, в то время как служба Windows Sockets предоставляет интерфейс прикладного программирования (API) для транспортных протоколов, таких как TCP/IP или IPX.
Протокол управления передачей (протокол TCP) может выполнять базовую пересылку данных, используя непрерывный поток данных размером в байт. Данные упаковываются в сегменты для передачи протоколом Интернета. В общем TCP сам выполняет управление потоком и сам решает, когда передавать и когда задержать данные, если потребуется. Определена функция push, которая позволяет пользователю узнать, когда TCP успешно передал все данные, предоставленные ему приложением. Посылающий TCP может собирать данные от посылающих пользователей и посылать эти данные в сегментах по своему собственному усмотрению, пока не будет вызвана функция push, после чего он должен послать все не отосланные данные. Когда принимающий TCP видит флаг PUSH, он не должен ждать дополнительные данные от посылающего TCP, прежде чем передать данные в получающий процесс. Push заставляет TCP переслать и доставить полученные до этого момента данные прямо получателю. Мы увидим флаг push в некоторых примерах.
Чтобы восстановить поврежденные, потерянные, пришедшие в неправильном порядке или как-нибудь иначе поврежденные данные, TCP присваивает порядковый номер каждому передаваемому октету. Это позволяет уровню TCP на получающей машине знать, в каком порядке должны прийти пакеты, чтобы правильно их собрать. В дополнение к порядковым номерам, каждый правильно полученный пакет должен также подтверждаться (путем передачи служебного сообщения АСК) получающим TCP. Если АСК не получен в течение периода ожидания, данные будут посланы повторно. Для определения, что пакет был поврежден, используется контрольная сумма. Она добавляется к каждому сегменту, передаваемому посылающей машиной, и проверяется получателем.
Управление потоком обеспечивается с помощью "окна", которое посылается назад с каждым АСК. Это окно является диапазоном порядковых номеров, которые могут быть переданы в следующем раунде коммуникации. Они находятся за последним успешно полученным сегментом. Окно указывает число октетов, которое может послать отправитель, прежде чем получить следующее разрешение. Чтобы хост разрешал общаться через TCP в одно время нескольким процессам, используются порты. Добавление номера порта в конце адреса IP (например: 123.123.123.123:29) формирует со-кет. Пара сокетов используется для идентификации соединения, поэтому сокет можно использовать для переноса данных в обоих направлениях в одно время, т.е. это "дуплексная передача".
Хотя каждый хост отвечает за номера портов, которые он использует для этих соединений, некоторые функции были присвоены "хорошо известным портам". Эти службы доступны по известным адресам. Список этих хорошо известных портов находится в Приложении А. Комбинация сокетов, номеров последовательности и размеров окон называется соединением. Два процесса общаются, устанавливая сначала соединение. Когда коммуникация заканчивается, соединение закрывается, чтобы освободить ресурсы.
Есть два интерфейса, поддерживаемые протоколом управления передачей. Это интерфейс пользователя и интерфейс Интернета. Интерфейс пользователя позволяет вызвать пять основных функций протокола. Этими функциями являются: Открыть соединение, Закрыть соединение, Передать данные, Получить данные и Статус. Функция "Статус" выдает информацию о соединении. Эти пять вызовов действуют так же, как их аналоги в любой другой программе. Например, можно открыть или закрыть файл таким же образом, как TCP выполняет функции аналогичного типа. Пассивный запрос OPEN (открыть) означает, что процесс хочет принять входящие запросы соединения, а не пытается инициировать соединение.
Часто процесс, запрашивающий пассивный OPEN, будет принимать запрос соединения от любого вызывающего абонента. В этом случае для обозначения неуказанного сокета будет использоваться внешний сокет только из нулей. Неопределенные внешние сокеты допускаются только на пассивных OPEN. Процесс службы, которая желает предоставлять услуги для других неизвестных процессов, будет создавать пассивный запрос OPEN с неопределенным внешним сокетом. Затем можно будет создать соединение с любым процессом, который запрашивает соединение с этим локальным сокетом. Это полезно, если известно, что этот локальный сокет связан с данной службой.
Хорошо известные сокеты являются удобным механизмом связывания адреса сокета со стандартной службой. Например, процесс "TelnetServer" постоянно присвоен определенному сокету, а другие сокеты зарезервированы для передачи файлов. Интерфейс Интернета, поддерживаемый TCP, предоставляет только два вызова. Он может посылать или получать дейтаграммы, адресованные модулям TCP на других хостах. Эти вызовы имеют ряд параметров, которые можно задавать. Они задаются как флаги в кадре, как мы увидим в примерах трассировок. Эти параметры включают тип службы, приоритеты, безопасность и другую управляющую информацию.
Если при аварийном прекращении работы хост не сохраняет никакой информации о последних номерах последовательности, переданных во время активного (т.е. не закрытого) соединения, при отправке любых сегментов TCP будет происходить задержка на период не менее согласованного времени MSL внутренней системы, частью которой является хост. Реализаторы TCP могут нарушать ограничение "времени молчания", но они рискуют тем, что некоторые получатели в Интернете старые данные будут принимать как новые, или отвергать новые данные как старые дубликаты.
TCP использует пространство номеров последовательности всякий раз, когда сегмент формируется и вводится в очередь сетевого вывода на хосте источника. Обнаружение дубликатов и алгоритм упорядочивания в протоколе TCP опирается на уникальное связывание данных сегмента с пространством последовательности, при условии, что номера последовательности не переберут все 2*а значения, прежде чем данные сегмента, связанные с этими номерами последовательности, будут доставлены и подтверждены получателем, и все двойные копии сегментов "исчезнут" из Интернета. Без такого предположения двум различным сегментам TCP могли бы быть присвоены одинаковые или перекрывающиеся номера последовательности, вызывая путаницу у получателя в определении, какие данные являются новыми, а какие старыми. Помните, что каждый сегмент связан с числом порядковых номеров последовательности, равным числу октетов данных в сегменте.
При обычных условиях TCP отслеживает следующий номер последовательности для отправки и самый старый, ожидающий подтверждения, чтобы избежать ошибочного использования номера последовательности, прежде чем первое использование было подтверждено. Однако это не гарантирует, что старые дублирующие данные удаляются из сети. Поэтому пространство последовательности сделано достаточно большим, чтобы сократить вероятность возникновения проблем из-за блуждающего дубликата. При двух Мбит/сек потребуется 4,5 часа для использования 23'' октетов пространства последовательности. Так как максимальное время жизни сегмента в сети, скорее всего, не превышает нескольких десятков секунд, это считается достаточной защитой для будущих сетей, даже если скорости передачи данных вырастут до десятков Мбит/сек. При 100 Мбит/сек время цикла равно 5,4 мин, что, возможно, коротковато, но все еще в пределах разумного.
Однако базовый механизм обнаружения дубликатов и алгоритм упорядочивания в TCP может не сработать, если TCP источника не сохраняет номера последовательности, которые он использовал в последнее время на данном соединении. Например, если бы TCP должен был запускать все соединения с порядкового номера 0, то после аварийного завершения и перезапуска TCP мог бы переформатировать предыдущее соединение (возможно, после разрешения полуоткрытого соединения) и послать пакеты с номерами последовательности, идентичными или перекрывающимися пакетами, все еще находящимися в сети, которые были посланы предыдущей инкарнацией того же соединения. При отсутствии информации о номерах последовательности, использованных определенным соединением, спецификация TCP рекомендует, чтобы источник делал задержку на MSL секунд, прежде чем посылать в соединение сегменты, чтобы дать время сегментам, остающимся в сети от предыдущей инкарнации соединения, исчезнуть из системы. Даже те хосты, которые могут запоминать время дня и использовать его для выбора значений начального номера последовательности, не защищены от этой проблемы (т.е. даже если учитывается время дня для выбора начального номера последовательности в каждой новой инкарнации соединения).
