TCP/IP: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Строка 18: Строка 18:
'''[[w:IP|IP]]''' — протокол, лежащий в основе Интернета, его название так и расшифровывается: Internet Protocol.
'''[[w:IP|IP]]''' — протокол, лежащий в основе Интернета, его название так и расшифровывается: Internet Protocol.


Согласно протоколу, каждый узел в сети имеет свой [[w:IP адрес|IP адрес]], состоящий из 4х байт и обычно записываемый как <code>n.n.n.n</code>
Согласно протоколу, каждый узел в сети имеет свой [[w:IP-адрес|IP-адрес]], состоящий из 4х байт и обычно записываемый как <code>n.n.n.n</code>


Каждый узел напрямую «видит» только узлы в своей подсети, с «похожими» адресами (подробнее см. [[w:Маска подсети|Маска подсети]]). А другим узлам он передает пакеты через промежуточные узлы — [[w:Маршрутизатор|Маршрутизаторы]].
Каждый узел напрямую «видит» только узлы в своей подсети, с «похожими» адресами (подробнее см. [[w:Маска подсети|Маска подсети]]). А другим узлам он передает пакеты через промежуточные узлы — [[w:Маршрутизатор|Маршрутизаторы]].

Версия от 15:13, 3 марта 2011

Стеком протоколов TCP/IP называют набор сетевых протоколов, используемых в интернет.

В этом стеке различают несколько уровней, и протоколы высокого уровня всегда базируются на протоколах более низких уровней.


В самом низу находятся физический уровень и канальный уровень. Пример протокола — Ethernet, описывающий передачу данных по коаксиальному кабелю или витой паре. Протоколы этих уровней обычно реализуются на уровне железа, например в сетевой карте компьютера.


Выше идёт сетевой уровень, где находится протокол IP, описывающий структуру сети и доставку пакетов.

Ещё выше — транспортный уровень, где находится протокол TCP, использующийся для передачи данных. Эти протоколы обычно реализуются на уровне Операционной Системы.


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

IP

IP — протокол, лежащий в основе Интернета, его название так и расшифровывается: Internet Protocol.

Согласно протоколу, каждый узел в сети имеет свой IP-адрес, состоящий из 4х байт и обычно записываемый как n.n.n.n

Каждый узел напрямую «видит» только узлы в своей подсети, с «похожими» адресами (подробнее см. Маска подсети). А другим узлам он передает пакеты через промежуточные узлы — Маршрутизаторы.

Посмотреть, как выглядит маршрут пакета от вашего компьютера к другим узлам, можно с помощью команды traceroute.

TCP

TCP протокол базируется на IP для доставки пакетов, но добавляет две важные вещи:

  • установление соединения — это позволяет ему, в отличие от IP, гарантировать доставку пакетов
  • порты — для обмена пакетами между приложениями, а не просто узлами

Протокол TCP предназначен для обмена данными — это «надежный» протокол, потому что:

  1. Обеспечивает надежную доставку данных, так как предусматривает установления логического соединения;
  2. Нумерует пакеты и подтверждает их прием квитанцией, а в случае потери организует повторную передачу;
  3. Делит передаваемый поток байтов на части — сегменты - и передает их нижнему уровню, на приемной стороне снова собирает их в непрерывный поток байтов.

TCP-соединение

Соединение начинается с handshake (рукопожатия):

  1. Узел A посылает узлу B специальный пакет SYN — приглашение к соединению
  2. B отвечает пакетом SYN-ACK — согласием об установлении соединения
  3. A посылает пакет ACK — подтверждение, что согласие получено

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

«Соединение» означает, что узлы помнят друг о друге, нумеруют все пакеты, идущие в обе стороны, посылают подтверждения о получении каждого пакета и перепосылают потерявшиеся по дороге пакеты.


Для узла A это соединение называется исходящим, а для узла B — входящим.

Отметим, что эти термины не имеют никакого отношения к входящему или исходящему трафику. Они показывают только инициатора соединения, то есть направление самого первого пакета (SYN). Любое установленное TCP соединение симметрично, и пакеты с данными по нему всегда идут в обе стороны.


Порт

Сетевой порт — условное число от 1 до 65535, указывающее, какому приложению предназначается пакет.


Согласно 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/