TCP 연결 설정 과정은 다음과 같습니다.
- 클라이언트는 서버에 SYN(Synchronize Sequence Number) 패킷을 보냅니다. SYN 패킷에는 클라이언트가 사용할 초기 시퀀스 번호가 포함됩니다.
- 서버는 SYN 패킷을 받고, 클라이언트에게 ACK(Acknowledge)와 SYN 패킷을 보냅니다. 서버가 보내는 SYN 패킷에는 서버가 사용할 초기 시퀀스 번호가 포함됩니다.
- 클라이언트는 서버로부터 받은 SYN/ACK 패킷에 ACK 패킷을 보내 연결을 확인합니다. 이때, 초기 시퀀스 번호를 서버로부터 받은 값에 1을 더한 값으로 설정합니다.
이렇게 3-way handshake 과정을 거치면 클라이언트와 서버는 안정적인 연결이 설정됩니다.
TCP 연결 종료 과정은 다음과 같습니다.
- 클라이언트는 서버에게 FIN(Finish) 패킷을 보냅니다. 이때, 클라이언트는 더 이상 데이터를 보내지 않을 것임을 서버에게 알립니다.
- 서버는 FIN 패킷을 받고, ACK 패킷을 보냅니다. 이때, 서버는 아직 처리되지 않은 데이터를 모두 보내기 위해 일정 시간 동안 대기합니다.
- 서버가 보낸 데이터를 모두 보낸 후, 서버는 FIN 패킷을 클라이언트에게 보냅니다. 이때, 서버는 더 이상 데이터를 받지 않을 것임을 클라이언트에게 알립니다.
- 클라이언트는 FIN/ACK 패킷을 받고, ACK 패킷을 보내 연결을 종료합니다. 이때, 클라이언트는 아직 처리되지 않은 서버로부터의 데이터를 모두 받을 때까지 일정 시간 동안 대기합니다.
이렇게 4-way handshake 과정을 거치면 클라이언트와 서버는 안전하게 연결을 종료할 수 있습니다.