Как происходит передача данных в локальной сети (tcp/ip)

На какие открытые порты нужно обращать внимание

Я упоминал, что если на компьютер попала вредоносная программа, которая открыла соединение для связи со злоумышленником, то она будет прослушивать один из портов. В этом случае для TCP состояние подключения будет LISTENING или ESTABLISHED. Протокол UDP является «безстатусным», поэтому для него ничего не пишется, но нужно знать, что через UDP точно также может происходить обмен информацией.

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

Поэтому нет готового списка портов, на которые нужно обращать внимание. Любой порт может быть признаком проблемы с безопасностью компьютера.

Нужно проверить, какие именно файлы и службы открыли соединение

Если исполнимый файл, открывший сетевого соединение, размещён в сомнительном месте, в папках, куда обычно не устанавливают программы, то нужно особое внимание обратить на этот файл.. Трояны и бэкдоры могут действовать двумя методами:

Трояны и бэкдоры могут действовать двумя методами:

  • открывать порт и ждать подключения злоумышленника;
  • самостоятельно подключаться к удалённой системе злоумышленника.

При втором варианте состояние подключения НЕ будет LISTENING — вредоносную программу можно найти только путём полного анализа всех соединений.

Как правило, службы, которые прослушивают только IP адрес 127.0.0.1, то есть слушающие на петлевых интерфейсах, предназначены для обслуживания каких-либо легитимных программ, запущенных на вашей системе.

↓ 07 — Iperf | macOS | Linux

iperf — это инструмент для активных измерений максимально достижимой полосы пропускания в IP-сетях. Он поддерживает настройку различных параметров, связанных с синхронизацией, протоколами и буферами. Для каждого теста он сообщает о пропускной способности, потерях и других параметрах. Текущая версия, иногда называемая iperf3, представляет собой редизайн оригинальной версии, разработанной в NLANR / DAST.

iperf3 — это новая реализация с нуля, целью которой является меньшая, более простая кодовая база и библиотечная версия функциональности, которую можно использовать в других программах. В iperf3 также есть ряд функций, присутствующих в других инструментах, таких как nuttcp и netperf, но отсутствующих в оригинальном iperf. К ним относятся, например, режим нулевого копирования и дополнительный вывод JSON

Обратите внимание, что iperf3 не имеет обратной совместимости с оригинальным iperf

Тест производительности сети будет работать с любым типом соединения TCP / IP. Включая Ethernet, коммутируемые модемы, ADSL, кабельные модемы, локальные сети (LAN), глобальные сети (WAN) и беспроводные сети (WiFi). Программное обеспечение было оптимизировано, чтобы использовать минимальное количество процессорного времени, что позволяет сравнивать даже высокоскоростные гигабитные соединения Ethernet. Пользователи имеют возможность изменять следующие параметры теста.

  • IP-адрес компьютера, выступающего в роли сервера, и номер порта, используемого для теста, чтобы помочь с проблемами брандмауэра.
  • Размер блока данных, используемого для каждого запроса на отправку. Также возможно выбрать блоки переменного размера для измерения дельты производительности при увеличении или уменьшении размера блока.
  • Продолжительность теста.
  • Протокол, либо TCP, либо UDP. Протокол TCP — это когда важна целостность данных (ошибки исправляются с помощью повторной передачи данных). UDP используется с приложениями, которые терпимы к потере данных, такими как потоковое видео.

Завершение сеанса TCP

Завершение сеанса использует четырёхкратное рукопожатие, причём каждая сторона завершает своё соединение независимо.

Когда одна из сторон хочет остановить свою половину соединения, она передаёт пакет FIN, который другая сторона подтверждает пакетом с ACK.

После того, как сторона, отправившая первый FIN, ответила с последним ACK, она ожидает некоторое время прежде чем окончательно закрыть соединение. В течение этого времени локальный порт недоступен для новых соединений.

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

Также возможно разорвать соединение трёхкратным рукопожатием, когда первая сторона отправляет FIN, а вторая отвечает FIN и ACK (просто объединяет 2 шага в один). Дальше первая сторона подтверждает завершение сеанса с помощью ACK.

Обработка и переключение

