• 08. 서버에서 연결을 끊어 소켓을 말소한다

    2021. 10. 7.

    by. ahntree

    728x90

     

    1. 데이터 보내기를 완료했을 때 연결을 끊는다

    연결을 끊는 것에는 순서가 없다. 클라이언트도 서버도 먼저 연결을 끊는 것이 가능하다. 보통 서버에서 먼저 연결을 끊는다.

     

    1. 서버에서 Socket 라이브러리의 close를 호출한다.
    2. 컨트롤 비트의 FIN 비트 값을 1로 설정한 TCP 헤더를 만들어 클라이언트에 송신한다. 이 때, 서버측의 소켓에 연결 끊기 동작에 들어갔다는 정보를 기록한다.
    3. 클라이언트 측에서 FIN 비트 값이 1인 패킷을 받으면 프로토콜 스택은 소켓에 서버측이 연결 끊기 동작에 들어갔다는 정보를 기록한다.
    4. 패킷을 받았다는 것을 알리기 위해 ACK 번호를 서버측에 반송한다.
    5. 애플리케이션이 서버로부터 데이터를 다 받아올 때까지 기다린다.
    6. 데이터를 다 수신하면 다 수신했다는 사실만 먼저 애플리케이션에게 알린다.
    7. 애플리케이션이 Socket 라이브러리의 close를 호출해서 연결을 끊는다.
    8. 연결이 종료된다.

     

     

     

    2. 소켓을 말소한다

    연결 끊기가 시도된 이후라고 해서 소켓을 바로 말소하지는 않는다. 이미 말소된 소켓에 요청이 들어올 수도 있고 말소된 자리에 대신 생겨난 소켓으로 엉뚱한 요청이 갈 수도 있기 때문이다.

     

    보통 패킷을 다시 보내는 동작이 몇 분간 지속되기 때문에 몇 분 정도의 시간이 지나면 소켓을 말소한다.

     

     

     

    3. 데이터 송 · 수신 동작을 정리한다

     

    요거 하나면 끝

     

    728x90

    댓글