Сетевые уровни
TCP/IP сетевая модель состоит из четырех основных уровней: канальный уровень, уровень IP (короткий для Протокола Интернета), транспортный уровень и прикладной уровень. Эти уровни описаны в следующих разделах.
Канальный уровень
Самый нижний уровень является канальным уровнем или физическим уровнем. Этот уровень сетевого стека включает фактические аппаратные средства, используемые для передачи с соседними физически связанными узлами. Канальный уровень транспортирует необработанные пакеты от одного узла до другого в той же физической сети.
Большинство конечных пользователей встречается только с пятью канальными уровнями непосредственно: Wi-Fi, сотовые сети, Ethernet, Bluetooth и FireWire. Однако их данные проходят через ссылки многих различных типов, продвигающихся его месту назначения. Пользователь мог бы отправить данные по кабельному модему на основе DOCSIS или модему DSL на основе VHDSL. Оттуда, данные пользователя могли бы передать через ссылку SONET/SDH (используемый для соединительных линий) или спутниковая связь с помощью IPoS (IP по спутнику) или IPoDVB (IP по широковещательной передаче цифрового видео).
Сетевой интерфейс является частью аппаратных средств, обеспечивающих межсоединение канального уровня. Узел может иметь много сетевых интерфейсов. Например, Вы могли бы иметь один или несколько (соединенные проводом) интерфейсы Ethernet, интерфейс Wi-Fi, интерфейс Bluetooth, или даже сотовый модем (присоединенный ли USB к Mac или встроенный в iPhone или iPad). Кроме того, определенные части программного обеспечения обеспечивают (виртуальные) сетевые интерфейсы — программное обеспечение VPN, среды виртуализации (как Классическая среда в OS X 10.4 и ранее), и т.д.
Каждый сетевой интерфейс обычно подключается к одному или более дополнительным интерфейсам; соединение между ними вызывают ссылкой. Несмотря на то, что эти интерфейсы не всегда физически подключаются к друг другу, ссылка, кажется, эквивалентна физическому проводу, насколько затронуты операционная система и программное обеспечение. Например, два компьютера, подключенные концентратором Ethernet или переключателем, имеют ссылку между ними (потому что концентратор и переключатель прозрачны), но два компьютера, разделенные сетевым маршрутизатором, не делают (потому что операционная система должна знать для отправки данных в маршрутизатор вместо того, чтобы отправить его непосредственно в тот узел — больше при маршрутизации позже).
При записи программного обеспечения, если программное обеспечение не взаимодействует с канальным уровнем непосредственно (путем отправки и получения необработанных пакетов, конфигурирования сетевого интерфейса, чтения аппаратных средств ID сетевого интерфейса, и т.д.), операционная система в основном скрывает различия между канальными уровнями от Вас (несмотря на то, что это не может полностью изолированный Вы от различий в пропускной способности, задержке или надежности).
Уровень IP
Нахождение поверх канального уровня является уровнем IP. Уровень IP обеспечивает передачу пакетов от одного узла до другого таким способом, которым пакеты могут передать через многократные физические сети.
Уровень IP добавляет понятие маршрутизации к изображению, позволяющему Вам отправить пакет удаленному месту назначения. Кратко помещенный, пакеты от узла перемещаются в соседний маршрутизатор через некоторую физическую ссылку, направляющую пакет к другому маршрутизатору, направляющему его к другому маршрутизатору, и т.д., пока это не достигает своего места назначения. Ответные пакеты перемещаются назад почти таким же способом. Путь Ваше пакетное взятие вызывают маршрутом и каждой ссылкой, что пакеты следуют из одного маршрутизатора другому вдоль маршрута, вызывают транзитным участком.
Уровень IP также помогает краткому обзору далеко различия в канальном уровне. В частности различные канальные уровни поддерживают пакеты с различными максимальными размерами — называемый максимальным блоком передачи (MTU). Для сокрытия этого различия уровень IP разделяет пакеты на многократные части — процесс, известный как фрагментация — и повторно собирает их в другом конце. (Обратите внимание на то, что фрагментация применяется только к взятию пакета и разделению его; в случае TCP/IP, отправляющий узел packetizes TCP, но потому что это не начиналось как дискретные пакеты, это не считают фрагментацией.)
В большинстве сетей количество времени сеть берет для поставки единственного пакета, независимо от размера пакета до MTU. Например, в сети Ethernet, это берет тот же интервал времени, отправляете ли Вы пакет, который составляет 100 байтов или 1 500 байтов в длине. Поэтому неоднократно фрагментация пакета приводит к здоровенным издержкам.
Например, при отправке 1 500-байтового пакета через сеть с 1 400-байтовым MTU, продвигающимся к третьей сети с MTU 1300 (эти числа произвольны), 1 500-байтовый пакет сначала разбить в 1 400-байтовый пакет и 100-байтовый пакет. Позже, 1 400-байтовый пакет разбить в 1 300-байтовый пакет и второй 100-байтовый пакет для в общей сложности трех пакетов (1300 + 100 + 100). Если бы Вы вместо этого отправили 1 300-байтовый пакет и 200-байтовый пакет, то Ваши данные взяли бы одну треть меньше пропускной способности в заключительной сети.
Фрагментация также имеет другую стоимость. Если фрагмент пакета потерян, целый пакет потерян. Это означает, что в сети с высокой потерей пакетов, фрагментация может увеличить уровень требуемой повторной передачи (который, в свою очередь, может сделать потерю пакетов хуже).
Для предотвращения этой проблемы, при выполнении коммуникации TCP, самые современные операционные системы используют вызванный метод, соединяют открытие MTU каналом для определения самого большого пакета, который может передать от одного узла до другого без фрагментации, таким образом максимизировав использование доступной пропускной способности. Если Вы пишете код, отправляющий и получающий необработанные пакеты, необходимо рассмотреть предпринимающие подобные шаги. Где возможно, однако, необходимо использовать TCP/IP, делающий это для Вас.
Транспортный уровень
Поверх уровня IP Вы найдете несколько транспортных уровней. При записи объединяющий код в сеть, Вы будете почти неизменно работать с одним из этих транспортных уровней или с высокоуровневым уровнем, созданным поверх них.
Два наиболее распространенных протокола на этом уровне являются протоколом управления передачей (TCP) и протоколом пользовательских дейтаграмм (UDP).
И TCP и UDP обеспечивают транспорт исходных данных от одного узла до другого, во многом как IP, но добавляют понятие номеров портов. Эти номера портов позволяют Вам выполнить многократные службы на единственный узел путем обеспечения способа сказать узел получения, какая служба должна получить то определенное сообщение.
Как уровни ниже его, UDP не предоставляет гарантии, что данные будут когда-либо достигать своего места назначения. Если Ваша программа использует UDP, необходимо обработать любую повторную передачу сами, при необходимости. UDP может быть хорошим выбором для ситуаций, где низкая задержка требуется, такие как игровая коммуникация в реальном времени, потому что, если обновление состояния клиента не доступно в нескольких миллисекундах, данные больше не полезны так или иначе. Однако как правило необходимо обычно избегать UDP, если Вы не должны поддерживать существующий протокол, использующий его.
В отличие от UDP, добавляет TCP:
Гарантии поставки — Данные, переданное использование TCP, как гарантируют, будет получено в порядке, в котором это было отправлено и (сбои соединения несмотря на это) полностью. Если данные не могут быть переданы, соединение разъединяется после долгого тайм-аута. Однако все данные, полученные до того момента времени, как гарантируют, будут в порядке и без недостающих фрагментов в середине.
Управление перегрузкой — Отправляющие узлы замедляют скорость передачи (и повторная передача), если данные становятся отброшенными по пути вследствие сверхиспользуемой ссылки.
Управление потоком — Когда занятый, получающие узлы говорят отправляющим узлам ожидать, пока они не готовы обработать больше данных.
Поток данных на основе потоков — Ваше программное обеспечение рассматривает данные как ряд байтов вместо как серия дискретных записей (сообщения в языке UDP). Обратите внимание на то, что, если Вы хотите использовать TCP для отправки серии дискретных записей, необходимо закодировать рекордные границы сами (использующий MIME многослойное кодирование сообщения, например).
Соедините открытие MTU каналом — TCP выбирает самый большой размер пакета, избегающий фрагментации в пути.
В отличие от этого, UDP поддерживает три вещи, которые не делает TCP:
Широковещательные сообщения в IPv4 — пакеты, отправленные в широковещательный адрес, получены каждым узлом в его широковещательном домене (который обычно является его подсетью).
Многоадресные сообщения — пакеты UDP, отправленные в групповой адрес, отосланы в любой узел, подписывающийся на них; те узлы могут быть в локальной сети (LAN) или могут быть позади маршрутизатора, но на практике обычно ограничиваются LAN.
Сохранение записи (пакет) границы. С UDP получатель видит каждое сообщение индивидуально вместо как непрерывный поток байтов.
TCP и UDP также зависят от другого протокола, Протокол межсетевых управляющих сообщений (ICMP), находящийся поверх уровня IP. Пакеты ICMP используются для создания отчетов о сбоях соединения (недостижимое место назначения, например) назад к соединению или отправляющему узлу. Несмотря на то, что TCP и сокеты UDP могут соединиться успешно без ICMP, возможность обнаружить сбои соединения значительно сокращена.
В дополнение к оказанию поддержки для TCP и UDP, пакеты эха ICMP формируют основание для ping
инструмент, обычно использующийся для диагностирования сетевых проблем. Когда узел назначения (или маршрутизатор) получает пакет эха ICMP, это повторяет пакет назад к отправителю, таким образом давая Вам некоторое представление об уровне потери пакетов между двумя узлами.
Поверх этих протоколов транспортного уровня у Вас могут дополнительно быть уровни шифрования, такие как TLS (безопасность транспортного уровня) поверх TCP или DTLS по UDP.
Точно так же различные схемы инкапсуляции создаются поверх протоколов транспортного уровня — L2TP и протоколы PPTP, используемые многими VPNs, например. Эти уровни инкапсуляции появляются к Вашей программе как отдельный сетевой интерфейс (потому что они обеспечивают уровень виртуального канала). Под капотом, однако, трафик по тому интерфейсу похож на любой другой поток TCP/IP к единственному узлу (сервер VPN).
Прикладной уровень
Прикладной уровень находится наверху стека протоколов. Этот уровень включает такие протоколы как протокол передачи гипертекста (HTTP) и протокол передачи файлов (FTP).
Прикладной уровень так называют, потому что подробные данные этого уровня являются определенными для определенного приложения или класса приложений. Другими словами, это - уровень, находящийся под прямым контролем Вашей программы, реализуете ли Вы свои собственные протоколы прикладного уровня или просто просите, чтобы операционная система сделала так от Вашего имени.