Соотношение между TCP/IP и OSI/ISO
В 1984 г. международная организация ISO предложила семиуровневую модель взаимодействия открытых систем OSI (Open System Interconnection).
Распределение протоколов по уровням модели OSI | ||
Прикладной | HTTP, SMTP, SNMP, RTP, FTP, Telnet, SSH, SCP, SMB, NFS, RTSP, BGP | |
Представительский | XDR, ASN.1, AFP, TLS, SSL | |
Сеансовый | ISO 8327 / CCITT X.225, RPC, NetBIOS, ASP | |
Транспортный | TCP, UDP, SCTP, SPX, ATP, DCCP, GRE | |
Сетевой | IP, ICMP, IGMP, CLNP, OSPF, RIP, IPX, DDP, ARP, RARP | |
Канальный | Ethernet, Token ring, PPP, HDLC, X.25, Frame relay, ISDN, ATM, MPLS, Wi-Fi | |
Физический | электрические провода, радиосвязь, оптоволокно |
Стек протоколов TCP/IP, на базе которого была построена Internet включает в себя протоколы четырёх уровней:
- прикладного уровня (FTP, DNS, HTTP, HTTPS, IMAP, IRC, POP3, SMTP, Telnet)
- транспортного уровня ( TCP, UDP)
- межсетевого (internet) (IP, ICMP)
- сетевого (network access) (Ethernet, X.25, Token Ring, Wi-Fi).
В стеке TCP/IP верхние 3 уровня модели OSI(прикладной, представительский и сеансовый) объединяют в один — прикладной.
Распределение протоколов по уровням модели TCP/IP | ||
Прикладной | HTTP, RTP, FTP, DNS | |
Транспортный | TCP, UDP, SCTP, DCCP | |
Сетевой | это IP и вспомогательные протоколы ICMP и IGMP | |
Канальный | Ethernet, SLIP, Token Ring, ATM и MPLS | |
Физический | физическая среда и принципы кодирования T1, E1 |
На стеке протоколов TCP/IP построено всё взаимодействие пользователей в IP-сетях. Стек является независимым от физической среды передачи данных.
На каждом уровне стека протоколов TCP/IP обмен данными ведется блоками данных конечной длины. Названия блоков данных зависят от уровня стека протоколов: прикладной и транспортный – Пакет, межсетевой – Сегмент, сетевой – Кадр.
Межсетевой протокол IP
Протокол реализует обмен информации IP-сегментами размером до 65535 байт. Каждый сегмент содержит заголовок и данные. IP является протоколом взаимодействия без установления логического соединения. Для адресации узлов сети используется IP - адрес длиной 4 байта. Протокол не гарантирует надежность доставки сегментов адресату. IP-сегменты имеют конечное время жизни в сети. В Таблице приведен формат IPv4 заголовка IP-сегмента.
Версия | IHL | Тип обслуживания | Длина пакета | ||||||||||||||||||||||||||||
Идентификатор | Флаги | Смещение фрагмента | |||||||||||||||||||||||||||||
Число переходов (TTL) | Протокол | Контрольная сумма заголовка | |||||||||||||||||||||||||||||
IP-адрес отправителя (32 бита) | |||||||||||||||||||||||||||||||
IP-адрес получателя (32 бита) | |||||||||||||||||||||||||||||||
Параметры (до 320 бит) | Данные (до 65535 байт минус заголовок) | ||||||||||||||||||||||||||||||
- Версия —4-х битовое поле, содержащее версию протокола IP. Для IPv4 это 4.
- IHL — длина заголовка IP-пакета в 32-битных словах. Минимальное значение равно 5.
- Тип обслуживания: В большинстве реализаций протокола поле равно 0.
- Длина сегмента: двухбайтовое поле, содержащее длину IP-сегмента, включая длину заголовка. Максимальная длина сегмента - 65535 байт.
- Идентификатор — значение, назначаемое отправителем пакета для определения корректной последовательности фрагментов при сборке датаграммы.
- 3 бита флагов. Первый бит всегда равен нулю, второй бит DF (don’t fragment) определяет возможность фрагментации пакета и третий бит MF (more fragments) показывает, не является ли этот пакет последним.
- Смещение фрагмента — поле содержит смещение данных, содержащихся в IP-фрагменте, по отношению к началу данных исходного IP-сегмента.
- Число переходов — максимальное число маршрутизаторов, которые может пройти пакет.
- Транспорт: содержит идентификатор протокола транспортного уровня, для которого предназначены данные IP-сегмента. Например: 1 -ICMP, 6 – TCP, 17-UDP.
- Контрольная сумма заголовка: двухбайтовое поле, содержащее контрольную сумму заголовка IP-сегмента. Для данных IP-сегмента контрольная сумма подсчитывается отдельно в протоколах транспортного уровня.
- Время жизни(TTL - Time To Live): однобайтовое поле, содержащее количество единиц времени жизни IP-сегмента в сети. Каждый транзитный узел сети, через который проходит IP-сегмент, уменьшает содержимое этого поля, по крайней мере, на 1 и обязан уничтожать IP-сегменты, для которых "время жизни" стало равным нулю. Этим предотвращается появление в сети "блуждающих" сегментов.
- Адрес источника и адрес приемника: четырехбайтовые IP-адреса узлов сети.
- Дополнительные параметры: содержит необязательные данные заголовка (управление сетью, секретность и т.п.).
Для протокола версии IPv6 значение поля версия должно быть равно 6. Заголовок сегмента также отличается от версии 4.
Дополнительные данные IP-заголовка: Предписываемый маршрут, пройденный маршрут, временные метки, флаг окончания
Транспортный протокол TCP
Протокол TCP (Transmission Control Protocol) является протоколом транспортного уровня, обеспечивающим надежную передачу данных в сети. Его транспортный адрес в заголовке IP-сегмента равен 6. Обмен данными осуществляется посредством "TCP-пакетов". В Таблице приведен формат заголовка TCP-пакета.
Формат сегмента TCP | ||||
Бит | 0 — 3 | 4 — 9 | 10 — 15 | 16 — 31 |
Порт источника | Порт назначения | |||
Номер последовательности | ||||
Номер подтверждения | ||||
Смещение данных | Зарезервировано | Флаги | Окно | |
Контрольная сумма | Указатель важности | |||
Опции (необязательное, но используется практически всегда) | ||||
160/192+ | Данные |
Порт источника и порт приемника: 16-битовые поля, содержащие номера портов. Существует набор служб, использующих TCP, за которыми закреплены определенные порты: 20/21 — FTP; 22 — SSH; 23 — Telnet; 25 — SMTP; 80,8080 — HTTP, альтернативный порт HTTP; 110 — POP3; 194 — IRC (Internet Relay Chat); 443 — HTTPS (Secure HTTP); 8080 — альтернативный порт HTTP
Номер в последовательности: 32-битовое поле, определяющее положение данных TCP-пакета внутри исходящего потока данных. Номер последовательности выполняет две задачи:
1. Если установлен флаг SYN, то это начальное значение номера последовательности — ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь номер последовательности равный ISN + 1.
2. В противном случае, если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот номер последовательности.
Номер подтверждения: 32-битовое поле содержит количество принятых данных из входящего потока к TCP-модулю, формирующему TCP-пакет. Если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый получателем в следующий раз. Помечает этот сегмент как подтверждение получения.
Смещение данных: содержит длину заголовка TCP-пакета в 32-битовых словах и используется для определения начала расположения данных в TCP-пакете. Это поле определяет размер заголовка пакета TCP в 32-битных словах. Минимальный размер составляет 5 слов, а максимальный — 15, что составляет 20 и 60 байт соответственно. Смещение считается от начала заголовка TCP.
Зарезервировано (6 бит) для будущего использования и должно устанавливаться в ноль. Из них два (5-й и 6-й) уже определены:
· CWR (Congestion Window Reduced) — Поле «Окно перегрузки уменьшено» — флаг установлен отправителем, чтоб указать, что получен пакет с установленным флагом ECE (RFC 3168)
· ECE (ECN-Echo) — Поле «Эхо ECN» — указывает, что данный узел способен на ECN (явное уведомление перегрузки) и для указания отправителю о перегрузках в сети (RFC 3168)
Флаги (управляющие биты) Это поле содержит 6 битовых флагов:
- URG: бит= 1 означает, что пакет содержит важные (urgent) данные
- ACK=1 означает, что пакет содержит в поле "номер подтверждения" верные данные.
- PSH=1 инструктирует получателя протолкнуть данные, накопившиеся в приемном буфере, в приложение пользователя
- RST=1 Оборвать соединения, сбросить буфер (очистка буфера)
- SYN= 1 означает, что TCP-пакет представляет собой запрос на установление логического соединения.
- FIN= 1 означает, что TCP-пакет представляет запрос на закрытие соединения.
Размер окна: содержит количество байт информации, которое может принять TCP-модуль, отправляющий партнеру TCP-пакет. Поле используется принимающим поток данных TCP-модулем для управления интенсивностью этого потока.
Контрольная сумма: 16-битовое поле, содержащее контрольную сумму, подсчитанную для TCP-заголовка, данных пакета и псевдозаголовка.
Указательважности: 16-битовое поле, содержащее указатель на первый байт в теле TCP-пакета, начинающий последовательность важных (urgent) данных.
Дополнительные данные заголовка: Протокол TCP определяет три типа дополнительных данных заголовка: конец списка полей дополнительных данных; пусто (No Operation); максимальный размер пакета.
В отличие от протокола UDP, который может сразу же начать передачу пакетов, TCP перед передачей данных устанавливает соединения:
- Установка соединения
- Передача данных
- Завершение соединения
При обмене данными приемник использует номер последовательности, содержащийся в получаемых сегментах, для восстановления их исходного порядка. Приемник уведомляет передающую сторону о номере последовательности, до которой он успешно получил данные, включая его в поле «номер подтверждения». Если впоследствии будет принят сегмент, относящийся к ожидаемому номеру последовательности, то порядок данных будет автоматически восстановлен исходя из номеров последовательностей в сегментах.
Для того, чтобы передающая сторона не отправляла данные интенсивнее, чем их может обработать приемник, TCP содержит средства управления потоком. Для этого используется поле «окно». В сегментах, направляемых от приемника передающей стороне в поле «окно» указывается текущий размер приемного буфера. Передающая сторона сохраняет размер окна и отправляет данных не более, чем указал приемник. Если приемник указал нулевой размер окна, то передача данных в направлении этого узла не происходит, пока приемник не сообщит о большем размере окна.
Последний сегмент, содержащий команду, обязан содержать флаг PSH, чтобы приложение на принимающей стороне смогло начать её выполнение.
Завершение соединения можно рассмотреть в три этапа:
- Посылка серверу от клиента флагов FIN и ACK на завершение соединения.
- Сервер посылает клиенту флаги ответа ACK , FIN, что соединение закрыто.
- После получения этих флагов клиент закрывает соединение и в подтверждение отправляет серверу ACK , что соединение закрыто.
Протоколы транспортного уровня, обеспечивающие надежную передачу данных, предполагают подтверждение принимающей стороной правильности полученных данных. Для этого используется принцип "скользящего окна" (sliding window), который заключается в том, что каждая сторона может отправлять партнеру максимум столько байт, сколько партнер указал в поле "размер окна" заголовка TCP-пакета, подтверждающего получение предыдущих данных. Принцип "скользящего окна" обеспечивает опережающую посылку данных с отложенным их подтверждением. Если в течение некоторого времени не будет получено отложенное подтверждение отправленного пакета, то отправляющий TCP-модуль будет вынужден повторить посылку всех TCP-пакетов, начиная с неподтвержденного пакета.
Хотя протокол осуществляет проверку контрольной суммы по каждому сегменту, используемый алгоритм считается слабым по надежности. В общем случае распределенным сетевым приложениям рекомендуется использовать дополнительные программные средства для гарантирования целостности передаваемой информации.
Протокол дэйтаграмм UDP
Протокол дэйтаграмм пользователя UDPявляется протоколом транспортного уровня и базируется на возможностях, предоставляемых межсетевым протоколом IP. Его транспортный адрес в заголовке IP-сегмента равен 17. Заголовок UDP-пакета содержит двухбайтовые поля - порт источника и порт приемника. Поле длина содержит длину всего UDP-пакета. Основная задача UDP - обеспечение "быстрой" передачи данных в сети. Основные характеристики протокола UDP: реализует взаимодействие в режиме без установления логического соединения; не имеет средств уведомления источника UDP-пакета о правильности/ошибочности в его приеме адресатом и не гарантирует надежной передачи данных; имеется поле, содержащее контрольную сумму, подсчитанную для заголовка, данных и псевдозаголовка.
Наиболее распространенные протоколы маршрутизации, входящие в состав стека протоколов TCP/IP:
Address Resolution Protocol, ARP. Протокол разрешения адресов, сопоставляет IP-адрес с адресом физического оборудования MAC-адресом. Посмотреть соответствие адресов из ARP-таблицы можно набрав в командной строке arp и указав IP-адрес. *Routing Information Protocol, RIP. Протокол маршрутной информации, который используется для обратной совместимости с существующими RIP-сетями. *Open Shortest Path First, OSPF. Протокол выбора кратчайшего маршрута.
IP-маршрутизация
IP-Маршрутизация - процесс выбора пути для передачи пакета из одной сети в другую. Под путем (маршрутом) понимается последовательность маршрутизаторов, через которые проходит пакет по пути к узлу-назначению. IP-маршрутизатор - это специальное устройство, предназначенное для передачи пакетовиз одной сети в другую и обеспечивающее определение пути прохождения пакетов в составной сети. Маршрутизатор должен иметь несколько IP-адресов с номерами сетей, соответствующими номерам объединяемых сетей.
Маршрутизация осуществляется на узле-отправителе в момент отправки IP-пакета, а затем на IP-маршрутизаторах.
Принцип маршрутизации на узле отправителе выглядит достаточно просто. Когда требуется отправить пакет узлу с определенным IP-адресом, то узел-отправитель выделяет с помощью маски подсети из собственного IP-адреса и IP-адреса получателя номера сетей. Далее номера сетей сравниваются и если они совпадают, то пакет направляется непосредственно получателю, в противном случае - маршрутизатору, чей адрес указан в настройках протокола IP. Выбор пути на маршрутизаторе осуществляется на основе информации, представленной в таблице маршрутизации. Таблица маршрутизации - это специальная таблица, сопоставляющая IP-адресам сетей адреса следующих маршрутизаторов, на которые следует отправлять пакеты с целью их доставки в эти сети. Обязательной записью в таблице маршрутизации является так называемый маршрут по умолчанию, содержащий информацию о том, как направлять пакеты в сети, адреса которых отсутствуют в таблице, поэтому нет необходимости описывать в таблице маршруты для всех сетей. Таблицы маршрутизации могут строиться "вручную" администратором или динамически, на основе обмена информацией, который осуществляют маршрутизаторы с помощью специальных протоколов - протоколов динамической маршрутизации.
Протоколы ARP и RARP
Основным функциональным достоинством IP-адресации является полная логическая независимость IP-адресов от физических адресов. Однако чтобы средства канального уровня могли осуществить доставку данных, необходимо знание физического адреса получателя. Механизм определения по IP-адресу физического адреса узла-получателя обеспечивает протокол ARP (Address Resolution Protocol, Протокол Разрешения Адреса).
Определение физических адресов компьютеров осуществляется с помощью широковещательного запроса, в котором сообщается IP-адрес искомого компьютера (устройства). Получив такой ARP-запрос, каждый компьютер проверяет соответствие между указанным IP-адресом и своим собственным. В случае их совпадения сообщает отправителю свой физический адрес. После получения ответа инициировавший запрос компьютер заносит новые данные в специальную ARP-таблицу.
Наличие на каждом узле ARP-таблицы позволяет снизить объем широковещательной рассылки, поскольку запрос направляется в сеть только в случае, если нужное соответствие не найдено в ARP-таблице.
В ряде случаев может оказаться необходимым определить IP-адрес по MAC-адресу. Для этого используется протокол RARP (Reverse Address Resolution Protocol). Функционально RARP схож с протоколом ARP.
Протоколы динамической маршрутизации
Протоколы динамической маршрутизации предназначены для автоматизации процесса построения маршрутных таблиц маршрутизаторов. Принцип их использования достаточно прост: маршрутизаторы с помощью устанавливаемого протоколом порядка рассылают определенную информацию из своей таблицы маршрутизации другим и корректируют свою таблицу на основе полученных от других данных.
Такой метод построения и поддержки маршрутных таблиц существенно упрощает задачу администрирования сетей, в которых могут происходить изменения (например, расширение) или в ситуациях, когда какие-либо маршрутизаторы и/или подсети выходят из строя.
Следует отметить, что использование протоколов динамической маршрутизации не отменяет возможность "ручного" внесения данных в таблицы маршрутизаторов. Внесенные таким образом записи называют статическими, а записи, полученные в результате обмена информацией между маршрутизаторами - динамическими. В любой таблице маршрутизации всегда присутствует, по крайней мере, одна статическая запись - маршрут по умолчанию.
Протоколы сетевого уровня
Протокол Ethernetбыл разработан в начале 1970-х годов. Обмен данными по протоколу Ethernet реализуется программно-аппаратно с помощью сетевого контроллера, и драйвера сетевого контроллера.
Формат кадра данных Ethernet состоит из следующих полей:
Преамбула: 64-битовое поле, содержащее фиксированную последовательность битов, используемую для синхронизации схем приема сигналов на узле-адресате.
Адрес приемника и адрес источника: 48-битовые поля, содержащие Ethernet-адреса принимающего и передающего кадр узлов сети.
Тип кадра: 16-битовое поле, содержащее идентификатор протокола более высокого уровня, использующего данный Ethernet-кадр. Примером значений данного поля является 0x0800 - протокол IP.
Тело кадра: содержит данные, передаваемые в кадре протоколом вышележащего уровня, например это IP-сегмент. Максимальная длина тела кадра протокола сетевого уровня для Ethernet составляет 1500 байтов. Минимальная длина Ethernet-кадра составляет 64 байта (512 бит).
Контрольная сумма: 32-битовое поле, содержащее контрольную сумму, подсчитанную для всего кадра.
Протокол SLIP (Serial Line Internet Protocol) обеспечивает соединение двух компьютеров через последовательный интерфейс. SLIP — это сетевой протокол, позволяющий использовать для прямого выхода в Интернет телефонную линию и модем. В этом простом протоколе все SLIP-кадры начинаются со служебного символа 0xEB(ESC), а заканчиваются служебным символом 0xC0(END). Между этими символами располагаются передаваемые данные.
Протокол PPP (Point-to-Point Protocol) также используется для соединения двух компьютеров по последовательному интерфейсу. Протокол PPP разработан позднее протокола SLIP, поэтому в нем ликвидированы некоторые недостатки протокола SLIP, в частности: поддерживаются различные протоколы вышележащего уровня (а не только IP); используются контрольные суммы.