보통 서버-클라이언트 통신시 클라이언트만 NAT 뒤에 있어서 쉽게 통신이 가능하다.
그러나 P2P 통신같은 경우에는 둘 다 NAT 뒤에 있는 경우가 많다.
NAT의 종류와 그에 따른 P2P 통신 방법에 대해 알아보자.
NAT 종류
Full Cone NAT
- 매핑된 NAT ip:port로 접속시 누구나 포워딩

Restricted Cone NAT
- 매핑된 NAT ip:port로 같은 ip 접속시 포워딩

Port Restricted Cone NAT
- 매핑된 NAT ip:port로 같은 ip:port 접속시 포워딩

Symmetric NAT
- 기본적으로 Port Restricted Cone NAT과 비슷하게 동작
- 같은 private ip 이여도 dst ip:port 다르면 각각 public port 다르게 해서 매핑

STUN P2P 통신
Full Cone NAT
- STUN 서버로 private ip:port와 NAT public ip:port 매핑
- 매핑한 NAT public ip:port를 상대에게 전송
- 상대방은 해당 ip:port로 통신가능

Restricted Cone, Port Restricted Cone NAT
- STUN 서버로 private ip:port와 NAT public ip:port 매핑
- 매핑한 NAT public ip:port를 상대에게 전송
- 각자 동시에 여러번 udp packet를 보내서 매핑을 시도하는 UDP Simultaneous Hole Punching 수행
- 매핑 이후에는 해당 ip:port로 통신가능

Symmetric NAT
- STUN에서 알아낸 NAT public ip:port와 상대방이 보낼 port가 다르다
- 그래서 STUN 서버만으로는 통신 불가
- TURN 같은 릴레이 서버로 통신해야 하는 상황