В IP-сетях маршрутизаторы принимают решения о перенаправлении трафика на основе таблицы маршрутизации. В таблице маршрутизации маршрутизатор ищет самое длинное соответствие для IP-адреса назначения. Это выполняется на уровне процессов. Поэтому процесс поиска помещается в очередь вместе с другими процессами ЦП, из-за чего время поиска становится непредсказуемым и может быть очень большим. В связи с этим в программном обеспечении Cisco IOS представлено много способов коммутации на основе поиска точного соответствия.

Основная выгода поиска точного соответствия в том, что время поиска является детерминированным и очень коротким. Это значительно сократило время на принятие маршрутизатором решения по перенаправлению пакетов. Поэтому подпрограммы, выполняющие поиск, могут быть реализованы на уровне прерываний. Это означает, что прибытие пакета инициирует прерывание, которое заставляет ЦП отложить другие задачи и обработать пакет. Традиционный метод перенаправления пакетов заключается в поиске лучшего соответствия в таблице маршрутизации. Его невозможно реализовать на уровне прерываний и необходимо выполнять на уровне процессов. По ряду причин некоторые из которых рассматриваются в этом документе, невозможно полностью отказаться от метода поиска самого длинного совпадения. Поэтому на маршрутизаторах Cisco одновременно существуют оба метода поиска. Эта стратегия обобщена и применяется к IPX и AppleTalk.

Forwarding портов

Forwarding, который ещё называют «переадресацией» портов, «проброской портов», «перенаправлением портов» или «Port mapping» (сопоставление портов) позволяет делать очень замечательную вещь — с его помощью устройства за NAT, то есть устройство в локальной сети, имеющее локальный IP адрес, могут стать доступными глобально. Правила могут быть настроены весьма гибкой, можно сделать пересылку нескольких портов на один, или с одного на несколько, или несколько на несколько и так далее. Но для наших целей больше всего интересно следующее правило, которое словами можно выразить так:

Номера портов необязательно должны быть одинаковыми, поэтому правило может быть таким:

В результате мы получим доступ к порту 80 (его обычно прослушивает веб-сервер) устройства в локальной сети 192.168.0.5.

Это означает, что мы можем получить доступ к любому открытому порту и запущенному на нём службе в локальной сети! Это может быть веб-сервер, SSH, FTP, сетевые протоколы Windows и т.д.

Неправильный параметр в загонке TCP

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

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

IP адрес 0.0.0.0

Кстати, IP адрес 0.0.0.0 довольно интересный, так как используется в разных случаях.

Например, некоторые службы в качестве адреса привязки (bind) позволяют установить 0.0.0.0. Это означает, что служба будет прослушивать порт на всех сетевых интерфейсах данного компьютера, то есть на всех IP адресах. В некоторых службах (например, веб-сервер Apache), просто не нужно указывать никакой определённый IP адрес (в том числе 0.0.0.0) и по умолчанию они будут прослушивать входящие соединения на всех сетевых интерфейсах.

Важно понимать, что 0.0.0.0 и 127.0.0.1 это совершенно разные вещи. Хотя если в Linux пинговать 0.0.0.0, то пинги будут отправляться именно к 127.0.0.1

В Windows попытка пинга 0.0.0.0 вызовет сообщение о сбое передачи данных, то есть о недоступности адреса. Адрес 0.0.0.0 означает «любой IP данного компьютера» и включает в себя в том числе 127.0.0.1.

Адрес 0.0.0.0 обычно означает, что IP адрес ещё не настроен или не присвоен. Такой адрес указывает хост, который обращается к DHCP для получения IP адреса.

Если 0.0.0.0 указан в качестве адреса получателя, то он должен расцениваться как широковещательный адрес 255.255.255.255.

Адрес 0.0.0.0 с маской 0.0.0.0, то есть 0.0.0.0/0 используется для обозначения маршрута по умолчанию (default route).

Этот адрес не является валидным адресом для назначения сетевому интерфейсу, точно также как и вся подсеть 0.0.0.0/8 (то есть любой адрес, начинающийся с 0.).

Если в Linux обратиться к этому адресу, например, набрать в веб браузере адрес http://0.0.0.0, то откроется страница локального веб сервера (если он установлен и запущен). В Windows такой адрес вызовет ошибку о неверном адресе.

Также адрес 0.0.0.0 может использоваться для явного указания, что целевой хост недоступен.

Эта информация приведена просто для справки и для расширения кругозора, а теперь продолжаем с нашими открытыми портами.

Что означает 0.0.0.0 в netstat. Различные виды нотаций в netstat и ss

