Все, что ты хотел узнать о сетевых протоколах

Xakep, номер #046, стр. 046-044-3


Большая скорость - большие проблемы с безопасностью. Так как нет соединения между сервером и клиентом, то нет никакой гарантии в достоверности данных. Протокол UDP больше подвержен спуфингу (подмена адреса отправителя), поэтому построение на нем защищенных сетей затруднено. Итак, UDP очень быстр, но его можно использовать только там, где данные не имеют высокой ценности (возможна потеря отдельных пакетов) и не имеют секретности (UDP больше подвержен взлому).

Медленный, но надежный TCP

Как я уже сказал, протокол TCP лежит на одном уровне с UDP и работает поверх IP (для отправки данных используется IP). Именно поэтому протоколы TCP и IP часто объединяют одним названием TCP/IP, потому что TCP неразрывно связан с IP.

В отличие от UDP протокол TCP устраняет недостатки своего транспорта (IP). В этом протоколе заложены средства установления связи между приемником и передатчиком, обеспечение целостности данных и гарантии их доставки.

Когда данные отправляются в сеть по TCP, то на отправляющей стороне включается таймер. Если в течение определенного времени приемник не подтвердит получение данных, то будет предпринята еще одна попытки отправки данных. Если приемник получит испорченные данные, то он сообщит об этом источнику и попросит снова отправить испорченные пакеты. Благодаря этому обеспечивается гарантированная доставка данных.

Опасные связи TCP

Давай посмотрим, как протокол TCP обеспечивает надежность соединения. Все начинается еще на этапе попытки соединения двух компов:

1-й шаг. Клиент, который хочет соединиться с серваком, отправляет SYN запрос на сервер, указывая номер порта, к которому он хочет приконнектиться, и специальное число (чаще всего случайное).

2-й шаг. Сервер отвечает своим сегментом SYN, содержащим специальное число сервера. Он также подтверждает приход SYN пакета от клиента с использованием ACK ответа, где специальное число, отправленное клиентом, увеличено на 1.

3-й шаг. Клиент должен подтвердить приход SYN от сервера с использованием ACK специальным числом сервера плюс 1.

Получается, что при соединении клиента с сервером они обмениваются спецчислами. Эти числа и используются в дальнейшем для обеспечения целостности и защищенности связи (Sequence number). Если кто-то другой захочет вклиниться в установленную связь (с помощью спуфинга), то ему надо будет подделать эти числа. Но так как они большие и выбираются не всегда понятным образом, то такая задача достаточно сложная, но решаемая.

Стоит еще отметить, что приход любого пакета подтверждается ACK ответом, что обеспечивает гарантию доставки данных.

Назад на стр. 046-044-2  Содержание  Вперед на стр. 046-044-4