{"id":5757,"date":"2026-01-30T08:00:19","date_gmt":"2026-01-30T15:00:19","guid":{"rendered":"https:\/\/rec0m88.com\/?p=5757"},"modified":"2026-02-02T10:56:44","modified_gmt":"2026-02-02T17:56:44","slug":"the-death-of-port-forwarding-how-webrtc-is-saving-retro-netplay","status":"publish","type":"post","link":"https:\/\/rec0m88.com\/pt\/the-death-of-port-forwarding-how-webrtc-is-saving-retro-netplay\/","title":{"rendered":"A morte do encaminhamento de portas: Como o WebRTC est\u00e1 salvando o Retro Netplay"},"content":{"rendered":"<div class=\"wp-block-rank-math-toc-block aligncenter\" id=\"rank-math-toc\"><h2>\u00cdndice<\/h2><nav><ul><li><a href=\"#the-problem-the-great-nat-barrier\">O problema: a grande barreira do NAT<\/a><\/li><li><a href=\"#the-solution-web-rtc-and-the-ice-framework\">A solu\u00e7\u00e3o: WebRTC e a estrutura \u201cICE\u201d<\/a><\/li><li><a href=\"#why-not-just-use-web-sockets\">Porque n\u00e3o usar simplesmente WebSockets?<\/a><\/li><li><a href=\"#security-without-the-stress\">Seguran\u00e7a sem stress<\/a><\/li><li><a href=\"#the-future-of-netplay-is-zero-config\">O futuro do Netplay \u00e9 o \u00abZero-Config\u00bb<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Durante muito tempo, a \u201cera dourada\u201d dos jogos retro ficou presa atr\u00e1s de uma barreira de menus com texto azul, endere\u00e7os IP confusos e o temido <strong>Reencaminhamento de portas<\/strong>. Se cresceste nos anos 2000 a tentar jogar um cl\u00e1ssico jogo de luta de arcada ou um jogo de plataformas de 8 bits com um amigo do outro lado do pa\u00eds, provavelmente passaste mais tempo nas defini\u00e7\u00f5es do teu router do que no pr\u00f3prio jogo. Tinhas de aceder ao 192.168.1.1, encontrar as defini\u00e7\u00f5es de NAT e rezar para que abrir a porta 27015 n\u00e3o deixasse o computador da tua fam\u00edlia vulner\u00e1vel a todos os script kiddies do bairro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas em <strong>Rec0m88<\/strong>, j\u00e1 ultrapass\u00e1mos essa fase. Ao tirar partido de <strong>WebRTC (Comunica\u00e7\u00e3o em tempo real na Web)<\/strong>, elimin\u00e1mos efetivamente a necessidade de configura\u00e7\u00e3o manual da rede. Aqui fica uma an\u00e1lise t\u00e9cnica aprofundada sobre o motivo pelo qual o WebRTC \u00e9 a espinha dorsal revolucion\u00e1ria do netplay moderno e como resolve a \u201ccrise de conectividade\u201d que assolou a emula\u00e7\u00e3o retro durante d\u00e9cadas.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"the-problem-the-great-nat-barrier\">O problema: a grande barreira do NAT<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para compreender por que raz\u00e3o o WebRTC representa uma revolu\u00e7\u00e3o, \u00e9 preciso perceber por que raz\u00e3o o \u00abnetplay\u00bb \u00e0 moda antiga era t\u00e3o complicado. A maioria dos utilizadores dom\u00e9sticos da Internet n\u00e3o disp\u00f5e de um endere\u00e7o IP p\u00fablico direto para o seu computador. Em vez disso, encontram-se atr\u00e1s de um <strong>NAT (Tradu\u00e7\u00e3o de Endere\u00e7os de Rede)<\/strong> gateway \u2014 o seu router.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando tentavas organizar uma partida num emulador antigo, o computador do teu amigo enviava um pacote para o teu router, e o teu router respondia:, <em>\u201cN\u00e3o sei a que aparelho desta casa se destina este pacote\u201d,\u201d<\/em> e desativ\u00e1-la imediatamente. \u00c9 por isso que tiveste de \u201credirecionar\u201d a porta. Estavas a indicar manualmente ao router: <em>\u201cTudo o que chega ao Port X vai para o meu computador de jogos.\u201d<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Foi um processo repleto de atritos que impediu que 90% de jogadores ocasionais pudessem alguma vez experimentar a alegria dos jogos retro online para dois jogadores.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"the-solution-web-rtc-and-the-ice-framework\">A solu\u00e7\u00e3o: WebRTC e a estrutura \u201cICE\u201d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O WebRTC n\u00e3o pede ao utilizador para resolver os problemas de rede; \u00e9 ele que resolve esses problemas pelo utilizador. Utiliza uma estrutura chamada <strong>ICE (Estabelecimento de Conectividade Interativa)<\/strong> para encontrar o caminho de menor resist\u00eancia entre dois jogadores. Este processo ocorre em mil\u00e9simos de segundo, nos bastidores:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>STUN (Utilit\u00e1rios de Traversal de Sess\u00e3o para NAT):<\/strong> O teu navegador envia um pedido a um servidor STUN apenas para perguntar: <em>\u201cQual \u00e9 o meu endere\u00e7o IP p\u00fablico e a minha porta?\u201d<\/em> Assim que souber qual \u00e9 a sua \u201cimagem p\u00fablica\u201d, partilha essa informa\u00e7\u00e3o com o outro jogador atrav\u00e9s do nosso servidor de sinaliza\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Perfura\u00e7\u00e3o de portas UDP:<\/strong> Como ambos os jogadores est\u00e3o a enviar \u201cpings\u201d um ao outro simultaneamente, muitos routers modernos interpretam isto como uma comunica\u00e7\u00e3o \u201csolicitada\u201d e abrem automaticamente uma abertura tempor\u00e1ria na firewall. N\u00e3o \u00e9 necess\u00e1rio efetuar qualquer reencaminhamento manual de portas.<\/li>\n\n\n\n<li><strong>TURN (Traversal Using Relays around NAT):<\/strong> Em cerca de 10 a 15% dos casos \u2014 normalmente em redes empresariais ou universit\u00e1rias restritas \u2014, nem mesmo o \u00abhole punching\u00bb funciona. Nestes cen\u00e1rios, o WebRTC recorre a um servidor TURN, que atua como um retransmissor de alta velocidade, garantindo que a sess\u00e3o de jogo continue a funcionar onde os emuladores antigos simplesmente n\u00e3o conseguiam estabelecer liga\u00e7\u00e3o.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"why-not-just-use-web-sockets\">Porque n\u00e3o usar simplesmente WebSockets?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Muitos programadores web tentam criar jogos utilizando <strong>WebSockets<\/strong>, mas para jogos retro de alta velocidade (como <em>Street Fighter<\/em> ou <em>Contra<\/em>), os WebSockets s\u00e3o um desastre. Os WebSockets funcionam em <strong>TCP (Protocolo de Controlo de Transmiss\u00e3o)<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O TCP \u00e9 \u201cfi\u00e1vel\u201d, o que significa que, se um \u00fanico pacote de dados se perder, todo o fluxo p\u00e1ra e aguarda que esse pacote seja reenviado. Num jogo, isto provoca \u201cfalhas\u201d ou \u201cgaguejos\u201d. Se a tua personagem saltar, mas o pacote se perder, o jogo congela durante 200 ms enquanto aguarda a chegada do comando de salto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O WebRTC utiliza o UDP (Protocolo de Datagramas do Utilizador)<\/strong>. Num ambiente de jogo online baseado em UDP, se um pacote se perder, simplesmente passamos para o seguinte. Isto permite uma experi\u00eancia muito mais fluida, um \u201cestado de fluxo\u201d, em que a lat\u00eancia parece consistente, em vez de irregular.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"security-without-the-stress\">Seguran\u00e7a sem stress<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Uma das vantagens mais subestimadas da abordagem WebRTC no Rec0m88 \u00e9 <strong>privacidade<\/strong>. Nos velhos tempos em que se partilhavam endere\u00e7os IP no Discord ou no IRC, estava-se a revelar, literalmente, o endere\u00e7o digital de casa a estranhos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O WebRTC num ambiente de navegador est\u00e1 fortemente isolado numa \u00absandbox\u00bb. Proporciona <strong>DTLS (Seguran\u00e7a da Camada de Transporte de Datagramas)<\/strong> e <strong>SRTP (Protocolo Seguro de Transporte em Tempo Real)<\/strong> encripta\u00e7\u00e3o por predefini\u00e7\u00e3o. Os seus dados s\u00e3o encriptados de ponta a ponta e, como o emulador funciona no navegador, nunca tem acesso de \u201cadministrador\u201d ao seu computador local. Obt\u00e9m o desempenho de uma aplica\u00e7\u00e3o nativa em C++ com a seguran\u00e7a de um navegador web moderno.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"the-future-of-netplay-is-zero-config\">O futuro do Netplay \u00e9 o \u00abZero-Config\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Na Rec0m88, acreditamos que a tecnologia deve passar despercebida para que o jogo assuma o protagonismo. Ao utilizar canais de dados WebRTC, reduzimos a barreira de acesso ao jogo online retro de \u201cn\u00edvel de t\u00e9cnico de inform\u00e1tica\u201d para \u201cn\u00edvel de um clique\u201d.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quer estejas a organizar uma sala para um jogo de a\u00e7\u00e3o com 4 jogadores ou para um jogo de luta 1 contra 1, a complexa intera\u00e7\u00e3o entre a traversal NAT, a descoberta STUN e a sinaliza\u00e7\u00e3o UDP ocorre num piscar de olhos. A era do \u2019anfitri\u00e3o inacess\u00edvel\u201c chegou ao fim.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Est\u00e1 pronto para testar a lat\u00eancia por si pr\u00f3prio?<\/strong> <a href=\"https:\/\/rec0m88.com\/pt\/arcade-games\/\" target=\"_blank\" data-type=\"page\" data-id=\"22\" rel=\"noreferrer noopener\">Experimenta os nossos jogos de arcada<\/a> e inicie uma sess\u00e3o de Netplay para ver o WebRTC em a\u00e7\u00e3o.<\/p>","protected":false},"excerpt":{"rendered":"<p>Durante muito tempo, a \u201cera dourada\u201d dos jogos retro ficou presa atr\u00e1s de uma barreira de menus com texto azul, endere\u00e7os IP confusos e o temido reencaminhamento de portas. Se cresceste na d\u00e9cada de 2000 a tentar jogar um cl\u00e1ssico jogo de luta de arcada ou um jogo de plataformas de 8 bits com um amigo do outro lado do pa\u00eds, provavelmente passaste mais tempo\u2026<\/p>","protected":false},"author":1,"featured_media":5764,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wpai_generated_summary":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[40],"tags":[],"class_list":["post-5757","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-meta"],"_links":{"self":[{"href":"https:\/\/rec0m88.com\/pt\/wp-json\/wp\/v2\/posts\/5757","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rec0m88.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rec0m88.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rec0m88.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rec0m88.com\/pt\/wp-json\/wp\/v2\/comments?post=5757"}],"version-history":[{"count":0,"href":"https:\/\/rec0m88.com\/pt\/wp-json\/wp\/v2\/posts\/5757\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rec0m88.com\/pt\/wp-json\/wp\/v2\/media\/5764"}],"wp:attachment":[{"href":"https:\/\/rec0m88.com\/pt\/wp-json\/wp\/v2\/media?parent=5757"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rec0m88.com\/pt\/wp-json\/wp\/v2\/categories?post=5757"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rec0m88.com\/pt\/wp-json\/wp\/v2\/tags?post=5757"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}