
148 Часть III. Web-протоколы
IP-пакетов и предоставления более удобного сервиса применяются протоколы
транспортного уровня. Многим приложениям нужно, чтобы они передавали дан-
ные в сеть и получали данные из сети точно таким же образом, как осуществляется
запись в файл или чтение из файла. Если отправитель передает 5000 байтов, полу-
чатель должен получить 5000 байтов. Процесс передачи не должен вызывать уте-
рю,
повреждение данных или изменение порядок байтов. Таким образом, передаю-
щему и принимающему приложению нужно, чтобы они взаимодействовали через
соединение, обеспечивающее упорядоченный, надежный поток байтов. IP не пре-
доставляет такого сервиса. Этот сервис предоставляется протоколом Transmission
Control Protocol (TCP), который обычно реализуется в операционной сисч^.ае каж-
дого хоста, подключешюго к Internet.
Приложение использует TCP путем создания сокета (двунаправлегнюго кана-
ла),
что сходно с открытием файла. Оба приложения должны иметь однозначный
способ для идентификации сокета. Знать IP-адреса двух компьютеров недостаточ-
но.
На одном компьютере могут выполняться несколько приложений, а одно при-
ложение, например, Web-сервер, может работать с несколькими сокетами. Каждый
сокет ассоциируется с номером порта на каждом конце соединения. Номер порта
представляет собой 16-битное целое число в диапазоне от О до 65535. Номера,
меньшие 1024, являются известными портами, зарезервированными для опреде-
ленных протоколов прикладного уровня. Например, порт 80 предназначен для
HTTP. Назначение номеров портов приложениям осуществляется организацией но
административному управлению доменами Internet Assigned Number Authority
(IANA). Оставшиеся номера портов в диапазоне от 1024 до 65535 могут быть ис-
пользованы любым приложением. Однако в некоторых случаях вновь разработан-
ный Internet-сервис может не иметь общеизвестного зарезервированного порта.
Тогда выбирается номер порта, который де-факто станет стандартным для этого
приложения.
По умолчанию Web-клиент, например, браузер создает сокет, который соединя-
ется с портом 80 на компьютере сервера. Однако не возбраняется и выбор другого
номера порта. Например, Web-сервер может быть сконфигурирован для прослуши-
вания клиентских запросов на порту 8000. В этом случае клиенту необходимо
знать, что следует запрашивать соединение с портом 8000, а не с портом 80. Это
достигается путем указания номера порта в URL. Например, если пользователь за-
прашивает ресурс http://www.foo.comiSOOO/bar.html, клиент должен создать со-
кет, который соединяется с портом 8000 сервера, а не с портом 80. Клиенту также
нужен номер порта на своей стороне соединения. В противном случае сервер не бу-
дет знать, как направлять данные клиенту. В процессе создания сокета операцион-
ная система на компьютере клиента присваивает клиентскому приложению вре-
менный номер порта (от 1024 до 65535). Сокет идентифицируется по пяти инфор-
мационным составляющим: двум IP-адресам (для компьютеров, выполняющих
приложения), двум номерам портов (для двух приложений, выполняющихся на ка-
ждой стороне соединения) и протоколу (TCP).
Приложения создают сокеты с помощью системных вызовов, реализуемых опера-
ционной системой. Допустим, приложение А (например, Web-клиент) создает сокет
для соединения с удаленным приложением В (например, Web-сервером). Приложе-
ние А инициирует создание сокета, сделав системный вызов. В операционной систе-
ме UNIX для создания нового сокета используется функция socket() [Ste98bj. Затем
приложение делает системный вызов connectQ для связывания сокета с IP-адресом и
номером порта приложения В. Во время выполнения вызова connectQ операционная
система также выбирает неиспользуемый локальный номер порта (от 1024 до 65535)