231208 TIL #263 네트워크 #9 TCP 3-way Handshake

김춘복·2023년 12월 8일
0

TIL : Today I Learned

목록 보기
263/571

Today I Learned

오늘은 TCP의 연결과 종료 과정인 3-way Handshake와 4-way Handshake에 대해 공부해보았다.


TCP 3-way Handshake

클라이언트와 서버 간 데이터 전송 전, 안전한 연결을 설정하기 위한 과정

역할

  • 클라이언트와 서버 모두 데이터를 전송할 준비가 되어있다는 것을 보장한다.

  • TCP 연결을 초기화할 때 사용된다.

  • 양쪽 모두 상대편에 대한 초기 순차 일련 번호를 얻을 수 있다.

과정

  1. A 클라이언트가 B 서버에 접속을 요청하는 SYN 패킷을 보내고, A는 SYN/ACK를 기다리는 SYN_SENT 상태가 된다.
    SYN : 랜덤한 시퀀스 넘버(통신산 전송되는 데이터의 순서)가 포함.

  2. B 서버는 A가 보낸 SYN을 받아 A에게 요청을 수락한다는 의미로 SYN-ACK 패킷을 보낸다.
    SYN-ACK : SYN의 시퀀스 넘버를 확인해 서버가 랜덤한 시퀀스 넘버를 할당.

  3. SYN-ACK을 받은 A는 B에게 ACK를 보내고 B가 받으면 양쪽 모두 연결이 설정(Established)된다. 이후 데이터를 주고받을 수 있다.
    ACK : 서버가 제시한 SYN-ACK의 시퀀스 넘버에 1을 더한값을 ACK에 넣어 보낸다.

4-way Handshaking

TCP 세션을 반대로 종료하기 위해 수행되는 절차

  • 이 과정을 통해 데이터의 정상적인 종료가 이루어지고, 양쪽에서 모든 자원이 해제되어 연결이 완전히 종료된다.

  1. A가 더이상 데이터를 보내지 않겠다는 의미의 FIN 패킷을 보낸다.

  2. B서버는 FIN을 받으면 수락한다는 의미로 ACK를 보낸다. 아직 서버가 보낼 데이터가 남아있을 수 있으므로 연결을 바로 종료하진 않는다. B는 TIME-WAIT 상태로 기다린다.

  3. B서버는 더이상 데이터를 보내지 않을 때 클라이언트에게 FIN 패킷을 보낸다. 이때 FIN은 서버가 클라이언트와의 연결을 종료한다는 의미이다.

  4. A는 FIN을 받으면 서버의 요청을 수락한다는 의미의 ACK를 보낸다. 이로써 서버와 클라이언트의 연결이 성공적으로 종료(Closed)된다.

profile
Backend Dev / Data Engineer

0개의 댓글