ICE는 무엇인가
Interactive Connectivity Establishment (ICE) 는 브라우저가 peer를 통한 연결이 가능하도록 해주는 프레임 워크이다.
WebRTC에서는 유저들을 브라우저 간 연결 할 네트워크 인터페이스와 포트를 찾고, 바인딩하는 과정을 ICE로 해결한다.
- 주의 사항
- Peer에 접근 할 때 방화벽을 통과 해야 한다.
- 단말에 유일한 주소(Public IP)를 할당해야 한다.
- 라우터가 연결을 차단 할 경우 릴레이(우회)를 해야한다.
ICE의 릴레이(우회)
앞서 말했다시피, 라우터 단에서 직접 연결을 차단 할 경우 데이터를 주고 받을 주소를 알 수 없다.
이 때 릴레이 서버를 이용한다.
STUN(Session Traversal Utilities for NAT)
클라이언트가 인터넷을 통해 클라이언트의 공개주소와 라우터의 NAT 뒤에 있는 클라이언트가 접근 가능 여부를 STUN 서버를 통해 확인한다
NAT 뒷단에 있는 클라이언트는 자신의 공개 주소, NAT 유형 및 NAT가 특정 로컬 포트와 연결한 인터넷 측 포트를 알 수 있다.
이 정보는 클라이언트가 상대방과 UDP 통신을 주고 받는데 사용된다.
STUN 서버는 UDP 포트 3478을 기본으로 가진다.
쉽게 말하자면, NAT는 공유기다.
공유기 아래에 DHCP로 붙은 디바이스(컴퓨터, 핸드폰)는 공유기를 통해 인터넷에 연결되고, private IP를 할당 받는다.
하지만, 다른 사람과 통신을 하려면, Public IP가 필요하다.
이 때 사용자는 자신의 Public IP를 STUN 서버에 질의 함으로써 알게 된다
TURN(Traversal Using Relays around NAT)
STUN 서버도 하지만 만능이 아니다.
만약 상대방의 디바이스가 Symmetric NAT의 뒷단에 있을 경우, Symmetric NAT가 각 연결 시도에 대해 서로 다른 공용 IP를 상대 디바이스에 할당할 수 있어 연결에 어려움이 생길 수 있다.
Peer 간의 IP 주소와 포트 번호를 쉽게 확인 할 수 없기 때문에 직접 연결을 설정하는 것이 어려워지기 때문이다.
이때 TURN 서버는 TURN 서버와 Peer를 연결하고, 모든 정보를 목적지 서버에 전달(등록)한다. 즉 중계자로써 Symmetric NAT 제한을 우회해버린다.
물론 오버헤드가 발생하지만, 안정적인 연결을 설정하는데 도움이 된다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Backend' 카테고리의 다른 글
fastify - Property 'view' does not exist on type (0) | 2023.02.27 |
---|---|
Kurento 미디어 서버 typescript에 설치하는 방법 (0) | 2023.02.25 |
Error - TypeORM DataSource is not set for this entity (0) | 2023.02.14 |
카카오 SSO 로그인 추가 with fastify (0) | 2023.02.13 |
AWS에 올린 MySQL 외부 접속 안됨 (0) | 2023.02.01 |