웹 접속 패킷 캡처하기
이번에는 막연히 흐르는 패킷이 아니라, 우리가 직접 만든 통신을 잡아 봅니다. 목표는 단순합니다. 웹사이트 한 곳에 접속하면서, 그때 오가는 패킷만 골라내는 것입니다.
실습 대상 정하기
실습에는 평범한 HTTP 사이트를 쓰면 패킷 내용을 그대로 읽을 수 있어 편합니다. 요즘은 대부분의 사이트가 HTTPS로 암호화되어 내용이 보이지 않기 때문입니다. HTTP와 HTTPS의 차이는 PART 06에서 자세히 다루므로, 지금은 '암호화되면 안이 안 보인다' 정도만 기억합니다. 이 실습에서는 접속 자체의 흐름을 보는 것이 목적이므로 어떤 사이트든 괜찮습니다.
캡처와 접속
순서는 이렇습니다.
먼저 Wireshark에서 Wi-Fi 인터페이스를 더블클릭해 캡처를 시작합니다. 그다음 브라우저로 원하는 사이트에 접속합니다. 페이지가 다 뜨면 Wireshark로 돌아와 멈춤 버튼을 눌러 캡처를 멈춥니다. 이 짧은 사이에도 수백, 수천 개의 패킷이 잡혔을 것입니다. 여기서 우리가 만든 것만 골라낼 차례입니다.
필터로 원하는 것만 거르기
Wireshark 위쪽의 긴 입력창이 디스플레이 필터입니다. 여기에 조건을 적으면 그에 맞는 패킷만 화면에 남습니다. 가장 먼저 익혀 둘 필터 몇 가지를 소개합니다.
# 파일: Wireshark 디스플레이 필터 입력창
dns
위처럼 dns라고 입력하고 엔터를 누르면 DNS 패킷만 남습니다. 사이트에 접속하려면 먼저 그 사이트의 이름을 IP 주소로 바꿔야 하는데, 그 일을 하는 것이 DNS입니다. 목록에서 여러분이 접속한 사이트 이름이 들어간 질문(query)과 응답(response)을 찾을 수 있습니다. 응답 패킷을 클릭해 보면 그 사이트의 실제 IP 주소가 적혀 있습니다.
이번에는 그 IP 주소로 주고받은 패킷만 봅니다.
# 파일: Wireshark 디스플레이 필터 입력창
ip.addr == 접속한_사이트의_IP
접속한_사이트의_IP 자리에 방금 DNS 응답에서 확인한 주소를 넣으면, 그 서버와 오간 패킷만 깔끔하게 남습니다. 이제 화면에는 우리가 만든 통신만 보입니다.
TCP 연결의 시작이 보인다
남은 패킷의 맨 앞쪽을 보면 Info 열에 SYN, SYN, ACK, ACK라고 적힌 패킷 세 개가 차례로 보일 것입니다. 이것이 그 유명한 TCP의 3-way handshake, 곧 연결을 맺는 세 번의 악수입니다. 본격적인 데이터가 오가기 전에 두 컴퓨터가 '연결할 준비 됐나요', '네 됐어요', '좋아요 시작합시다'라고 인사를 나누는 과정입니다.
지금은 이 세 패킷이 '연결을 시작하는 인사'라는 것만 눈으로 확인하면 충분합니다. 이 악수가 왜 두 번도 네 번도 아닌 세 번인지, 그 안에 어떤 정보가 담기는지는 PART 05에서 깊이 파고듭니다. 중요한 것은 1장에서 말로만 듣던 '연결'이 실제 패킷 세 개로 눈앞에 나타났다는 사실입니다.
다음 절에서는 패킷 하나를 골라 그 안의 봉투들, 곧 우리가 배운 계층들을 한 겹씩 열어 보겠습니다.