Home 1%의 네트워크 원리 (10) - TCP/IP의 데이터를 전기 신호로 만들어 보냄 4
Post
Cancel

1%의 네트워크 원리 (10) - TCP/IP의 데이터를 전기 신호로 만들어 보냄 4

서버에서 연결을 끊어 소켓을 말소

1%의 네트워크 원리 (10) - TCP/IP의 데이터를 전기 신호로 만들어 보냄 4

04 서버에서 연결을 끊어 소켓을 말소

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

데이터 송·수신 종료

  • 애플리케이션이 송신해야 하는 데이터를 전부 송신 완료했다고 판단했을 때
  • 송신을 완료한 측이 연결 끊기 단계에 진입
  • 프로토콜 스택은 어느 쪽에서 먼저 연결 끊기 단계에 들어가도 좋게 만들어짐

서버측에서 연결 끊기 단계에 들어가는 경우

  1. 서버측의 애플리케이션이 먼저 Socket 라이브러리의 close()를 호출
  2. 서버측의 프로토콜 스택이 TCP 헤더 만듦
    • 여기에 연결 끊기를 나타내는 정보를 설정
    • 컨트롤 비트의 FIN 비트에 1을 설정
  3. IP 담당 부분에 의뢰해 클라이언트에 송신하게 함
    • 이와 동시에 서버측의 소켓에 연결 끊기 동작에 들어갔다는 정보를 기록

이어지는 클라이언트측의 동작

  1. 서버에서 FIN1을 설정한 TCP헤더가 도착
    • 클라이언트 프로토콜 스택은 자신의 소켓에 서버측이 연결 끊기 동작에 들어갔다는 것을 기록
    • FIN1로 설정한 패킷을 받은 사실을 알리기 위해 ACK 번호를 서버측에 반송
  2. 애플리케이션이 데이터를 가지러 올 때까지 대기
  3. 애플리케이션이 read()를 호출해 데이터를 가지러 옴
  4. 서버에서 보낸 데이터를 전부 수신 완료했다는 사실을 클라이언트측의 애플리케이션(브라우저)에게 알림
  5. 서버에서 보낸 데이터를 전부 수신 완료하면 클라이언트도 종료
    • 웹의 동작은 서버가 응답을 반송하면 끝나도록 규칙으로 정해짐
  6. 클라이언트측의 애플리케이션도 close()를 호출해 데이터 송·수신 동작을 끝냄
  7. 클라이언트측의 프로토콜 스택은 서버측과 마찬가지로 FIN 비트에 1을 설정한 TCP 헤더를 만듦
    • IP 담당 부분에 의뢰해 서버에 송신
  8. 서버에서 ACK 번호가 돌아오면 서버와의 대화가 끝남

2 소켓을 말소

서버와의 대화가 끝나면 소켓을 사용하여 서버와 대화할 수 없게 됨

  • 이때 소켓은 필요 없지만 바로 소켓을 말소하지 않고 잠시 기다린 후 소켓을 말소

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

참고

성공과 실패를 결정하는 1%의 네트워크 원리

This post is licensed under CC BY 4.0 by the author.

1%의 네트워크 원리 (09) - TCP/IP의 데이터를 전기 신호로 만들어 보냄 3

1%의 네트워크 원리 (11) - TCP/IP의 데이터를 전기 신호로 만들어 보냄 5