네트워크 개념이라는 게 들을 땐 그런가보다 싶지만 막상 눈에 보이지는 않기 때문에 잘 와닿지 않는다. 이해도를 높이기 위해선 직접 과정을 봐야 한다.
3306 포트에 바인딩 되어 있는 MariaDB 프로세스의 TCP/IP 통신 연결 과정을 직접 보려고 한다. TCP/IP 3-Way Hankshake를 이해하는 게 목표다. 이를 위해 Wireshark 라는 패킷 분석 프로그램을 이용한다.
3-Way Handshake란?
TCP/IP 통신에서 3 way handshake는 신뢰성 있는 연결을 설정하기 위한 절차다. 클라이언트와 서버 간 세 번의 메시지를 교환한다. 이 과정을 거쳐 서버와 클라이언트가 서로 인식하고 데이터 전송이 이루어질 준비가 끝난다.
1. SYN (Synchronize)
- 클라이언트가 서버에 연결 요청을 보낸다 (클라이언트 -> 서버)
- 이 요청은 SYN 플래그가 설정된 TCP 패킷을 통해 이루어진다
- 클라이언트는 자신의 초기 시퀀스 번호를 패킷에 포함시킨다
2. SYN-ACK (Synchronize-Acknowledge)
- 서버는 클라이언트의 연결 요청을 받고 요청을 수락한다는 응답을 보낸다
- 서버는 SYN 플래그와 ACK 플래그가 모두 설정된 TCP 패킷을 전송한다
- 패킷에는 클라이언트의 시퀀스 번호에 대한 응답(ACK 번호)과 서버가 선택한 자신의 초기 시퀀스 번호가 포함된다
3. ACK (Acknowledge)
- 클라이언트는 서버의 응답을 받고 마지막으로 서버가 보낸 시퀀스 번호에 대한 응답을 보낸다.
- 양측은 서로의 시퀀스 번호를 알고 있고 신뢰할 수 있는 데이터 전송을 시작할 준비가 완료된다.
3 Way Handshake가 완료되면 TCP 연결이 확립된 것이다. 이제 클라이언트와 서버는 실제 데이터를 주고 받을 수 있다.
MariaDB 연결 패킷 확인 예시
1. HediSQL TCP/IP 연결 시도
VM 장비에 있는 mariadb에 로컬에서 HeidiSQL로 연결한다. 네트워크 유형은 TCP/IP다.
2. 3-Way Handshake 확인
패킷을 보면 최초 출발지(Source)는 로컬 IPv4인 192.168.91.1 이고 도착지(Destination)는 VM 서버인 192.168.91.150이다. 프로토콜은 TCP다. info 열 내용을 보면 순서대로 [SYN] –> [SYN, ACK] –> [ACK] 플래그가 확인된다.
- [SYN] : 클라이언트(HeidiSQL)가 서버(MariaDB)에 연결을 요청
- [SYN, ACK] : 서버가 클라이언트의 요청을 수락하고 응답
- [ACK] : 클라이언트가 응답을 확인하고 연결 설정
이렇게 되면 TCP/IP 3 way handshake가 완료된 것이다.
3. MySQL 프로토콜 통신
그 뒤로는 MySQL 프로토콜을 이용한 통신이 이루어지는 걸 볼 수 있다.
패킷 정보를 보면 구체적인 데이터도 확인된다. 예를 들어 HeidiSQL에서 SELECT 쿼리를 실행하면 패킷 정보에 해당 데이터 정보가 표시된다.
TCP/IP 통신이 최초로 이루어진 뒤에 애플리케이션의 프로토콜을 이용해서 데이터를 주고 받는 과정이 진행되는 걸 눈으로 볼 수 있다.