3-Way Handshake
3-Way Handshake는 TCP/IP 프로토콜을 이용하여 통신을 진행할 때, 두 종단 간 정확한 데이터 전송을 보장하기 위해 연결을 설정하는 과정입니다.
- 클라이언트는 서버에 접속을 요청하는 SYN(a) 패킷을 보냅니다.
- 서버는 클라이언트의 요청인 SYN(a) 패킷에 대한 요청 수락 응답으로 ACK(a+1) 패킷을 보냅니다. 또한, 클라이언트도 포트를 열어달라는 SYN(b) 패킷을 보냅니다.
- 클라이언트는 ACK(a+1) 패킷과 SYN(b) 패킷을 받고 이에 대한 응답으로 ACK(b+1) 패킷을 보내며 연결이 성립됩니다.
왜 2 way가 아니라 3 way일까?
TCP는 양방향성 연결이기 때문에 클라이언트에서 서버에게 자신의 존재를 알리고 패킷을 보낼 수 있는 것처럼 서버에서도 클라이언트에게 자신의 존재를 알리고 패킷을 보낼 수 있다는 신호를 보내야 합니다.
왜 랜덤한 숫자를 담아 보낼까?
처음에 클라이언트에서 SYN 패킷을 보낼 때, Sequence Number에는 랜덤한 숫자가 담겨집니다.
연결을 맺을 때 사용하는 포트는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용합니다.
따라서, 이전에 사용한 포트 번호를 재사용할 가능성이 있습니다.
Sequence Number에 순차적인 숫자를 담아 전송한다면, 서버는 이전의 연결로부터 전송되는 패킷으로 인식할 수 있기 때문에 초기 Sequence Number를 난수로 설정합니다.
4-Way Handshake
4-Way Handshake는 3-Way Handshake과는 달리 연결을 해제할 때 사용합니다.
- 클라이언트는 서버에게 연결을 종료하겠다는 FIN 패킷을 보냅니다.
- 서버는 클라이언트의 요청(FIN)에 대한 응답으로 ACK 패킷을 보냅니다.
- 처리해야 할 모든 통신을 끝마쳤다면 연결을 종료하겠다는 FIN 패킷을 보냅니다.
- 클라이언트는 FIN 패킷에 대한 확인 응답으로 ACK 패킷을 보냅니다.
- 클라이언트의 ACK 패킷을 받은 서버는 소켓 연결을 닫습니다.
- 클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 것을 대비해 TIME_WAIT 시간 동안 기다리는 과정을 거칩니다.
728x90
반응형
'CS 지식 > 네트워크' 카테고리의 다른 글
[CS] HTTP, HTTPS 그리고 SSL (0) | 2023.12.13 |
---|---|
[CS] 대칭키와 공개키 (0) | 2023.12.11 |
[CS] UDP (0) | 2023.12.10 |
[CS] TCP (0) | 2023.12.07 |
[CS] OSI 7 계층 (0) | 2023.12.05 |