TCP 통신의 3-way-handshake를 공부하다가 이 과정을 조금 더 구체적으로 이해해보고싶어서 이것저것 찾아보니, 와이어샤크라는 오픈소스를 사용해서 패킷의 정보를 확인할 수 있다고 해서 직접해보았다!
우선 wireshark 홈페이지에서 MAC arm 버전을 다운 받았다. 현재 맥북에어 m1을 사용하고 있는데 문제없이 설치가 되었다!
( Chmod와 Wireshark to the system path 까지도 다 같이 설치했다..! )

자주 사용하는 캠프릿지 영어 사전 웹사이트로 테스트를 해보기로 했다.
터미널에서 nslookup으로 해당 웹사이트의 ip주소를 확인한다. (명령어: nslookup {도메인명} )
nslookup dictionary.cambridge.org

패킷을 확인하기 위해 와이어샤크를 실행한다.
인터페이스가 다양했는데 나는 현재 무선인터텟 연결 상태라서 Wireless 를 선택했고, 아래 그림과 같이 나타나는 Wi-Fi 를 더블클릭했다!

상단 필터에 ip.addr == 54.251.164.119 라고 입력한다. (위에서 확인한 ip주소 입력!)

이제 패킷을 확인할 준비가 끝났다!
https://dictionary.cambridge.org/ 사이트에 접속해본다!
순식간에 수많은 패킷이 뜨는데, 제일 먼저 생성된 세 개가 3 way handshake를 이루고 있음을 알 수 있다!

3-way handshake 과정과 맞춰보면서 하나씩 확인해보자.
1. 클라이언트가 서버로 데이터 전송 허가를 받기 위해 연결 확립을 요청 → 연결 요청 후 클라이언트의 상태를 SYN SENT 라고 함
- TCP 헤더의 SYN 비트는 1
- 임의의 난수로 생성된 seq 번호 포함
🦈 와이어샤크 패킷 캡처 : seq no. 265600187, 코드비트 SYN

2. 서버가 클라이언트의 요청에 대해 확인 응답하고 (ACK: 1)
& 동시에 서버도 클라이언트에게 데이터 전송 허가를 받기 위해 연결 확립을 요청 (SYN: 1)
→ 연결 요청 후 서버의 상태를 SYN RECEIVED 라고 함
- TCP 헤더의 ACK과 SYN 비트는 1
- 서버가 받았던 seq 번호에 1을 더한 ack 번호로, 임의의 난수로 생성된 seq 번호 포함
🦈 와이어샤크 패킷 캡처 : ack no. 265600188, seq no. 164409365, 코드비트 SYN, ACK

3. 클라이언트는 받은 syn 번호에 1을 더한 값을 ack번호로 보내고 통신이 수립됨 →이후 클라이언트의 상태는 ESTABLISHED
- TCP 헤더의 ACK 비트는 1
- 클라이언트가 받은 seq 번호에 1을 더한 값을 ack 번호로 포함!
🦈 와이어샤크 패킷 캡처 : ack no. 164409366, 코드비트 ACK

댓글