'성공과 실패를 결정하는 1%의 네트워크 원리' 책을 바탕으로 정리한 내용입니다.
04. 프로토콜 스택에 메시지 송신을 의뢰한다.
데이터 송·수신 동작 개요
IP 주소를 찾은 후 웹 서버에 메세지를 송신하도록 OS의 프로토콜 스택에 의로를 한다.
HTTP 메세지는 디지털 데이터이므로 디지털 데이터를 송신하도록 의뢰 한다.
- 소켓 라이브러리를 이용한 송·수신 동작(OS 내부의 프로토콜 스텍으로 진행)
- 소켓을 만든다.
- 서버 측의 소켓에 파이프를 연결한다.
- 데이터를 송·수신 한다.
- 파이프를 분리하여 소켓을 말소시킨다.
소켓의 작성 단계
- 소켓 라이브러리의 소켓이라는 프로그램 부품만 호출
- 소켓 내부로 제어가 넘어가 소켓을 만드는 동작을 실행
- 이것이 끝나면 어플리케이션에 제어가 돌아온다
- 소켓이 생기면 디스크립터가 돌아오고 클라이언트는 이것을 받아서 메모리에 기록
디스크립터
소켓을 식별하기 위해 사용된다.
다양한 송수신 동작에서 어느 소켓을 열어야할 지 구분시켜주는 구분자 역할
파이프를 연결하는 접속 단계
클라이언트 소켓을 서버츨 소켓에 연결하도록 프로토콜 스택에 의뢰.
소켓 라이브러리 connect 프로그램 부품을 호출해 동작을 실행
- connect 호출 시 지정 값
- 디스크립터 : 어플리케이션이 소켓을 식별하는 것
- IP주소, 포트번호 : 클라이언트와 서비스의 상대 소켓을 식별하는것
메세지를 주고받는 송·수신 단계
소켓에 데이터를 넣으면 상대 소켓에 데이터가 도착한다.
어플리케이션은 소켓을 직접 다룰 수 있어서 소켓 라이브러리를 통해 프로토콜 스택에 의뢰한다.
- write 프로토콜 부품
- 디스크립터와 송신 데이터를 지정
- 프로토콜 스택이 송신 데이터를 서버에서 송신
- 소켓은 연결되어 있기 때문에 지정 된 곳으로 데이터 송신
- 엑세스 대상의 서버에 도착한 데이터 내용을 조사해 적절한 응답 메세지 전송
연결끊기 단계에서 송·수신이 종료된다
- 응답메세지가 완료되면 서버측에서 close를 호출해 연결을 끊는다
- 클라이언트 측에 전달되어 소켓 연결을 끊는다
- 브라우저가 read로 수신 동작을 의뢰할 때 데이터를 전달하는 대신 연결이 끊긴 것을 브라우저에게 통지해준다