Skip to content

๐Ÿ‘ฅ ๋Œ€์นญ NAT์—์„œ์˜ WebRTC ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ๊ณผ์ •

๊น€๊ทผ์šฐ edited this page Dec 1, 2024 · 1 revision

1. ์ดˆ๊ธฐ ์ƒํ™ฉ

  • A๋Š” ๋Œ€์นญ NAT ํ™˜๊ฒฝ, B๋Š” ์ผ๋ฐ˜ NAT ํ™˜๊ฒฝ(Full Cone NAT, Restricted Cone NAT, Port Restricted Cone NAT ๋“ฑ)์— ์žˆ์Œ
  • STUN ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด A์™€ B๋Š” ๊ฐ๊ฐ ์ž์‹ ์˜ ๊ณต์ธ IP/Port๋ฅผ ํ™•์ธ
  • A์™€ B๋Š” ํ•ด๋‹น ํ›„๋ณด๋ฅผ ์„œ๋กœ ๊ตํ™˜

2. B์˜ ์—ฐ๊ฒฐ ์‹œ๋„

  • B๋Š” A๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ณต์ธ IP/Port๋กœ ํŒจํ‚ท์„ ๋ณด๋ƒ„
  • ๋Œ€์นญ NAT์˜ ๋™์ž‘ ์›๋ฆฌ๋กœ ์ธํ•ด, A์˜ NAT ๋ผ์šฐํ„ฐ๋Š” B์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ๋งคํ•‘(๊ณต์ธ IP/Port)์„ ์ƒ์„ฑ

3. A๊ฐ€ ์ƒˆ๋กœ์šด ๋งคํ•‘ ์ •๋ณด ์ธ์ง€

  • A์˜ NAT๋Š” ์ƒˆ๋กœ์šด ๊ณต์ธ IP/Port๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด B์˜ ์š”์ฒญ ํŒจํ‚ท์„ A๋กœ ์ „๋‹ฌ
  • A๋Š” ์ด ์ƒˆ๋กœ์šด ๊ณต์ธ IP/Port๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ํ”ผ์–ด ๋ฐ˜์‚ฌ ICE ํ›„๋ณด๋กœ ๋“ฑ๋ก

4. ์ƒˆ๋กœ์šด ํ›„๋ณด ๊ตํ™˜ ๋ฐ ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ

  • 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: ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ์„ฑ๊ณต
Loading

ICE ํ›„๋ณด ํ…Œ์ŠคํŠธ ์ˆœ์„œ

  • 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[์—ฐ๊ฒฐ ์‹คํŒจ]
Loading

๐Ÿš€ ํ”„๋กœ์ ํŠธ ๊ทœ์น™

๐Ÿš€ ํ”„๋กœ์ ํŠธ ๊ธฐํš

๐Ÿ“ฝ ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

๐Ÿ‘ฅ ๊ทธ๋ฃน ํšŒ๊ณ 

๐Ÿ““ ๋ฉ˜ํ† ๋ง ์ผ์ง€

๐Ÿ“† ํšŒ์˜๋ก

๐Ÿง ๊ฐœ๋ฐœ์ผ์ง€

Clone this wiki locally