-
728x90
1. 데이터 보내기를 완료했을 때 연결을 끊는다
연결을 끊는 것에는 순서가 없다. 클라이언트도 서버도 먼저 연결을 끊는 것이 가능하다. 보통 서버에서 먼저 연결을 끊는다.
- 서버에서 Socket 라이브러리의 close를 호출한다.
- 컨트롤 비트의 FIN 비트 값을 1로 설정한 TCP 헤더를 만들어 클라이언트에 송신한다. 이 때, 서버측의 소켓에 연결 끊기 동작에 들어갔다는 정보를 기록한다.
- 클라이언트 측에서 FIN 비트 값이 1인 패킷을 받으면 프로토콜 스택은 소켓에 서버측이 연결 끊기 동작에 들어갔다는 정보를 기록한다.
- 패킷을 받았다는 것을 알리기 위해 ACK 번호를 서버측에 반송한다.
- 애플리케이션이 서버로부터 데이터를 다 받아올 때까지 기다린다.
- 데이터를 다 수신하면 다 수신했다는 사실만 먼저 애플리케이션에게 알린다.
- 애플리케이션이 Socket 라이브러리의 close를 호출해서 연결을 끊는다.
- 연결이 종료된다.
2. 소켓을 말소한다
연결 끊기가 시도된 이후라고 해서 소켓을 바로 말소하지는 않는다. 이미 말소된 소켓에 요청이 들어올 수도 있고 말소된 자리에 대신 생겨난 소켓으로 엉뚱한 요청이 갈 수도 있기 때문이다.
보통 패킷을 다시 보내는 동작이 몇 분간 지속되기 때문에 몇 분 정도의 시간이 지나면 소켓을 말소한다.
3. 데이터 송 · 수신 동작을 정리한다
요거 하나면 끝 728x90'네트워크' 카테고리의 다른 글
07. 데이터를 송 · 수신한다 (0) 2021.10.03 06. 서버에 접속한다 (0) 2021.10.03 05. 소켓을 작성한다 (0) 2021.09.28 04. 프로토콜 스택에 메시지 송신을 의뢰한다 (0) 2021.09.27 03. 전 세계의 DNS 서버가 연대한다 (0) 2021.09.25 댓글