TCP의 연결 성립 : 3-way 핸드세이크

이강용·2024년 6월 10일
0

CS

목록 보기
47/109

TCP의 연결 성립 과정 : 3-WAY 핸드세이크

  • TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 보장하기 위해 3-WAY 핸드세이크 과정을 통해 연결을 설정
  1. SYN 단계(Synchronize) : 클라이언트가 서버에 연결 요청을 보냄
    • 클라이언트는 자신의 ISN(Initial Sequence Number)을 포함하여 SYN 패킷을 서버에 전송
  2. SYN + ACK 단계(Synchronize - Acknowledge) : 서버는 클라이언트로부터 SYN 패킷을 수신한 후, 자신의 ISN을 포함한 SYN 패킷과 클라이언트의 SYN에 대한 응답으로 승인번호를 클라이언트의 ISN + 1로 설정하여 ACK 패킷을 클라이언트에게 전송
  3. ACK 단계 : 클라이언트는 서버로부터 SYN + ACK 패킷을 수신한 후, 서버의 ISN + 1을 승인번호로 설정하여 ACK 패킷을 서버에 전송
클라이언트                            서버
    |                                  |
    | ---------- SYN (ISN=c) --------> |
    |                                  |
    | <----- SYN (ISN=s) + ACK ------- |
    |        (ACK=c+1)                 |
    |                                  |
    | --------- ACK (ACK=s+1) -------> |
    |                                  |

클라이언트와 서버의 상태

3-WAY 핸드세이크 과정

1.	클라이언트 -> 서버: SYN (클라이언트 ISN 포함)
	•	클라이언트 상태: CLOSED -> SYN-SENT
	•	클라이언트가 서버에 연결을 요청하는 SYN 패킷을 보냅니다. 이 패킷에는 클라이언트의 초기 시퀀스 번호(ISN)가 포함되어 있습니다.
	•	서버 상태: CLOSED -> LISTEN
	•	서버는 클라이언트의 요청을 기다리는 상태입니다. 이는 서버가 클라이언트의 SYN 패킷을 수신할 준비가 되었다는 의미입니다.
2.	서버 -> 클라이언트: SYN + ACK (서버 ISN 포함, 클라이언트 ISN + 1 승인번호)
	•	서버 상태: LISTEN -> SYN-RECEIVED
	•	서버가 클라이언트의 SYN 패킷을 수신하고, 자신의 ISN을 포함한 SYN 패킷과 클라이언트의 ISN + 1을 승인번호로 설정한 ACK 패킷을 클라이언트에 보냅니다.
	•	클라이언트 상태: SYN-SENT -> SYN-RECEIVED
	•	클라이언트는 서버의 SYN + ACK 패킷을 수신하고, 다음 단계로 넘어갑니다.
3.	클라이언트 -> 서버: ACK (서버 ISN + 1 승인번호)
	•	클라이언트 상태: SYN-RECEIVED -> ESTABLISHED
	•	클라이언트가 서버의 ISN + 1을 승인번호로 설정한 ACK 패킷을 서버에 보냅니다. 이로써 클라이언트는 연결이 설정되었음을 확인합니다.
	•	서버 상태: SYN-RECEIVED -> ESTABLISHED
	•	서버는 클라이언트의 ACK 패킷을 수신하고, 최종적으로 연결이 설정되었음을 확인합니다.

예시 : 서버 설정(Node.js)

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`);
});
profile
HW + SW = 1

0개의 댓글