[Network] UDP ํ™€ํŽ€์นญ (Hole punching)

ํ™€ํŽ€์นญ์€ ๋„คํŠธ์›Œํ‚น์—์„œ ๊ตฌ์ „์œผ๋กœ ์ „ํ•ด์ง€๋Š” ํ‘๋งˆ๋ฒ• ์ค‘ ํ•˜๋‚˜๋‹ค. ๋ณดํ†ต ๊ฒŒ์ž„์—…๊ณ„์—์„œ ๋งŽ์ด ์“ด๋‹ค.

ํ‘œ์ค€์ ์ธ ์šฉ์–ด๋กœ๋Š” STUN (Simple Traversal of User Datagram Protocol Through Network Address Translators)๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
HTTP3 Quic์ด๋‚˜ WebRTC ๊ฐ™์€ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ ๋˜ํ•œ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค.




P2P ํ†ต์‹ ์˜ ํŠน์ง•

P2P๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ฒ„ ์—†์ด ํด๋ผ์ด์–ธํŠธ์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋กœ ์ง์ ‘ ํ†ต์‹ ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์„œ๋ฒ„๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋‹น์‚ฌ์ž๋“ค์ด ์ง์ ‘ ์†Œํ†ต์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์†ก ๋ ˆ์ด์–ด๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

๊ทธ๋กœ ์ธํ•ด ๋”ฐ๋ผ์˜ค๋Š” ๋ณด์•ˆ์ด๋‚˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ๋“ค์ด ์žˆ์ง€๋งŒ, ๋„คํŠธ์›Œํ‚น ๋”œ๋ ˆ์ด๋ฅผ ์ตœ์†Œํ™”ํ•ด์•ผํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ๋Š” ์–ด์ฉ”์ˆ˜ ์—†์ด ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์„ ์จ์•ผ ํ•œ๋‹ค.




๋ฌธ์ œ 1: Public IP๋ฅผ ์–ด๋–ป๊ฒŒ ์•Œ์ฃ ?

P2P ํ†ต์‹ ์ด ์ œ๋Œ€๋กœ ์‹œ์ž‘๋˜๋ ค๋ฉด A์™€ B๊ฐ€ ์„œ๋กœ์˜ IP๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
๊ทผ๋ฐ, ์ƒ๋Œ€์—๊ฒŒ ์ž์‹ ์˜ IP๋ฅผ ์–ด๋–ป๊ฒŒ ์•Œ๋ ค์ค˜์•ผ ํ• ์ง€๋ถ€ํ„ฐ ๋ฌธ์ œ๋‹ค. ์„œ๋กœ๊ฐ€ ์„œ๋กœ์˜ ์œ„์น˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํŠน์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Public IP๋ฅผ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ A๊ฐ€ ํ™•์‹คํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š” IP ์ฃผ์†Œ๋Š” ์ž์‹ ์˜ private IP๋ฐ–์— ์—†๋‹ค. ์‹ค์ œ๋กœ๋Š” ๋ณดํ†ต NAT์„ ํƒ€๊ณ  ๋‚˜๊ฐ€์„œ ๊ณต์œ ๊ธฐ ๋“ฑ์˜ ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ์•ผ Public IP๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.




STUN ๊ธฐ๋ฒ•

STUN์€ ์ „์šฉ STUN ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด์„œ IP๋ฅผ ์ค‘๊ณ„ํ•ด์ฃผ๋Š” ๊ธฐ๋ฒ•์„ ๋งํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ STUN ์„œ๋ฒ„๊ฐ€ ํ•˜๋Š” ์—ญํ• ์€ ๊ฐ„๋‹จํ•˜๋‹ค.
์–ด๋–ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์‹ ์˜ public IP๋ฅผ ๋ฌผ์–ด๋ณด๋ฉด, ์ž์‹ ์ด ๋ฐ›์€ request IP๋ฅผ ๋‹ค์‹œ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ๊ทธ A๋Š” ์ž์‹ ์˜ Public ์ฃผ์†Œ๋ฅผ ์•Œ์•˜์œผ๋‹ˆ, ์ด๋ฅผ ํ†ตํ•ด ์ž์‹ ์„ ์†Œ๊ฐœํ•˜๊ณ  ์†Œํ†ต์ฐฝ๊ตฌ๋ฅผ ์—ด ์ˆ˜ ์žˆ๋‹ค.




