TCP/IP
Стеком протоколов TCP/IP называют набор сетевых протоколов, используемых в интернете.
В этом стеке различают несколько уровней, и протоколы высокого уровня всегда базируются на протоколах более низких уровней.
В самом низу находятся физический уровень и канальный уровень. Пример - интерфейс Ethernet, описывающий передачу данных по коаксиальному кабелю или витой паре. Протоколы этих уровней обычно реализуются на уровне железа, например в сетевой карте компьютера.
Выше идёт сетевой уровень, где находится протокол IP, описывающий структуру сети и доставку пакетов.
Ещё выше — транспортный уровень, где находится протокол TCP, использующийся для передачи данных. Эти протоколы обычно реализуются на уровне операционной системы.
На самом верху находится множество протоколов прикладного уровня, выполняющих конкретные прикладные задачи. Обычно они программируются в отдельных приложениях.
IP
IP — протокол, лежащий в основе Интернета, его название так и расшифровывается: Internet Protocol.
В настоящее время используются следующие две версии протокола IP:
- IPv6 — сравнительно новая (текущая версия спецификации опубликована в декабре 1998[1]); IP-адрес имеет разрядность 128 бит и записывается в виде восьми 16-битных полей, с использованием шестнадцатеричной системы счисления и с возможностью сокращения двух и более последовательных нулевых полей до
::
; пример:2001:db8:42::1337:cafe
; - IPv4 — «классическая» (1981 г.[2]); IP-адрес имеет разрядность 32 бита и записывается в виде четырех десятичных чисел в диапазоне 0 … 255 через точку; пример:
192.0.2.34
.
Каждый узел может напрямую связаться только с узлами своей сети (например: подключен��ыми к тому же сегменту Ethernet), для определения которых используется адрес сети — часть IP-адреса, определяемая маской сети. Связь с узлами других сетей осуществляется через промежуточные узлы — маршрутизаторы.
Посмотреть, как выглядит маршрут пакета от вашего компьютера к другим узлам, можно с помощью команды traceroute (в Linux) или tracert (в Windows).
TCP
TCP протокол базируется на IP для доставки пакетов, но добавляет две важные вещи:
- установление соединения — это позволяет ему, в отличие от IP, гарантировать доставку пакетов
- порты — для обмена пакетами между приложениями, а не просто узлами
Протокол TCP предназначен для обмена данными — это «надежный» протокол, потому что:
- Обеспечивает надежную доставку данных, так как предусматривает установления логического соединения;
- Нумерует пакеты и подтверждает их прием квитанцией, а в случае потери организует повторную передачу;
- Делит передаваемый поток байтов на части — сегменты - и передает их нижнему уровню, на приемной стороне снова собирает их в непрерывный поток байтов.
TCP-соединение
Соединение двух узлов начинается с handshake (рукопожатия):
- Узел A посылает узлу B специальный пакет SYN — приглашение к соединению
- B отвечает пакетом SYN-ACK — согласием об установлении соединения
- A посылает пакет ACK — подтверждение, что согласие получено
После этого TCP-соединение считается установленным, и приложения, работающие в этих узлах, могут посылать друг другу пакеты с данными.
«Соединение» означает, что узлы помнят друг о друге, нумеруют все пакеты, идущие в обе стороны, посылают подтверждения о получении каждого пакета и перепосылают потерявшиеся по дороге пакеты.
Для узла A это соединение называется исходящим, а для узла B — входящим.
Отметим, что эти термины не имеют никакого отношения к входящему или исходящему трафику. Они показывают только инициатора соединения, то есть направление самого первого пакета (SYN). Любое установленное TCP-соединение симметрично, и пакеты с данными по нему всегда идут в обе стороны.
Когда один из узлов решает, что пора заканчивать соединение, он посылает специальный пакет FIN, после этого узлы прощаются и разрывают соединение.
Порт
Сетевой порт — это сетевой ресурс, отображаемый в виде числа (1-65535), которое определяет назначение входящих или исходящих сетевых потоков данных на заданном устройстве.
Если прибегнуть к аналогии, IP-адрес — это адрес общежития с вахтёром, а порт - номер комнаты в этом общежитии или фамилия ее жильца.
Согласно IP, в каждом пакете присутствуют IP-адрес узла-источника и IP-адрес узла-назначения. В TCP-пакетах дополнительно указываются порт источника и порт назначения.
Например, почтовое письмо (пакет данных) имеет информацию об отправителе (порт) и информацию о получателе (фамилия или номер комнаты по конкретному адресу).
Узел назначения ("вахтер"), получив пакет ("письмо"), смотрит на порт назначения ("фамилию или номер комнаты") и передает пакет соответствующему у себя приложению ("конкретному жильцу").
Использование портов позволяет независимо использовать TCP протокол ("почтовые услуги") сразу многим приложениям на одном и том же компьютере (общежитии).
Клиентом называют приложение, которое пользуется каким-то сервисом, предоставляемым другим приложением — Сервером, обычно на удаленном компьютере. Практически всегда клиент начинает исходящие соединения, а сервер ожидает входящих соединений (от клиентов), хотя бывают и исключения.
Сервер при запуске сообщает Операционной Системе, что хотел бы «занять» определенный порт (или несколько портов). После этого все пакеты, приходящие на компьютер к этому порту, ОС будет передавать этому серверу. Говорят, что сервер «слушает» этот порт.
Клиент, начиная соединение, запрашивает у своей ОС какой-нибудь незанятый порт во временное пользование, и указывает его в посланных пакетах как порт источника. Затем на этот порт он получит ответные пакеты от сервера.
Таким образом, сервер:
- слушает на определённом порту, заранее известном клиенту
- занимает этот порт всё время, пока не завершит работу
- об IP-адресе и номере порта клиента узнаёт из приглашения, посланного клиентом
Клиент:
- заранее знает IP-адрес и порт сервера
- выбирает у себя произвольный порт, который освобождает после окончания соединения
- посылает приглашение к соединению
UDP
UDP — это ещё один протокол транспортного уровня. Он тоже базируется на IP и тоже использует порты, но в отличие от TCP он не устанавливает соединений и не требует подтверждения получения каждого пакета.
Поэтому пакеты могут теряться или приходить в неправильном порядке. Зато этот протокол быстрее и использует меньше ресурсов.
На UDP обычно базируют прикладные протоколы, которым скорость доставки данных важнее надежности, например для передачи потокового видео, общения голосом или онлайн-игр.
Прикладные протоколы
Большинство прикладных протоколов базируется на TCP.
У многих протоколов прикладного уровня для серверов определены стандартные порты, используемые по умолчанию. Самые известные прикладные протоколы и их стандартные порты:
- HTTP — основной протокол всемирной паутины (TCP-порт 80)
- SMTP — протокол пересылки почты (TCP-порт 25)
- FTP — протокол передачи файлов (TCP-порт 21)
- DNS — протокол сопоставления доменных имен IP-адресам (UDP-порт 53)
Благодаря использованию стандартных портов мы можем набирать в браузере адреса веб серверов и не указывать порт — наши браузеры сами добавляют стандартный номер порта. Например, адрес http://www.example.com/
на самом деле полностью выглядит так: http://www.example.com:80/
Разумеется, стандартный — не значит обязательный. Практически во всех прикладных протоколах можно указать серверу слушать произвольный номер порта. Правда, тогда этот номер уже указывать обязательно, например http://www.example.com:8080/
Порты в диапазоне от 1 до 1023 называются хорошо известными. Службы, которыми используются эти порты, должны быть описаны как RFC и одобрены IESG. Далее идут зарегистрированные порты (1024 - 49151). Вы можете зарегистрировать в IANA (эта организация как раз занимается всем этим) один или несколько из этих портов под свою программу. Оставшиеся порты с 49152 по 65535 можно использовать без какой-либо регистрации.
URI
Чтобы указать на документ, расположенный в сети, используется унифицированный идентификатор ресурса, или URI (англ. Unified Resource Identifier), например: https://ru.wikibooks.org/wiki/TCP/IP. Первая часть адреса (от начала до двоеточия) называется схемой (в данном случае — https.) Дальше идёт часть, зависящая от схемы.
Идентификаторы ресурсов (URI) в свою очередь делят на включающие информацию о размещении ресурса в сети URL (англ. Unified Resource Locator), и лишенные таковой URN (англ. Unified Resource Name.) Приведенный выше URI является примером URL; примеры URN: news:m5jgdq$7ig$1@reader1.panix.com, urn:ietf:rfc:2648, urn:isbn:0-13-066102-3, geo:48.2010,16.3695,183.
Ясно, что для получения ресурса по его URN, программное обеспечение должно вначале каким-либо образом определить (или предположить) его наличие на некотором сетевом ресурсе. Так, NNTP-сервер для URN-схемы news: может быть задан переменной окружения NNTPSERVER
. Относящиеся к пространству urn:ietf: URN можно преобразовать по образцу: urn:ietf:rfc:2648 → https://tools.ietf.org/html/rfc2648, или же https://www.rfc-editor.org/rfc/rfc2648.txt.
Примечания
Пожалуйста, добавляйте шаблон {{По алфавиту}} только на титульные страницы.