Skip to content

7주차 학습정리 ‐ 유동근

유동근 edited this page Aug 11, 2024 · 5 revisions

NAT

  • 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


Loading
  • 시나리오
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)
Loading

WebRTC

방식 설명
Mesh 모든 참가자가 서로 직접 연결하는 방식. 소규모 그룹에 적합하며, 서버 부하가 적지만 참가자 수가 증가하면 네트워크 부하가 급증합니다.
SFU(Selective Forwarding Unit) 중앙 서버가 각 참가자의 스트림을 받아 다른 참가자들에게 선택적으로 전달하는 방식. 대규모 회의에 적합하며, 네트워크 효율성이 높습니다.
MCU(Multipoint Control Unit) 모든 참가자의 스트림을 하나로 혼합하여 단일 스트림으로 각 참가자에게 전송하는 방식. 리소스 사용이 많지만 클라이언트 부하가 적습니다.

STUN 서버

  • 필요한 이유

    • 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)를 받음
Loading
  • 시그널링 서버를 통해서 연결을 수립하는 과정
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 교환)
Loading

TURN 서버

  • 필요한 이유

    • 직접적인 P2P 연결이 불가능한 경우(예: 대칭형 NAT) 통신을 중계하기 위해 필요합니다.
    • NAT 종류
  • 수행하는 역할

    • 클라이언트 간 데이터를 중계합니다.
    • NAT나 방화벽으로 인해 직접 연결이 불가능한 상황을 해결합니다.

image

Signaling server

  • 필요한 이유

    • WebRTC는 P2P 연결을 위한 초기 정보 교환 메커니즘을 제공하지 않기 때문에 필요합니다.
  • 수행하는 역할

    • 세션 생성 및 관리를 담당합니다.
    • SDP(Session Description Protocol) 정보를 교환합니다.
    • ICE 후보를 교환합니다.
    • 사용자 발견 및 통신 조정을 지원합니다.

Media server

  • 필요한 이유

    • 대규모 다자간 통신이나 고급 미디어 처리가 필요한 경우에 사용됩니다.
  • 수행하는 역할

    • SFU 또는 MCU 기능을 제공합니다.
    • 스트림 라우팅, 믹싱, 트랜스코딩 등의 작업을 수행합니다.
    • 녹화, 스트리밍, 화면 공유 등의 부가 기능을 지원할 수 있습니다.

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally