För att utveckla ewanm89:s inlägg använder TeamViewer UDP pinholeing.
UDP är ett tillståndslöst protokoll. Det innebär att paket avfyras till sitt mål utan någon verifiering (på protokollnivå) av att de togs emot eller ens nådde fram till destinationen. Brandväggar är utformade för att leta efter UDP-paket och registrera källan och destinationen samt tidsstämpeln. Om de ser ett inkommande paket som matchar ett utgående paket kommer de i allmänhet att släppa igenom paketet även utan att en särskild regel har lagts in i brandväggens åtkomstlista. Detta kan låsas ner på enheter av företagsklass, men i allmänhet kommer 90 % av brandväggarna att tillåta returtrafik.
För att kunna göra ett hål i din maskin (viewer) har den en TCP-anslutning tillbaka till TeamViewer-huvudservern. Målmaskinen (klienten) har också en TCP-anslutning till TeamViewer-huvudservern. När du trycker på connect meddelar din maskin huvudservern sin avsikt. Huvudservern ger dig sedan klientmaskinens IP-adress. Din maskin börjar sedan skicka UDP-paket till klienten. Klienten får en signal om att du har för avsikt att ansluta och får din IP-adress. Klienten börjar också skicka UDP-paket till dig.
Om brandväggarna är ”P2P-vänliga” leder detta till att båda brandväggarna (din och klientens) tillåter trafiken och därmed ”slår hål” i brandväggen. Detta kräver särskilt att brandväggarna inte ändrar den offentliga porten för ett utgående paket bara för att dess destination har ändrats; brandväggen måste återanvända samma offentliga port så länge paketets källa inte har ändrats. Om dina brandväggar inte beter sig på ett sådant vänligt sätt kommer detta inte att fungera. Många brandväggar beter sig dock på detta sätt.
Visst, TeamViewer lägger till en viss säkerhet genom att göra en kontroll av pinkod/lösenord innan huvudservern skickar IP-informationen till båda parter, men du får en uppfattning.