Кіріспе
Компьютерлік желілер техникасы Hole punching (немесе кейде punch through) - екі тараптың арасында тікелей байланыс орнату үшін компьютерлік желілердегі техника, онда бір немесе екеуі де желілік мекенжай аудармасын (NAT) қолданатын брандмауэрлер немесе маршрутизаторлар артында. Бұрышты ашу үшін әрбір клиент үшінші тараптың шектеусіз серверіне қосылады, ол уақытша әр клиент үшін сыртқы және ішкі мекенжайлар мен порттар туралы ақпаратты сақтайды. Сервер кейін әр клиенттің ақпаратын екіншісіне жеткізеді және осы ақпаратты пайдалана отырып, әр клиент тікелей байланыс орнатуға тырысады; жарамды порт нөмірлерін пайдаланатын қосылымдардың нәтижесінде шектеуші өрт қабырғалары немесе маршрутизаторлар екі жақта да кіріс пакеттерді қабылдайды және жібереді. Бұрышты перфорациялау үшін желі топологиясын білу қажет емес. ICMP тесікті соғу, UDP тесікті соғу және TCP тесікті соғу тиісінше Интернет бақылау хабарламасын, пайдаланушы деректемесін және таратуды басқару протоколдарын қолданады.
Hole punching (or sometimes punch through) is a technique in computer networking for establishing a direct connection between two parties in which one or both are behind firewalls or behind routers that use network address translation (NAT). To punch a hole, each client connects to an unrestricted third party server that temporarily stores external and internal address and port information for each client. The server then relays each client's information to the other, and using that information each client tries to establish direct connection; as a result of the connections using valid port numbers, restrictive firewalls or routers accept and forward the incoming packets on each side. Hole punching does not require any knowledge of the network topology to function. ICMP hole punching, UDP hole punching and TCP hole punching respectively use Internet Control Message, User Datagram and Transmission Control Protocols.
Шолу
Қоғамдық немесе бүкіл әлем бойынша қолжетімді IP-адрестері бар желідегі құрылғылар бір-бірімен оңай байланыс жасай алады. Жеке мекенжайлары бар клиенттер де, егер маршрутизатордың немесе брандмауэрдің артындағы клиент қосылымды бастаса, қоғамдық серверлерге оңай қосыла алады. Алайда, тесікті соғу (немесе NAT арқылы өтудің басқа түрі) әртүрлі брандмауэрлер немесе желілік адрестерді аударуды (NAT) қолданатын маршрутизаторлар артында тұратын екі клиент арасында тікелей байланыс орнату үшін қажет. Екі клиент те шектелмеген серверге қосылуды бастайды, ол соңғы нүкте мен сессия туралы ақпаратты, соның ішінде IP адресі мен портты жеке IP адресімен қоса тіркейді. Бөренелер сонымен қатар серверден жауаптар қайтаруға мүмкіндік беру үшін соңғы нүктелерді белгілейді. Сервер кейін әр клиенттің соңғы нүктесі мен сессия туралы ақпаратты басқа клиентке немесе әріптеске жібереді. Әрбір клиент өзінің әріптесіне сервер үшін оның өрт қабырғасы ашатын IP-адресі мен порты арқылы қосылуға тырысады. Жаңа қосылу әрекеті клиенттің өрт қабырғасында тесікті ашады, өйткені соңғы нүкте қазір оның теңдестерінен жауап алу үшін ашық болады. Желі жағдайына байланысты, бір немесе екі клиентке де қосылу сұранысы жіберілуі мүмкін. Екі клиент арасында аутентификация нонсын сәтті алмасу тесіктің тесу рәсімінің аяқталғанын көрсетеді.
Мысалдар
VoIP өнімдері, онлайн ойын қолданбалары және P2P желілік бағдарламалық жасақтамалары барлық тесікті ұрып алады. Телефондық бағдарламалық қамтамасыз ету Skype пайдаланушыларға бір немесе бірнеше пайдаланушылармен дыбыспен сөйлесуге мүмкіндік беру үшін тесікті ұрып алады. Жедел жүретін онлайн көп ойыншылы ойындар тесікті ұсу әдісін қолданады немесе желілік кідіріс уақытын азайту үшін пайдаланушылардан тұрақты өртке қарсы қабырғаға шұңқыр жасауды талап етеді. Hamachi, ZeroTier және Tailscale сияқты VPN қолданбалары пайдаланушыларға өрт қабырғалары артындағы абоненттік құрылғыларға тікелей қосылуға мүмкіндік беру үшін тесікті ұрып-соғуды пайдаланады. Децентральдандырылған пішімді файлдарды ортақтастыру бағдарламалық жасақтамасы файлдарды тарату үшін тесікті ұрып-соғуға негізделген.
Талаптар
Сенімді тесікті перфорациялау үшін сәйкес келетін соңғы нүктелер аудармасы, ал бірнеше деңгейлі NAT үшін шашты тігін аудармасы қажет. Жеке соңғы нүктеден шығыс қосылым бөренеден өткен кезде, ол қоғамдық соңғы нүкте (жария IP-мекенжайы мен порт нөмірі) алады, ал бөрене трафикті олардың арасында аударады. Қосылым жабылғанға дейін клиент пен сервер ашық соңғы нүкте арқылы байланысады, ал өрт қабырғасы трафикті тиісті бағыттайды. Тұрақты соңғы нүктелер аудармасы әрбір жаңа қосылым үшін жаңа қоғамдық соңғы нүктелерді бөлудің орнына, берілген жеке соңғы нүкте үшін бірдей жалпыға ортақ соңғы нүктелерді қайта пайдаланады. Hairpin аудармасы өзінің жеке соңғы нүктелері арасында, мақсат соңғы нүктесі өзінің өзі екенін мойындаған кезде, кері байланыс жасайды. Бұл функционалдық көп қабатты NAT-те пайдаланылған кезде ғана тесікті тесу үшін қажет.