TCP 연결 수립 및 데이터 전송 과정 추적(Wireshark, Telnet 이용)

5주차 과제

준비도구

  • kali lin­ux — wireshark
  • Tel­net (ssh와 같은 통신 도구 그러나 암호화를 거치지 않고 통신함)

네트워크 상에서 이루어지는 TCP 연결과 데이터 전송 그리고 TCP 연결 종료를 집적 눈으로 볼 수 있는 기회는 많지 않다.
이번 글에서는 Kali Lin­ux에서 Wire­Shark를 이용해 통신 과정을 눈으로 확인해 본다.

1. TCP연결 수립 : 3‑handshake

  • TCP 연결을 위해 클라이언트는 서버에 SYS flag가 담긴 패킷을 보낸다. 이 때 패킷의 순서 번호인 Seq는 랜덤으로 설정한다.
  • SYS 패킷을 받은 서버는 클라이언트의 Seq + 1 을 ACK 에 넣고 SYS flag를 설정해서 응답한다.
  • 클라이언트는 서버의 SYS 패킷을 응답받고 잘 받았다는 확인의 의미에서 ACK를 (서버가 보낸 패킷의 Seq + 1)으로 설정해서 응답한다.
  • 이 과정을 거친 후 클라이언트와 서버는 TCP 연결 수립을 완료하게 된다. 첫번째 이미지에서 직접 패킷 내용을 확인해 볼 수 있다.

2. Server -> Client Data 전송

  • 클라이언트는 마지막에 서버가 보낸 Seq 번호를 다시 한번 사용한다. 이는 세션을 의미하며, 이전 연결의 다음 통신을 의미한다.
  • 클라이언트는 데이터의 크기를 패킷에 설정하고 보낸다.
  • 서버는 패킷을 받고 [다음 ACK 응답 번호 + 데이터 크기]를 ACK에 설정하고 패킷을 보낸다.

4. TCP 연결 종료

  • 서버는 클라이언트에 FIN flag가 담긴 패킷으로 연결종료 의사를 보낸다. 이 때 서버는 바로 연결을 종료하지 않는다.
  • 클라이언트는 FIN flag가 담긴 패킷으로 응답패킷을 보낸다.
  • 서버는 클라이언트의 FIN flag를 받고 연결을 종료한다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다