이번에는 STUN과 TURN에 대한 내용을 정리하려 한다. WebRTC 이해를 위해 필요한 전반적인 지식이니 다른 용어들과 함께 먼저 정리해보자.
NAT(Network Address Translation)
우리가 누구인지 식별하기 위한 고유 이름이 있듯이 각 기기들도 그들만의 고유한 이름이 있다. 네트워크 상의 기기들의 고유 이름이 바로 IP인데 이것은 실제로 고유한 값일 수도 있고 아닐 수도 있다.
예를 들어 생각해보자. 각 가정마다 공유기는 모두 있을 것이다. 이 공유기에는 하나의 IP주소가 할당된다. 그렇다면 가족들이 서로 다른 기기들로 해당 공유기를 통해 인터넷에 접속할텐데 이 호스트들 간 통신은 어떻게 이루어지는가에 대한 의문이 발생할 것이다.(IP 주소는 하나인데 그럼 모두 같은 IP 주소를 사용하나..? 그럼 서로 다른 호스트들인 것을 어떻게 구분하지...?)
우리가 사용하는 네트워크는 크게 외부 네트워크와 내부 네트워크로 구분할 수 있다. 여기서 가족간 통신을 위한 내부 네트워크와 멀리 떨어져 있는 서버와 통신을 위한 외부 네트워크로 구분할 수 있다. 외부 네트워크와 통신을 위해서는 공인 IP주소를, 내부 네트워크 간 통신을 위해서는 사설 IP주소를 사용한다.
집에서 사용하는 인터넷 공유기를 통해 외부에 있는 웹 서버로 접근하고자 할 때, 해당 요청 패킷은 반드시 해당 공유기(게이트웨이)를 거치게 되어있다. 이때 출발지의 사설망 IP주소가 그대로 외부 인터넷에 나가게 될 경우 수신측(웹서버)은 알 수 없는 사설망의 IP주소이기 때문에 최종적으로 패킷을 어디로 보내줘야 할 지 알 수 없게 된다.
따라서 NAT은 다음 과정을 거친다.
1) 패킷 헤더에 출발지와 목적지의 주소를 기록한다. 이때 출발지는 자신의 사설망 IP 주소를 기록한다.
2) 기본 게이트웨이(공유기)에서 외부로 나가는 패킷을 인식하게 되면, 출발지의 IP주소를 게이트웨이 자신의 공인 IP주소로 변경한다. 이때 별도의 NAT 테이블을 보관한다.
3) 웹 서버에서 수신한 데이터를 처리한 후 응답하여 보내는 패킷에 출발지와 목적지의 IP주소를 기록하여 보낸다. 특히 목적지의 IP주소는 호스트의 기본 게이트웨이 공인 IP주소가 된다.
4) 호스트의 기본 게이트웨이에서 웹서버가 보낸 패킷을 받으면 기록해두었던 NAT 테이블을 참조하여 최종 목적지인 호스트의 사설 IP주소로 변경하여 해당 호스트로 패킷을 전달한다.
요약하자면 NAT은 Private IP Address를 Public IP Address로 일대일 대응시켜 변환하는 장치를 말한다.
+) 내용을 추가하자면 일반적으로 컴퓨터에는 공인 IP주소를 할당하지 않는다. 그 원인으로 방화벽(Firewall), 여러 대의 컴퓨터가 하나의 공인 IP주소를 공유하는 NAT, 유휴 상태의 IP를 일시적으로 임대받는 DHCP 때문이다. 따라서 특정 사용자를 지정할 때는 공인 IP주소와 사설 IP주소를 함께 알아내야한다.
+) 일반적으로 라우터가 NAT 역할을 한다.
+) NAT Traversal : 어떤 라우터가 특정 주소나 포트와의 연결을 차단하는 방화벽 설정이 되어있을 경우, 라우터를 통과해서 연결할 방법을 찾는 과정
ICE(Interactive Connectivity Establishment)
ICE는 두 단말이 서로 통신할 수 있는 최적의 경로를 찾을 수 있도록 도와주는 프레임워크이다. ICE 프로세스를 사용하면 NAT가 통신을 위해 필요한 모든 포트를 열어두고 두 end point 모두 다 연결할 수 있는 IP주소, 포트에 대한 완전한 정보를 갖게 된다. 해당 과정은 STUN과 TURN 서버를 사용해 동작한다.
STUN이란
Session Traversal Utilities for NAT의 약자로, 공개 주소를 발견하거나 peer 간 직접 연결을 막는 등 라우터의 제한을 결정하며 ICE를 보완하는 프로토콜이다. 클라이언트는 인터넷을 통해 클라이언트의 Public IP Address와 라우터의 NAT 뒤에 있는 클라이언트가 접근 가능한지에 대한 답변을 위한 요청을 STUN 서버에 보낸다. 즉, STUN 서버는 해당 Peer의 공인 IP주소를 보내는 역할을 한다. 또한 두 end point 간 연결 확인 시 NAT 바인딩을 유지하기 위한 연결 유지 프로토콜 역할도 수행한다.(이를 통해 복잡한 인터넷 속에서 자신을 식별할 수 있는 정보를 반환받을 수 있다)
하지만 STUN 서버를 이용해도 어떤 라우터가 방화벽 정책을 달리 하거나, 이전에 연결된 적이 있는 네트워크만 연결할 수 있게 제한을 걸 경우(Symmetric NAT) STUN 서버를 통해 자신의 주소를 찾을 수 없다. 이것에 대한 대안이 바로 TURN 서버이다.
TURN이란
Traversal Using Relays around NAT의 약자로, STUN을 확장해 NAT 환경에서 릴레이하여 통신하게 한다. TURN 서버는 인터넷망에 위치하고 각 Peer들이 Private IP 안에서 통신하게 한다. 각 Peer들은 직접 통신하는 것이 아니라 릴레이 역할을 하는 TURN 서버를 사용하여 경유한다. 즉, TURN 서버는 이러한 릴레이로부터 IP주소와 포트를 클라이언트가 취득할 수 있는 릴레이 주소를 할당한다.
'STUDY > PROJECT' 카테고리의 다른 글
[WebRTC를 이용한 화상영상 서비스-(1)] (0) | 2021.11.22 |
---|