📌 TCP 3-way Handshake
- TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위해 3-way Handshake를 사용한다.
- 3-way Handshake란?
- TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정이다.
- 클라이언트, 서버 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작되기전에 한 쪽이, 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.
- 즉, TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
1. A(Client) → B(Server): SYN
- 프로세스 A가 연결 요청 메시지(SYN, 'synchronize sequence numbers') 전송
- 프로세스 A가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다.
- 상태: A(CLOSED), B(LISTEN)
2. B(Server) → A(Client): SYN + ACK
- 접속 요청을 받은 프로세스 B가 요청을 수락했으며, 접속 요청 프로세스인 A도 포트를 열어 달라는 메시지 전송 (SYN + ACK)
- 프로세스 B는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, SYN과 ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.
- 상태: A(SYN_SENT), B: (SYN_RECEIVED)
3. A(Client) → B(Server): ACK
- 마지막으로 접속 요청 프로세스 A가 수락 확인을 보내 연결을 맺음 (ACK)
- 이때부터 전송할 데이터가 있으면 데이터를 전송할 수 있다.
- 상태: A(ESTABLISHED), B(ESTABLISHED)
📌 TCP 4-way Handshake
- 3-way HandShake는 TCP의 연결을 설정하기위해 사용했다면, 4-way HandShake는 연결을 종료하기 위해 수행되는 절차이다.
1. A(Client) → B(Server): FIN
- 프로세스 A가 연결을 종료하겠다는 FIN 플래그 전송
- 프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지
- 상태: A(ESTABLISHED), B(ESTABLISHED)
2. B(Server) → A(Client): ACK
- 프로세스 B는 일단 확인 메시지(ACK)를 보내고 자신이 통신이 끝날 때 까지 기다린다.
- 프로세스 B는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.
- 상태: A(FIN_WAIT), B(CLOSED_WAIT)
3. B(Server) → A(Client): FIN
- 프로세스 B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스 A에게 FIN 플래그를 전송한다.
- 상태: A(TIME_WAIT), B(CLOSED_WAIT)
4. A(Client) → B(Server): ACK
- 프로세스 A는 확인했다는 메시지를 전송
- 상태: A(CLOSED), B(CLOSED)
🚨 Q. 만약 Server에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN패킷보다 늦게 도착하는 상황이 발생한다면?
A. Client에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 있다면 이 패킷은 Drop되고 데이터는 유실될 것이다.
이러한 현상에 대비하여 Client는 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거치게 되는데 이 과정을 "TIME_WAIT" 라고함
참고
https://water-orangutan-97f.notion.site/9c9fe80d042b4ab4899fe0d60951879d
'CS 공부 - 네트워크' 카테고리의 다른 글
WS vs WAS (0) | 2023.02.23 |
---|---|
[Network]블로킹, 논블로킹, 동기, 비동기 (0) | 2023.02.02 |