<br/>

3way Hansdshake

<img alt="pasteImage.png" pathname="KQM7BN190307192506.PNG" src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/KQM7BN190307192506.PNG" style="border-style:solid; border-width:1px; width:500px" title="pasteImage.png" />

TCP는 통신 전, 연결상태를 확인하기 위해 3 Way HandShake 작업을 수행합니다.

쉽게 말하면, 통신을 시작하기전 "너 잘들리니?" - "나 잘들려! 너는?" - "나도 잘들려!" 라는 3가지 과정을 수행하는 것입니다.

다음과 같이 동작합니다.

  • 처음에 클라이언트는 CLOSE상태 서버는 LISTEN상태입니다.

  • 클라이언트는 서버에 SYN 패킷을 보냅니다. SYN-SENT 상태가 됩니다. ("너 잘들리니?")

  • 서버는, SYN 요청을 받고 수락합니다. 그리고 SYN/ACK 패킷을 보냅니다. 이 때, 서버는 SYN_RESCEIVED 상태를 가집니다. ("나 잘들려? 너는?")

  • 클라이언트는 SYN/ACK 패킷을 받음으로써, 클라이언트 입장에서 클라이언트-서버 연결은 확인합니다. 그리고 서버에게 ACK 패킷을 보내줍니다. 클라이언트는 연결이 확인된 상태인 ESTABLISHED 상태로 변경됩니다. ("나도 잘들려!")

  • 서버는 ACK패킷을 받음으로써, 서버 입장에서 클라이언트 - 서버 연결을 확인합니다. 서버는 연결이 확인된 상태인 ESTABLISHED 상태로 변경됩니다.

  • 이후, 통신을 진행합니다.

<br/>

<br/>

<br/>

4way Hansdshake

<img alt="pasteImage.png" pathname="AZ5W3D190307194913.PNG" src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/AZ5W3D190307194913.PNG" style="border-style:solid; border-width:1px; width:500px" title="pasteImage.png" />

반대로, 4way Hansdshake는 TCP가 연결을 종료하기 위한 과정입니다.

다음과 같이 동작합니다.

  • 클라이언트는 통신 종료를 위해 FIN 패킷을 보내고, FIN_WAIT_1 상태로 대기합니다.

  • 서버는 FIN 패킷을 받고, 수락한다는 ACK 패킷을 보냅니다. 동시에 서버는 Application에게 close()를 요청합니다. 그리고 서버는 CLOSE_WAIT 상태로 변경합니다.

  • 클라이언트는 ACK 패킷을 받고 , FIN_WAIT_2 상태로 변경합니다.

  • 동시에 close() 요청을 받은, Application은 종료 프로세스를 진행하고, 완료 후 서버는 FIN 패킷을 클라이언트에게 전송 후, LAST_ACK 상태로 변경합니다.

  • 클라이언트는 FIN 패킷을 받고, 수락한다는 ACK 패킷을 보냅니다. 그리고 TIME_WAIT 상태로 변경합니다. TIME_WAIT 상태는 일정 시간이 지나면 CLOSED 상태로 변경됩니다.

  • 서버는 최종 ACK 패킷을 받고, CLOSED 상태로 변경합니다.

<br/>

<br/>

<br/>

참고

<a href="https://hyeonstorage.tistory.com/287">https://hyeonstorage.tistory.com/287</a>

0
이전 댓글 보기
등록
TOP