๋ฌธ์ œ 2: ํฌํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์—ด์ฃ ?

ํ™€ํŽ€์นญ์—๋Š” ๋˜ ํ•˜๋‚˜์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

๋‹น์—ฐํžˆ A๊ฐ€ B์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ๋“  ํฌํŠธ ํฌ์›Œ๋”ฉ์ด ๋˜์–ด์žˆ์–ด์•ผ Public IP -> Private IP ๋ณ€ํ™˜์ด ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ํ†ต์‹ ์ด ๋“ค์–ด๊ฐˆ ํ…๋ฐ, ์œ ์ €๋”๋Ÿฌ ํฌํŠธํฌ์›Œ๋”ฉ์„ ๋‹ค ํ•ด๋‹ฌ๋ผ๊ณ  ํ•  ์ˆ˜๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋Ÿผ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ๊นŒ?

๋‹คํ–‰ํžˆ ์ƒ๋‹น์ˆ˜์˜ NAT ์žฅ๋น„(๊ณต์œ ๊ธฐ)๋“ค์€ ์ด๋Ÿฌํ•œ ๋™์ž‘๊ณผ ๊ด€๋ จํ•ด์„œ ๋ณด์กฐ์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
Full corn, Restrict corn, Post Restrict corn, Symetric ๋“ฑ์ด ์žˆ๋Š”๋ฐ ๊ตณ์ด ๋‹ค ์•Œ ํ•„์š”๋Š” ์—†๋‹ค. Symetric๋งŒ ์•Œ์•„๋„ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด A๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์— UDP ํŒจํ‚ท์„ ์ „์†กํ•œ๋‹ค๋ฉด, UDP ํฌํŠธ ์ƒํƒœ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
๊ทธ๋Ÿผ UDP ํฌํŠธ๊ฐ€ ์—ด๋ ค์žˆ๋Š” ๋™์•ˆ์—๋Š” ๊ทธ ํฌํŠธ๋กœ B๊ฐ€ A์—๊ฒŒ UDP ํŒจํ‚ท์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค!
๊ณต์œ ๊ธฐ๊ฐ€ ํ•ด์ฃผ๋Š” ๋™์ž‘์ด๋‹ค.

๋‹ค๋งŒ ์ด UDP ํฌํŠธ ์ƒํƒœ๋Š” ์ˆ˜์‹ญ์ดˆ์—์„œ ๋ช‡๋ถ„์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ซํžˆ๋ฏ€๋กœ, ์ฃผ๊ธฐ์ ์œผ๋กœ ํŒจํ‚ท์„ ๋‚ ๋ ค์„œ ๊ฐฑ์‹ ์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.




ํ™€ํŽ€์นญ์˜ ํ•œ๊ณ„

ํ™€ํŽ€์นญ์€ Symetric ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š” NAT ํ™˜๊ฒฝ์—์„œ๋Š” ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ Symetric ๋ฐฉ์‹์ด ์ ์  ๋Š˜์–ด๋‚˜๊ณ  ์žˆ๋Š” ๊ด€๊ณ„๋กœ ํ™€ํŽ€์นญ์˜ ์ ์ค‘๋ฅ ์€ ์ ์  ๋–จ์–ด์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

ํ™€ํŽ€์นญ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด์—์„œ๋Š” ์–ด์ฉ” ์ˆ˜ ์—†์ด relay ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์ค‘๊ณ„๋ฅผ ํ•˜๋Š” ๊ฒŒ ๋ณดํ†ต์ด๋‹ค.

ํ™€ํŽ€์นญ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ relay๋กœ ์ค‘๊ณ„๋ฅผ ํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ์„ ๋˜ TURN(Traversal Using Relays around NAT)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.



์ฐธ์กฐ
https://cjwoov.tistory.com/5
https://cjwoov.tistory.com/6
https://m.blog.naver.com/PostView.naver?blogId=ya3344&logNo=221784315478&categoryNo=0&proxyReferer=
https://202psj.tistory.com/m/1484
https://stackoverflow.com/questions/13501288/what-is-stun-and-does-it-need-a-port-forwarded-server
https://en.m.wikipedia.org/wiki/NAT_traversal
https://en.m.wikipedia.org/wiki/UDP_hole_punching
https://gh402.tistory.com/m/45