오늘은 사설 IP 주소를 가지는 두 단말 간에 P2P 통신이 가능하도록 하는 기술(NAT Traversal이라 부름)에 대해 소개 해 드리겠습니다.
RFC 5128(State of P2P Communication across NATs - Informational)에서 설명하고 있는 NAT Traversal 기술은 크게 3가지입니다.
이번 시간에는 Relaying과 Connection Reversal에 대해서 알아보고 다음 시간에 UDP Hole Punching에 대해서 설명 드리도록 하겠습니다.
P2P (NAT Traversal) 입장에서 가장 곤혹스러운 NAT Behavior가 Address and Port-Dependent Mapping(이하 APDM) & Address and Port-Dependent Filtering(이하 APDF) 입니다. 오늘 소개해 드릴 Relaying과 Connection Reversal 모두 적용의 한계(문제점)가 있기는 하지만 위 방식의 NAT Behavior에서도 NAT Traversal이 가능한 기술입니다.
1. Relaying
■ 개념
■ 절차
1. | Host A와 B는 각각 Server S로 TCP 혹은 UDP 연결 메시지(Registry Session)를 보냅니다. | ||
2. |
이 메시지들은 NAT A/B를 통과해 Server S로 도달하여 Host A와 Server S, Host B와 Server S간에 TCP 혹은 UDP 연결이 이루어집니다. 또한 NAT A/B에는 다음과 같이 Binding Entry와 Filtering Entry가 생성됩니다.
|
||
3. | 이제 Server S는 Host A/B의 Public IP/Port 정보(NAT에 의해 변환된 정보)를 알수 있게 됩니다. | ||
4. | Host A는 2번 과정에서 생성된 연결을 통해 Server S로 P2P 데이터 패킷을 보내는데, 이 때 해당 패킷의 Payload에는 목적지 주소 6.2.2.2가 포함되며 (참고: Peer 목적지 주소 6.2.2.2를 알아내는 방법에 대해서는 표준에 정의되어 있지 않음), | ||
5. | 이 패킷은 NAT A를 통과하여 Server S가 수신합니다. | ||
6. | Server S는 수신 패킷의 Payload를 통해 목적지 주소를 알아낸 후, 역시 2번 과정에서 생성된 연결을 통해 Host B로 P2P 데이터 패킷을 송신(릴레이)하며 이 때 Host B가 패킷을 수신 할 수 있도록 다음과 같이 패킷 정보를 변경합니다.
|
||
7. | NAT B는 다음과 같은 과정을 거쳐 수신 패킷을 Host B로 전달합니다.
|
■ 장점
■ 단점
■ 요약
2. Connection Reversal
■ 개념
■ 절차
1. | Host A는 Server S로 TCP 혹은 UDP 연결 메시지(Registry Session)를 보냅니다. | ||
2. |
이 메시지는 NAT A를 통과하여 Server S로 도달하여 Host A와 Server S간에 TCP 혹은 UDP 연결이 됩니다. 또한 NAT A에는 다음과 같이 Binding Entry 및 Filtering Entry가 생성됩니다.
|
||
3. | 이제 Server S는 Host A의 Public IP/Port 정보(NAT에 의해 변환된 정보)를 알수 있게 됩니다. | ||
4. | Host A와 통신을 하려는 Host B는 Server S로 연결 요청 메시지(Reverse Connection Request)를 보내고, 이 메시지에는 자신의 주소/포트 정보(200.1.1.1:2000)와 연결을 원하는 목적지(Host A) 정보가 포함됩니다 (참고: Peer 목적지 주소 5.1.1.1을 알아내는 방법에 대해서는 표준에 정의되어 있지 않음). | ||
5. | 연경 요청 메시지를 수신한 Server S는 2번에서 생성한 TCP 혹은 UDP 연결을 통해 이 메시지를 Host A로 전송하는데, 이 때 패킷 정보는 다음과 같이 변경됩니다.
|
||
6. | NAT A는 다음과 같은 과정을 거쳐 수신 패킷을 Host A로 전달합니다.
|
||
7. | 이제 Host A는 Host B로 연결 요청(Connection Request)을 합니다. 이 때 목적지 정보(200.1.1.1:2000)는 6번 메시지의 Payload에 포함된 값을 이용합니다. | ||
8. | 이 메시지는 NAT A를 통과하여 Host B로 전달이 되고, 이를 통해 Host A와 Host B간에 TCP 혹은 UDP 연결이 생성됩니다. 또한 그 과정 중에 NAT A에는 아래와 같이 Binding Entry 및 Filtering Entry가 생성 됩니다.
|
||
9. | 이제 Host B는 이 연결을 통해 Host A로 P2P 데이터 패킷을 보내면, | ||
10. | NAT A는 다음과 같은 과정을 거쳐 수신 패킷을 Host A로 전달합니다.
|
■ 장점
■ 단점
■ 요약
너무너무 정리가 잘되어있습니다! 아직 학부생이라 많이 부족해서 다른 정리자료들을 봤지만
가장 잘 이해가됩니다 ^ㅡ^
이해가 쏙쏙 잘 되게 설명해주셔서 감사합니다. 자세하게 수업 들은 기분입니다 ;))
도움 되셨다니 저도 좋네요... ^^*
관련 글 중 가장 정리가 잘된 글이 아닌가 생각됩니다.
좋은 글을 써주셔서 감사합니다.~ 도움이 많이 됐습니다. 글을 보면서 헷갈리는것은 UDP로만 홀펀칭이 가능한지요?
문서 작성 때의 기억을 되살려 보면 (2014년.... 오래 지났네요), TCP hole puching은 쉽지 않다고 했던것 같습니다.
구글링 해 보니 TCP hole puching에 대한 글을이 보이는데, 이게 현실적인 방안인지는 저도 잘 모르겠습니다. ^^*
https://en.wikipedia.org/wiki/TCP_hole_punching
http://ice.hufs.ac.kr/w/img_auth.php/7/7a/%EA%B0%95%EA%B1%B4%EC%9A%B0.pdf
정말 깔끔한 설명입니다. 감사합니다!