[WebRTC] P2P

์ฃ ํ˜„์กยท2022๋…„ 7์›” 6์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
4/6

๐Ÿšฅ Signaling (Full-Mesh)
์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ํ†ต์‹  ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ณ  peer ๋ผ๋ฆฌ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜๋Š” ๋ฐฉ์‹

โœจ ํŠน์ง•

peer ๊ฐ„์˜ offer, answer(session ์ •๋ณด) signal์„ ์„œ๋ฒ„๊ฐ€ ์ค‘๊ณ„ํ•œ๋‹ค.

โ‡’ peer ๊ฐ„์˜ ์—ฐ๊ฒฐ ์ •๋ณด๋งŒ ์ค‘๊ณ„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๊ฒฐ ํ›„์—๋Š” ์„œ๋ฒ„์— ๋ถ€ํ•˜๊ฐ€ ์—†๋‹ค.

โ‡’ 1 : 1 ์—ฐ๊ฒฐ์— ์ ํ•ฉํ•˜๋‹ค.

๐Ÿ‘ ์žฅ์ 

์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ์ ์–ด ์„œ๋ฒ„ ์ž์›์ด ์ ๊ฒŒ ๋“ ๋‹ค.

peer๊ฐ„์˜ ์ง์ ‘ ์—ฐ๊ฒฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์‹œ๊ฐ„์„ฑ์ด ๋ณด์žฅ๋œ๋‹ค.

๐Ÿ‘Ž ๋‹จ์ 

peer๊ฐ„์˜ ์ง์ ‘ ์—ฐ๊ฒฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๊ฒฐ์ด ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ์˜ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•œ๋‹ค.

๐Ÿ”— ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•

1๏ธโƒฃ SDP ํ˜‘์ƒ

SDP (Session Description Protocol)
RFC 4566์— ๊ทœ์ •๋œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฏธ๋””์–ด์˜ ์ดˆ๊ธฐํ™” ์ธ์ˆ˜๋ฅผ ๊ธฐ์ˆ ํ•˜๊ณ  ํ˜‘์ƒํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ

๐Ÿ—ฃ๏ธ ์—ฐ๊ฒฐ ๋‹จ๊ณ„

  1. ์ƒˆ๋กœ์šด ๋ธŒ๋ผ์šฐ์ €(A)์—์„œ SDP ํ˜•ํƒœ์˜ Offer๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. Offer๋ฅผ ๋ณธ์ธ(A)์˜ LocalDescription์— ๋“ฑ๋กํ•œ๋‹ค.
  3. A์˜ Offer๋ฅผ ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„์— ์ „๋‹ฌํ•œ๋‹ค.
  4. ์„œ๋ฒ„๋Š” ํƒ€ ๋ธŒ๋ผ์šฐ์ €(B)์—๊ฒŒ SDP ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
  5. Offer๋ฅผ ๋ฐ›๋Š” ๋ธŒ๋ผ์šฐ์ €(B)๋Š” ๋ณธ์ธ(B)์˜ Offer ์ •๋ณด๋ฅผ RemoteDescription์— ๋“ฑ๋กํ•œ๋‹ค.
  6. B๋Š” Answer ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  7. B๋Š” ๋ณธ์ธ์˜ LocalDescription์œผ๋กœ Answer ๋ฉ”์‹œ์ง€๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.
  8. Answer๋ฅผ ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  9. ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๋Š” A์—๊ฒŒ Answer๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
  10. A๋Š” Answer์ •๋ณด๋ฅผ ๋ณธ์ธ(A)์˜ RemoteDescription์— ๋“ฑ๋กํ•œ๋‹ค.

2๏ธโƒฃ ICE ํ˜‘์ƒ

SDP๋ฅผ ๊ตํ™˜ํ•œ ํ›„ ๊ฐ Peer๋Š” ์„œ๋กœ์˜ ์ฃผ์†Œ ๊ฐ’์„ ์•Œ๊ธฐ ์œ„ํ•ด ICE Candidate๋ฅผ ๊ตํ™˜ํ•œ๋‹ค.

ICE (Interactive Connectivity Establishment)
P2P ๋„คํŠธ์›Œํ‚น์—์„œ ๋‘ ์ปดํ“จํ„ฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ง์ ‘ ์„œ๋กœ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํ‚น์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ  ( ํ”„๋กœํ† ์ฝœ(TCP or UDP), IP ์ฃผ์†Œ, ํฌํŠธ ๋„˜๋ฒ„, ์ปค๋„ฅ์…˜ ํƒ€์ž… ๋“ฑ์„ ์ œ์•ˆ )


โ“ What is STUN/TURN Server

๋ฐฉํ™”๋ฒฝ์ด ์กด์žฌํ•˜๊ฑฐ๋‚˜, NAT ํ™˜๊ฒฝ์— ๋†“์—ฌ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” Peer์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ ์‹œ๊ทธ๋„๋ง์ด ๋ถˆ๊ฐ€๋Šฅ
โ‡’ UDP Hole Punching ๋ฐฉ์‹์„ ํ†ตํ•ด ํ•ด๊ฒฐ


๐ŸŒ NAT (Network Address Translation)?

๊ณต์œ ๊ธฐ์—์„œ Private IP, Port ๋ฒˆํ˜ธ๋ฅผ Public IP, Port๋ฒˆํ˜ธ ํ˜น์€ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ๋Š” ๊ฐœ๋…

