120
Однако этот подход может сказаться на быстродействии некоторых приложений, чтобы избежать этого прикладной программе предоставляются средства для принудительного выталкивания буферизованных данных в необходимых случаях. Кроме того, существует возможность отключения описанного механизма.
Алгоритм медленного старта.
Опыт эксплуатации сетей на основе TCP/IP показал, что с повышением загрузки сети (особенно, сети со шлюзом) ее пропускная способность падает (хотя, казалось бы, она должна оставаться постоянной). Исследования показали, что падение обусловлено появлением в сети большого числа TCP-пакетов, повторно посылаемых к активно используемому узлу сети (обычно это шлюз в другие сети). Дело в том, что приемный буфер TCPмодуля на шлюзе очень быстро заполняется, и TCP-модуль вынужден сбрасывать поступающие к нему пакеты.
Для предупреждения подобной ситуации необходимо согласование темпа передачи TCP-пакетов с возможностями их приема на узле-адресате. Задачу согласования решает алгоритм медленного старта, постепенно повышающий темп передачи данных от медленного до оптимального, при котором нет повторных передач TCP-пакетов. Алгоритм использует так называемое окно перегруженности (congestion window), используемое на передающей стороне для определения максимального объема передаваемых данных вместо размера, получаемого от принимающей стороны в поле окна подтверждающего пакета.
Размер окна перегруженности определяется на передающей стороне путем постепенного его увеличения до момента появления повторных передач (ясно, что размер этого окна никогда не превышает размера окна на принимающей стороне). Однажды определенный размер окна перегруженности остается неизменным, пока вновь не появятся повторные передачи, однако периодически делаются осторожные попытки и увеличить этот размер.
Эксперименты показали, что данный алгоритм позволяет уменьшить количество повторно передаваемых TCP-пакетов на 50 % и повысить пропускную способность сети на 30 %.
121
Протокол дейтаграмм пользователя UDP
Протокол дейтаграмм пользователя UDP (User Datagram Protocol) является протоколом транспортного уровня и базируется на возможностях, предоставляемых межсетевым протоколом IP. Основная задача UDP — обеспечение быстрой передачи данных в сети. Его транспортный адрес в заголовке IP-сегмента равен 17. Описание протокола UDP дано в RFC 768.
Его основные характеристики перечислены ниже:
реализует взаимодействие в режиме без установлениz логического (виртуального) соединения;
организует поблочный (дейтаграммный, пакетный) тип передачи данных;
для идентификации партнеров по взаимодействию на транспортном уровне использует 16-битовые номера_портов;
не гарантирует надежной передачи данных (возможна как потеря UDP-пакетов, так и их дублирование);
не имеет средств уведомления источника UDP-пакета о правильности или ошибочности приема пакетов адресатом;
не обеспечивает правильный порядок доставки UDPпакетов от источника к приемнику;
может гарантировать целостность данных в UDP-пакете за счет использования контрольной суммы;
очень прост (особенно, по сравнению с протоколом TCP). Следует отметить, что, по сути дела, протокол транспортно-
го уровня UDP играет роль интерфейса для прикладных программ к средствам протокола межсетевого уровня IP. Ниже приведен формат заголовка UDP-пакета.
0 |
15 |
31 |
|
порт источника |
порт приемника |
|
|
|
|
длина |
контрольная сумма |
|
|
|
Рис. 6.9 — Формат UDP-пакета (дейтаграммы)
Порт источника и порт приемника — 16-битовые поля,
содержащие номера портов, соответственно, источника и адресата UDP-пакета.
122
Длина — 16-битовое поле, содержащее длину (в байтах) всего UDP-пакета, включая заголовок и данные.
Контрольная сумма — 16-битовое поле, содержащее Internet-контрольную сумму, подсчитанную для UDP-заголовка, данных пакета и псевдозаголовка. Если поле контрольная_сумма UDP-заголовка содержит нулевое значение, это означает, что источник UDP-пакета контрольную сумму не подсчитывал, и приемник выполнять ее проверку не должен. Некоторые реализации протокола UDP (например, в SunOS — клоне ОС UNIX от Sun Microsystems) контрольную сумму не подсчитывают в принципе, полагаясь на возможности контроля целостности данных, реализованные в протоколах сетевого уровня (например, в Ethernet).
Модель Клиент-Сервер
Большинство сетевых приложений написано таким образом, что с одной стороны присутствует клиент, а с другой — сервер. При этом сервер предоставляет определенные сервисы клиентам.
Можно подразделить серверы на два класса: последователь-
ные (iterative) и конкурентные (concurrent).
Впроцессе выполнения шага П2 работы последовательного сервера (см. рис. 6.10, а) часто возникает проблема, заключающаяся в том, что в это время никакие другие клиенты не могут быть обслужены.
Конкурентный сервер позволяет избежать ее (рис. 6.10, б). Запуск нового сервера на шаге К2 для обработки запроса клиента может выглядеть как создание нового процесса, задачи, в зависимости от того какая операционная система лежит в основе этого сервера. Новый сервер обрабатывает поступивший запрос клиента целиком. По завершении сервер уничтожается.
Преимущество конкурентного сервера заключается в том, что он просто запускает другие сервера для обработки запросов от клиентов. В подобном случае каждый клиент имеет собственный сервер. Предполагается, что операционная система поддерживает многозадачность и обслуживание нескольких клиентов одновременно.
Вобщем случае, серверы TCP — конкурентные, а серверы UDP — последовательные. Однако из этого правила могут быть исключения.
|
|
|
|
|
|
|
|
|
123 |
|
|
|
|
|
|
|
|
|
a |
|
|
|
|
|
|
|
|
б |
|
|
|
|
|
|
|
||
|
|
|
|
|
ожидание запроса |
|
|
|
|
|
|
ожидание запроса |
||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
от клиента |
|
|
|
|
|
|
от клиента |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
чтение очереди входящих |
|
|
|
|
|
чтение очереди входящих |
|
|
||||||||
|
|
|
сообщений |
|
|
|
|
|
|
сообщений |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
да |
есть |
нет |
|
|
|
|
да |
есть |
нет |
|
||||||
П1 |
|
сообщение? |
|
|
|
K1 |
|
сообщение? |
|
|
||||||||
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
П2 |
|
обработка запроса от клиента |
|
|
|
K2 |
|
запуск нового сервера для |
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
обработки запроса клиента |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
П3 |
|
отправка ответа клиенту, |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
пославшему запрос |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 6.10 — Алгоритм работы последовательного и конкурентного сервера
6.4 Адресация Internet
Протокол IP в процессе своей работы передает пакет от источника к пункту назначения, для этого в заголовке каждой IPдейтаграммы размещаются уникальные IP-адреса: источника и назначения. Эти адреса представляют собой 32-разрядные номера, уникально идентифицирующие узел (компьютер или сетевое устройство — принтер или маршрутизатор). Необходимо отметить, что сетевые устройства с несколькими интерфейсами (multihomed) имеют несколько IP адресов: по одному на каждый интерфейс.
IP-адреса обычно представлены в виде 4-х байт (октетов), разделенных точками, например 192.168.123.132. Cуществует определенная структура адреса Internet. На рис. 6.6 показано 5 классов адресов Internet.
Чтобы глобальная сеть TCP/IP работала эффективно как совокупность сетей, маршрутизаторы, обеспечивающие обмен пакетами данных между сетями, не знают точного расположения узла, для которого предназначен пакет. Маршрутизаторы знают только, к какой сети принадлежит узел, и используют сведения,
124
хранящиеся в таблицах маршрутизации, чтобы доставить пакет в сеть узла назначения. Как только пакет доставлен в необходимую сеть, он доставляется в соответствующий узел. Для осуществления этого процесса IP-адрес состоит из двух частей. Первая часть IP-адреса обозначает адрес сети, последняя часть — адрес узла. IP-адрес 192.168.123.132, например, разделяется на следующие две части: 192.168.123.0 — адрес сети. 0.0.0.132 — адрес узла.
Определить класс адреса, или класс сети, можно по первому числу в адресе, на рис. 6.11 показаны различные классы, причем первый октет выделен.
Так как каждый интерфейс, подключенный к сети, должен иметь уникальный адрес, встает вопрос распределения IP адресов в глобальной сети Internet. Этим занимается сетевой информаци-
онный центр (Internet Network Information Center или InterNIC) http://www.internic.net. InterNIC назначает только сетевые идентификаторы, назначением идентификаторов хостов в сети занимаются системные администраторы.
Класс А 0.0.0.0 — 127.255.255.255
0 |
идентификатор сети |
идентификатор хоста |
|
|
||||||
|
7 бит |
|
|
|
|
|
24 бита |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Класс В |
128.0.0.0 — 191.255.255.255 |
|
|
|||||||
1 |
0 |
|
идентификатор сети |
идентификатор хоста |
||||||
|
|
|
14 бит |
|
|
|
16 бит |
|||
|
|
|
|
|
|
|
|
|||
Класс С |
192.0.0.0 — 223.255.255.255 |
|
|
|||||||
1 |
1 |
|
0 |
|
идентификатор сети |
|
идентификатор хоста |
|||
|
|
|
|
|
21 бит |
|
8 бит |
|||
|
|
|
|
|
|
|
||||
Класс D |
224.0.0.0 — 239.255.255.255 |
|
|
|||||||
1 |
1 |
|
1 |
|
0 |
идентификатор группы (multicast) |
||||
|
|
|
|
|
|
28 бит |
|
|
||
|
|
|
|
|
|
|
|
|||
Класс E |
|
240.0.0.0 — 247.255.255.255 |
|
|
||||||
1 |
1 |
|
1 |
|
1 |
0 |
зарезервировано для дальнейшего использования |
|||
|
|
|
|
|
|
|
27 бит |
|
|
|
Рис. 6.11 — Классы IP-адресов и их структура
Существует три типа IP адресов: персональный адрес
(unicast) — указывает на один хост, широковещательный адрес
(broadcast) — указывает на все хосты в указанной сети, и группо-