Протоколы UDP и TCP особенно используют в работе клиент-серверную модель взаимоотношений. При этом кто-то из участников обмена данными должен быть сервером, а кто-то клиентом. Понятие сервера никак не связано с функциональной нагрузкой, сервер может и принимать и передавать данные. Важно то, что именно сервер заявляет о себе операционной системе, сообщая, что он ждет запросов на соединения или ждет сетевые пакеты. На одном компьютере может быть несколько серверов, ожидающих запросы от клиентов.
Клиент – это инициатор связи, тот, кто формирует запрос на соединение и передает его в сеть. Очевидно, что в пакете должен быть указан адрес (имя) компьютера, которому необходимо передать пакет. Кроме того, в пакете должно быть некоторое имя (адрес) серверного приложения.
Сетевые устройства направляют пакет на указанный в пакете компьютер. На компьютере-получателе операционная система в полученном пакете находит адрес приложения-получателя и таким образом ОС узнает, какому приложению адресован пакет.
В качестве адреса компьютера используется IP-адрес, а в качестве адреса приложения используется номер порта.
В протоколах TCP и UDP для связи с прикладными процессами используются порты.
Важно!В данном случае имеются в виду логические, а не физические порты!
Номера портам присваиваются следующим образом: имеются стандартные, зарезервированные номера (например, номер 21 закреплен за сервисом FTP, 23 - за telnet), а менее известные приложения пользуются произвольно выбранными локальными номерами.
Получается, что серверное приложение заранее объявляет о номере порта, по которому оно ожидает пакеты. Клиенты должны указывать этот номер порта сервера. Таким образом реализуется связь протоколом UDP.
Однако в протоколе TCP порты используются несколько иным способом, чем в UDP. Для организации надежной передачи данных предусматривается установление логического соединения между двумя прикладными процессами. В рамках соединения осуществляется обязательное подтверждение правильности приема для всех переданных сообщений, и при необходимости выполняется повторная передача. Соединение в TCP позволяет вести передачу данных одновременно в обе стороны, то есть полнодуплексную передачу.
Соединение в протоколе TCP идентифицируется парой полных адресов обоих взаимодействующих процессов (оконечных точек). Адрес каждой из оконечных точек включает IP-адрес (номер сети и номер компьютера) и номер порта. Так как клиент будет получать подтверждения о получении данных сервером, то он должен тоже зарезервировать номер порта приема и сообщить его серверу. Таким образом, в заголовке TCP пакета
Одна оконечная точка может участвовать в нескольких соединениях, то есть один сервер может одновременно обслуживать нескольких клиентов.
Установление соединения выполняется в следующей последовательности:
При установлении соединения одна из сторон является инициатором. Она посылает запрос к протоколу TCP на открытие порта для передачи (active open).
После открытия порта протокол TCP на стороне процесса-инициатора посылает запрос процессу, с которым требуется установить соединение.
Протокол TCP на приемной стороне открывает порт для приема данных (passive open) и возвращает квитанцию, подтверждающую прием запроса.
Для того чтобы передача могла вестись в обе стороны, протокол на приемной стороне также открывает порт для передачи (active port) и также передает запрос к противоположной стороне.
Сторона-инициатор открывает порт для приема и возвращает квитанцию. Соединение считается установленным. Далее происходит обмен данными в рамках соединения.