-
Notifications
You must be signed in to change notification settings - Fork 3
๐ฅ ๋์นญ NAT์์์ WebRTC ์ฐ๊ฒฐ ์๋ฆฝ ๊ณผ์
๊น๊ทผ์ฐ edited this page Dec 1, 2024
·
1 revision
- A๋ ๋์นญ NAT ํ๊ฒฝ, B๋ ์ผ๋ฐ NAT ํ๊ฒฝ(Full Cone NAT, Restricted Cone NAT, Port Restricted Cone NAT ๋ฑ)์ ์์
- STUN ์๋ฒ๋ฅผ ํตํด A์ B๋ ๊ฐ๊ฐ ์์ ์ ๊ณต์ธ IP/Port๋ฅผ ํ์ธ
- A์ B๋ ํด๋น ํ๋ณด๋ฅผ ์๋ก ๊ตํ
- B๋ A๋ก๋ถํฐ ๋ฐ์ ๊ณต์ธ IP/Port๋ก ํจํท์ ๋ณด๋
- ๋์นญ NAT์ ๋์ ์๋ฆฌ๋ก ์ธํด, A์ NAT ๋ผ์ฐํฐ๋ B์ ์์ฒญ์ ๋ํด ์๋ก์ด ๋งคํ(๊ณต์ธ IP/Port)์ ์์ฑ
- A์ NAT๋ ์๋ก์ด ๊ณต์ธ IP/Port๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ํตํด B์ ์์ฒญ ํจํท์ A๋ก ์ ๋ฌ
- A๋ ์ด ์๋ก์ด ๊ณต์ธ IP/Port๋ฅผ ๊ฐ์งํ๊ณ , ํผ์ด ๋ฐ์ฌ ICE ํ๋ณด๋ก ๋ฑ๋ก
- A๋ ์๋ก์ด ํผ์ด ๋ฐ์ฌ ICE ํ๋ณด ์ ๋ณด๋ฅผ B์๊ฒ ์ ๋ฌ
- B๋ ํด๋น ํ๋ณด๋ฅผ ํตํด ๋ค์ A๋ก ์ ๊ทผ
- ์ต์ ๊ฒฝ๋ก๋ฅผ ์ ํํ์ฌ ์ฐ๊ฒฐ ์๋ฆฝ
- A์ B ์ค ํ์ชฝ๋ง ๋์นญ NAT์ผ ๋ ์ด ๋ฐฉ์์ด ์๋ ๊ฐ๋ฅ
- ์์ชฝ ๋ชจ๋ ๋์นญ NAT์ธ ๊ฒฝ์ฐ, ์๋ก์ด ๋งคํ์ ์์ฑํด๋ ์๋๋ฐฉ NAT ๋ผ์ฐํฐ์์ ๋งํ ๊ฐ๋ฅ์ฑ์ด ๋์ TURN ์๋ฒ ํ์
sequenceDiagram
participant A as ํผ์ด A
participant NAT_A as A's NAT ๋ผ์ฐํฐ (๋์นญ)
participant STUN as STUN ์๋ฒ
participant NAT_B as B's NAT ๋ผ์ฐํฐ
participant B as ํผ์ด B
A->>STUN: STUN ์์ฒญ (A์ ๊ณต์ธ IP/Port ์์ฒญ)
STUN-->>A: A์ ๊ณต์ธ IP/Port ์ ๋ฌ
B->>STUN: STUN ์์ฒญ (B์ ๊ณต์ธ IP/Port ์์ฒญ)
STUN-->>B: B์ ๊ณต์ธ IP/Port ์ ๋ฌ
A->>B: A์ ํ๋ณด ์ ๋ณด ์ ์ก (์๋ฒ ๋ฐ์ฌ ICE ํ๋ณด)
B->>A: B์ ํ๋ณด ์ ๋ณด ์ ์ก (์๋ฒ ๋ฐ์ฌ ICE ํ๋ณด)
B->>NAT_A: A์ ๊ณต์ธ IP/Port๋ก ์ ๊ทผ ์๋
NAT_A->>A: ์๋ก์ด ๋งคํ ์์ฑ ํ ํจํท ์ ๋ฌ
A->>A: ์๋ก์ด ๋งคํ ์ธ์ง
A->>B: ์๋ก์ด ํผ์ด ๋ฐ์ฌ ICE ํ๋ณด ์ ๋ฌ
B->>NAT_A: ์๋ก์ด ํ๋ณด๋ก ์ ๊ทผ
NAT_A->>A: ํจํท ์ ๋ฌ
A->>B: ์ฐ๊ฒฐ ์๋ฆฝ ์ฑ๊ณต
- ICE๋ ํ๋ณด ํ ์คํธ์ **์ฐ์ ์์(Host โ srflx โ Relay)**๋ฅผ ๊ธฐ์ค์ผ๋ก ์งํ
- Peer-Reflexive ํ๋ณด๋ ํ ์คํธ ์ค ๋์ ์ผ๋ก ๋ฐ๊ฒฌ๋๋ฉฐ, relay ํ๋ณด๋ณด๋ค ์ฐ์ ์ ์ผ๋ก ํ ์คํธ
- TURN ์๋ฒ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋น์ฉ ํจ์จ์ฑ์ ๊ณ ๋ คํ์ฌ ๊ฐ๋ฅํ ํ๋ณด๋ฅผ ๋จผ์ ์๋ํ๋ฉฐ, relay ํ๋ณด๋ ์ตํ์ ์๋จ์ผ๋ก ์ฌ์ฉ
graph TD
Start([ICE ํ๋ณด ํ
์คํธ ์์]) --> Host[Host ํ๋ณด ํ
์คํธ]
Host -->|์ฑ๊ณต| Connected[์ฐ๊ฒฐ ์๋ฆฝ]
Host -->|์คํจ| Srflx[Server-Reflexive ํ๋ณด ํ
์คํธ]
Srflx -->|์ฑ๊ณต| Connected
Srflx -->|์คํจ: Peer-Reflexive ํ๋ณด ๋ฐ๊ฒฌ| PeerReflex[Peer-Reflexive ํ๋ณด ํ
์คํธ]
PeerReflex -->|์ฑ๊ณต| Connected
Srflx -->|์คํจ| Relay[Relay ํ๋ณด ํ
์คํธ]
Relay -->|์ฑ๊ณต| Connected
Relay -->|์คํจ| Failed[์ฐ๊ฒฐ ์คํจ]
- ๐ง ํ ๋น๋ฉ ๋ฐ ๋ธ๋์น ์ ๋ต
- ๐ง ์ฃผ์ ์ ์ ๋ฐ ํ ํ๋ฆฟ ์์ฑ
- ๐ป ํ๋ก์ ํธ ์ด๋ฆ ๋ฐ ๋ก๊ณ ์ ํ๊ธฐ
- ๐ป ๊ธฐํ ์ธ๋ถ์ฌํญ ์ ํ๊ธฐ
- ๐ป ๊ธฐ์ ์คํ ์์
- ๐ป ๋ฐฑ๋ก๊ทธ ์ด์ ์์ฑ
- ๐ป ๊นํ๋ธ ์ํค
- ๐ ๊ธฐํ ๋ฐ MVP ์ ์ง ํ์
- 2๏ธโฃ ์คํ๋ฆฐํธ 2 ์ฃผ๊ฐ ๊ณํ
- ๐งญ ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ
- ๐ฆบ ์ด๋ฒคํธ ํ๋ฆ๋
- ๐ฅ ๋ฐฑ์๋ ์๊ทธ๋๋ง ์๋ฒ ๋ฌธ์
- ๐ฝ ์คํ๋ฆฐํธ 5โ 6 ๋ฐฉํฅ์ฑ
- ๐ ์ต์ข ๋ฐํ ์ค๋น
- ๐ฟ Github Actions CD(์๋๋ฐฐํฌ)
- ๐ API
- โซ forEach๋ async๋ฅผ ๊ธฐ๋ค๋ ค์ฃผ์ง ์๋๋ค
- ๐งช WebRTC SFU ๋ฐ๋ชจ
- ๐ TURN ์๋ฒ ์ธ์ฆ ๋ฐฉ์
- ๐ ๏ธ [ํธ๋ฌ๋ธ์ํ ] /socket.io ๊ฒฝ๋ก๋ก ์ง์์ ์ผ๋ก HTTP ์์ฒญ์ ๋ณด๋ด๋ ๋ฌธ์
- ๐น WebRTC ํ์ํ์์์ ์นด๋ฉ๋ผ ์ํ์ ๋ฐ๋ฅธ ์์คํ ์์ ์ฌ์ฉ๋ ๋ถ์
- ๐ฅ ๋์นญ NAT์์์ WebRTC ์ฐ๊ฒฐ ์๋ฆฝ ๊ณผ์
- ๐ ํ ์คํธ ์ฝ๋์ ๋ชจํน