3-way handshake, 4-way handshake란?

리리티·2022년 11월 28일
0

3-way handshake

TCP에서 통신을 하는 장치간 서로 연결이 잘 되어있는지 확인하는 과정

  • TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish) 하는 과정
  • 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.

3-way handshake 과정

SYN(Synchronization) : 연결요청, 세션을 설정하는데 사용되며 초기에 시퀀스 번호를 보냄

ACK(Acknowledgement) : 보낸 시퀀스 번호에 TCP 계층에서의 길이 또는 양을 더한 것과 같은 값을 ACK에 포함하여 전송

1. Client -> Server (SYN)

  • 클라이언트는 연결하고자하는 서버에 SYN을 보낸다. (seq : m)
    • 클라이언트가 데이터를 전송할 떄 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송

2. Server -> Client (SYN+ACK)

  • 서버는 SYN(m)을 받고, 클라이언트로 받았다는 신호를 보내기위해 ACK와 SYN를 전송한다.
    (seq : n, ACK : m+1)
    • ACK는 받은 seq의 +1로 지정하고 SYN과 ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.

3. Client -> Server (ACK)

  • 클라이언트는 SYN(n)과 ACK(m+1)을 받고 서버에 (ACK : n+1)을 전송한다.
    • 마지막으로 접속 요청을 받고 확인을 보내 연결을 맺음

4-Way Handshake

연결을 해제하는 과정
FIN 플래그를 이용

  • FIN (finish) : 세션을 종료시키는데 사용되며, 더 이상 보낸 데이터가 없음을 나타낸다.

4-Way Handshake 과정

1. Client -> Server (FIN)

  • 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.(FIN_WAIT 상태)

2. Server -> Client(ACK)

  • 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보내고 자신의 통신이 끝날때까지 기다린다. (이상태가 TIME_WAIT 상태)
  • 서버는 클라이언트에게 응답을 보내고 CLOSE_WAIT 상태에 들어갑니다. 그리고아직 남은 데이터가 있다면 마저 전송을 마친 후에 close( )를 호출
  • 클라이언트에서는 서버에서 ACK를 받은 후에 서버가 남은 데이터 처리를 끝내고 FIN 패킷을 보낼 때까지 기다리게 됩니다. (FIN_WAIT_2)

3. Server -> Client(FIN)
남은 데이터를 모두 보냈다면 서버는 연결이 종료한다는 FIN 패킷을 클라이언트에 보내고 LAST_ACK로 들어간다.

4. Client -> Server(ACK)

  • 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다.
    • 서버는 ACK를 받고 closed 상태로 들어간다.
    • TIME WAIT 시간이 지나고 클라이언트도 closed 상태로 들어간다.

참조

https://www.geeksforgeeks.org/why-tcp-connect-termination-need-4-way-handshake/
https://afteracademy.com/blog/what-is-a-tcp-3-way-handshake-process/
https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake

profile
remind

0개의 댓글