0.0.0.0 — это самый первый IP адрес. Но он относится к IP специального назначения (как например 127.0.0.1) и выполняет разные функции.

Обозначение 0.0.0.0 может иметь разное значение в зависимости от того, где используется. Когда говорят о прослушиваемых портах, это обозначение в Linux символизирует заполнитель, то есть означает «любой IP адрес».

Чем это отличается от * (звёздочки) или от записи :::, которые также встречаются в выводе рассматриваемых программ? В программе ss IPv6 адрес 0:0:0:0:0:0:0:0 (который является аналогом IPv4 адреса 0.0.0.0) обозначается звёздочкой (*). Следовательно, в ss запись 0.0.0.0:* обозначает «любой IPv4 адрес с любого порта». А обозначение *:* символизирует «любой IPv6 адрес с любого порта».

В программе netstat также используется запись 0.0.0.0:* которая также обозначает «любой IPv4 адрес с любого порта».

Но в netstat для обозначения «любой IPv6 адрес с любого порта» используется :::*

Помните об этих различиях, чтобы не запутаться. А также помните о том, что если показано, что прослушивается протокол tcp6 (IPv6), то одновременно может прослушиваться порт и на tcp (IPv4) — при этом данные в выводимой информации отсутствуют!

В Windows в качестве Local Address (Локального адреса), когда прослушивается любой IP адрес на определённом порту, используется запись вида 0.0.0.0:80 (в этом примере прослушивается любой IP адрес, доступный в системе, на 80 порту). Для IPv6 адресов в этом случае используется запись вида :80.

В качестве внешнего адреса, когда доступно подключения с любого IP и с любого порта, для TCP протокола пишется 0.0.0.0:0, а для UDP протокола в этих же условиях пишется *:*. Что тоже не особо логично и сбивает с толку. Точнее говоря такое различие в обозначениях вытекает из разницы протоколов TCP и UDP.

Если информация относится к IPv6, то для TCP когда имеется ввиду любой адрес на любом порту, используется запись вида :0. А для UDP используются одинаковые нотации как для IP, так и для IPv6, то есть *:*

Нужно помнить, что некоторые из этих обозначений пересекаются с нотациями из Linux, где они имеют своё собственное значение.

Чтобы чуть облегчить жизнь, я составил такую табличку, которую можно использовать в качестве шпаргалки:

Определённый локальный IPv4 адрес на определённом порту

Любой локальный IPv4 адрес на определённом порту

Определённый локальный IPv6 адрес на определённом порту

Любой локальный IPv6 адрес на определённом порту

Любой внешний IPv4 адрес на любом порту

Любой внешний IPv6 адрес на любом порту

Netstat (Windows)

127.0.0.1:9050

0.0.0.0:80

:80

:443

Для TCP: 0.0.0.0:0

Для UDP: *:*

Для TCP: :0

Для UDP: *:*

Netstat (Linux)

2a02:f680:1:1100::3d:80

:::443

0.0.0.0:*

:::*

ss (Linux)

:80

*:443

0.0.0.0:*

*:*

ИЛИ

:*

Заголовок TCP пакета

Заголовок TCP пакета состоит из следующих полей:

  • Порт отправителя.
  • Порт получателя.
  • Порядковый номер в сегменте (sequence number). В целях безопасности это значение генерируется случайным образом и может быть равно от 0 до 4294967295;
  • Номер подтверждения (acknowledgment number). Когда мы подтверждаем определённый пакет, в нем записывается sequence number подтверждаемого пакета.
  • Длина заголовка (data offset). В этом поле указывается длина заголовка TCP пакета и где начинаются фактические данные.
  • Зарезервированное поле. Эти биты зарезервированы для будущего использования.
  • Флаги. Необходимы для дополнительной функциональности. Например, позволяют установить или разорвать соединение, включить или выключить защиту от перегрузки сети и тому подобное.
  • Размер окна (Window Size). Указывается количество байт, считая от последнего номера подтверждения, которые готов принять отправитель данного пакета. То есть, какой у него в данный момент времени размер буфера.
  • Контрольная сумма (Checksum). Используется для проверки на наличие ошибок при приеме или передачи пакетов. Рассчитывается с учетом заголовка (кроме контрольной суммы) и самих данных.
  • Указатель срочности (Urgent pointer). Используется, если стоит флаг  URG. По этому значению определяются срочные данные и они сразу же передаются приложению. Остальные данные попадают в буфер.
  • Дополнительные опции. Необязательно, но используются почти всегда.
  • Заполнение (Padding). Дополняет заголовок, пока он не закончится на 32-разрядной границе. Всегда состоит только из нулей.

