컴퓨터네트워크

TCP와 Handshake

Younghun 2023. 11. 23. 16:31

TCP란

  • 연결성: 연결을 성공한 후에 통신
  • 데이터의 경계를 구분하지 않음 (byte stream service)
  • 데이터의 전송 순서를 보장 (데이터의 순서유지를 위해 각 바이트마다 번호 부여)
  • 신뢰성 있는 데이터를 전송 (Sequence Number, Ack Number)
    • Sequence Number : TCP 세그먼트의 연속된 데이터 번호
    • Ack Number : 상대방으로부터 받아야하는 다음 TCP 세그먼트 데이터 번호
  • 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(패킷 수가 과도하게 증가하는 것 방지)
  • 연결의 설정(3-way handshaking), 해제(4-way handshacking)

3-Way Handshake

  • 데이터를 전송하기 전에 클라이언트와 서버를 연결하는 과정
  • State 종류
    • CLOSED: 포트가 닫힌 상태
    • LISTEN: 포트가 열린 상태로 연결 요청 대기 중
    • SYN_RECV: SYNC 요청을 받고 상대방의 응답을 기다리는 중
    • ESTABLISHED: 포트 연결 상태
    • TIME-WAIT: Server로부터 FIN을 수신하더라도 일정시간(default: 240초)동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정
  • Flag 종류
    • SYN(Synchronize Sequence Number): 연결 flag
    • ACK(Acknowledgement): 응답 확인 flag
    • FIN(Finish): 연결 해제 flag

출처: https://jeongkyun-it.tistory.com/180

  • 동작과정
    1. Client가 Server에게 접속을 요청하는 SYN플래그를 보낸다.
    2. Server는 Listen 상태에서 SYN이 들어온 것을 확인하고 SYN_RECV 상태로 바뀌어 SYN + ACK플래그를 Client에게 전송한다. 그 후 Server는 다시 ACK 플래그를 받기 위해 대기상태로 변경된다.
    3. SYN + ACK 상태를 확인한 Client는 서버에게 ACK를 보내고 연결 성립(Established)이 된다.

4-Way Handshake

  • 세션을 종료하기 위해 수행되는 절차

출처: https://jeongkyun-it.tistory.com/180

  • 동작과정
    1. Client가 연결을 종료하겠다는 FIN플래그를 전송한다. 보낸 후에 FIN-WAIT-1 상태로 변한다.
    2. FIN 플래그를 받은 Server는 확인메세지인 ACK를 Client에게 보내준다. 그 후 CLOSE-WAIT상태로 변한다. Client도 마찬가지로 Server에서 종료될 준비가 됐다는 FIN을 받기위해  FIN-WAIT-2 상태가 된다.
    3. Close준비가 다 된 후 Server는 Client에게 FIN 플래그를 전송한다.
    4. Client는 해지 준비가 되었다는 정상응답인 ACK를 Server에게 보내준다. 이 때, Client는 TIME-WAIT 상태로 변경된다.

연결과 해제 과정이 다른 이유

클라이언트가 데이터 전송을 마친 이후에도 서버가 응답할 데이터가 존재할 수 있다.

그러므로 서버의 FIN 요청을 기다린 후에 연결을 해제한다.