Сети ЭВМ и телекоммуникации TCP/IP • Стек протоколов TCP/IP (Transmission Control Protocol/Internet Protocol ) — набор сетевых протоколов разных уровней модели сетевого взаимодействия. • Протоколы работают друг с другом таком образом, что протокол, располагающийся на уровне выше, работает «поверх» нижнего, используя механизмы инкапсуляции. Например, протокол TCP работает поверх протокола IP. • Стек протоколов TCP/IP включает в себя протоколы четырёх уровней: – – – – прикладного (application), транспортного (transport), сетевого (network), канального (data link). • Протоколы этих уровней полностью реализуют функциональные возможности модели OSI. • На стеке протоколов TCP/IP построено всё взаимодействие пользователей в IP-сетях. • Стек является независимым от физической среды передачи данных. Распределение протоколов по уровням модели OSI 7 6 5 4 3 2 1 HTTP, SMTP, SNMP, FTP, Telnet, SSH, SCP, Прикладной SMB, NFS, RTSP Представления XDR, AFP, TLS, SSL ISO 8327 / CCITT Сеансовый X.225, RPC, NetBIOS, ASP Транспортный TCP, UDP, SCTP, SPX, RTP, ATP, DCCP, GRE IP, PPP, ICMP, IGMP, CLNP, OSPF, RIP, IPX, Сетевой DDP, ARP, RARP, BGP Ethernet, Token ring, HDLC, X.25, Frame Канальный relay, ISDN, ATM, MPLS электрические Физический провода, радиосвязь, волоконнооптические провода, Wi-Fi Распределение протоколов по уровням модели TCP/IP 5 Прикладной «7 уровень» HTTP, RTP, FTP, DNS, RIP 4 Транспортный TCP, UDP, SCTP, DCCP, OSPF 3 Сетевой IP (IP), ICMP и IGMP, ARP 2 Канальный 1 Физический Ethernet, IEEE 802.11 Wireless Ethernet, SLIP, Token Ring, ATM и MPLS физическая среда и принципы кодирования информации • Канальный уровень Описывает, каким образом передаются пакеты данных через физический уровень, включая кодирование . • Примеры протоколов канального уровня — Ethernet, IEEE 802.11 Wireless Ethernet, SLIP, Token Ring, ATM и MPLS. • PPP (Point-to-Point Protocol) — двухточечный протокол канального уровня (Data Link) сетевой модели OSI. • PPP представляет собой целое семейство протоколов: – – – – протокол управления линией связи (LCP), протокол управления сетью (NCP), протоколы аутентификации (PAP, CHAP), многоканальный протокол PPP (MLPPP). • MPLS (Multiprotocol Label Switching — мультипротокольная коммутация по меткам) — механизм в высокопроизводительной телекоммуникационной сети, осуществляющий передачу данных от одного узла сети к другому с помощью меток. • Канальный уровень иногда разделяют на 2 подуровня: – Logical Link Control (LLC) — подуровень управления логической связью — по стандарту IEEE 802 ; – MAC-адрес (Media Access Control) — управление доступом к среде на уровне Hardware Address). MAC — это уникальный идентификатор, присваиваемый каждой единице оборудования (управляется IEEE:MAC-48, EUI-48 и EUI-64). Сетевой уровень • Разработан для передачи данных из одной сети в любую другую сеть, независимо от протоколов нижнего уровня. • Существует необходимость запрашивать данные от удалённой стороны, например, в протоколе ICMP (используется для передачи диагностической информации IP-соединения) и IGMP (используется для управления multicast-потоками). ICMP и IGMP расположены над IP и должны попасть на следующий уровень — транспортный , но функционально являются протоколами сетевого уровня. • Пакеты сетевого протокола IP могут содержать код, указывающий, какой именно протокол следующего уровня нужно использовать, чтобы извлечь данные из пакета. Это число — уникальный IPномер протокола. ICMP и IGMP имеют номера, соответственно, 1 и 2. Транспортный уровень • Протоколы решают проблему доставки сообщений («дошло ли сообщение до адресата?»), а также решают возможность гарантии правильной последовательности прихода данных. В стеке TCP/IP транспортные протоколы определяют, для какого именно приложения предназначены эти данные. • Transmission Control Protocol (TCP) (протокол управления передачей) — один из основных сетевых протоколов Интернета, предназначенный для управления передачей данных в сетях и подсетях TCP/IP. TCP позволяет регулировать нагрузку на сеть, а также уменьшать время ожидания данных при передаче на большие расстояния. Более того, TCP гарантирует, что полученные данные были отправлены точно в такой же последовательности. • User Datagram Protocol (UDP) (протокол пользовательских дейтаграмм) — это транспортный протокол для передачи данных в сетях IP без установления соединения. Он является одним из самых простых протоколов транспортного уровня модели OSI. Его IP-идентификатор — 0x11. UDP обычно используется в таких приложениях, как потоковое видео и компьютерные игры, где допускается потеря пакетов, а повторный запрос затруднён или не оправдан, либо в приложениях вида запрос-ответ (например, запросы к DNS), где создание соединения занимает больше ресурсов, чем повторная отправка. • TCP и UDP используют для определения протокола верхнего уровня число, называемое портом. IP Internet Protocol — межсетевой протокол. Относится к маршрутизируемым протоколам сетевого уровня семейства TCP/IP. Протокол IP используется для негарантированной доставки данных, разделяемых на пакеты от одного узла сети к другому. На уровне этого протокола не даётся гарантий надёжной доставки пакета до адресата. Пакеты могут прийти не в том порядке, в котором были отправлены, продублироваться, оказаться повреждёнными или не прибыть вовсе. Гарантию безошибочной доставки пакетов дают протоколы транспортного уровня сетевой модели OSI, например, TCP — которые используют IP в качестве транспорта. IP-пакет IP-пакет — это форматированный блок информации, передаваемый по вычислительной сети на уроне IP. Версия 4 (IPv4) 0 1 2 3 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 Версия IHL Тип обслуживания Идентификатор Время жизни (TTL) Протокол Длина пакета Флаги Смещение фрагмента Контрольная сумма заголовка IP-адрес отправителя (32 бита) IP-адрес получателя (32 бита) Параметры (от 0 до 10-ти 32-х битных слов) Данные (до 65535 байт минус заголовок) • IHL — длина заголовка IP-пакета в 32-битных словах (dword). Это поле указывает на начало блока данных в пакете. Минимальное корректное значение для этого поля равно 5. • Идентификатор — значение, назначаемое отправителем пакета и предназначенное для определения корректной последовательности фрагментов при сборке дейтаграммы. Для фрагментированного пакета все фрагменты имеют одинаковый идентификатор. • Флаги: – Первый бит должен быть всегда равен нулю, – Второй бит DF (don’t fragment) определяет возможность фрагментации пакета, – Третий бит MF (more fragments) показывает, не является ли этот пакет последним в цепочке пакетов. • Смещение фрагмента — значение, определяющее позицию фрагмента в потоке данных. • Время жизни (TTL) — число маршрутизаторов, которые должен пройти этот пакет. При прохождении маршрутизатора это число уменьшатся на единицу. Если значения этого поля равно нулю то, пакет должен быть отброшен и отправителю пакета может быть послано сообщение Time Exceeded (ICMP код 11 тип 0). • Протокол — идентификатор протокола следующего уровня (номер протокола следующего уровня). • Контрольная сумма заголовка — вычисляется с использованием операций поразрядного сложения 16-разрядных слов заголовка по модулю 2. IPv6 Байт 0 Бит 0 3 4 1 7 8 0 0 Версия Класс трафика 4 32 Длина полезной нагрузки 8 12 16 20 24 28 32 36 64 96 128 160 192 224 256 288 IP-адрес отправителя IP-адрес получателя 2 11 12 15 16 3 23 24 Метка потока След. заголовок Число переходов 31 • Версия — для IPv6 значение поля должно быть равно 6. • Класс трафика — определяет приоритет трафика (QoS, класс обслуживания). • Метка потока — уникальное число, одинаковое для однородного потока пакетов. • Длина полезной нагрузки — длина данных (заголовок IPпакета не учитывается). • Следующий заголовок — задаёт тип расширенного заголовка (IPv6 extension), который идёт следующим. В последнем расширенном заголовке поле Next header задаёт тип транспортного протокола (TCP, UDP и т. д.) и определяет следующий инкапсулированный уровень. • Число переходов — максимальное число маршрутизаторов, которые может пройти пакет. При прохождении маршрутизатора это значение уменьшается на единицу и по достижении нуля пакет отбрасывается. Заголовок сегмента TCP Флаги (управляющие биты): URG — «Указатель важности»; ACK — «Номер подтверждения» ; PSH (Push function) —инструктирует получателя протолкнуть данные, накопившиеся в приемном буфере, в приложение пользователя; RST (Reset the connection)— оборвать соединения; SYN (Synchronize sequence numbers) — синхронизация номеров последовательности; FIN (FIN bit) — флаг указывает на завершение соединения. Бит 0 0—3 4—9 10 — 15 Порт источника 16 — 31 Порт назначения 32 Номер последовательности 64 Номер подтверждения 96 Смещен Зарезерв ие ировано данных Флаги Размер Окна Указатель важности 128 Контрольная сумма 160 Опции (необязательное, но используется практически всегда) 160/ 192+ Данные Указатель важности – 16-битовое значение положительного смещения от порядкового номера в данном сегменте. Поле указывает порядковый номер байта, которым заканчиваются важные данные. Поле принимается во внимание только для пакетов с установленным флагом URG. Номер последовательности Выполняет две задачи: – Если установлен флаг SYN, то это начальное значение номера последовательности — ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь номер последовательности, равный ISN + 1. – В противном случае, если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот номер последовательности. Поскольку поток TCP в общем случае может быть длиннее, чем число различных состояний этого поля, то все операции с номером последовательности должны выполняться по модулю 2^32. Это накладывает практическое ограничение на использование TCP. Если скорость передачи коммуникационной системы такова, чтобы в течение MSL (максимального времени жизни сегмента) произошло переполнение номера последовательности, то в сети может появиться два сегмента с одинаковым номером, относящихся к разным частям потока, и приёмник получит некорректные данные. • Номер подтверждения – Если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый получателем в следующий раз. Помечает этот сегмент как подтверждение получения. • Смещение данных – Это поле определяет размер заголовка пакета TCP в 4-байтных словах. Минимальный размер составляет 5 слов, а максимальный — 15, что составляет 20 и 60 байт соответственно. Смещение считается от начала заголовка TCP. TCP-порты Существует набор служб (использующих для передачи данных TCP), за которыми закреплены определенные порты: 20/21 22 23 25 80 — FTP — SSH — Telnet — SMTP — HTTP 110 194 443 1863 2000 3389 8080 — POP3 — IRC (Internet Relay Chat) — HTTPS (Secure HTTP) — MSN Messenger — Cisco SCCP (VoIP) — RDP — альтернативный порт HTTP UDP-заголовок Биты 0 15 16 31 0-31 Порт отправителя (Source port) Порт получателя (Destination port) 32-63 Длина датаграммы (Length) Контрольная сумма (Checksum) 64-... Данные (Data) UDP используется в следующих протоколах: DNS, RTP и RTCP, RTMFP, TFTP, SNTP, NTP, NFS, DHCP Максимальная длина данных UDP-пакета • в IP сетях необходимо учесть, что UDP-сообщение в свою очередь является содержимым области данных IP-сообщения. • На практике нерационально использовать максимальную величину IP пакета, так как такой размер превышает MTU основных протоколов канального уровня, и следовательно требует фрагментации IP пакета, поэтому обычно используется размер, соотнесенный с MTU используемого канального протокола. • Maximum Transmission Unit (MTU) используется для определения максимального размера блока (в байтах), который может быть передан на канальном уровне сетевой модели OSI. Значения MTU зависят от коммуникационного интерфейса (сетевая плата, последовательный порт, и т. д.). Значение MTU может быть определено стандартом (например, для Ethernet 1500 байт), либо MTU может выбираться в момент установки соединения (обычно в случае прямых подключений точка-точка). Таблица основных значений MTU Интерфейс Значение MTU Internet Path MTU (RFC 879) 576 Ethernet (RFC 1191) 1500 802.3 (RFC 1191) 1492 802.11[1] 2272 802.5 Token ring 4464 FDDI (RFC 1191) 4500 Механизм действия протокола TCP Протокол TCP устанавливает соединения, которые должны быть созданы перед передачей данных. TCP соединение можно разделить на 3 стадии: Установка соединения; Передача данных; Завершение соединения. CLOSED Состояния сеанса TCP Начальное состояние узла LISTEN Сервер ожидает запросов установления соединения от клиента SYN-SENT Клиент отправил запрос серверу на установление соединения и ожидает ответа SYN-RECEIVED ESTABLISHED FIN-WAIT-1 CLOSE-WAIT FIN-WAIT-2 LAST-ACK Сервер получил запрос на соединение, отправил ответный запрос и ожидает подтверждения Соединение установлено, идёт передача данных Одна из сторон (назовём её узел-1) завершает соединение, отправив сегмент с флагом FIN Другая сторона (узел-2) переходит в это состояние, отправив, в свою очередь сегмент ACK и продолжает одностороннюю передачу Узел-1 получает ACK, продолжает чтение и ждёт получения сегмента с флагом FIN Узел-2 заканчивает передачу и отправляет сегмент с флагом FIN TIME-WAIT Узел-1 получил сегмент с флагом FIN, отправил сегмент с флагом ACK и ждёт 2*MSL секунд, перед окончательным закрытием соединения CLOSING Обе стороны инициировали закрытие соединения одновременно: после отправки сегмента с флагом FIN узел-1 также получает сегмент FIN, отправляет ACK и находится в ожидании сегмента ACK (подтверждения на свой запрос о разъединении) Установка соединения Процесс начала сеанса TCP называется «тройным рукопожатием»: 1. Клиент, который намеревается установить соединение, посылает серверу сегмент с номером последовательности и флагом SYN. – Сервер получает сегмент, запоминает номер последовательности и пытается создать сокет (буферы и управляющие структуры памяти) для обслуживания нового клиента. • В случае успеха сервер посылает клиенту сегмент с номером последовательности и флагами SYN и ACK, и переходит в состояние SYN-RECEIVED. • В случае неудачи сервер посылает клиенту сегмент с флагом RST. 2. Если клиент получает сегмент с флагом SYN, то он запоминает номер последовательности и посылает сегмент с флагом ACK. – Если он одновременно получает и флаг ACK (что обычно и происходит), то он переходит в состояние ESTABLISHED. – Если клиент получает сегмент с флагом RST, то он прекращает попытки соединиться. – Если клиент не получает ответа в течение 10 секунд, то он повторяет процесс соединения заново. 3. Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, то он переходит в состояние ESTABLISHED. – В противном случае после таймаута он закрывает сокет и переходит в состояние CLOSED. Пример 3-этапного согласования TCP A 1. CLOSED 2. SYN-SENT --> 3. ESTABLISHED <-4. ESTABLISHED --> 5. ESTABLISHED --> <SEQ=100><CTL=SYN> <SEQ=101><CTL=SYN,ACK> <SEQ=101><CTL=ACK> <SEQ=101><CTL=ACK><DATA> TCP B LISTEN --> SYN-RECEIVED <-- SYN-RECEIVED --> ESTABLISHED --> ESTABLISHED Завершение соединения • Посылка серверу от клиента флагов FIN и ACK на завершение соединения. • Сервер посылает клиенту флаги ответа ACK , FIN, что соединение закрыто. • После получения этих флагов клиент закрывает соединение и в подтверждение отправляет серверу ACK , что соединение закрыто.