Флаги в заголовке TCP

NS (Nonce Sum). Защита от случайного или злонамеренного изменения флагов. Используется для улучшения работы механизма явного уведомления о перегрузке ECN (Explicit Congestion Notification).

CWR (Congestion Window Reduced). Подтверждение получения пакета с флагом ECE и включением механизма уменьшения перегрузки (Congestion Control). Этот механизм позволяет оптимизировать отправку пакетов в перегруженных сетях.

ECE (ECN-Echo). Выполняет две функции. Если соединение только устанавливается, то означает что отправитель поддерживает ECN. В другом случае, это означает перегрузку сети (или предстоящую перегрузку) для отправителя.

URG (Urgent)

Указатель важности. 0 если не используется, 1 – используется.

ACK

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

PSH (Push). Обычно получатель не подтверждает каждый пакет при получении. Вместо этого пакеты накапливаются в буфере, пока не передадутся приложению. Данный флаг сообщает получателю, что нужно немедленно передать всё из буфера приложению и сразу же отправить подтверждение.

RST. Сообщает о немедленном разрыве соединения. При этом соединение обрывается, а буфер очищается. Самые распространенные причины отправки пакета с таким флагом:ответ на пакет, полученный для закрытого сокета;
пользователь сам прервал соединение (например, закрыв браузер, не дожидаясь ответа);
соединение не было нормально закрыто, но находится в неактивном состоянии некоторое время.

SYN. Данный флаг означает начало соединения. Он также синхронизирует начальные номера. Первый пакет, отправленный с каждой стороны, должен иметь этот флаг.

FIN. Сообщает другой стороне что все пакеты были отправлены, и соединение пора завершить.

Как настроить локальную сеть для дома

Для объединения двух персональных компьютеров или ноутбуков, оснащённых однотипным программным обеспечением, целесообразно использовать сетевой кабель, купленный в специализированном магазине и обжатый определённым образом:

  • прямым способом, если компьютеры подключаются к роутеру или свитчу;
  • перекрёстным для последовательного объединения ПК, свитчей или роутеров.

Построение локальной сети посредством сетевого кабеля

Сетевой кабель используют для объединения двух компьютеров или ноутбуков. У этого способа есть существенный «минус» — необходимость вручную вводить адреса IP объединяемых устройств и прописывать сетевые настройки в «Центре управления сетью…» (находится на панели управления ПК).

Например, в распоряжении семьи находятся компьютеры с программным обеспечением Виндовс 7, которые решено объединить с помощью локальной сети.

Центр управления сетями

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

Следующий шаг — проверка работоспособности Брандмауэра Windows (раздел «Администрирование» на Панели управления). Выбрав вкладку «Управление компьютером», пользователь должен найти «Службы и приложения» и включить службу Брандмауэр (в том случае, если она выключена) — выбрать автоматический тип запуска.

Завершающим этапом подключения является проверка работоспособности компьютерной сети. Чтобы осуществить задуманное, необходимо, открыв поисковую строку на любом из подключенных к сети устройств, найти и активировать «cmd», а в открывшемся окне вызвать команду «ping» и указать IP другого ПК.

Если настройка сети прошла успешно, после нажатия на «Энтер» появится статистика отправленных и полученных пакетов. Обе цифры должны быть одинаковы.

Создание домашней сети посредством Wi-Fi

Задавшись вопросом «как создать сеть между двумя компьютерами через интернет», большинство людей останавливаются на Wi-Fi. Весомое преимущество беспроводного способа в том, что компьютеры и другие электронные устройства можно свободно перемещать по дому. Недостаток — в необходимости вручную вводить адрес IP и наименование маски.

Процесс подключения компьютеров, оснащённых программным обеспечением Windows 7, Windows 8 и Windows 10, почти не имеет отличий. Некоторые проблемы могут возникнуть у пользователей Windows XP, так как данное ПО считается устаревшим.

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

Построение локальной сети Wi-Fi

Специалисты советуют поступать следующим образом:

  • персональные компьютеры сопрягать с роутером с помощью сетевого кабеля;
  • ноутбуки объединять через Wi-Fi.

