본문 바로가기
카테고리 없음

TCP 3-way handshake 과정을 와이어샤크로 확인해보기!

by Lizzie Oh 2022. 12. 19.

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

반응형

댓글