3-way-handshake와 4-way-handshake는 각각 TCP의 접속과 접속 해제 과정을 말합니다. 그럼 두 과정을 공부하기 전에 TCP가 무엇인지 간단하게 먼저 알아가 보겠습니다.(TCP와 UDP 때 더 집중적으로 할 예정입니다.)
TCP
TCP는 가상 회선을 만들어 신뢰성을 보장하도록 하는 프로토콜입니다. 신뢰성이 중요하여 추가적인 절차가 있어 속도가 좀 느립니다. 따라서 파일 전송과 같은 신뢰성이 중요한 서비스에 사용됩니다.
3-way-handshake

TCP의 3-way-handshake는 가상회선을 수립하는 단계입니다. 클라이언트는 서버에 요청을 보낼 수 있는지 서버는 클라이언트의 요청에 응답할 수 있는지 확인하는 과정이라고 보면 됩니다. 연결 성립 과정을 살펴보면
1. 클라이언트가 서버에 SYN(m) 패킷을 보냅니다.
2. 서버는 클라이언트로부터 SYN(m)을 받고 클라이언트에게 요청에 대한 응답으로 ACK(m+1)과 SYN(n)을 보냅니다.
3. 클라이언트가 서버로부터의 응답을 받은 후 ACK(n+1)를 서버로 보내면 연결이 성립이 됩니다.
4-way-handshake

4-way-handshake는 TCP의 연결을 해제하는 단계이며 과정은 이렇게 됩니다.
1. 서로 연결된 상태에서 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송합니다.
2. 서버는 클라이언트의 요청을 받고 응답으로 ACK를 보냅니다.
3. 데이터 전송이 완료 될 때까지 잠시 타임 아웃이 되어 있다가 서버에서 통신이 끝났으면 연결 종료 응답을 FIN 플래그를 통해서 전송합니다.
4. FIN 메세지를 받은 후 클라이언트는 서버에 ACK를 보냅니다.
5. 클라이언트의 ACK를 받은 후 서버는 소켓을 닫습니다. 여기서 소켓이 닫혀도 클라이언트는 패킷이 나중에라도 도착할 수 있어서 잠시 일정시간동안 대기합니다.
이렇게 3-way-handshake와 4-way-handshake를 공부할 수 있게 되었습니다. 더 깊게 공부하기 위해 TCP와 SYN, ACK의 의미도 공부한 후에 포스팅하도록 하겠습니다.
참고한 사이트 : https://github.com/JaeYeopHan/Interview_Question_for_Beginner?tab=readme-ov-file
: https://github.com/ksundong/backend-interview-question
GitHub - JaeYeopHan/Interview_Question_for_Beginner: :boy: Technical-Interview guidelines written for those who started studying
:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - GitHub - JaeYeopHan/Interview_Question_for_Beginner: :boy:...
github.com
'CS' 카테고리의 다른 글
왜 index는 0 부터 일까? (1) | 2024.01.09 |
---|