Советы по построении локальной сети с помощью коммутатора (Switch)

Свитч (хаб) используют для объединения нескольких электронных устройств. К каждому из портов коммутатора подключают одно устройство, например, ПК, ноутбук, смарт-телевизор или принтер.

Важная особенность этого метода — возможность контролировать с помощью локальной сети сразу несколько единиц домашней техники. Чем больше портов в Switch — тем больше техники можно объединить.

Создание локальной сети с помощью роутера

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

Домашняя «локалка», в большинстве случаев, создаётся по так называемому «принципу звезды», где роутер (модем) является центром условной звезды, а техника подключена к прибору независимо друг от друга. При необходимости роутер можно подключить к сети через телефонный или цифровой кабель и подавать интернет сразу на все устройства или выборочно.

Порты роутера LAN и WAN

Для организации локальной сети настройку производят через порты LAN. Для подключения через цифровой кабель понадобится роутер с WAN-разъёмом (расположен на задней панели). Если выход в internet обеспечивает телефонный провайдер, прибор должен быть оснащён разъёмом ADSL.

AIMD

В TCP для определения размера окна перегрузки используется метод аддитивного увеличения, мультипликативного уменьшения. Суть метода заключается в том, что при получении каждого подтверждения, мы прибавляем к размеру окна некоторые значения, как правило это размер одного сегмента TCP, а если перегрузка произошла, то мы умножаем размер окна на некоторые значения. Как правило это 1/2, то есть в TCP при перегрузке, размер окна уменьшается в два раза.

  • Где a — максимальный размер сегмента (MSS);
  • b- 1/2.

 Размер окна AIMD

Вот график работы метода аддитивного увеличения, мультипликативного уменьшения. Мы начинаем передавать данные, поступает подтверждение,размер окна увеличивается, происходит аддитивное увеличение. Затем в сети произошла перегрузка, размер окна уменьшается в два раза, произошло мультипликативное уменьшение.

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

Узкие места для пропускной способности TCP

Не используйте сетевой монитор и не принимайте журналы уровня пакетов сети во время тестов пропускной способности TCP. Фильтры мониторинга спецификации интерфейса сетевого драйвера (NDIS) добавляют задержку для отправителям и приемникам при каждом записи пакета. Эта операция требует ресурсов ЦП и создает множество IOs хранилища. Производительность снижается при взятии журналов уровня пакетов, так как TCP пытается восстановиться после потери пакета.

Добавление безопасности имеет собственные проблемы с затратами и производительностью. Протоколы безопасности, такие как безопасность протокола Интернета (IPsec), должны быть накладные и дополнительные требования к обработке. Сравнивая защиту данных с целостностью данных, режим целостности IPsec должен быть предпочтительным для меньших затрат на обработку. Программное обеспечение безопасности также имеет огромные затраты на обработку пакетов, что приведет к более медленным выводам.

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

Проверив проблемы с производительностью TCP, проверьте связанные протоколы верхнего уровня, такие как протоколы файловой системы (Блок сообщений сервера (SMB) или Network File System (NFS)). Эти протоколы требуют ресурсов процессора и IOs диска. Медленная скорость вызвана неисправным драйвером или оборудованием, высокой отложенной очередью вызова процедуры (DPC) или/и медленными IOs диска. Выяснить, какой компонент в ОС вызывает высокие показатели DPCs, сложно, так как для этого требуется анализ с помощью журнала Xperf/Windows Performance Recorder (WPR) (CPU). Поиск проблем, связанных с диском, относительно проще. Дополнительные сведения см. в дополнительных сведениях в examining and Tuning Disk Performance.

Во время тестирования приложения тестирования (клиентские и серверные приложения) могут быть настроены на использование нескольких потоков с достаточно высокими значениями буфера, чтобы достичь максимальной пропускной способности. Однако это может не отражать фактические условия, так как количество потоков и буфера, которые может использовать каждый вызов API, ограничено в зависимости от программирования. Кроме того, протокол уровня приложений (SMB или Common Internet File System (CIFS)) имеет собственный буфер и оптимизацию(Настройка производительности для серверов файлов или SMB: Руководствопо устранению неполадок). Если приложение работает не так, как ожидалось для базового уровня, работайте со специалистом по приложениям, чтобы найти узкий место.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: