[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