Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Техника NAT в компьютерных сетях
NAT technique in computer networking
UDP-пробивание (hole punching) — это широко используемый метод, применяемый в приложениях сетевого адресного преобразования (NAT) для поддержания потоков пакетов протокола User Datagram Protocol (UDP), проходящих через NAT. Методы обхода NAT обычно необходимы для сетевых приложений типа «клиент-клиент» в Интернете, включающих хосты, подключенные к частным сетям, особенно в развертываниях peer-to-peer, Direct Client to Client (DCC) и Voice over Internet Protocol (VoIP). UDP-пробивание устанавливает соединение между двумя хостами, взаимодействующими через один или несколько сетевых трансляторов адресов. Как правило, сторонние хосты в общедоступной сети используются для установления состояния портов UDP, которое может быть использовано для прямого обмена данными между взаимодействующими хостами. После успешного установления состояния порта и начала обмена данными, состояние порта может поддерживаться либо обычным трафиком, либо, при длительном отсутствии такового, с помощью пакетов поддержания связи (keep-alive), обычно состоящих из пустых UDP-пакетов или пакетов с минимальным, неинтрузивным содержимым.
UDP hole punching is a commonly used technique employed in network address translation (NAT) applications for maintaining User Datagram Protocol (UDP) packet streams that traverse the NAT. NAT traversal techniques are typically required for client to client networking applications on the Internet involving hosts connected in private networks, especially in peer to peer, Direct Client to Client (DCC) and Voice over Internet Protocol (VoIP) deployments. UDP hole punching establishes connectivity between two hosts communicating across one or more network address translators. Typically, third party hosts on the public transit network are used to establish UDP port states that may be used for direct communications between the communicating hosts. Once port state has been successfully established and the hosts are communicating, port state may be maintained either by normal communications traffic, or in the prolonged absence thereof, by keep alive packets, usually consisting of empty UDP packets or packets with minimal, non intrusive content.
Обзор
UDP-пробитие — это метод установления двунаправленных UDP-соединений между хостами в частных сетях, использующих трансляторы сетевых адресов (NAT). Этот метод не применим во всех сценариях или со всеми типами NAT, поскольку характеристики работы NAT не стандартизированы. Хосты с сетевым подключением внутри частной сети, подключенной к Интернету через NAT, обычно используют метод Session Traversal Utilities for NAT (STUN) или Interactive Connectivity Establishment (ICE) для определения публичного адреса NAT, необходимого их сетевым партнерам. В этом процессе другой хост в публичной сети используется для установления соответствия портов и другого состояния UDP-порта, которое считается действительным для прямой связи между приложениями. Поскольку состояние UDP обычно истекает через короткие промежутки времени – от десятков секунд до нескольких минут – и UDP-порт закрывается, UDP-пробитие использует передачу периодических пакетов поддержания связи, каждый из которых обновляет счетчики времени жизни в конечном автомате UDP NAT. UDP-пробитие не будет работать с симметричными NAT (также известными как двунаправленными NAT), которые часто встречаются в крупных корпоративных сетях. В симметричном NAT соответствие портов NAT, связанное с соединением с известным STUN-сервером, ограничено получением данных только от этого сервера, поэтому соответствие портов, которое видит известный сервер, не предоставляет полезной информации для конечной точки. В более сложном подходе оба хоста начинают отправлять данные друг другу, делая несколько попыток. На NAT с ограниченным конусом первый пакет от другого хоста будет заблокирован. После этого устройство NAT запоминает отправку пакета на другой компьютер и разрешает прохождение любых пакетов с этого IP-адреса и номера порта. Эта техника широко используется в одноранговых (P2P) программах и в VoIP-телефонии. Она также может использоваться для упрощения установления виртуальных частных сетей (VPN) на основе UDP. Иногда этот же метод применяется к соединениям протокола TCP (Transmission Control Protocol), но с меньшим успехом, поскольку потоки TCP-соединений контролируются операционной системой хоста, а не приложением, и номера последовательностей выбираются случайным образом; следовательно, любое устройство NAT, выполняющее проверку номеров последовательностей, не будет считать пакеты связанными с существующим соединением и отбросит их.
UDP hole punching is a method for establishing bidirectional UDP connections between Internet hosts in private networks using network address translators. The technique is not applicable in all scenarios or with all types of NATs, as NAT operating characteristics are not standardized. Hosts with network connectivity inside a private network connected via a NAT to the Internet typically use the Session Traversal Utilities for NAT (STUN) method or Interactive Connectivity Establishment (ICE) to determine the public address of the NAT that its communications peers require. In this process another host on the public network is used to establish port mapping and other UDP port state that is assumed to be valid for direct communication between the application hosts. Since UDP state usually expires after short periods of time in the range of tens of seconds to a few minutes, and the UDP port is closed in the process, UDP hole punching employs the transmission of periodic keep alive packets, each renewing the life time counters in the UDP state machine of the NAT. UDP hole punching will not work with symmetric NAT devices (also known as bi directional NAT) which tend to be found in large corporate networks. In symmetric NAT, the NAT's mapping associated with the connection to the known STUN server is restricted to receiving data from the known server, and therefore the NAT mapping the known server sees is not useful information to the endpoint. In a somewhat more elaborate approach both hosts will start sending to each other, using multiple attempts. On a Restricted Cone NAT, the first packet from the other host will be blocked. After that the NAT device has a record of having sent a packet to the other machine, and will let any packets coming from this IP address and port number through. This technique is widely used in peer to peer software and Voice over Internet Protocol telephony. It can also be used to assist the establishment of virtual private networks operating over UDP. The same technique is sometimes extended to Transmission Control Protocol (TCP) connections, though with less success because TCP connection streams are controlled by the host OS, not the application, and sequence numbers are selected randomly; thus any NAT device that performs sequence number checking will not consider the packets to be associated with an existing connection and drop them.