-
Notifications
You must be signed in to change notification settings - Fork 0
7주차 학습정리 ‐ 유동근
유동근 edited this page Aug 11, 2024
·
5 revisions
- NAT 테이블 예시
Inside Private IP:Port | Inside Public IP:Port | Outside Public IP:Port |
---|---|---|
192.168.1.1:3888 | 101.89.101.12:8801 | 68.1.31.1:23 |
192.168.1.2:1253 | 101.89.101.12:5123 | 68.1.31.1:23 |
192.168.1.3:1025 | 101.89.101.12:102 | 68.1.31.1:23 |
graph LR
subgraph "Private Network"
A["192.168.1.1"]
B["192.168.1.2"]
C["192.168.1.3"]
end
subgraph "NAT Router"
D["Private IP: 192.168.1.100<br>Public IP: 101.89.101.12"]
end
E[("Internet")]
F["HOST<br>Public IP: 68.1.31.1"]
A --- D
B --- D
C --- D
D --- E
E --- F
- 시나리오
sequenceDiagram
participant Client as 내부 클라이언트 (192.168.0.2:12345)
participant NAT_Router as NAT 라우터 (192.168.0.1, Public IP: 203.0.113.1:54321)
participant Server as 외부 서버 (203.0.113.2:80)
Client->>NAT_Router: Request to Server (Src: 192.168.0.2:12345, Dst: 203.0.113.2:80)
Note over NAT_Router: Source IP와 포트를 Public IP와<br>새로운 포트로 변경<br>(Src: 203.0.113.1:54321, Dst: 203.0.113.2:80)
NAT_Router->>Server: Forward Request (Src: 203.0.113.1:54321, Dst: 203.0.113.2:80)
Server->>NAT_Router: Response to NAT (Src: 203.0.113.2:80, Dst: 203.0.113.1:54321)
Note over NAT_Router: Destination IP와 포트를 내부 IP와<br>원래 포트로 변경<br>(Src: 203.0.113.2:80, Dst: 192.168.0.2:12345)
NAT_Router->>Client: Forward Response (Src: 203.0.113.2:80, Dst: 192.168.0.2:12345)
방식 | 설명 |
---|---|
Mesh | 모든 참가자가 서로 직접 연결하는 방식. 소규모 그룹에 적합하며, 서버 부하가 적지만 참가자 수가 증가하면 네트워크 부하가 급증합니다. |
SFU(Selective Forwarding Unit) | 중앙 서버가 각 참가자의 스트림을 받아 다른 참가자들에게 선택적으로 전달하는 방식. 대규모 회의에 적합하며, 네트워크 효율성이 높습니다. |
MCU(Multipoint Control Unit) | 모든 참가자의 스트림을 하나로 혼합하여 단일 스트림으로 각 참가자에게 전송하는 방식. 리소스 사용이 많지만 클라이언트 부하가 적습니다. |
-
필요한 이유
- NAT(Network Address Translation) 환경에서 클라이언트의 공개 IP 주소와 포트를 확인하기 위해 필요합니다.
-
수행하는 역할
- 클라이언트의 공개 IP 주소와 포트를 알려줍니다.
- NAT 유형을 파악하여 P2P 연결 가능성을 판단합니다.
-
Stun 서버를 통해서 외부에서 식별이 가능한 공개 주소를 알아내는 과정
sequenceDiagram
participant Peer as 내부 Peer (192.168.0.2:12345)
participant NAT_Router as NAT 라우터 (Public IP: 203.0.113.1)
participant STUN_Server as STUN 서버
Peer->>STUN_Server: STUN Binding Request (Src: 192.168.0.2:12345)
Note over NAT_Router: Source IP와 포트를<br>공용 IP와 포트로 변경<br>(Src: 203.0.113.1:54321)
NAT_Router->>STUN_Server: Forwarded STUN Request (Src: 203.0.113.1:54321)
STUN_Server->>NAT_Router: STUN Binding Response (Dst: 203.0.113.1:54321, Mapped Address: 203.0.113.1:54321)
NAT_Router->>Peer: Forwarded STUN Response (Dst: 192.168.0.2:12345, Mapped Address: 203.0.113.1:54321)
Note over Peer: STUN 서버로부터 공용 IP 주소<br>및 포트 정보(203.0.113.1:54321)를 받음
- 시그널링 서버를 통해서 연결을 수립하는 과정
sequenceDiagram
participant PeerA as Peer A (192.168.0.2:12345)
participant NAT_A as NAT 라우터 A (Public IP: 203.0.113.1)
participant STUN_Server as STUN 서버
participant Signaling_Server as 시그널링 서버
participant PeerB as Peer B (192.168.0.3:54321)
PeerA->>STUN_Server: STUN Binding Request
Note over NAT_A: (Src: 203.0.113.1:50001)
STUN_Server->>PeerA: STUN Binding Response (Mapped Address: 203.0.113.1:50001)
PeerA->>Signaling_Server: Send Offer (SDP + Mapped Address: 203.0.113.1:50001)
Signaling_Server->>PeerB: Forward Offer (SDP + A's Mapped Address: : 203.0.113.1:50001)
Signaling_Server->>PeerA: Forward Answer (SDP + Peer B Address)
Note over PeerA, PeerB: Peer A와 Peer B는 직접 P2P 연결 시도 (ICE Candidates 교환)
-
필요한 이유
- 직접적인 P2P 연결이 불가능한 경우(예: 대칭형 NAT) 통신을 중계하기 위해 필요합니다.
- NAT 종류
-
수행하는 역할
- 클라이언트 간 데이터를 중계합니다.
- NAT나 방화벽으로 인해 직접 연결이 불가능한 상황을 해결합니다.
-
필요한 이유
- WebRTC는 P2P 연결을 위한 초기 정보 교환 메커니즘을 제공하지 않기 때문에 필요합니다.
-
수행하는 역할
- 세션 생성 및 관리를 담당합니다.
- SDP(Session Description Protocol) 정보를 교환합니다.
- ICE 후보를 교환합니다.
- 사용자 발견 및 통신 조정을 지원합니다.
-
필요한 이유
- 대규모 다자간 통신이나 고급 미디어 처리가 필요한 경우에 사용됩니다.
-
수행하는 역할
- SFU 또는 MCU 기능을 제공합니다.
- 스트림 라우팅, 믹싱, 트랜스코딩 등의 작업을 수행합니다.
- 녹화, 스트리밍, 화면 공유 등의 부가 기능을 지원할 수 있습니다.