Транзакционный TCP
Это, понятное дело, не очень привлекательная перспектива. Однако и TCP сам по себе в данном случае не кажется слишком привлекательным. Проблема заключается, прежде всего, в эффективности. На рис. 6.33, а показана обычная последовательность пакетов, необходимая для удаленного вызова процедуры. В лучшем случае потребуется обменяться девятью пакетами. Вот они:
1. Клиент посылает пакет SYN для установки соединения.
2.
Сервер посылает пакет АСК для подтверждения приема SYN.3. Клиент выполняет «тройное рукопожатие».
4. Клиент посылает, собственно, свой запрос.
5. Клиент посылает пакет FIN, сигнализирующий об окончании передачи.
6. Сервер подтверждает запрос и FIN.
7. Сервер посылает ответ клиенту.
8. Сервер посылает пакет FIN, сообщающий о том, что он также закончил передачу.
9. Клиент подтверждает FIN сервера.
И это в лучшем случае! Если же обстоятельства складываются не очень удачно, то запрос и FIN клиента подтверждаются раздельно. Раздельно могут подтверждаться и ответ и FIN сервера.
Само собой, возникает вопрос: нельзя ли объединить эффективность выполнения RPC с помощью UDP (всего два сообщения) с надежностью, которую гарантирует TCP? Ответ: отчасти. Можно попытаться применить экспериментальный вариант протокола TCP, называемый транзакционным TCP (Т/ТСР, Transactional TCP).
Протокол Т/ТСР описан в RFC 1379 и 1644.Центральная идея протокола состоит в том, чтобы немного изменить стандартную последовательность действий, выполняемых при установке соединения, и предоставить возможность передачи данных непосредственно во время установки соединения. Работа Т/ТСР показана на рис. 6.33, б. В первом пакете клиента содержится бит SYN, собственно запрос и FIN. В сущности, клиент говорит: «Я хочу установить соединение, вот данные для передачи, и на этом я считаю свою миссию выполненной».
Получив запрос, сервер ищет или вычисляет содержимое ответа и выбирает способ ответа. Если ответ укладывается в один пакет, он будет послан так, как показано на рис. 6.33, б, то есть сервер как бы говорит: «Подтверждаю получение
вашего FIN, вот мой ответ на запрос, и на этом я считаю свою миссию выполненной». Клиент подтверждает FIN сервера, и на этом работа протокола заканчивается. Обратите внимание: на весь процесс потребовалось всего три сообщения.
Рис. 6.33. Удаленный вызов процедуры с помощью обычногоТСР (а); удаленный вызов процедуры с помощью ТДСР (б) |
Однако если ответ не укладывается в один пакет, сервер может и не устанавливать бит FIN в первом же пакете. Он посылает столько пакетов, сколько нужно, прежде чем закрыть соединение в данном направлении.
Стоит отметить, что кроме Т/ТСР известны и другие вариации на тему TCP. Одним из таких протоколов является протокол передачи с контролем потока (SCTP, Stream Control Transmission Protocol). Среди его свойств можно выделить сохранение границ сообщений, несколько режимов доставки (например, неупорядоченная), множественную адресацию (дублирование адресатов), селективные подтверждения (Stewart и Metz, 2001). Тем не менее, когда кто-то предлагает улучшения того, что и так прекрасно работает в течение долгих лет, обычно возникают споры между сторонниками двух диаметрально противоположных принципов: «Все для расширения функциональности» и «Не трогать то, что пока еще не слЬмалось».
Еще по теме Транзакционный TCP:
- Л.О. Доліненко, В.О. Доліненко, С.О. Сарновська. Цивільне право України, 2006
- ЦИВІЛЬНЕ ПРАВО УКРАЇНИ
- ПЕРЕДМОВА
- Частина І ПРОГРАМА КУРСУ «ЦИВІЛЬНЕ ПРАВО УКРАЇНИ»
- Розділ І. Загальні положення цивільного права
- Тема 1. Поняття цивільного права. Предмет та метод, система цивільного права. Функції та принципи цивільного права
- Тема 2. Цивільне законодавство України
- Тема 3. Поняття, елементи та види цивільних правовідносин
- Тема 4. Здійснення цивільних прав і виконання обов’язків
- Тема 5. Захист цивільних прав та інтересів
- Тема 6. Об’єкти цивільних прав
- Тема 7.ФІЗИЧНІ особи як суб’єкти цивільного права