TIL 10 | TCP 3-way-handshake와 4-way-handshake

Seon Kang choi·2021년 9월 30일
0
post-thumbnail

3-way-handshake

  • 클라이언트는 서버에 접속 요청하는 SYN(a) 패킷을 보낸다
  • 서버는 클라이언트의 요청 SYN(a)를 받고 요청을 수락한다는 ACK(a+1)와 SYN(b) 패킷을 보낸다
  • 클라이언트는 서버의 수락 응답인 ACK(a+1)와 SYN(b) 패킷을 받고 ACK(b+1)를 서버로 보내면 연결이 성립된다.

4-way-handshake

  • 클라이언트가 연결 종료 FIN플래그를 전송한다.
  • 서버는 클라이언트의 요청을 받고 확인 메시지로 ACK를 보낸다. 그리고 데이터를 모두 보낼 때까지 잠깐 TIME-OUT 된다.
  • 데이터를 모두 보내고 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
  • 클라이언트는 FIN메시지를 확인했다는 ACK메시지를 보낸다.
  • ACK메시지를 받은 서버 소켓은 연결을 close한다.
  • 클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 것을 대비해 일정 시간 동안 세션을 남겨놓고 잉여 패킷을 기다리니다.

처음 클라이언트에서 SYN 패킷을 보낼 때 Sequence Number에는 랜덤한 숫자가 담긴다. Connection을 맺을 때 사용하는 port는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용된다. 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재한다. 서버 측에서는 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 숫가가 전송된다면 이전의 Connection으로 부터 오는 패킷으로 인식할 수 있다. 이 문제가 발생할 가능성을 줄이기 위해 난수를 사용한다.

profile
유쾌한 개발 생활~

0개의 댓글