TCP 를 이용하여 외부 서버와 연결하는 과정은 다음과 같다.(3way handshake)
1. 소켓 생성: 클라이언트는 TCP 연결을 시작하기 위해 소켓을 생성한다.
이는 네트워크를 통해 데이터를 전송하고 수신하는 데 사용되는 엔드포인트이다.
2. 서버 주소 지정: 클라이언트는 연결할 서버의 IP 주소와 포트 번호를 지정한다.
이 정보는 서버에 연결하는 데 필요하다.
3. 연결 요청 (SYN): 클라이언트는 서버에 연결 요청을 보낸다.
이것은 "SYN" 패킷으로 알려져 있으며, TCP 연결을 초기화하는 데 사용된다.
클라이언트의 초기 시퀀스 번호(ISN)가 함께 전송된다.
4. 연결 수락 (SYN-ACK): 서버가 연결 요청을 받으면 "SYN-ACK" 패킷을 클라이언트에게 보내 연결을 수락하고,
클라이언트의 SYN 요청을 확인한다.
이 때 클라이언트의 시퀀스 번호 확인 응답과 서버의 시퀀스 번호가 함께 전송된다.
5. 연결 확인(client, ACK) : 클라이언트는 서버의 SYN-ACK 응답을 확인하는 "ACK" 패킷을 보낸다.
이 때, 클라이언트는 서버의 시퀀스 번호에 대한 확인 응답을 함께 전송한다.
이 단계에서 클라이언트는 서버와의 connection이 완료되었다고 판단한다.
6. 연결 확인(server) : 서버는 클라이언트가 보낸 ACK 패킷과 그 속의 서버가 전송했던 시퀀스 번호에 대한 응답을 확인하여
클라이언트와의 connection이 완료되었다고 판단한다.
TCP 를 이용하여 외부 서버와 연결을 끊는 과정은 다음과 같다.(4way handshake)
1. 종료 요청(FIN from client): 클라이언트는 서버로 'FIN' (종료) 플래그가 설정된 패킷을 보내 연결을 종료하고자 하는 의사를 표시한다.
이것은 클라이언트가 더 이상 전송할 데이터가 없음을 의미한다.
2. 종료 응답(ACK from server): 서버는 클라이언트로부터 받은 'FIN' 패킷을 확인하고, 'ACK' 플래그가 설정된 패킷을 클라이언트에게 보낸다.
이 단계에서 서버는 클라이언트에게 'FIN' 패킷을 받았다는 것을 알리고, 아직 서버 쪽에서 처리해야 할 데이터가 남아 있을 수 있으므로 연결을 즉시 종료하지 않는다.
3. 종료 요청(FIN from server): 서버가 모든 데이터 전송을 완료하고 연결을 종료할 준비가 되면, 서버는 클라이언트에게 'FIN' 플래그가 설정된 패킷을 보낸다.
이것은 서버 측에서 더 이상 전송할 데이터가 없다는 것을 나타낸다.
4. 종료 응답 (ACK from Client): 클라이언트는 서버의 'FIN' 패킷을 받고, 'ACK' 패킷으로 응답하여 서버의 'FIN' 패킷을 받았음을 확인한다.
이 'ACK' 패킷이 서버에 의해 수신되면 서버는 클라이언트와의 연결을 종료한다.