TCP의 3-way Handshake와 4-way Handshake는 각각 연결 설정과 연결 종료 과정에서 사용하는 절차이다. 이 과정은 신뢰성 있는 데이터 전송을 보장하기 위해 필수적이다.
ㅇ 플래그 정보
- SYN
연결을 초기화할 때 사용
시퀀스 번호의 초기화를 의미 - ACK
이전에 수신한 데이터나 연결 요청을 확인하기 위해 사용
응답이 도착했음을 확인하는 역할
ACK 번호는 수신한 데이터의 다음 시퀀스 번호를 가리킨다. - FIN
연결 종료를 요청할 때 사용
4-Way Handshake에서 각 측의 데이터 전송이 끝났음을 알리기 위해 사용
ㅇ 3-Way Handshake
포트 상태 정보
- CLOSED : 포트가 닫힌 상태
- LISTEN : 포트가 열린 상태로 연결 요청 대기중
- SYN_SENT : SYN 요청을 한 상태
- SYN_RECEIVED : SYN 요청을 받고 상대방의 응답을 대기중
- ESTABLISHED : 포트 연결 상태
동작 과정
1. Client → Server (SYN)
- 서버에 접속을 요청하는 SYN 패킷을 전송한다.
- 송신자가 최초로 데이터를 전송할 때 시퀀스 넘버를 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다.
- 클라이언트는 SYN을 보낸 후 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
2. Server → Client(SYN/ACK)
- LISTEN 상태인 Server가 SYN을 받고, 클라이언트에게 요청을 수락(ACK)했으며 접속 요청 프로세스인 클라이언트도 포트를 열어달라는 SYN 메세지를 전송한다
- ACK 넘버필드를 시퀀스 넘버 + 1로 지정하고 SYN과 ACK 플래그 비트를 1로 설정한 세그먼트 전송
- SYN을 받은 서버는 SYN_RECEIVED 상태가 된다.
3. Client → Server(ACK)
- 클라이언트는 서버의 응답을 받았다는 의미로, ACK 넘버필드를 시퀀스 넘버 + 1로 지정하고 서버로 ACK 플래그가 설정된 세그먼트를 전송한다.
- ACK 요청을 보낸 클라이언트는 ESTABLISHED 상태가 된다.
- ACK를 받은 서버는 ESTABLISHED 상태가 된다.
ㅇ 4-Way Handshake
포트 상태 정보
- FIN_WAIT_1 : Close()를 호출 후 FIN 패킷을 보내고 응답을 대기하는 상태
- CLOSE_WAIT : 종료 요청을 받고 진입하는 상태로 남은 데이터가 있다면 전송을 마친 후 Close() 호출
- FIN_WAIT_2 : 종료를 준비한다는 응답을 받고 종료 요청이 올 때까지 대기
- LAST_ACK : 모든 데이터를 보내고 FIN 패킷을 전송한 후 상대방의 응답을 대기
- TIME_WAIT : FIN 패킷을 받은 후 다시 ACK 응답을 한 이후의 상태, 의도치 않은 에러로 인해 연결이 데드락에 빠지는 것을 방지
동작 과정
1. Client → Server(FIN)
- close()가 호출되면 연결을 종료한다는 FIN 패킷을 보낸다.
- FIN 패킷에는 ACK가 포함되어있다.
- FIN 패킷을 보낸 후 FIN_WAIT_1 상태가 된다.
2. Server → Client(ACK)
- FIN 패킷을 받은 서버는 응답 패킷 ACK를 보낸다.
- 응답 패킷 ACK를 보낸 후 CLOSE_WAIT 상태가 된다.
- 아직 남은 데이터가 있다면 마저 전송을 마친 후에 close()를 호출한다.
- 클라이언트는 ACK 패킷을 받은 후 FIN_WAIT_2 상태가 된다.
3.Server → Client(FIN)
- 데이터를 모두 보냈다면 서버는 FIN 패킷을 클라이언트에게 보낸 후에 승인 번호를 보내줄 때까지 기다리는 LAST_ACK상태로 들어간다.
4.Client → Server(ACK)
- 클라이언트는 FIN 패킷을 받고 확인했다는 ACK 응답을 보낸다.
- ACK 응답을 보낸 후 클라이언트는 TIME_WAIT 상태가 된다.
- TIME_WAIT 상태는 의도치 않은 에러로 인해 연결이 데드락으로 빠지는 것을 방지한다.
- 만약 에러로 인해 종료가 지연되다 타임이 초과되면 CLOSED 상태로 들어간다.
- 서버는 ACK를 받은 이후 소켓을 닫는다(Closed)
- TIME_WAIT 시간이 끝나면 클라이언트도 닫는다 (Closed) 기본 240초
'Network' 카테고리의 다른 글
CS 네트워크 HTTP & HTTPS (0) | 2024.10.15 |
---|---|
CS 네트워크 대칭키 & 공개키(비대칭키) (1) | 2024.10.15 |
CS 네트워크 TCP & UDP (0) | 2024.10.15 |
CS 네트워크 TCP/IP 흐름제어 & 혼잡제어 (0) | 2024.10.14 |
CS 네트워크 OSI 7 계층 & TCP/IP 4 계층 (0) | 2024.10.14 |