L4 스위치 쉽게 이해하기 #4(3-way handshake)
이번 문서 'L4 스위치 쉽기 이해하기'와 '서버 부하 분산 쉽게 이해하기', 다음에 이어질 문서인 'L4/L7 로드밸런싱 쉽게 이해하기'는 L4/L7 Network Swtich인 'F5 Networks' 장비를 기준으로 설명합니다. Alteon(Radware), Brocade, Cisco, Piolink, Pumkin, Citrix의 관점에서는 다소 다를 수 있습니다.
L4 스위치 쉽게 이해하기 #3에서는 NAT가 사용되는 이유에 대해서 설명드렸습니다. 이 문서에서는 더 나아가 사용자와 서버가 L4 스위치를 사용하여 통신하기 위한 모든 진행 과정(3-way handshake와 데이터 통신)에서의 Network Address Translation(NAT) 사용, 즉 IP 변화에 대해 알아보고자 하는데요. 그 중에서도 목적지의 IP를 변환하는 Destination IP NAT에 대해 자세히 보고자 합니다.
Destination IP NAT에 대한 설명은 앞서 L4 스위치 쉽게 이해하기 #2에서 말씀드렸던 L4 Virtual Server인 Perforamnce Type과 L7 Virtual Server인 Standard Type Virtual Server, 마지막으로 사용자로부터 서버로 Data Packet이 이동할 때의 Destination IP NAT으로 구성됩니다.
L4 Virtual Server의 3-way handshake(Performance Type)
먼저 L4 Virtual Server에 해당하는 Performance Type의 경우, 3-way handshake에서 IP의 변화하는지 살펴보겠습니다.
위의 그림을 보시면 사용자와 L4 스위치의 Virtual Server IP(VIP), 그리고 서버의 IP를 확인하실 수 있습니다. 왼편에는 3-way handshake(SYN, SYN/ACK, ACK) 단계에서의 IP 변화를 표현한 것입니다. 이를 순서대로 살펴보면 다음과 같습니다.
① 사용자가 서비스를 사용하기 위해 L4 스위치의 Virutal Server IP(VIP)를 목적지로 SYN Packet을 전달합니다.
② L4 스위치가 SYN Packet을 받아 부하분산을 실시하며, 목적지의 IP를 부하분산 대상으로 지정된 실제 서버의 IP로 변환한 후 전달합니다.
(여담으로 이때 L4 스위치에서는 Connection Table에 Connection이 생성됩니다.)
③ SYN Packet을 받은 실제 서버가 응답하기 위해 SYN/ACK Packet을 L4 스위치에 전달합니다.
④ SYN/ACK Packet을 받은 L4 스위치가 출발지 IP를 L4 스위치의 Virtual Server IP(VIP)로 변환하여 사용자에게 전송합니다.
⑤ SYN/ACK Packet을 받은 사용자가 ACK Packet을 L4 스위치의 Virtual Server IP(VIP)로 전송합니다.
⑥ L4 스위치가 ACK Packet을 받아 목적지의 IP를 부하분산 대상으로 지정된 실제 서버의 IP로 변환한 후 전달합니다. 서버는 ACK Packet을 받아 통신할 준비를 완료하였고, 사용자와 L4 스위치도 마찬가지입니다.
그림에도 써있듯이 Performance Type의 Virtual Server에서의 L4 스위치의 역할은 '전달'에 가깝습니다. 중개자로서 처리하기보다는 받은 패킷을 전달하는 것과 TCP 관련 기능 제어에 초점이 맞추어져 있습니다.
L7 Virtual Server의 3-way handshake(Standard Type)
L7 Virtual Server에 해당하는 Standard Type의 경우, 3-way handshake에서 IP 변화에 대해 살펴보겠습니다. L7 Virtual Server는 Layer 7 뿐만 아니라 Layer 4도 제어가 가능하다는 사실은 잊지 않으셨지요?
① 사용자가 서비스를 사용하기 위해 L4 스위치의 Virtual Server IP(VIP)를 목적지로 SYN Packet을 전달합니다.
② L4 스위치가 SYN Packet을 받고 사용자에게 SYN/ACK Packet을 반환합니다.
③ SYN/ACK Packet을 받아든 사용자가 L4 스위치에게 ACK Packet을 전달하고 요청을 전달할 준비를 합니다.
(사용자와 L4 스위치의 Connection이 생성되었고, 사용자가 HTTP Request를 L4 스위치에 전달합니다.)
④ L4 스위치가 사용자의 IP를 출발지 IP로 삼아 부하 분산을 실시하며 부하 분산 대상으로 지정된 서버의 IP를 목적지로 SYN Packet을 보냅니다.
⑤ 서버가 SYN/ACK Packet을 L4 스위치의 Virtual Server IP(VIP)로 전송합니다.
⑥ L4 스위치가 ACK Packet을 받아 목적지의 IP를 부하분산 대상으로 지정된 실제 서버의 IP로 변환한 후 전달합니다. 서버는 ACK Packet을 받아 통신할 준비를 완료하였고, 사용자와 L4 스위치도 마찬가지입니다.
(Connection Table에 Connection 생성이 완료되었습니다.)
Standard Type에서는 L4 스위치가 중간에서 대리인으로써 3-way handshake를 실시합니다. 사용자와 L4 스위치가 먼저 실행을 마치고 HTTP Request를 L4 스위치에 전달하며 L4 스위치가 부하분산 대상으로 지정된 서버와 3-way handshake를 실시하고 HTTP Request를 전달하지요. Performance Type과는 다르게 이 때의 L4 스위치의 역할은 꽤나 주도적입니다. 패킷을 받아서 처리하고 넘기기 때문에 TCP뿐만 아니라 HTTP, HTTPS 등의 프로토콜 헤더를 조작할 수 있게 되지요.
3-way handshake 이후 Data Packet의 IP 변화
3-way handshake가 실시된 이후의 Data Packet의 IP 변화에 대해 살펴보고자 합니다. 여기서 말하는 Data Packet은 HTTP, HTTPS, DNS, SMTP 등 실제 사용자가 이용할 Protocol의 Data입니다. 이번에는 다른 그림을 사용하겠습니다. IP는 동일합니다.
위 그림에서 사용자가 HTTP 웹페이지를 요청하기 위해 L4 스위치의 Virtual Server IP(VIP)에 HTTP Request를 전달했습니다. 그리고 L4 스위치는 이 요청을 받아 목적지 IP를 실제 서버의 IP로 변환하고, 실제 서버에 전달합니다.
HTTP Request를 받은 실제 서버가 HTTP Reponse를 사용자에게 전달합니다. 실제 서버의 Gateway인 L4 스위치에 이를 전달하고 L4 스위치는 이 HTTP Response를 받아 출발지 IP를 다시 L4 스위치의 Virtual Server IP로 변환한 뒤 사용자에게 보냅니다. 위 과정을 거친 후 사용자는 HTTP로 이루어진 웹페이지를 받아볼 수 있게됩니다.
여기까지가 3-way handshake와 Data Packet 교환시의 Destination IP NAT 활용 과정입니다. 다음 문서에서는 Source IP NAT를 다루도록 하겠습니다.