꼬물꼬물

TCP 3 Way-Handshake 본문

코딩/CS

TCP 3 Way-Handshake

멩주 2022. 4. 17. 02:15

TCP 3-way handshake

  • TCP는 장치들 사이에 논리적인 접속을 성립하기 위해 three-way handshake를 사용한다.
  • TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
  1. Client -> Server: SYN 패킷 발송 후 응답 기다림
  2. Server -> Client: 요청을 수락하는 ACK와 SYN flag 설정된 패킷을 발송 후 응답 기다림
  3. Client -> Server: ACK를 보내고 Server의 상태가 Established 되면 연결이 이뤄진다.
  • 이는 TCP 접속을 하기위한 필수 절차
  • SYN: synchronize sequence numbers (순차 일련 번호)
  • ACK: acknowledgement

역할

  • 양쪽 모두 데이터를 전송할 준비가 된 것을 보장하고, 실제 전달 시작 전 다른 쪽의 정보를 알 수 있다.
  • 양쪽 모두 상대편에 대한 초기 순차 일련번호를 얻을 수 있도록 한다.
  • 응용 프로그램이 데이터 전송하기 전에 먼저 정확한 전송을 보장하기 위해 사전에 세션을 수립하는 과정.

3way

과정

  1. 클라이언트는 서버에 접속을 요청하는 SYN 패킹을 보냄
    • 이때 클라이언트는 SYN/ACK 응답을 기다리는 SYN_SENT 상태로 기다림
  2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락하는 ACK와 SYN flag가 설정된 패킷을 발송
    • 해당 클라이언트가 ACK를 응답하기를 기다림. 서버는 SYN_RECEIVED 상태
  3. 클라이언트는 서버에 ACK를 보내고 이후부터는 연결이 이루어지고 데이터가 이동한다.
    • 이때 서버의 상태는 ESTABLISHED
    • 이는 신뢰성 있는 연결을 제공한다.

TCP 4-way handshake

  • 3-way는 TCP의 연결을 초기화 할 때 사용하고, 4-way는 세션을 종료하기 위해 수행한다.

4way

과정

  1. 클라이언트가 연결을 종료하겠다는 FIN flag를 서버에 전송
  2. 서버는 일단 확인(ACK) 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다.
    • 이때 클라이언트는 서버의 통신이 끝나기를 기다리는 TIME_WAIT 상태
  3. 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN flag 전송
  4. 클라이언트는 확인 ACK 메시지 전송
  • TIME_WAIT: 만약, FIN flag 전송 전에 패킷이 라우팅 지연, 패킷 유실로 인한 재전송 등으로 FIN flag 보다 늦게 도착하는 경우, 데이터 유실이 발생할 수 있다. 이를 대비해 클라이언트는 서버로 부터 FIN flag를 받더라도 일정시간 동안 세션을 남겨두고 패킷을 기다린다.

참고: TCP-HandShake

'코딩 > CS' 카테고리의 다른 글

JDBC, SQL Mapper, ORM  (0) 2022.09.05
Day2 질문  (0) 2022.04.25
HTTP/HTTPS  (0) 2022.04.25
Day01 질문  (0) 2022.04.17
OSI 7 계층  (0) 2022.04.16