3-way-handshake

임수정·2023년 7월 20일
0
post-thumbnail

TCP

TCP(Transmission Control Protocol)는 컴퓨터 네트워크에서 데이터를 신뢰성 있게 전송하기 위해 사용되는 프로토콜입니다.

TCP 3-way handshake

TCP는 통신을 하기 전에 먼저 연결을 설정해야 합니다. 이 연결 설정 과정은 TCP 3-way handshake라고 불리는 과정을 거치게 됩니다. 3-way handshake는 클라이언트와 서버 간에 상호적으로 세션을 설정하는 단계로, 다음과 같은 순서로 이루어집니다

클라이언트 -> 서버 : 연결을 요청하는 SYN 패킷전송
서버 -> 클라이언트 : 응답으로 ACK와 SYN 패킷전송
클라이언트 -> 서버 : ACK 패킷을 전송.

이렇게 세션이 설정되고 데이터 전송이 가능해집니다.

TCP 3-way handshake 과정

1. SYN(Synchronize : 연결 요청 플래그) 단계

클라이언트가 서버에게 연결을 요청할 때 사용되는 패킷입니다. SYN 패킷에는 클라이언트가 임의의 숫자(시작 순서 번호)를 설정하여 보냅니다. 이 숫자는 클라이언트가 서버에게 전송하는 데이터의 시작점을 나타내며, 서버는 이를 기준으로 데이터를 재조립합니다.

2. SYN + ACK(Synchronize + Acknowledge) 단계

서버는 클라이언트의 SYN 패킷에 대한 응답으로 ACK 패킷을 보냅니다. 이때 서버는 자신의 초기 순서 번호를 설정하고, 클라이언트가 보낸 시작 순서 번호에 1을 더한 값으로 확인 응답 번호를 설정하여 SYN 패킷을 전송 합니다.

3. ACK(Acknowledge : 응답 플래그) 단계

클라이언트가 서버의 SYN/ACK 패킷을 받으면, 연결이 설정되었다는 응답으로 ACK 패킷을 보냅니다. 이때 ACK 패킷에는 서버가 보낸 숫자(시작 순서 번호)를 증가시킨 값을 설정합니다.

이후 신뢰성이 구축되고 나서 데이터 전송을 시작합니다.
TCP가 연결을 해제 할 때는 4-way handshake과정이 발생합니다.

4-way handshake(TCP 연결 해제 과정)

1.FIN(Finish) 단계

클라이언트가 연결을 종료하려고 할 때, 종료요청을 나타내는 FIN 패킷을 보냅니다. 데이터 전송이 끝났음을 서버에게 알립니다.

2. ACK(Acknowledge : 응답 플래그) 단계

서버는 클라이언트에게 FIN 패킷을 수신했다는 것을 알려주는 ACK 패킷을 보냅니다.
ACK 패킷에는 현재까지 받은 데이터의 순서 번호도 포함됩니다.

3.FIN(Finish) 단계

서버는 ACK를 보내고 일정 시간 이후에 모든 자료를 보냈다는 의미로 FIN 패킷을 전송합니다.

4. ACK(Acknowledge : 응답 플래그) 단계

이때, 클라이언트는 TIME WAIT상태가 됩니다. 그리고 서버로 응답 플로그인 ACK 패킷을 보내고 서버는 닫히게 됩니다. 클라이언트의 경우 대기 시간을 가진 후 연결이 닫히고 클라이언트와 서버의 모든 연결이 해제됩니다.

잠깐! 그렇다면 클라이언트는 왜 TIME WAIT을 가지게 될까요?

  1. 처리되지 않은 패킷의 도착 방지: Time Wait 상태에서 기다리는 동안에도 네트워크 상에서 이미 종료된 연결에 대한 패킷이 도착할 수 있습니다.

  2. 연결 해제에 대한 확실한 확인 보장: 클라이언트가 Time Wait 상태를 유지하는 동안, 서버는 클라이언트의 종료 요청에 대한 확인을 받고, 데이터를 완전히 처리한 후에 자신의 연결을 닫을 수 있습니다.

[참고자료]

profile
부족함을 인정하고 채워나가는 개발자! (Node.js 개발자)

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

덕분에 좋은 정보 얻어갑니다, 감사합니다.

답글 달기