Интернет-протоколы транспортного уровня
Протокол управления транспортировкой. Передача информации между приложением-клиентом и сервером. Назначение полей данных в заголовке UDP. Скользящее окно для увеличения пропускной способности сети. Ответственность транспортных протоколов за данные.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 17.06.2012 |
Размер файла | 24,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Интернет-протоколы транспортного уровня
Приложение, работающее с Интернет, как правило, общается с одним из протоколов транспортного уровня TCP/IP: протоколом управления транспортировкой (TCP) или протоколом пользовательских датаграмм (UDP). Приложение строит свою работу на взаимодействии с одним из этих протоколов. Приложения Интернет, например программа ftp, передающая файлы по сети, обычно использует TCP, так как он предлагает надежную потокоориентированную службу доставки. Приложения типа электронной почты часто пользуются TCP по той же самой причине. Не требующие особой надежности приложения типа tftp (протокол простой передачи файлов, trivial file transfer protocol) используют UDP. Приложения на основе протокола времени (time protocol), связывающиеся с серверами времени Интернет, могут пользоваться как тем, так и другим протоколом. Прочтя эту главу, вы будете точно знать, в каком случае может потребоваться TCP, а в каком - UDP.
Конечная цель сетевого взаимодействия заключается в передаче информации между приложением-клиентом и приложением-сервером. Понимание транспортных протоколов и транспортного уровня совершенно необходимо для эффективного проектирования приложений типа клиент-сервер. Закончив чтение данной главы, вы овладеете следующими понятиями и концепциями:
Как транспортный протокол использует порт протокола для связи с программой-приложением.
Назначение полей данных в заголовке UDP.
Как TCP обеспечивает надежную доставку данных.
Как TCP использует скользящее окно для увеличения пропускной способности сети.
Как модули TCP устанавливают и заканчивают соединение.
Как TCP использует сообщения-подтверждения.
Назначение полей данных в заголовке TCP.
Что такое транспортный уровень?
На первый взгляд кажется, что IP, служба доставки Интернет, и транспортные протоколы выполняют одинаковые функции. На самом деле IP модуль доставляет данные только между двумя компьютерами. Транспортный уровень и его протоколы передают данные между приложениями.
Во многих случаях ответственность транспортных протоколов за передаваемые данные такая же, как и у протокола Интернет. И вообще, большинство из того, что вы узнали относительно IP-датаграммы и IP-заголовка, в полной мере применимо и к транспортным протоколам. Вы знаете, что TCP/IP включает два транспортных протокола: протокол управления транспортировкой (собственно, транспортный протокол, TCP) и протокол пользовательских датаграмм (UDP). Ориентированный на соединение протокол управления транспортировкой для приема и передачи данных использует надежный поточно-байтовый способ доставки. Сетевое соединение устанавливается в виде виртуальной цепи. Протокол пользовательских датаграмм ненадежен, не ориентирован на соединение, передает и принимает данные при помощи датаграмм.
Что такое порт транспортного уровня?
Понятие «порте» в терминологии TCP/IP очень похоже на IP-адрес компьютера. Только порт обозначает приложение, а IP-адрес - определенный компьютер (вернее, его сетевой интерфейс). Так же как IP-датаграммы содержат адреса источника и получателя данных, транспортные протоколы хранят номера портов источника и получателя. Если вышесказанное кажется вам несколько странным, давайте рассмотрим, что нам известно об аппаратных портах нашего персонального компьютера. Может быть, вам приходилось писать программу, посылающую данные на порт компьютера. Если нет, то вспомним процесс печати через параллельный или последовательный порт. Если вам приходилось пользоваться модемом, концепция портов TCP/IP должна показаться вам еще более знакомой.
Примечание: В случае модема, компьютер принимает и посылает данные через последовательный порт. В случае принтера, данные обыкновенно только посылаются.
Порты персональных компьютеров имеют название и номер. Параллельные порты компьютера называются LPT1 и LPT2. Последовательные - СОМ1 и COM2. В сети Интернет номера портов протоколов только нумеруются. Параллельный порт LPT1 персональных компьютеров годами использовался для печати данных. Тысячи программных продуктов знают, что печатать надо через LPT1. Точно так же порт протокола Интернет ассоциируется со вполне определенным приложением или функцией.
Что такое порт протокола Интернет?
Мы уже упоминали, что Интернет включает протоколы для некоторых часто используемых приложений, например ftp, telnet или электронной почты. Данным приложениям Интернет присвоены так называемые официальные (well-known) номера портов. «Официальность» порта состоит в том, что его номер широко известен и применяется всеми компьютерами в Интернет, работающими с данным сетевым приложением или функцией.
Также как программисты персональных компьютеров пользуются портом LPT1 для печати, программисты Интернет пользуются набором номеров портов для выполнения конкретных сетевых приложений. Например, официальный (общеизвестный) номер порта для простого протокола передачи файлов (tftp) - 69. Официальный номер порта telnet - 23.
Как используется порт UDP?
Протокол, не ориентированный на соединение (IP или UDP), можно сравнить с почтовой службой доставки. Если вы забыли эту аналогию, перечитайте раздел «Словарь терминов расширяется» в третьей главе. Аналогия позволяет увидеть отношение между UDP, портами и приложениями. Здесь почтовое отделение превращается в сетевой компьютер, абонентские ящики - в порты, а люди, их арендующие, - в прикладные программы.
Протокол Интернет - это сетевая служба доставки. Прежде вы думали, что IP похож на почтового работника. Теперь же IP больше походит на грузовик, развозящий письма между почтовыми отделениями, а транспортный протокол - на почтового работника, сортирующего и раскладывающего письма по абонентским ящикам.
Грузовик (IP) развозит письма (данные) по почтовым отделениям (сетевым компьютерам). Почтовые работники (UDP) сортируют почту по номерам абонентских ящиков (портам). Рассортировав письма, почтовые работники (UDP) кладут письма (данные) в абонентские ящики (порты). Клиенты почтового отделения (приложения) периодически проверяют свои ящики и забирают почту. Почтовые работники (UDP) не уведомляют клиентов (приложения) о приходе свежей корреспонденции (данных), а просто размещают ее в абонентском ящике (порту).
Как используется порт TCP?
Поскольку TCP является надежным и ориентированным на соединение протоколом, его способ использования портов несколько отличается от способа UDP. Например, будучи не ориентированным на соединение, UDP просто доставляет данные до определенного порта и не обеспечивает никакого соединения между передатчиком и получателем. TCP ориентирован на соединение, поэтому доставка данных для него - не просто передача в порт, но в первую очередь соединение. Например, приложение TCP, пожелавшее открыть несколько соединений одновременно на одном и том же порту, может без проблем сделать это - данные не потеряются.
Мы уже говорили о том, что TCP больше похож на телефонные переговоры, чем на почтовую службу. Сейчас мы немного изменим телефонную аналогию и представим ее в следующем виде. Офис станет сетевым компьютером, номер телефона - портом, а телефонный звонок - сетевым соединением. Служащие в офисе будут представлять прикладные протоколы, а их телефонные переговоры - обмен данными. Как и прежде, IP представляет телефонную компанию.
Служащие (прикладные протоколы), работающие в офисе (сетевом компьютере), пользуются услугами телефонной компании (IP). Каждому служащему присвоен определенный телефонный номер (порт). Несколько телефонных линий (портов) остаются все время свободными, то есть ими может воспользоваться любой желающий. Каждое рабочее место оборудовано телефонным аппаратом, с которого можно звонить (устанавливать соединение), пользуясь любой не занятой в данный момент телефонной линией (портом) в офисе (сетевом компьютере).
Телефонная компания (IP) передает все входящие звонки в офис (сетевой компьютер), заставляя телефонные аппараты звонить. Определенный номер (порт) соответствует определенному служащему (приложению), то есть тому, кто отвечает на звонок (устанавливает соединение). В начале служащий (прикладной протокол) с определенным номером (портом) всегда отвечает на звонок (устанавливает соединение). Далее, если служащий решает продолжить переговоры со звонящим абонентом, он некоторое время беседует с ним по телефону (производит обмен данными).
Служащий (прикладной протокол) отвечает на звонки различным образом. Например, он может пригласить другого служащего принять участие в переговорах. При этом другой служащий (прикладной протокол) поднимает трубку параллельного аппарата (порта) и участвует в переговорах (устанавливает еще одно соединение по тому же самому порту). В некоторых случаях служащий не хочет занимать служебную линию связи (официальный порт) и переключает собеседника на одну из редко используемых линий (другой порт), чтобы никто не прерывал беседу (обмен данными).
Как номер порта используется в программе?
Поскольку транспортный уровень перемещает пакеты данных к прикладным программам и от них, он должен каким-то образом распознавать те программы, с которыми имеет дело. Тут на сцену и выступают номера портов. Любое приложение, независимо от того, сервер оно или клиент, имеет уникальный номер порта. Когда программа устанавливает соединение с сетью, ей присваивается определенный номер порта. Разрабатывая приложение-клиент, обычно не нужно беспокоиться по поводу номера его порта. Клиент может заранее и не знать его. Но совсем другое дело - приложение-сервер. Каждый раз, когда клиент посылает сообщение, транспортный уровень автоматически присваивает ему правильный номер порта в поле порта источника сообщения. В главе 19 описан процесс создания приложения-сервера, когда вы можете запросить у сети назначить ему определенный, заранее известный номер порта. Приложение-сервер, таким образом, может обслуживать запросы, поступающие с официальных номеров портов, перечисленных, например, в табл. 1.
Что такое протокол пользовательских датаграмм?
UDP весьма похож на IP в том смысле, что они оба ненадежные, не ориентированные на соединение протоколы, пользующиеся датаграммами. Они оба переносят данные между компьютерами, однако только UDP умеет распознать то приложение среди многих, работающих внутри компьютера, которому предназначены данные. Как правило, сеть назначает таким приложениям определенный номер порта. Итак, UDP пользуется датаграммами для доставки данных. Точно так же, как IP прицепляет к данным IP-заголовок, UDP прицепляет к ним UDP-заголовок. Структура UDP-заголовка намного проще. UDP-заголовок содержит четыре поля: «порт-источник», «порт-получатель», «длина сообщения» и «контрольная сумма». Длина UDP-заголовка - восемь байтов. Поля портов состоят из 16-битных целых чисел, представляющих номера портов протоколов. Поле «порт-источник» содержит номер порта, которым пользуется приложение-источник данных. Поле «порт-получатель» соответственно указывает на номер порта приложения-получателя данных. Поле «длина сообщения» определяет длину (в байтах) UDP-датаграммы, включая UDP-заголовок. Наконец, поле «контрольная сумма», в отличие от контрольной суммы IP-заголовка, содержит результат суммирования всей UDP-датаграммы, включая ее данные, область которых начинается сразу после заголовка.
Примечание: Несмотря на то, что контрольная сумма UDP включает область данных, подсчитывать и помещать ее в заголовок не обязательно. Такое поведение не характерно, например, для протоколов IP или TCP. Последние обязаны подсчитать и включить в свой заголовок контрольную сумму.
Модуль UDP отслеживает появление вновь прибывших датаграмм, сортирует их и распределяет (демультиплексирует) в соответствии с портами назначения
Поток данных через модуль UDP
Что такое транспортный протокол?
Транспортный протокол (Transport Control Protocol, TCP) наряду с протоколом IP - один из наиболее распространенных в Интернет. Так же, как и UDP, TCP служит для передачи данных между сетевым и прикладным уровнями сетевой модели. По сравнению с UDP TCP устроен гораздо сложнее. И это понятно - ведь ему приходится обеспечивать надежную, потоковую, ориентированную на соединение службу доставки данных. Другими словами, TCP сам следит за доставкой данных, а также за правильной последовательностью передаваемых пакетов. В отличие от TCP протокол пользовательских датаграмм (UDP) доставки данных не гарантирует. Не обеспечивает он и правильной последовательности прихода датаграмм.
TCP пытается оптимизировать пропускную способность сети, то есть увеличивает производительность доставки пакетов в Интернет, насколько это вообще возможно. Для этого он динамически управляет потоком данных в соединении. Если буфер приемника данных на принимающем конце переполняется, TCP просит передающую сторону снизить скорость передачи.
Рассмотрим, каким образом протокол управления транспортировкой пользуется услугами IP для передачи данных между двумя компьютерами. Может показаться странным, что TCP умудряется пользоваться ненадежным IP и при этом оставаться надежным. Также может казаться удивительным, что TCP, пользуясь не ориентированным на соединение IP, остается ориентированным на соединение. Наконец, как получается, что TCP доставляет данные в виде потока байтов, тогда как IP пересылает датаграммы? Последующие абзацы ответят на все эти вопросы и устранят возможные недоразумения. Постигая секреты TCP, вы должны помнить о том, что его данные всегда переносит IP. To есть данные TCP всегда упаковываются в IP-датаграммы.
Обеспечение надежности
Для обеспечения надежной доставки и правильной последовательности данных в потоке TCP пользуется подтверждениями. Как только пункт назначения принимает блок данных, он передает подтверждение о приеме источнику данных. Источнику данных это сообщение говорит: «Все в порядке. Я принял твои данные». Каждый раз при передаче сообщения модуль TCP запускает специальный таймер. По истечении заданного в нем времени и не получении подтверждения TCP повторяет попытку передать свое сообщение
Передача данных с простым подтверждением о доставке
К несчастью, простое подтверждение о доставке, изображенное на рис. 5.3, работает исключительно неэффективно. Одна из сторон соединения вынуждена все время ждать появления подтверждения о доставке от другой стороны. Вскоре вы узнаете, что на самом деле TCP не использует такую простейшую схему подтверждения, при которой пакеты и подтверждения следуют по очереди друг за другом.
Что такое скользящее окно?
TCP не посылает один пакет, ожидая прихода подтверждения, чтобы послать следующий. Вместо этого он использует принцип «скользящего окна». Этот принцип позволяет послать несколько сообщений и только потом ожидать подтверждения.
Скользящее окно TCP
Что такое транспортный протокол?
Выражаясь образно, TCP как бы накладывает окно на поток данных, ожидающих передачи, и передает все данные, попавшие в окно. Приняв подтверждение о доставке всех данных, TCP перемещает окно дальше по потоку и передает следующие попавшие в него сообщения. Работая сразу с несколькими сообщениями, TCP может одновременно «выставить» их на сетевой канал и только потом ожидать прихода подтверждения. Метод скользящего окна значительно увеличивает производительность соединения, а также эффективность циклов обмена сообщениями и подтверждениями об их доставке.
Передача сообщений и подтверждений о доставке по схеме скользящего окна.
Передатчик и приемник используют скользящее окно шириной в три пакета. То есть передатчик сначала высылает три пакета и только после ждет прихода подтверждения. Приняв подтверждение о доставке третьего последнего пакета, передатчик может посылать следующие три.
TCP регулирует полосу пропускания сети, договариваясь с другой стороной о некоторых параметрах потока данных. Причем процесс регулировки происходит на протяжении всего соединения TCP. В частности, регулировка заключается в изменении размеров скользящего окна. Если сеть загружена не сильно и вероятность столкновения данных минимальна, TCP может увеличить размер скользящего окна. При этом скорость выдачи данных на канал увеличивается и соединение становится более эффективным, поскольку через сеть проходит больше данных за одно и то же время.
Если, наоборот, вероятность столкновения данных велика, TCP уменьшает размер скользящего окна. Если размер скользящего окна принять равным восьми пакетам при обычном сетевом трафике, то в худших условиях, когда Интернет сильно загружен, его размер может уменьшиться до пяти. Наоборот, когда данных в сети немного, размер окна может увеличиться, например, до 10-20 пакетов.
Имейте в виду, что описанная в предыдущих абзацах схема несколько упрощена. На самом деле TCP задает размер окна в байтах. То есть размер окна по умолчанию может равняться нескольким тысячам байтов, а не восьми, десяти и двенадцати байтам, как в предыдущем примере. Как правило, модуль TCP передает несколько сегментов, прежде чем скользящее окно заполнится целиком. Большинство систем в Интернет устанавливают окно равным по умолчанию 4096 байтам. Иногда размер окна равен 8192 или 16384 байтам.
Сообщение TCP
Блок данных TCP принято называть сообщением или сегментом. Оба эти термина вполне корректны и широко употребляются в литературе, посвященной Интернет. Мы, однако, по причинам, которые обсудим ниже, на протяжении всей книги будем употреблять термин «сегмента. TCP рассматривает свои данные в качестве однородного, неделимого потока. Тем не менее для доставки данных он вынужден использовать IP-датаграммы. Прикладной программе, однако, совершенно не обязательно знать, что ее поток данных переносят датаграммы. TCP делает этот процесс прозрачным для всех приложений, работающих через него.
Где бы вы не встретили термин «сообщением, относящийся к TCP, можете смело подставлять туда термин «сегмента. Почему? Потому, что каждое сообщение TCP, доставленное датаграммой протокола Интернет, является на самом деле ТСР-сегментом. Сегмент TCP состоит из TCP-заголовка, TCP-опций и данных, переносимых сегментом. На рис. 5.6 изображена структура сегмента TCP. Несмотря на то, что заголовок показан состоящим как бы из нескольких уровней, на самом деле он является последовательным потоком данных, длиной как минимум в 20 байтов. В табл. 5.2 кратко описано назначение каждого поля заголовка TCP. Способы применения каждого поля будут обсуждены в следующих абзацах.
Определенная система обмена сообщениями-подтверждениями соединения TCP является частью более общего процесса синхронизации обмена данными. Не будет системы - соединение может не состояться. В следующих абзацах описываются поля TCP-заголовка, служащие для обмена подтверждениями. Для установления и прекращения соединения, а также для отправки и получения подтверждений TCP заголовок имеет поля «номер последовательности», «номер подтверждения» и поля флагов. Каждый раз, желая что-нибудь передать по протоколу TCP, программа-приложение запрашивает модуль TCP установить соединение. Модуль TCP в свою очередь шлет сообщение TCP с установленным флагом SYN (синхронизации) удаленному порту, с которым программа-клиент хочет установить соединение.
Флаг синхронизации указывает принимающей стороне (серверу, например), что программа-клиент желает установить соединение. Вместе с флагом SYN, сообщение TCP несет в себе 32-битный номер последовательности, размещенный модулем TCP в поле «номер последовательности». TCP-модуль сервера отвечает сегментом TCP с установленными флагом подтверждения (АСК) и номером подтверждения. Для того чтобы разобраться в процедуре установления соединения TCP, необходимо понимать смысл номеров последовательности и подтверждения. В следующем разделе процедура установления соединения и смысл соответствующих номеров изучаются более подробно.
Что такое начальный номер последовательности?
Мы уже отмечали выше, что обе стороны соединения TCP должны идентифицировать информацию в потоке данных для того, чтобы корректно слать и принимать подтверждения о доставке. Номер последовательности - это то, как TCP обозначает данные. Сетевые компьютеры пользуются разнообразными методами для выбора начального номера последовательности (для наших целей, однако, эти методы несущественны). Вы можете рассматривать начальный номер последовательности как случайное число. Значение начального номера последовательности не играет никакой роли.
Начальный номер последовательности представляет собой число, пересылаемое модулем-передатчиком TCP модулю-приемнику TCP. Передавая начальный номер, TCP-модуль как бы сообщает корреспонденту: «Эй, я хочу установить с тобой соединение. Нумерация данных в потоке от меня начинается с этого числа».
Сервер-приемник сообщения, получив запрос на установление соединения, тоже не сидит сложа руки. Он посылает обратно сообщение, содержащее его собственный начальный номер. Модуль TCP генерирует какое-либо число, совершенно не зависящее от числа, посланного TCP-клиентом. Другими словами, сервер как бы сообщает: «Привет! Я получил твой запрос на TCP-соединение и высылаю номер, с которого начнется нумерация моих собственных данных».
Все TCP соединения являются дуплексными. Данные следуют в обоих направлениях одновременно. Поток данных в одном направлении совершенно не зависит от потока данных в противоположном. В силу дуплексной природы соединения оба модуля TCP должны учитывать и нумеровать данные в каждом направлении по-разному, а значит, обрабатывать два начальных номера последовательности.
Подтверждение доставки данных
В TCP-заголовке самого первого, начального, сообщения-ответа сервера модуль TCP устанавливает два флага: синхронизации (SYN), чтобы известить модуль TCP клиента о том, что в сообщении содержится начальный номер последовательности сервера, и подтверждения (АСК), чтобы заставить клиента изучить содержимое поля «подтверждение».
TCP-модуль сервера использует номер последовательности, принятый от клиента, чтобы сконструировать на его основе собственный номер подтверждения. Номер подтверждения всегда указывает на номер сообщения, которое сервер рассчитывает получить следующим. Таким образом, в начальном сообщении-ответе сервера содержится номер последовательности клиента, увеличенный на единицу.
Предположим, например, что модуль TCP клиента, запрашивающего соединение, шлет номер последовательности, равный 1000. В ответ от сервера он получит начальное сообщение с числом 1001, установленным в поле подтверждения. Для модуля-клиента это выглядит, как будто сервер сказал: «Кстати, следующее сообщение, которое я от тебя ожидаю, должно иметь номер 1001».
Соединение установлено!
До передачи любых данных модуль TCP клиента, запросивший соединение, должен подтвердить начальное сообщение-ответ, пришедшее от модуля TCP сервера. То есть, когда модуль TCP клиента получает начальное сообщение-ответ от сервера, он должен посылать «подтверждение подтверждения». (На самом деле клиент подтверждает запрос сервера на синхронизацию обмена.)
Сообщение, посланное TCP-модулем клиента, тоже будет содержать установленный флаг «подтверждение». В поле «номер подтверждения» TCP-модуль клиента размещает начальный номер последовательности, принятый от сервера, увеличенный на единицу. (Теперь TCP-модуль клиента не устанавливает флаг синхронизации, так как обе стороны соединения уже синхронизировались, то есть договорились о начальных номерах своих последовательностей.) Другими словами, между TCP-модулями происходит обмен данными, состоящий из трех стадий:
1. TCP-модуль клиента пытается установить TCP-соединение, посылая запрос на синхронизацию, содержащий среди прочего начальный номер последовательности.
2. TCP-модуль сервера подтверждает прием запроса на установление соединения и в свою очередь шлет клиенту запрос на синхронизацию с собственным начальным номером последовательности.
3. TCP-модуль клиента подтверждает прием запроса сервера на синхронизацию.
Что такое номер последовательности?
Номер последовательности однозначно идентифицирует байт данных в потоке данных TCP. Как следует из названия, номера последовательности последовательны, то есть следуют один за другим. Однако номера последовательности разных соединений TCP необязательно начинаются с одного и того же числа. Номер последовательности, устанавливаемый в каждом сегменте TCP, идентифицирует первый байт в сообщении. То есть является смещением относительно начала потока данных. Номер последовательности-то же самое, что счетчик переданных байтов. Он как бы говорит: «Первый байт этого пакета - это номер байта (номер последовательности) в потоке данных».
Предположим, что программа-клиент желает передать 2000 байтов данных посредством TCP. Предположим, что произведена синхронизация и следующий номер последовательности будет равен 1251. Предположим так же, что длина данных в сегменте равна 500 байтам. Произойдут следующие события:
1. Модуль TCP клиента передает сегмент TCP, содержащий байты с 1 по 500. Номер последовательности, записанный в поле «номер последовательности» сегмента, равен 1251.
2. Модуль TCP клиента передает сегмент TCP, содержащий байты с 501 по 1000. Номер последовательности равен 1751.
3. Следующий сегмент, посланный модулем TCP клиента, содержит байты с 1001 по 1500 с номером последовательности, равным 2251.
4. Наконец, модуль TCP клиента передает данные с 1501 байта по 2000 и устанавливает номер последовательности равным 2751.
TCP-модуль сервера в нашем примере шлет следующие сообщения:
1. Приняв первый сегмент от клиента, TCP-модуль сервера отвечает пакетом-подтверждением с номером подтверждения 1751. Сервер как бы говорит:
«Эй, я принял твои данные, и следующий сегмент, который я надеюсь получить, должен содержать номер последовательности 1751».
2. Приняв второй сегмент, TCP-модуль сервера шлет номер подтверждения, установленный в 2251.
3. Приняв третий сегмент, TCP-модуль сервера шлет номер подтверждения, равный 2751.
4. Приняв четвертый сегмент, TCP-модуль сервера шлет номер подтверждения, равный 3251. (В данный момент TCP-модуль сервера не знает, что передача данных окончена - TCP-модуль клиента еще не известил об этом).
Дуплексные сетевые службы
Как уже отмечалось, соединение TCP является дуплексным. Это значит, что данные следуют одновременно в обоих направлениях. Данные, следующие в одном направлении, совершенно не зависят от данных, следующих в противоположном. Поскольку обмен данными TCP является дуплексным, TCP-модулям необходимо подсчитывать получаемые и передаваемые данные раздельно, и номера последовательности для обоих потоков будут разными.
Если вышесказанное не произвело на вас впечатления, давайте рассмотрим поток данных с точки зрения одной из сторон соединения. Предположим, что мы рассматриваем поток данных со стороны TCP-модуля клиента. С точки зрения TCP-модуля клиента номер последовательности отсчитывает или идентифицирует данные, посылаемые клиентом в сторону TCP-модуля сервера. Номер подтверждения в сегментах, посланных TCP-модулем клиента, с его точки зрения идентифицирует данные, принятые от TCP-модуля сервера. На рис. 5.7 изображен поток данных и номера последовательности так, как они выглядят со стопоны TCP-модуля клиента.
Окончание соединения TCP
Соединение TCP заканчивается обменом пакетами, состоящего из двух стадий. Каждая из сторон, как сервер, так и клиент, может предложить другой закончить соединение. Для этого сторона-инициатор обмена высылает пакет с установленным флагом «окончание обмена» (FIN). В силу дуплексной природы протокола TCP оба потока данных независимы, и должны быть завершены по отдельности. Если вам приходилось программировать в UNIX, последнее утверждение предыдущего абзаца может показаться подозрительным. Когда в UNIX закрывается соединение, дальнейший обмен по нему становится невозможен. Соединение TCP работает по-другому. Даже после закрытия соединения (завершения передачи данных) одной из сторон соединения она в состоянии продолжать прием данных от другой стороны соединения.
Мысль принимать данные после закрытия соединения кажется странной на первый взгляд. На самом деле, установленный в пакете флаг FIN является сигналом, означающим, что одна сторона прекратила передачу данных. Приход сообщения-подтверждения от другой стороны означает, что обе стороны договорились прекратить обмен данными в одном направлении. Начиная с этого момента одна из сторон соединения будет молчаливо принимать данные, не делая никаких замечаний по их поводу, а другая молчаливо посылать, не ожидая никаких комментариев. Окончание (закрытие) TCP-соединения - двухступенчатый процесс. Одна сторона выполняет активное закрытие, а другая - пассивное. Закрытие активно, если вызвано по инициативе данной стороны, и, наоборот, пассивно, если вызвано противоположной стороной соединения. Сторона, первой высылающая пакет с установленным флагом «окончание соединения», является активной. Как правило, модуль TCP, принявший пакет с установленным флагом «окончание соединения», инициирует пассивное окончание соединения. Это просто значит, что пассивная сторона также посылает сообщение с установленным флагом окончания. Другими словами, сторона, принявшая сообщение об окончании первой, отвечает: «Хорошо, если тебе нечего больше послать, то и мне тоже нечего послать тебе». После того как обе стороны выслали друг другу сообщения об окончании и получили подтверждения о доставке этих сообщений, соединение TCP считается действительно законченным (закрытым).
протокол интернет транспортировка пропускной
Размещено на Allbest.ru
Подобные документы
Основная функция транспортного уровня и механизм управления потоком. Отправители и получатели данных, передаваемых через сеть, семейство протоколов TCP/IP. Управление соединениями и базовая передача данных. Разделение (мультиплексирование) каналов.
курсовая работа [266,0 K], добавлен 28.06.2014История возникновения глобальной компьютерной сети интернет. Компьютеры-серверы и компьютеры-клиенты. Провайдеры интернет и их сети. Доступ в интернет из локальной сети. Взаимодействие между клиентом и сервером. Приложения-серверы и приложения-клиенты.
реферат [53,5 K], добавлен 13.10.2011Виды протоколов - стандартов, определяющих формы представления и способы пересылки сообщений, процедуры их интерпретации, правила совместной работы оборудования в сетях. Корневые серверы DNS, обеспечивающие работу системы доменных имен Интернета.
презентация [1,4 M], добавлен 14.05.2017Общие сведения о стандартизированном протоколе передачи данных FTP. Модель построения протокола обмена информацией, его применение в автоматических системах оплаты через интернет. Управляющее соединение между клиентом и сервером, программное обеспечение.
презентация [96,0 K], добавлен 15.12.2010Модели и протоколы передачи данных. Эталонная модель OSI. Стандартизация в области телекоммуникаций. Стеки протоколов и стандартизация локальных сетей. Понятие открытой системы. Internet и стек протоколов TCP/IP. Взаимодействие открытых систем.
дипломная работа [98,9 K], добавлен 23.06.2012Протокол как набор соглашений и правил, определяющих порядок обмена информацией в компьютерной сети. Краткое описание и характеристика некоторых протоколов используемых в работе Интернет: TCP/IP, POP3, IMAP4, SMTP, FTP, HTTP, WAIS, TELNET, WAP.
презентация [2,9 M], добавлен 27.04.2011Описание принципов функционирования протоколов, используемых во всемирной сети. Характеристика структуры и особенностей работы Интернета. Преимущества использования электронной почты, IP-телефонии, средств мгновенного обмена сообщениями (ICQ, Skype).
реферат [1,2 M], добавлен 23.04.2011Компьютерные сети и протоколы передачи данных. Устройства, взаимодействующие с компьютерными сетями при помощи протоколов передачи данных. Мобильные вычислительные устройства и операционные системы. Клиент-серверное приложение для управления расписанием.
дипломная работа [1,8 M], добавлен 11.12.2015Особенности организации передачи данных в компьютерной сети. Эталонная модель взаимодействия открытых систем. Методы передачи данных на нижнем уровне, доступа к передающей среде. Анализ протоколов передачи данных нижнего уровня на примере стека TCP/IP.
курсовая работа [1,0 M], добавлен 07.08.2011Разработка протоколов передачи данных электросвязи для систем сотовой и кабельной связи по аналого-цифровым телефонным линиям связи. Одновременная передача данных и голоса, коррекция ошибок и сжатия; их возможности. История и прогноз на будущее.
реферат [72,9 K], добавлен 06.04.2010