서버에서 연결을 끊어 소켓을 말소
1%의 네트워크 원리 (10) - TCP/IP의 데이터를 전기 신호로 만들어 보냄 4
04 서버에서 연결을 끊어 소켓을 말소
1 데이터 보내기를 완료했을 때 연결을 끊음
데이터 송·수신 종료
- 애플리케이션이 송신해야 하는 데이터를 전부 송신 완료했다고 판단했을 때
- 송신을 완료한 측이 연결 끊기 단계에 진입
- 프로토콜 스택은 어느 쪽에서 먼저 연결 끊기 단계에 들어가도 좋게 만들어짐
서버측에서 연결 끊기 단계에 들어가는 경우
- 서버측의 애플리케이션이 먼저 Socket 라이브러리의
close()
를 호출 - 서버측의 프로토콜 스택이 TCP 헤더 만듦
- 여기에 연결 끊기를 나타내는 정보를 설정
- 컨트롤 비트의
FIN
비트에1
을 설정
- IP 담당 부분에 의뢰해 클라이언트에 송신하게 함
- 이와 동시에 서버측의 소켓에 연결 끊기 동작에 들어갔다는 정보를 기록
이어지는 클라이언트측의 동작
- 서버에서
FIN
에1
을 설정한 TCP헤더가 도착- 클라이언트 프로토콜 스택은 자신의 소켓에 서버측이 연결 끊기 동작에 들어갔다는 것을 기록
FIN
을1
로 설정한 패킷을 받은 사실을 알리기 위해ACK
번호를 서버측에 반송
- 애플리케이션이 데이터를 가지러 올 때까지 대기
- 애플리케이션이
read()
를 호출해 데이터를 가지러 옴 - 서버에서 보낸 데이터를 전부 수신 완료했다는 사실을 클라이언트측의 애플리케이션(브라우저)에게 알림
- 서버에서 보낸 데이터를 전부 수신 완료하면 클라이언트도 종료
- 웹의 동작은 서버가 응답을 반송하면 끝나도록 규칙으로 정해짐
- 클라이언트측의 애플리케이션도
close()
를 호출해 데이터 송·수신 동작을 끝냄 - 클라이언트측의 프로토콜 스택은 서버측과 마찬가지로
FIN
비트에1
을 설정한 TCP 헤더를 만듦- IP 담당 부분에 의뢰해 서버에 송신
- 서버에서
ACK
번호가 돌아오면 서버와의 대화가 끝남
2 소켓을 말소
서버와의 대화가 끝나면 소켓을 사용하여 서버와 대화할 수 없게 됨
- 이때 소켓은 필요 없지만 바로 소켓을 말소하지 않고 잠시 기다린 후 소켓을 말소
3 데이터 송·수신 동작을 정리
참고
성공과 실패를 결정하는 1%의 네트워크 원리