
2.2.2. Протокол tcp
Протокол TCP лежит на одном уровне с UDP и работает поверх IP (для отправки данных используется IP). Именно поэтому протоколы TCP и IP часто объединяют одним названием TCP/IP, так как TCP неразрывно связан с IP.
В отличие от UDP протокол TCP устраняет недостатки своего транспорта (IP). В этом протоколе заложены средства установления связи между приемником и передатчиком, обеспечение целостности данных и гарантии их доставки.
Когда данные отправляются в сеть по TCP, то на отправляющей стороне включается таймер. Если в течение определенного времени приемник не подтвердит получение данных, то будет предпринята еще одна попытка отправки данных. Если приемник получит испорченные данные, то он сообщит об этом источнику и попросит снова отправить испорченные пакеты. Благодаря этому обеспечивается гарантированная доставка данных.
Когда нужно отправить сразу большую порцию данных, не вмещающихся в один пакет, то они разбиваются на несколько TCP-пакетов. Пакеты отправляются порциями по несколько штук (зависит от настроек стека). Когда сервер получает порцию пакетов, то он восстанавливает их очередность и собирает данные вместе (даже если пакеты прибыли не в том порядке, в котором они отправлялись).
Из-за лишних накладных расходов на установку соединения, подтверждения доставки и повторную пересылку испорченных данных протокол TCP намного медленней UDP. Зато TCP можно использовать там, где нужна гарантия доставки и большая надежность. Хотя надежность нельзя назвать сильной (нет шифрования и есть возможность взлома), но она достаточная и намного больше, чем у UDP. По крайней мере, тут спуфннг не может быть реализован так просто, как в случае с UDP, и в этом вы скоро убедитесь, когда прочтете про процесс установки соединения.
Соединения в протоколе TCP
Протокол TCP обеспечивает надежность соединения следующим способом. Все начинается еще на этапе попытки соединения двух компьютеров:
Клиент, который хочет соединиться с сервером, отправляет запрос на сервер, указывая номер порта, к которому он хочет присоединиться, и специальное число (чаше всего случайное).
Сервер отвечает своим пакетом, содержащим специальное число сервера. Он также подтверждает приход пакета от клиента с использованием АСК-ответа, где специальное число, отправленное клиентом увеличено на 1.
Клиент должен подтвердить приход пакета от сервера с использованием АСК — специальное число сервера плюс 1.
Получается, что при соединении клиента с сервером они обмениваются специальными числами. Эти числа и используются в дальнейшем для обеспечения целостности и защищенности связи. Если кто-то другой захочет вклиниться в установленную связь (с помощью спуфинга), то ему надо будет подделать эти числа. Но так как они большие и выбираются случайным образом, то такая задача достаточно сложна, хотя и разрешима. Стоит еше отметить, что приход любого пакета подтверждается АСК-ответом, что обеспечивает гарантию доставки данных.
2.2. Порты
Что такое порт? Каждая сетевая программа при старте открывает для себя любой свободный порт. Есть программы, которые открывают заведомо определенный порт, например, для FTP это 21-й порт, HTTP— 80-й порт и т. д. Теперь представим себе ситуацию, что на сервере запушено два сервиса: FTP и WEB. Это значит, что на сервере работают две программы, к которым можно присоединиться по сети. Скажем, вы хотите присоединиться к FTP-серверу и посылаете запрос по адресу ХХХ.ХХХ.ХХХ.ХХХ на порт 21, Сервер получает такой запрос и по номеру порта определяет, что ваш запрос относиться именно к FTP-серверу, а не WEB.
Получается, что сетевые порты - это что-то виртуальное, что увидеть невозможно, а точнее сказать — это просто число, по которому программы и ОС определяют, кому пришли данные по сети. Если бы не было портов, то компьютер не смог определить, для кого именно пришел сетевой запрос. Следует помнить, что порты разных протоколов отличаются друг от друга. Например, порт 137 tcp и порт 137 udp – не одно и то же, несмотря на совпадение номера порта.
Зачем нужно сканировать порты? Если знать, какие порты открыты, то можно понять, какие программы запушены на удаленном компьютере. Так, например, если на компьютере открыт 21-й порт, то значит, на нем работает FTP-сервер, и к нему можно попытаться присоединиться с помошью программы FTP Client.
Как сканируются порты? Для понимания этого нужно представлять процесс соединения двух компьютеров. Когда двое в сети хотят соединиться, то один из них посылает другому запрос с номером порта, на котором должно произойти соединение. По этому порту другая сторона определяет, к какой программе хотят подключиться. Если какое-то приложение действительно открыло нужный порт и ожидает соединения, то запрашиваемый получит ответ об успешности попытки. Все проверки пароля и прочие защитные механизмы происходят уже после соединения с портом удаленного компьютера, поэтому мы можем произвести соединение и узнать о доступности порта, даже если программа требует пароля.
Примечание: В файле C:\WINDOWS\system32\drivers\etc\services содержатся номера портов для стандартных служб.