Введение
Недавно я изучаю сетевой модуль node.js, который включает в себя такие протоколы, как tcp / ip, arp, rcmp, http и т. Д. До этого я проводил только углубленное исследование протокола http. Что касается других протоколов, я знаю только, что эти протоколы существуют. Глубоко не изучен. Если честно, концепция сетевого протокола очень проста, но она также очень абстрактна.Я проверил много информации в Интернете, которая написана на каком-то непонятном языке, поэтому лично я чувствую, что понимаю роль протокола, как его использовать и какую форму использовать. Взгляд на конкретный рабочий процесс протокола произведет на людей еще большее впечатление. Ниже приводится краткое описание TCP, IP, UDP.
На обложке показано соответствие между семиуровневым протоколом OSI и пятиуровневым протоколом TCP / IP;
- Сеть делится снизу вверх на физический уровень, уровень канала передачи данных, сетевой уровень, транспортный уровень и прикладной уровень.
- Протокол IP соответствует сетевому уровню, протокол TCP соответствует транспортному уровню, а протокол HTTP соответствует уровню приложения. Эти три практически несопоставимы, в то время как сокет представляет собой инкапсуляцию и приложение протокола TCP / IP (на уровне программиста). .
- Также можно сказать, что протокол TPC / IP является протоколом транспортного уровня, в основном для решенияКак данные передаются в сети, А HTTP — это протокол прикладного уровня, в основном для решенияКак упаковать данные。
Что такое протокол TCP/IP?
Протокол TCP/IP (Transmission Control Protocol/Internet Protocol) представляет собой стек сетевых протоколов, повсеместно используемый для Интернета и других подобных сетей (например, данный протокол используется и в ЛВС). Название TCP/IP произошло от двух наиболее важных протоколов:
- IP (интернет протокол) — отвечает за передачу пакета данных от узла к узлу. IP пересылает каждый пакет на основе четырехбайтного адреса назначения (IP-адрес).
- TCP (протокол управления передачей) — отвечает за проверку корректной доставки данных от клиента к серверу. Данные могут быть потеряны в промежуточной сети. В протоколе TCP добавлена возможность обнаружения ошибок или потерянных данных и, как следствие, возможность запросить повторную передачу, до тех пор, пока данные корректно и полностью не будут получены.
Основные характеристики TCP/IP:
- Стандартизованные протоколы высокого уровня, используемые для хорошо известных пользовательских сервисов.
- Используются открытые стандарты протоколов, что дает возможность разрабатывать и дорабатывать стандарты независимо от программного и аппаратного обеспечения;
- Система уникальной адресации;
- Независимость от используемого физического канала связи;
Принцип работы стека протоколов TCP/IP такой же как и в модели OSI, данные верхних уровней инкапсулируются в пакеты нижних уровней.
Если пакет продвигается по уровню сверху вниз — на каждом уровне добавляется к пакету служебная информация в виде заголовка и возможно трейлера (информации помещенной в конец сообщения). Этот процесс называется инкапсуляция. Служебная информация предназначается для объекта того же уровня на удаленном компьютере. Ее формат и интерпретация определяются протоколами данного уровня.
Если пакет продвигается по уровню снизу вверх — он разделяется на заголовок и данные. Анализируется заголовок пакета, выделяется служебная информация и в соответствии с ней данные перенаправляются к одному из объектов вышестоящего уровня. Вышестоящий уровень, в свою очередь, анализирует эти данные и также их разделяет их на заголовок и данные, далее анализируется заголовок и выделяется служебная информация и данные для вышестоящего уровня. Процедура повторяется заново пока пользовательские данные, освобожденные от всей служебной информации, не дойдут до прикладного уровня.
Не исключено, что пакет так и не дойдет до прикладного уровня. В частности, если компьютер работает в роли промежуточной станции на пути между отправителем и получателем, тогда объект, на соответствующем уровне, при анализе служебной информации определит, что пакет на этом уровня адресован не ему, в следствии чего, объект проведет необходимые мероприятия для перенаправления пакета к пункту назначения или возврата отправителю с сообщением об ошибке. Но так или иначе не будет осуществлять продвижение данных на верхний уровень.
Пример инкапсуляции можно представить следующим образом:
Рассмотрим каждые функции уровней
Преимущества и применение UDP
Преимущество UDP в том, что протокол обеспечивает более высокую скорость работы по сравнению с TCP, так как у него нет накладных расходов на установку и на разрыв соединения.
Ошибки в современных сетях происходят достаточно редко и сетевые приложения способны самостоятельно исправлять такие, редко возникающие ошибки.
Область применения UDP — это системы, которые работают в режиме запрос-ответ и обмениваются между собой короткими сообщениями.
Применение UDP: DNS
В качестве применения UDP рассмотрим систему доменных имен DNS. DNS позволяют определить по доменному имени соответствующий ему IP-адрес. Например к доменному имени www.cisco.com соответствует вот такой IP адрес 184.86.0.170. Система DNS использует протокол UDP, порт 53.
Рассмотрим пример сетевого взаимодействия в DNS. В системе DNS есть сервер, который знает какие IP-адреса соответствуют доменным именам и клиент, который хочет получить такую информацию. Клиент DNS направляет запрос серверу, какой IP у доменного имени www.cisco.com? Сервер DNS получает такой запрос, находит соответствующий IP-адрес и отправляет ответ (184.86.0.170) взаимодействие происходит с использованием протокола UDP и для получения IP-адреса достаточно всего две дейтаграммы.
Если бы для запроса IP-адреса использовался протокол TCP, то необходимо было бы передать гораздо больше сообщений. Перед тем как запрашивать IP-адрес необходимо было бы установить соединение TCP. Для этого нужно 3 сообщения, затем запросить IP-адрес, получить ответ (еще 2 сообщения) и после того, как ответ получен нужно разорвать соединение, для этого нужно 3 или 4 сообщения.
Задний план
UDT был разработан Юнхонг Гу во время его учебы в докторантуре Национального центра интеллектуального анализа данных (NCDM) Университета Иллинойса в Чикаго в лаборатории доктора Роберта Гроссмана. Доктор Гу продолжает поддерживать и улучшать протокол после окончания учебы.
Проект UDT стартовал в 2001 году, когда стали популярными недорогие оптические сети, которые спровоцировали более широкое осознание проблем эффективности TCP в высокоскоростных глобальных сетях. Первая версия UDT, также известная как SABUL (Simple Available Bandwidth Utility Library), была разработана для поддержки массовой передачи данных для перемещения научных данных по частным сетям. SABUL использовал UDP для передачи данных и отдельное TCP-соединение для управляющих сообщений.
В октябре 2003 года NCDM достиг скорости передачи 6,8 гигабит в секунду из Чикаго , США, в Амстердам , Нидерланды . Во время 30-минутного теста они передали примерно 1,4 терабайта данных.
Позднее SABUL был переименован в UDT, начиная с версии 2.0, выпущенной в 2004 году. UDT2 удалил управляющее соединение TCP в SABUL и использовал UDP как для данных, так и для управляющей информации. UDT2 также представил новый алгоритм управления перегрузкой, который позволил протоколу работать «справедливо и дружелюбно» с одновременными потоками UDT и TCP.
UDT3 (2006) распространил использование протокола на бытовой Интернет. Контроль перегрузки также был настроен для поддержки относительно низкой пропускной способности. UDT3 также значительно сократил использование системных ресурсов (ЦП и памяти). Кроме того, UDT3 позволяет пользователям легко определять и устанавливать свои собственные алгоритмы управления перегрузкой.
UDT4 (2007) представил несколько новых функций для лучшей поддержки высокой степени параллелизма и обхода межсетевого экрана. UDT4 позволял нескольким UDT-соединениям связываться с одним и тем же UDP-портом, а также поддерживал настройку рандеву-соединения для упрощения пробивки отверстий UDP .
Пятая версия протокола в настоящее время находится на стадии планирования. Возможные функции включают возможность поддержки нескольких независимых сеансов через одно соединение.
Более того, поскольку отсутствие функции безопасности для UDT было проблемой при ее первоначальном внедрении в коммерческую среду, Бернардо (2011) разработал архитектуру безопасности для UDT в рамках своих докторских исследований. Однако эта архитектура подвергается усовершенствованию для поддержки UDT в различных сетевых средах (например, оптических сетях).
Номер порта
эффект:Для различных приложений, которые присутствуют в том же хосте, он также известен как адрес программы. Различные порты используются для различения различных приложений на одном хосте.Предположим, вы открываете два браузера, запрос, отправленный браузером A, не будет получен браузером B, который является потому, что A и B имеют разные порты. Номер порта разделен на два типа:
- Хорошо известный номер порта: этот номер порта фиксируется, используемый для серверных программ, и номер порта установлен на соответствующее число. Например, номер порта DNS составляет 53;
- Номер динамического порта: этот номер порта не фиксируется. Для клиентских программ клиентские программы не являются высокими номерами портов, пока номер порта уникален в этой машине.
Номер порта | протокол |
53 | DNS |
80 | HTTP |
20 | Данные FTP |
21 | FTP Control. |
23 | SSH |
25 | SMTP |
502 | MODBUS |
Что есть MAC-адрес
Дело в том, что пересылаемые пакеты в сети адресуются компьютерам не по их именам и не на IP-адрес. Пакет предназначается устройству с конкретным адресом, который и называется MAC-адресом.
MAC-адрес — это уникальный адрес сетевого устройства, который заложен в него изготовителем оборудования, т.е. это этакий проштампованный номер Вашей сетевой карты. Первая половина MAC-адрес представляет собой идентификатор изготовителя, вторая — уникальный номер данного устройства.
Как правило MAC-адрес бывает требуется для идентификации, скажем, у провайдера (если провайдер использует привязку по мак-адресу вместо логина-пароля) или при настройке маршрутизатора.
Преимущества UDP
По сравнению с TCP UDP имеет следующие преимущества:
-
Нет установки соединения. UDP является протоколом без организации соединений, поэтому он освобождает от накладных расходов, связанных с установкой соединений. Поскольку UDP не пользуется сигналами квитирования, то задержек, вызванных установкой соединений, также удается избежать. Именно поэтому DNS отдает предпочтение UDP перед TCP — DNS работала бы гораздо медленнее, если бы она выполнялась через TCP.
-
Скорость. UDP работает быстрее TCP. По этой причине многие приложения предпочитают не TCP, a UDP. Те же средства, которые делают TCP более устойчивым (например сигналы квитирования), замедляют его работу.
-
Топологическое разнообразие. UDP поддерживает взаимодействия «один с одним» и «один с многими», в то время как TCP поддерживает лишь взаимодействие «один с одним».
-
Накладные расходы. Работа с TCP означает повышенные накладные расходы, издержки, налагаемые UDP, существенно ниже. TCP по сравнению с UDP использует значительно больше ресурсов операционной системы, и, как следствие, в таких средах, где серверы одновременно обслуживают многих клиентов, широко используют UDP.
-
Размер заголовка. Для каждого пакета заголовок UDP имеет длину всего лишь восемь байтов, в то время как TCP имеет 20-байтовые заголовки, и поэтому UDP потребляет меньше пропускной способности сети.
Как мне правильно защитить порты?
По умолчанию все порты должны быть закрыты, если только вы не используете определенную службу и не должны ее открывать
Очень важно всегда иметь наименьшее количество экспортируемых локальных сервисов, так как поверхность атаки будет меньше. Брандмауэры позволят нам автоматически закрыть все порты и открывать только те, которые нам нужны
Используемое программное обеспечение, открывающее сокет TCP или UDP, важно, чтобы оно было актуальным, мало полезно закрывать все порты, кроме одного, если служба, работающая на этом порту, не обновлена и имеет недостатки безопасности. По этой причине так важно обновлять все программное обеспечение, всегда рекомендуется использовать программное обеспечение, которое все еще поддерживается, для получения различных обновлений
Если для доступа к определенной службе требуется аутентификация, необходимо, чтобы учетные данные были надежными, по возможности используйте цифровые сертификаты или ключи SSH (если вы собираетесь аутентифицироваться на сервере SSH). Например, всегда рекомендуется закрывать порт 23 Telnet, потому что это небезопасный протокол, и поэтому его лучше не использовать ни при каких обстоятельствах.
Настоятельно рекомендуется отслеживать, какие порты TCP и UDP используются, чтобы обнаруживать возможные проблемы вторжений или заражения троянами
Важно исследовать любой странный трафик или порты, которые открыты, хотя этого не должно быть. Также очень важно знать, как определенная служба (прослушивающая определенный порт) ведет себя при нормальном использовании, чтобы идентифицировать необычное поведение
Наконец, в дополнение к использованию брандмауэров для закрытия всех портов, которые мы не используем, также настоятельно рекомендуется использовать IDS / IPS для обнаружения странного поведения на сетевом уровне, и было бы даже целесообразно установить IDS самостоятельно. ПК, чтобы он обнаружил любую аномалию.
Оценка возможных механизмов безопасности
UDT считается современным протоколом, отвечающим требованиям инфраструктуры для передачи данных в высокоскоростных сетях. Однако его разработка создает новые уязвимости, поскольку, как и многие другие протоколы, он полагается исключительно на существующие механизмы безопасности для текущих протоколов, таких как протокол управления передачей (TCP) и UDP.
Исследование, проведенное доктором Данило Валеросом Бернардо из Технологического университета Сиднея , членом Австралийской технологической сети, посвященное практическим экспериментам с UDT с использованием предложенных ими механизмов безопасности и изучению использования других существующих механизмов безопасности, используемых в TCP / UDP для UDT, получил интересные отзывы в различных научных сообществах, посвященных сетевым технологиям и безопасности.
Чтобы проанализировать механизмы безопасности, они проводят формальное доказательство правильности, чтобы помочь им определить их применимость с помощью логики композиции протокола (PCL). Этот подход является модульным, включает отдельное подтверждение каждого раздела протокола и дает представление о сетевой среде, в которой каждый раздел может быть надежно использован. Более того, доказательство справедливо для множества стратегий восстановления после сбоев и других вариантов реализации и конфигурации. Они заимствуют свою технику из PCL по TLS и Kerberos в литературе. Они работают над разработкой и проверкой его архитектуры безопасности с использованием систем перезаписи и автоматов.
Результатом их работы, которая является первым в литературе, является более надежное теоретическое и практическое представление архитектуры безопасности UDT, пригодное для работы с другими высокоскоростными сетевыми протоколами.
Сетевые протоколы UDP, TCP, ICMP
В рамках протокола TCP/IP для передачи данных используются протоколы — TCP и UDP. Многие наверняка слышали, что есть порты как TCP, так и UDP, но не все знают в чем разница и что это вообще. И так..
Передача данных по протоколу TCP (Transmission Control Protocol — Протокол Управления Передачей) предусматривает наличие подтверждений получения информации. «-Ну, мол, — получил? -Получил!» Если же передающая сторона не получит в установленные сроки необходимого подтверждения, то данные будут переданы повторно. Поэтому протокол TCP относят к протоколам, предусматривающим соединение, а UDP (User Datagram Protocol — Протокол Пользовательских Датаграмм) — нет. UDP применяется в тех случаях, когда не требуется подтверждения приема (например, DNS-запросы или IP-телефония (яркий представитель которой, — Skype) ). То есть разница заключается в наличии подтверждения приема. Казалось бы «Всего то!», но на практике это играет важную роль.
Есть еще так же протокол ICMP (Internet Control Message Protocol — межсетевой протокол управляющих сообщений), который используется для передачи данных о параметрах сети. Он включает в себя служебные типы пакетов, таки как ping, distination unreachable, TTL и пр.
Зачем сравнивать TCP или что с ним не так
- packet loss — примерно 0,6% пакетов, которые мы отправляем, теряются по пути;
- reordering — перестановка пакетов местами, в реальной жизни довольно редкое явление, но случается в 0,2% случаев;
- jitter — когда пакеты отправляются равномерно, а приходят очередями с задержкой примерно в 50 мс.
Как вычислить RTT
беспроводные сети популярны и нестабильны
- Более 80% пользователей используют беспроводной интернет;
- Параметры беспроводных сетей динамично меняются в зависимости, например, от того, что пользователь повернул за угол;
- Беспроводные сети имеют высокие показатели packet loss, jitter, reordering;
- Фиксированный ассиметричный канал, смена IP-адреса.
TCP в нестабильных сетях
меньше половины канала
- Беспроводные мобильные сети победили и нестабильны.
- TCP не до конца утилизирует канал в нестабильных сетях.
- Потребление контента зависит от скорости интернета: чем выше скорость интернета, тем больше пользователи смотрят, а мы очень любим наших пользователей и хотим, чтобы они смотрели больше.
UDP — User Datagram Protocol
В отличие от TCP UDP — очень быстрый протокол, поскольку в нем определен самый минимальный механизм, необходимый для передачи данных. Конечно, он имеет некоторые недостатки. Сообщения поступают в любом порядке, и то, которое отправлено первым, может быть получено последним. Доставка сообщений UDP вовсе не гарантируется, сообщение может потеряться, и могут быть получены две копии одного и того же сообщения. Последний случай возникает, если для отправки сообщений в один адрес использовать два разных маршрута.
UDP не требует открывать соединение, и данные могут быть отправлены сразу же, как только они подготовлены. UDP не отправляет подтверждающие сообщения, поэтому данные могут быть получены или потеряны. Если при использовании UDP требуется надежная передача данных, ее следует реализовать в протоколе более высокого уровня.
Так в чем же преимущества UDP, зачем может понадобиться такой ненадежный протокол? Чтобы понять причину использования UDP, нужно различать однонаправленную передачу, широковещательную передачу и групповую рассылку.
Однонаправленное (unicast) сообщение отправляется из одного узла только в один другой узел. Это также называется связью «точка-точка». Протокол TCP поддерживает лишь однонаправленную связь. Если серверу нужно с помощью TCP взаимодействовать с несколькими клиентами, каждый клиент должен установить соединение, поскольку сообщения могут отправляться только одиночным узлам.
Широковещательная передача (broadcast) означает, что сообщение отправляется всем узлам сети. Групповая рассылка (multicast) — это промежуточный механизм: сообщения отправляются выбранным группам узлов.
UDP может использоваться для однонаправленной связи, если требуется быстрая передача, например для доставки мультимедийных данных, но главные преимущества UDP касаются широковещательной передачи и групповой рассылки.
Обычно, когда мы отправляем широковещательные или групповые сообщения, не нужно получать подтверждения из каждого узла, поскольку тогда сервер будет наводнен подтверждениями, а загрузка сети возрастет слишком сильно. Примером широковещательной передачи является служба времени. Сервер времени отправляет широковещательное сообщение, содержащее текущее время, и любой хост, если пожелает, может синхронизировать свое время с временем из широковещательного сообщения.
Заголовок UDP гораздо короче и проще заголовка TCP:
Поле | Длина | Описание |
---|---|---|
Порт источника | 2 байта | Указание порта источника для UDP необязательно. Если это поле используется, получатель может отправить ответ этому порту. |
Порт назначения | 2 байта | Номер порта назначения |
Длина | 2 байта | Длина сообщения, включая заголовок и данные. |
Контрольная сумма | 2 байта | Контрольная сумма заголовка и данных для проверки |
UDP — это быстрый протокол, не гарантирующий доставки. Если требуется поддержание порядка сообщений и надежная доставка, нужно использовать TCP. UDP главным образом предназначен для
широковещательной и групповой передачи. Протокол UDP определен в RFC 786.
Соединение TCP
TCP для передачи данных использует соединение. Соединение нужно установить перед тем, как начать передачу данных, а после того как передача данных завершена, соединение разрывается.
Задачи соединения
- Убедиться в том, что отправитель и получатель действительно хотят передавать данные друг другу
- Договориться о нумерации потоков байт. С точки зрения практической реализации нельзя всегда нумеровать данные в потоке байт с нуля. Каждый раз начальное значение для нумерации байт выбираются по определенному алгоритму и отправитель и получатель должны договориться между собой какое начальное значение они будут использовать для нумерации потока байт.
- При установке соединения происходит договоренность о некоторых параметрах соединения.
Установка соединения в TCP
Отправитель посылает запрос на установку соединения сообщение SYN от слова синхронизация. Также в сегмент включаются порядковый номер передаваемого байта.
Получатель в ответ передаёт сообщение SYN, куда включает подтверждение получения предыдущего сообщения ACK от слова acknowledge и порядковый номер байта, который он ожидает 7538, потому что на предыдущем этапе был получен байт с номером 7537.
Также отправитель включает в сегмент номер байта в потоке байт 36829. Номера байт в первом сообщении не могут быть всегда нулевыми, они выбираются по достаточно сложным алгоритмам, но для простоты можно представлять себе что эти номера выбираются случайным образом.
На третьем этапе пересылается подтверждение получения предыдущего запроса на установку соединения ACK номер следующего ожидаемого байта 36830, а также номер байта в сообщении. После этого соединение считается установленным и можно передавать данные.
Разрыв соединения в TCP
Соединение в TCP дуплексное — это означает, что после установки соединения передавать данные можно в две стороны. Есть две схемы разрыва соединения. Возможен одновременный разрыв соединения, в этом случае обе стороны разрывают соединение в одно и то же время, либо односторонние, в этом случае одна сторона говорит о том, что данные для передачи у нее закончились, но другая сторона может передавать данные еще достаточно долго.
Протокол TCP предусматривает два варианта разрыва соединения: корректное, с помощью одностороннего разрыва соединения и сообщения FIN и разрыв из-за критической ситуации с помощью сообщения RST.
Рассмотрим, как выполняется корректный разрыв соединения. Сторона, которая хочет разорвать соединение пересылает другой стороне сообщение FIN и в ответ получает сообщение ACK. Однако соединение разорвано только с одной стороны.
Когда другая сторона решила, что данные для передачи у нее закончились, она также передает сообщение FIN в ответ получает сообщение ACK подтверждение. На этом этапе соединение закрыто полностью в обе стороны.
Для разрыва соединения в критической ситуации из-за ошибок в приложении или с оборудованием используется одно сообщение RST. В этом случае соединение закрывается в обе стороны. Хотя сообщение RST предназначено для использования в критических ситуациях, некоторые протоколы используют его для быстрого закрытия соединения.
Награды
Команда UDT трижды побеждала в престижном конкурсе Bandwidth Challenge во время ежегодной конференции ACM / IEEE Supercomputing , ведущей в мире конференции по высокопроизводительным вычислениям, сетевым технологиям, хранению данных и анализу.
На SC06 (Тампа, Флорида) команда передала набор астрономических данных со скоростью 8 Гбит / с с диска на диск из Чикаго, штат Иллинойс, в Тампу, штат Флорида, используя UDT. На SC08 (Остин, Техас) команда продемонстрировала использование UDT в сложной высокоскоростной передаче данных с участием различных распределенных приложений по системе из 120 узлов, в четырех центрах обработки данных в Балтиморе, Чикаго (2) и Сан-Диего. На SC09 (Портленд, штат Орегон) совместная команда из NCDM, Naval Research Lab и iCAIR продемонстрировала приложения для облачных вычислений с большими объемами данных на базе UDT.