[CS] Network - Handshaking

ZenTechie·2023년 5월 9일
0

CS

목록 보기
2/16

TCP 3-way-Handshake & 4-way-Handshake

TCP는 정확한 전송을 보장해야 하며, 실제 통신을 하기 전에 접속이 연결됨을 알려주는 것이 필요하다. 이 과정이 3-way Handshaking이다.

연결 성립 (Connection Establishment)

[그림]

  1. 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보낸다.
  2. 서버는 클라이언트의 요청인 SYN을 받고 클라이언트에게 요청을 수락한다는 ACKSYN이 설정된 패킷을 전송한다.
  3. 클라이언트는 서버의 수락 응답인 ACKSYN 패킷을 받고, ACK를 서버로 보내면 연결이 성립(establish)된다.

연결 해제 (Connection Termination)

연결이 성립된 후, 모든 통신이 끝나게 되면 연결을 해제해야 한다.

[그림]

  1. 클라이언트가 서버에 연결을 종료하겠다는 FIN 플래그를 보낸다.
  2. 서버는 클라이언트의 요청(FIN)을 받고, 확인했다는 표시인 ACK를 보낸다.
    2.1 이때 남은 데이터를 모두 보낼 때 까지 CLOSE_WAIT 상태가 된다.
  3. 데이터를 모두 보내고 통신이 끝났으면, 클라이언트에게 연결이 종료되었다는 FIN 플래그를 전송한다.
  4. 클라이언트는 FIN 플래그를 확인했다는 ACK텍스트를 서버에게 보낸다.
    4.1 이때 서버로부터 받지 못한 데이터가 있을 수 있으므로, TIME_WAIT을 통해 기다린다.
  5. 클라이언트의 ACK를 받은 서버는 소켓 연결을 닫는다.(closed)
  6. TIME_WAIT 시간이 끝나면 클라이언트도 닫는다.(closed)
profile
데브코스 진행 중.. ~ 2024.03

0개의 댓글