스타크래프트와 같이, 오래된 게임의 경우 P2P로 연결되어 게임이 진행된다.
=> 서버를 통해서 데이터를 주고 받는것이 아니라, 사용자 간에 연결을 구성하는 것을 P2P라고 한다.
P2P연결을 하기 위해선, 사용자간의 IP와 Port를 알아야 한다.
하지만, 가정집의 경우 NAT로 구성되어 있어 쉽게 연결할 수 없다.
공인IP 하나로 여러개의 사설IP를 연결해주는 기술 (=공유기)
사설IP의 경우 로컬네트워크에서 사용하는, 중복되는 IP이므로 네트워크 통신 및 P2P 통신이 불가능하다.
=> 홀펀칭으로 이 문제를 해결할 수 있다.
NAT상황에서 사용자들과의 P2P연결을 중개해주는 Relay서버를 통해 사용자간 직접적인 데이터 전송을 구현한다.
각 사용자의 NAT가 Relay서버에 접속하면 이 과정에서, 각 NAT는 사용자의 공인IP와 사설IP를 맵핑(매칭)하는 테이블을 작성해준다.(외부 네트워크_Realy서버와 통신하도록 도와주는 것임)
=> 이 테이블 정보를 사용하여 각 사용자는 NAT를 통해 공인IP로 P2P통신을 한다. (만약, 각 사용자가 동일한 NAT안에 있다면 사설IP로 P2P통신한다)
##예외(Symmetric NAT)
Symmetric NAT는 로컬-> NAT-> 외부로 나왔던 패킷의 도착지가 다른 외부로 변경되면 NAT의 임시 공용port번호가 랜덤하게 변경된다.
Symmetric NAT: ~4G KT
Cone Nat: 5G KT, SKT, LG, 99%의 공유기
원래 NAT 의 실제 기능은 네트워크 주소를 다른 네트워크 주소로 변환하는 것이다. 1 : 1 대응으로 public ip 하나에 pravate ip 하나만 변환가능하다. 요즘 말하는 NAT 와는 다른 말이다.
요즘 쓰는 NAT는 NAPT(PAT와 다른 점을 알기 어려움)와 동일하다고 할 수 있다. internal 주소마다 포트번호를 달리하여 external ip로 바꾸는 것인데, 요즘은 둘다 NAT라 말한다.
NAT 종류는 다음과 같다.
Cone NAT, Symmetric NAT 이 있고, cone NAT에는 Full Cone, Restricted Cone, Port Restricted Cone 세가지가 있습니다.
Cone NAT과 Symmetric NAT의 다른 점은 도착지 주소가 mapping에 주요한지 아닌지에 따라 달라진다. Cone NAT는 internal ip & port 만이 mapping에 주요하나, Symmetric NAT은 destination 주소가 다르면 다른 mapping table에 적힌다.
위의 그림은 Cone NAT다. External port가 하나이므로 mapping table에도 하나가 존재한다.
그러나 Symmetric NAT 는 destination 주소지가 다르기 때문에 mapping table에 다르게 저장된다.
========> 이 경우: NAT 포트를 100개정도 열어놓고 도착지(클라이언트)에서 역으로 세션연결이 되는지 확인하는 반복 작업을 해야한다. (Port Scanning)
기본적으로 NAT는 확인되지 않은 패킷은 내부로 보내지 않는다. 이것을 주지하고 내용을 봐야 한다.
Full Cone의 경우 도착지 ip나 port를 확인하지 않는다. 따라서 내부 클라이언트가 외부 서버에 요청할 경우 reply는 NAT external port에 오고 NAT external port에 들어온 모든 패킷은 mapping 된 client로 forwarding 한다.
restriced Cone은 mapping 된 external 포트에 패킷이 들어왔을 때 도착지로 보낸 패킷이 있는 경우(요청한 경우)에 대해 모든 패킷 포워딩이다.(보낸 적이 없는 경우 모두 drop)
port restricted Cone은 destination ip & port까지 확인한다.
보통 공유기는 대부분 위의 설정이 가능은 하나 딱히 Full Cone이나 restricted Cone을 써야 되는 이유를 모르겠어서 위에서 딱히 알아도 쓸모 없다고 하였다. 그리고 NAT가 요청한 정보만 받아드리기 때문에 어느정도 security가 보장된다.