NAT์ด ๋‚˜์˜ Private IP, Port๋ฒˆํ˜ธ๋ฅผ Public IP์™€ ์ ์ ˆํ•œ Port๋ฒˆํ˜ธ๋ฅผ ์ฐพ์•„์„œ ๋ฐ”๊ฟ”์ค€๋‹ค.

โ‡’ ์‹ค์ œ ๋‹ค๋ฅธ ์œ ์ €๋Š” ๋‚ด Public IP์™€ Port๋กœ ํ†ต์‹ ์„ ํ•˜๋Š” ๊ฒƒ

๐Ÿ‘Š UDP HolePunching?

P2Pํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด NAT์—๋‹ค๊ฐ€ ํ†ต๋กœ(?)๊ฐ™์€ ๊ฒƒ์„ ๋šซ์–ด์ฃผ๋Š” ๊ธฐ๋ฒ•

์ค‘๊ฐœ์„œ๋ฒ„(Public IP, Port๊ฐ€ ๊ณต๊ฐœ๋œ)๋ฅผ ํ•„์š”๋กœํ•œ๋‹ค.

์ค‘๊ฐœ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์œผ๋กœ ์–ป๊ฒŒ๋œ Public IP, Port๋กœ A, B๋Š” ์„œ๋กœ ํ†ต์‹  ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ˜ฏ STUN(Session Traversal Uilities for NAT) ์„œ๋ฒ„

NATํ™˜๊ฒฝ์—์„œ๋Š” Private IP๋ฅผ ๋ณ„๋„๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Peer to Peer(์ดํ•˜ P2P) ํ†ต์‹ ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์˜ Public IP๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด STUN ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์ž์‹ ์˜ Public IP๋ฅผ ๋ฐ›๋Š”๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋•Œ๋ถ€ํ„ฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ๋ฐ›์€ Public IP๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹œ๊ทธ๋„๋ง์„ ํ• ๋•Œ ๋ฐ›์€ ๊ทธ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ ์‹œ๊ทธ๋„๋ง์„ ํ•˜๊ฒŒ ํ•œ๋‹ค.

๋‹ค๋งŒ ์ด STUN์œผ๋กœ ๋ชจ๋“ ๊ฑธ ํ•ด๊ฒฐํ•  ์ˆ˜๋Š” ์—†๋Š”๋ฐ ๋ฐ”๋กœ ๋‘ Client๊ฐ€ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์— ์กด์žฌํ•˜๊ณ  ์žˆ์„๋•Œ๋Š” ์ด๊ฒƒ์œผ๋กœ๋Š” ํ•ด๊ฒฐ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋˜ํ•œ, NAT ํ™˜๊ฒฝ์—์„œ๋Š” Symmetirc NAT์˜ ๊ฒฝ์šฐ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ฌ๋ผ์ง€๋ฉด NAT์˜ ๋งคํ•‘ํ…Œ์ด๋ธ”์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿช TURN ์„œ๋ฒ„

TURN ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๋“ค์ด ํ†ต์‹ ํ•  ๋•Œ Public ๋ง์— ์กด์žฌํ•˜๋Š” TURN ์„œ๋ฒ„๋ฅผ ๊ฒฝ์œ ํ•˜์—ฌ ํ†ต์‹ ํ•˜๊ฒŒ ๋œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์˜ Private IP๊ฐ€ ํฌํ•จ๋œ TURN ๋ฉ”์„ธ์ง€๋ฅผ ํ„ด์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด TURN ์„œ๋ฒ„๋Š” ๋ฉ”์„ธ์ง€์— ํฌํ•จ๋œ Network Layer IP ์ฃผ์†Œ์™€ย Transport Layer์˜ UDP ํฌํŠธ ๋„˜๋ฒ„์™€์˜ ์ฐจ์ด๋ฅผ ํ™•์ธํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์˜ Public IP๋กœ ์‘๋‹ตํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋•Œ NAT๋Š” NAT ๋งคํ•‘ํ…Œ์ด๋ธ”์— ๊ธฐ๋ก๋˜์–ด ์žˆ๋Š” ์ •๋ณด์— ๋”ฐ๋ผ์„œ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ Private IP ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค.

TURN ์„œ๋ฒ„๋Š” ICE์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ๋””์ž์ธ ๋˜์—ˆ๋‹ค.

STUN ๐Ÿ†š TURN

TURN์„œ๋ฒ„๋Š” STUN์„œ๋ฒ„์˜ ๊ฐœ๋…์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ง‘ํ•ฉ์ด๋‹ค.

STUN์„œ๋ฒ„์ฒ˜๋Ÿผ ๋‹จ์ˆœํžˆ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด์„œ private ip์™€ public ip๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ์—์„œ ๊ทธ์น˜์ง€ ์•Š๋Š”๋‹ค.

WebRTC๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ๋ฅผ 1:1๋กœ ๋ณด๋‚ด์ค€๋‹ค๊ณ  ํ–ˆ์„๋•Œ ๊ทธ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” TURN ์„œ๋ฒ„๋ฅผ Relay ์„œ๋ฒ„๋กœ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” Peer์—๊ฒŒ ์ „๋‹ฌํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค.


๐Ÿ“š Reference

https://medium.com/monday-9-pm/์ดˆ๋ณด๊ฐœ๋ฐœ์ž-webrtc-์‹œ๊ทธ๋„๋ง์„œ๋ฒ„-๋งŒ๋“ค๊ธฐ-caf8cf9adc9a

https://cjwoov.tistory.com/6?category=774541

https://andonekwon.tistory.com/59

0๊ฐœ์˜ ๋Œ“๊ธ€