이 번 장은 UDP P2P를 위한 Hole Punching의 설명이 담겨 있다. 결국은 NAT를 뚫는 것인데, 개념적으로는 그렇게 어려운 것은 없었다. 다만, 실습하기에 까다로운 내용이라 이론만 공부하고 끝내게 되었다. 이 장의 내용은 구글링을 통해 자료를 충분히 습득할 수 있으므로, 좀 더 심화한 내용을 공부해 보는 것도 나쁘지 않을 것 같다.

아래는 내가 공부하면서 내가 이해한 기준으로 정리한 내용이다.

 

Cone NAT
Cone NAT는 NAT 장비의 포트와 호스트의 포트를 1:1 매핑하고 모든 incoming/outgoing에 대해 해당 매핑만 이용하는 것을 말한다. Cone NAT의 종류에 따라 매핑 테이블 내에 일종의 ACL(Access Contact List)을 관리하여 접근에 대한 허가 여부를 관리하는 경우도 있다.

Full Cone NAT
ACL 관리 없이 한번 뚫려 있으면 그 매핑 경로를 모든 peer가 이용할 수 있는 방식을 말한다.

Restricted Cone NAT
포트나 IP주소 등을 ACL로 관리하여 host 쪽에서 최소 한번은 송신을 한 peer에 대해서 접근을 허가해주는 방식이다.


Symmetric NAT
Cone NAT와는 다르게 호스트의 포트와 NAT 장비의 포트가 1:N으로 매핑되는 방식이다. N은 peer의 개수만큼 증가한다. 일반적으로 hole punching이(P2P 연결) 불가능하기 때문에 relay를 두는 것이 좋다.



Hole Punching
실질적으로 현존하는 대부분의 peer는 IPv4의 제약 때문에 NAT 장비 뒤에 물려 있다고 보는 게 옳다.
그렇기 때문에 P2P를 하기 위해서는 서로 간의 논리적인 통신로가 연결되어야 하는데, 이를 Hole Punching이라고 부른다. Full Cone NAT의 경우 제약이 없고, 그 외의 Cone NAT는 서로 송신을 하기 시작하면(수신이 아님) 저절로 ACL에 등록이 되므로, 간단하게 Hole Punching이 가능하다.
Symmetric NAT의 경우에는 이 방식이 아예 불가능한데, peer 입장에서는 NAT 방식을 모르기 때문에 P2P 주소와 relay 주소 등을 묶어서 candidate list로 만든 후, 통신이 성립되는 루트를 찾는 식의 복잡한 과정이 필요하다.

 

Posted by JMAN