Транспортный уровень
Задача транспортного уровня - это передача данных между различными приложениями, выполняемых на всех узлах сети. После того, как пакет доставляется с помощью IP-протокола на принимающий компьютер, данные должны быть отправлены специальному процессу-получателю. Каждый компьютер может выполнять несколько процессов, кроме того, приложение может иметь несколько точек входа, действуя в качестве адреса назначения для пакетов данных.
Пакеты, приходящие на транспортный уровень операционной системы организованы в множества очередей к точкам входа различных приложений. В терминологии TCP/IP такие точки входа называются портами.
Transmission Control Protocol
Transmission Control Protocol (TCP) (протокол управления передачей) - является обязательным протоколом стандарт TCP/IP , определенный в стандарте RFC 793, "Transmission Control Protocol (TCP)".
TCP - это протокол транспортного уровня, предоставляющий транспортировку (передачу) потока данных, с необходимостью предварительного установления соединения, благодаря чему гарантирует уверенность в целостности получаемых данных, также выполняет повторный запрос данных в случае потери данных или искажения. Помимо этого протокол TCP отслеживает дублирование пакетов и в случае обнаружения - уничтожает дублирующиеся пакеты.
В отличие от протокола UDP гарантирует целостность передаваемых данных и подтверждения отправителя о результатах передачи. Используется при передаче файлов, где потеря одного пакета может привести к искажению всего файла.
TCP обеспечивает свою надежность благодаря следующему:
- Данные от приложения разбиваются на блоки определенного размера, которые будут отправлены.
- Когда TCP посылает сегмент, он устанавливает таймер, ожидая, что с удаленного конца придет подтверждение на этот сегмент. Если подтверждение не получено по истечении времени, сегмент передается повторно.
- Когда TCP принимает данные от удаленной стороны соединения, он отправляет подтверждение. Это подтверждение не отправляется немедленно, а обычно задерживается на доли секунды
- TCP осуществляет расчет контрольной суммы для своего заголовка и данных. Это контрольная сумма, рассчитываемая на концах соединения, целью которой является выявить любое изменение данных в процессе передачи. Если сегмент прибывает с неверной контрольной суммой, TCP отбрасывает его и подтверждение не генерируется. (Ожидается, что отправитель отработает тайм-аут и осуществит повторную передачу.)
- Так как TCP сегменты передаются в виде IP датаграмм, а IP датаграммы могут прибывать беспорядочно, также беспорядочно могут прибывать и TCP сегменты. После получения данных TCP может по необходимости изменить их последовательность, в результате приложение получает данные в правильном порядке.
- Так как IP датаграмма может быть продублирована, принимающий TCP должен отбрасывать продублированные данные.
- TCP осуществляет контроль потока данных. Каждая сторона TCP соединения имеет определенное пространство буфера. TCP на принимающей стороне позволяет удаленной стороне посылать данные только в том случае, если получатель может поместить их в буфер. Это предотвращает от переполнения буферов медленных хостов быстрыми хостами.
- Порядковый номер выполняет две задачи:
- Если установлен флаг SYN, то это начальное значение номера последовательности - ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь номер последовательности, равный ISN + 1.
- В противном случае, если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот номер последовательности.
- Номер подтверждения - если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый получателем в следующий раз. Помечает этот сегмент как подтверждение получения.
- Длина заголовка - задается словами по 32бита.
- Размер окна - количество байт, которые готов принять получатель без подтверждения.
- Контрольная сумма - включает псевдо заголовок, заголовок и данные.
- Указатель срочности - указывает последний байт срочных данных, на которые надо немедленно реагировать.
- URG - флаг срочности, включает поле "Указатель срочности", если =0 то поле игнорируется.
- ACK - флаг подтверждение, включает поле "Номер подтверждения, если =0 то поле игнорируется.
- PSH - флаг требует выполнения операции push, модуль TCP должен срочно передать пакет программе.
- RST - флаг прерывания соединения, используется для отказа в соединении
- SYN - флаг синхронизация порядковых номеров, используется при установлении соединения.
- FIN - флаг окончание передачи со стороны отправителя
Рассмотрим структуру заголовка TCP с помощью сетевого анализатора Wireshark:
TCP порты
Так как на одном и том же компьютере могут быть запущены несколько программ, то для доставки TCP-пакета конкретной программе, используется уникальный идентификатор каждой программы или номер порта.
Номер порта - это условное 16-битное число от 1 до 65535, указывающее, какой программе предназначается пакет.
TCP порты используют определенный порт программы для доставки данных, передаваемых с помощью протокола управления передачей (TCP). TCP порты являются более сложными и работают иначе, чем порты UDP. В то время как порт UDP работает как одиночная очередь сообщений и как точка входа для UDP-соединения, окончательной точкой входа для всех соединений TCP является уникальное соединение. Каждое соединение TCP однозначно идентифицируется двумя точками входа.
Каждый отдельный порт сервера TCP может предложить общий доступ к нескольким соединениям, потому что все TCP соединения идентифицируются двумя значениями: IP-адресом и TCP портом (сокет).
Все номера портов TCP, которые меньше чем 1024 - зарезервированы и зарегистрированы в Internet Assigned Numbers Authority (IANA).
Номера портов UDP и TCP не пересекаются.
TCP программы используют зарезервированные или хорошо известные номера портов, как показано на следующем рисунке.
Установление соединения TCP
Давайте теперь посмотрим, как устанавливается TCP-соединения. Предположим, что процесс, работающий на одном хосте, хочет установить соединение с другим процессом на другом хосте. Напомним, что хост, который инициирует соединение называется «клиентом», в то время как другой узел называется «сервером».
Перед началом передачи каких-либо данных, согласно протоколу TCP, стороны должны установить соединение. Соединение устанавливается в три этапа (процесс «трёхкратного рукопожатия» TCP).
- Запрашивающая сторона (которая, как правило, называется клиент) отправляет SYN сегмент, указывая номер порта сервера, к которому клиент хочет подсоединиться, и исходный номер последовательности клиента (ISN).
- Сервер отвечает своим сегментом SYN, содержащим исходный номер последовательности сервера. Сервер также подтверждает приход SYN клиента с использованием ACK (ISN + 1). На SYN используется один номер последовательности.
- Клиент должен подтвердить приход SYN от сервера своим сегментов SYN, содержащий исходный номер последовательности клиента (ISN+1) и с использованием ACK (ISN+1). Бит SYN установлен в 0, так как соединение установлено.
После установления соединения TCP, эти два хоста могут передавать данные друг другу, так как TCP-соединение является полнодуплексным, они могут передавать данные одновременно.
Источники: Википедия, Майкрософт, portscan.ru
Как узнать, какие порты открыты на компьютере?
- Для Windows: Пуск → «cmd» → Запустить от имени администратора → «netstat -bn»
- В антивируснике, таком как Avast, есть возможность посмотреть активные порты в Брандмауэре: инструменты -> Брандмауэр -> Сетевые соединения.
Также полезные команды netstat:
To display both the Ethernet statistics and the statistics for all protocols, type the following command:
netstat -e -s
To display the statistics for only the TCP and UDP protocols, type the following command:
netstat -s -p tcp udp
To display active TCP connections and the process IDs every 5 seconds, type the following command:
nbtstat -o 5
To display active TCP connections and the process IDs using numerical form, type the following command:
nbtstat -n -o
Для сокетов TCP допустимы следующие значения состояния:
CLOSED | Закрыт. Сокет не используется. |
LISTEN (LISTENING) | Ожидает входящих соединений. |
SYN_SENT | Активно пытается установить соединение. |
SYN_RECEIVED | Идет начальная синхронизация соединения. |
ESTABLISHED | Соединение установлено. |
CLOSE_WAIT | Удаленная сторона отключилась; ожидание закрытия сокета. |
FIN_WAIT_1 | Сокет закрыт; отключение соединения. |
CLOSING | Сокет закрыт, затем удаленная сторона отключилась; ожидание подтверждения. |
LAST_ACK | Удаленная сторона отключилась, затем сокет закрыт; ожидание подтверждения. |
FIN_WAIT_2 | Сокет закрыт; ожидание отключения удаленной стороны. |
TIME_WAIT | Сокет закрыт, но ожидает пакеты, ещё находящиеся в сети для обработки |
Список наиболее часто используемых портов
№ | Порт | Протокол | Описание | |
---|---|---|---|---|
1 | 20 | FTP Data | File Transfer Protocol - протокол передачи файлов. Порт для данных. | |
2 | 21 | FTP Control | File Transfer Protocol - протокол передачи файлов. Порт для команд. | |
3 | 22 | SSH | Secure SHell - «безопасная оболочка». Протокол удаленного управления операционной системой. | |
4 | 23 | telnet | TErminaL NETwork. Протокол реализации текстового интерфейса по сети. | |
5 | 25 | SMTP | Simple Mail Transfer Protocol - простой протокол передачи почты. | |
6 | 42 | WINS | Windows Internet Name Service. Служба сопоставления NetBIOS-имён компьютеров с IP-адресами узлов. | |
7 | 43 | WHOIS | «Who is». Протокол получения регистрационных данных о владельцах доменных имён и IP адресах. | |
8 | 53 | DNS | Domain Name System - система доменных имён. | |
9 | 67 | DHCP | Dynamic Host Configuration Protocol - протокол динамической настройки узла. Получение динамических IP. | |
10 | 69 | TFTP | Trivial File Transfer Protocol - простой протокол передачи файлов. | |
11 | 80 | HTTP/Web | HyperText Transfer Protocol - протокол передачи гипертекста. | |
12 | 110 | POP3 | Post Office Protocol Version 3 - протокол получения электронной почты, версия 3. | |
13 | 115 | SFTP | SSH File Transfer Protocol. Протокол защищенной передачи данных. | |
14 | 123 | NTP | Network Time Protocol. Протокол синхронизации внутренних часов компьютера. | |
15 | 137 | NetBIOS | Network Basic Input/Output System. Протокол обеспечения сетевых операций ввода/вывода. Служба имен. | |
16 | 138 | NetBIOS | Network Basic Input/Output System. Протокол обеспечения сетевых операций ввода/вывода. Служба соединения. | |
17 | 139 | NetBIOS | Network Basic Input/Output System. Протокол обеспечения сетевых операций ввода/вывода. Служба сессий. | |
18 | 143 | IMAP | Internet Message Access Protocol. Протокол прикладного уровня для доступа к электронной почте. | |
19 | 161 | SNMP | Simple Network Management Protocol - простой протокол сетевого управления. Управление устройствами. | |
20 | 179 | BGP | Border Gateway Protocol, протокол граничного шлюза. Протокол динамической маршрутизации. | |
21 | 443 | HTTPS | HyperText Transfer Protocol Secure) - протокол HTTP, поддерживающий шифрование. | |
22 | 445 | SMB | Server Message Block. Протокол удалённого доступа к файлам, принтерам и сетевым ресурсам. | |
23 | 514 | Syslog | System Log. Протокол отправки и регистрации сообщений о происходящих системных событиях. | |
24 | 515 | LPD | Line Printer Daemon. Протокол удаленной печати на принтере. | |
25 | 993 | IMAP SSL | Протокол IMAP, поддерживающий SSL шифрование. | |
26 | 995 | POP3 SSL | Протокол POP3 поддерживающий SSL шифрование. | |
27 | 1080 | SOCKS | SOCKet Secure. Протокол получения защищенного анонимного доступа. | |
28 | 1194 | OpenVPN | Открытая реализация технологии Виртуальной Частной Сети (VPN). | |
29 | 1433 | MSSQL | Microsoft SQL Server - система управления базами данных. Порт доступа к базе. | |
30 | 1702 | L2TP (IPsec) | Протокол поддержки виртуальных частных сетей. А также набор протоколов обеспечения защиты данных. | |
31 | 1723 | PPTP | Туннельный протокол защищённого соединения с сервером типа точка-точка. | |
32 | 3128 | Proxy | В данный момент порт часто используется прокси-серверами. | |
33 | 3268 | LDAP | Lightweight Directory Access Protocol - облегчённый протокол доступа к каталогам (службе каталогов). | |
34 | 3306 | MySQL | Доступ к MySQL базам данных. | |
35 | 3389 | RDP | Remote Desktop Protocol - протокол удалённого рабочего стола для Windows. | |
36 | 5432 | PostgreSQL | Доступ к PostgreSQL базам данных. | |
37 | 5060 | SIP | Протокол установления сеанса и передачи мультимедиа содержимого. | |
38 | 5900 | VNC | Virtual Network Computing - система удалённого доступа к рабочему столу компьютера. | |
39 | 5938 | TeamViewer | TeamViewer - система обеспечения удалённого контроля компьютера и обмена данными. | |
40 | 8080 | HTTP/Web | Альтернативный порт для HTTP протокола. Иногда используется прокси-серверами. | |
41 | 10000 | NDMP | Популярный порт: Webmin, SIP-голос, VPN IPSec over TCP. | |
42 | 20000 | DNP |
Экран 1. Базовый сеанс сканирования Nmap |
- Порт 135 используется функцией отображения конечных точек RPC, реализованной во многих технологиях Windows - например, приложениях COM/DCOM, DFS, журналах событий, механизмах репликации файлов, формирования очередей сообщений и Microsoft Outlook. Данный порт должен быть блокирован в брандмауэре на периметре сети, но трудно закрыть его и одновременно сохранить функциональность Windows.
- Порт 139 используется сеансовой службой NetBIOS, которая активизирует браузер поиска других компьютеров, службы совместного использования файлов, Net Logon и службу сервера. Его трудно закрыть, как и порт 135.
- Порт 445 используется Windows для совместной работы с файлами. Чтобы закрыть этот порт, следует блокировать File and Printer Sharing for Microsoft Networks. Закрытие этого порта не мешает соединению компьютера с другими удаленными ресурсами; однако другие компьютеры не смогут подключиться к данной системе.
- Порты 1025 и 1026 открываются динамически и используются другими системными процессами Windows, в частности различными службами.
- Порт 3389 используется Remote Desktop, которая не активизирована по умолчанию, но на моем тестовом компьютере активна. Чтобы закрыть порт, следует перейти к вкладке Remote в диалоговом окне System Properties и сбросить флажок Allow users to connect remotely to this computer.
Обязательно следует выполнить поиск открытых портов UDP и закрыть лишние. Программа сканирования показывает открытые порты компьютера, которые видны из сети. Аналогичные результаты можно получить с помощью инструментов, расположенных на хост-системе.
Хост-сканирование
Помимо использования сетевого сканера портов, открытые порты на хост-системе можно обнаружить с помощью следующей команды (запускается на хост-системе):
Netstat -an
Эта команда работает как в Windows, так и в UNIX. Netstat выдает список активных портов компьютера. В Windows 2003 Windows XP следует добавить параметр -o, чтобы получить соответствующий идентификатор процесса (program identifier - PID). На экране 2 показаны выходные результаты Netstat для того же компьютера, сканирование портов которого выполнялось ранее. Следует обратить внимание на то, что закрыто несколько портов, которые прежде были активны.
Аудит журнала брандмауэра
Еще один полезный способ обнаружения сетевых приложений, которые отправляют или получают данные по сети, - собирать и анализировать больше данных в журнале брандмауэра. Записи Deny, в которых приводится информация с внешнего интерфейса брандмауэра, вряд ли будут полезны из-за «шумового трафика» (например, от червей, сканеров, тестирования по ping), засоряющего Internet. Но если записывать в журнал разрешенные пакеты с внутреннего интерфейса, то можно увидеть весь входящий и исходящий сетевой трафик.
Чтобы увидеть «сырые» данные трафика в сети, можно установить сетевой анализатор, который подключается к сети и записывает все обнаруженные сетевые пакеты. Самый широко распространенный бесплатный сетевой анализатор - Tcpdump для UNIX (версия для Windows называется Windump), который легко устанавливается на компьютере. После установки программы следует настроить ее для работы в режиме приема всех сетевых пакетов, чтобы регистрировать весь трафик, а затем подключить к монитору порта на сетевом коммутаторе и отслеживать весь трафик, проходящий через сеть. О настройке монитора порта будет рассказано ниже. Tcpdump - чрезвычайно гибкая программа, с помощью которой можно просматривать сетевой трафик с использованием специализированных фильтров и показывать только информацию об IP-адресах и портах либо все пакеты. Трудно просмотреть сетевые дампы в больших сетях без помощи соответствующих фильтров, но следует соблюдать осторожность, чтобы не потерять важные данные.
Объединение компонентов
До сих пор мы рассматривали различные методы и инструменты, с помощью которых можно обнаружить приложения, использующие сеть. Пришло время объединить их и показать, как определить открытые сетевые порты. Поразительно, как «болтливы» компьютеры в сети! Во-первых, рекомендуется познакомиться с документом Microsoft «Service overview and network port requirements for the Windows Server system» (http://support.microsoft.com/default.aspx?scid=kb;en-us;832017 ), в котором перечислены протоколы (TCP и UDP) и номера портов, используемые приложениями и большинством основных служб Windows Server. В документе описаны эти службы и используемые ими ассоциированные сетевые порты. Рекомендуется загрузить и распечатать это полезное для администраторов сетей Windows справочное руководство.
Настройка сетевого анализатора
Ранее отмечалось, что один из способов определить порты, используемые приложениями, - отслеживать трафик между компьютерами с помощью сетевого анализатора. Чтобы увидеть весь трафик, необходимо подключить сетевой анализатор к концентратору или монитору портов в коммутаторе. Каждому порту концентратора виден весь трафик каждого компьютера, подключенного к этому концентратору, но концентраторы - устаревшая технология, и большинство компаний заменяют их коммутаторами, которые обеспечивают хорошую производительность, но неудобны для анализа: каждый порт коммутатора принимает только трафик, направляемый одному компьютеру, подключенному к данному порту. Чтобы анализировать всю сеть, нужно отслеживать трафик, направляемый в каждый порт коммутатора.
Для этого требуется настроить монитор порта (разные поставщики называют его span port или mirrored port) в коммутаторе. Установить монитор порта в коммутаторе Cisco Catalyst компании Cisco Systems не составляет труда. Нужно зарегистрироваться на коммутаторе и активизировать режим Enable, затем перейти в режим configure terminal и ввести номер интерфейса порта коммутатора, на который следует посылать весь контролируемый трафик. Наконец, необходимо указать все отслеживаемые порты. Например, следующие команды обеспечивают мониторинг трех портов Fast Ethernet и пересылку копии трафика в порт 24.
Interface FastEthernet0/24 port monitor FastEthernet0/1 port monitor FastEthernet0/2 port monitor FastEthernet0/3 end
В данном примере сетевой анализатор, подключенный к порту 24, будет просматривать весь исходящий и входящий трафик компьютеров, подключенных к первым трем портам коммутатора. Для просмотра созданной конфигурации следует ввести команду
Write memory
Первоначальный анализ
Рассмотрим пример анализа данных, проходящих через сеть. Если для сетевого анализа используется компьютер Linux, то можно получить исчерпывающее представление о типе и частоте пакетов в сети с помощью такой программы, как IPTraf в режиме Statistical. Детали трафика можно выяснить с использованием программы Tcpdump.