컴퓨터네트워크
TCP와 Handshake
Younghun
2023. 11. 23. 16:31
TCP란
- 연결성: 연결을 성공한 후에 통신
- 데이터의 경계를 구분하지 않음 (byte stream service)
- 데이터의 전송 순서를 보장 (데이터의 순서유지를 위해 각 바이트마다 번호 부여)
- 신뢰성 있는 데이터를 전송 (Sequence Number, Ack Number)
- Sequence Number : TCP 세그먼트의 연속된 데이터 번호
- Ack Number : 상대방으로부터 받아야하는 다음 TCP 세그먼트 데이터 번호
- 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(패킷 수가 과도하게 증가하는 것 방지)
- 연결의 설정(3-way handshaking), 해제(4-way handshacking)
3-Way Handshake
- 데이터를 전송하기 전에 클라이언트와 서버를 연결하는 과정
- State 종류
- CLOSED: 포트가 닫힌 상태
- LISTEN: 포트가 열린 상태로 연결 요청 대기 중
- SYN_RECV: SYNC 요청을 받고 상대방의 응답을 기다리는 중
- ESTABLISHED: 포트 연결 상태
- TIME-WAIT: Server로부터 FIN을 수신하더라도 일정시간(default: 240초)동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정
- Flag 종류
- SYN(Synchronize Sequence Number): 연결 flag
- ACK(Acknowledgement): 응답 확인 flag
- FIN(Finish): 연결 해제 flag
- 동작과정
- Client가 Server에게 접속을 요청하는 SYN플래그를 보낸다.
- Server는 Listen 상태에서 SYN이 들어온 것을 확인하고 SYN_RECV 상태로 바뀌어 SYN + ACK플래그를 Client에게 전송한다. 그 후 Server는 다시 ACK 플래그를 받기 위해 대기상태로 변경된다.
- SYN + ACK 상태를 확인한 Client는 서버에게 ACK를 보내고 연결 성립(Established)이 된다.
4-Way Handshake
- 세션을 종료하기 위해 수행되는 절차
- 동작과정
- Client가 연결을 종료하겠다는 FIN플래그를 전송한다. 보낸 후에 FIN-WAIT-1 상태로 변한다.
- FIN 플래그를 받은 Server는 확인메세지인 ACK를 Client에게 보내준다. 그 후 CLOSE-WAIT상태로 변한다. Client도 마찬가지로 Server에서 종료될 준비가 됐다는 FIN을 받기위해 FIN-WAIT-2 상태가 된다.
- Close준비가 다 된 후 Server는 Client에게 FIN 플래그를 전송한다.
- Client는 해지 준비가 되었다는 정상응답인 ACK를 Server에게 보내준다. 이 때, Client는 TIME-WAIT 상태로 변경된다.
연결과 해제 과정이 다른 이유
클라이언트가 데이터 전송을 마친 이후에도 서버가 응답할 데이터가 존재할 수 있다.
그러므로 서버의 FIN 요청을 기다린 후에 연결을 해제한다.