본문 바로가기
개발공부 개발새발/Network

Network) Protocol Stack

by 휴일이 2023. 7. 25.

 

 

Protocol Stack

  • 액세스 대상 웹 서버에 메시지를 송신하도록 의뢰하는 OS 내부 스택
    • 이 동작은 웹에 한정되지 않고 모든 네트워크 애플리케이션에 해당한다. *DNS 서버를 사용하여 IP 주소를 조사하는 동작도 모든 애플리케이션 공통
  • 프로토콜 스택에 메시지 송신 동작을 의뢰할 땐, Socket 라이브러리 프로그램 부품을 결정한 순번대로 호출한다.
  • 데이터 송,수신 동작을 하기 전에는 양자 사이를 파이프로 연결하는 동작이 필요하다.

→파이프 양 끝에 있는 데이터의 출입구를 “소켓” 이라고 부른다.

프로토콜 스택이 소켓 연결

  1. 서버측에서 소켓을 만든다. (소켓 작성)
  2. 클라이언트 측에서도 소켓을 만들고 서버측에 소켓 연결. (접속)
  3. 데이터 송,수신
  4. 파이프 분리하고 소켓 말소(연결 끊기)
    1. 소켓을 분리할 땐 어느 쪽에서 분리해도 상관 없으나, HTTP 라면 서버 측에서 클라이언트 측에 웹 페이지 데이터 보내기를 완료하면 서버에서 먼저 분리한다.

소켓 작성

  • Socket 라이브러리에 socket 이라는 프로그램 부품 호출
  • 소켓이 생기면 “디스크립터” 를 메모리에 기록.
    • *소켓을 식별하기 위해 사용하는 번호표

 

✅ 애플리케이션은 “디스크립터” 로 소켓을 식별한다.

 

 

 

디스크립터 컴퓨터 한 대의 내부에서 소켓을 식별하기 위해 사용
포트 번호 접속 상대 측에서 소켓을 식별하기 위해 사용

접속

  • 소켓을 서버측 소켓에 접속하도록 프로토콜 스택에 의뢰
  • Socket 라이브러리에 connect 호출
    • 디스크립터, IP주소, 포트 번호 지정

 

디스크립터 소켓을 만들 때 돌아온 디스크립터 애플리케이션이 소켓을 식별
IP 주소 액세스 대상 서버의 IP 주소 클라이언트-서버가 상대 소켓 식별
포트 번호 어느 소켓과 접속할지 식별 클라이언트-서버가 상대 소켓 식별
  • 서버 측의 포트 번호는 애플리케이션 종류에 따라 미리 결정된 값을 사용하도록 규칙이 있음
    • 웹은 80, 메일은 25 …
  • 클라이언트 소켓의 포트 번호는 소켓을 만들 때 프로토콜 스택이 적당한 값을 골라 할당
  • 이 값을 프로토콜 스택이 접속 동작을 실행할 때 서버 측에 통지

결론

  1. connect 를 호출하면 프로토콜 스택이 접속 동작 실행
  2. 상대와 연결되면 연결된 상대의 IP 주소, 포트 번호 등의 정보를 소켓에 기록
  3. 데이터 송 수신이 가능한 상태가 됨

송,수신 단계

  • 소켓에서 데이터를 쏟아 부으면 상대측 소켓에 데이터가 도착한다.
  • 애플리케이션은 소켓을 직접 다룰 수 있으니 프로토콜 스택에 의뢰.
    • Socket 라이브러리의 write를 이용.

송신

  1. 애플리케이션이 송신 데이터를 메모리에 준비
  2. write 를 호출할 때 디스크립터와 송신 데이터를 지정
  3. 프로토콜 스택이 송신 데이터를 서버에 송신
  4. 서버가 응답 메시지를 반송

수신

  • Socket 라이브러리의 read 이용, 프로토콜 스택에 수신 동작 의뢰
  • 수신 응답 메시지를 저장하기 위한 메모리 영역을 지정
    • 수신 버퍼

연결 끊기

  • Socket 라이브러리의 close 호출하여 연결 끊기

웹에서 사용하는 HTTP 프로토콜은, 응답 메시지의 송신을 완료하면 웹 서버 측에서 연결 끊기 동작을 실행

  1. 웹 서버에서 close 호출하여 연결 끊기
  2. 클라이언트 측에 전달, 클라이언트도 연결 끊기
  3. 브라우저가 read 로 수신 동작을 의뢰했는데 연결이 끊겼다는 사실을 통지받으면 종료
✅ HTTP 프로토콜은 HTML 문서나 영상 데이터를 하나하나 별도의 것으로 취급하여 1개의 데이터를 읽을 때마다 접속, 리퀘스트 메시지 송신, 응답 메시지 수신, 연결 끊기 라는 동작을 반복한다.
728x90

'개발공부 개발새발 > Network' 카테고리의 다른 글

Network) 연결 끊기와 데이터 송수신 요약  (0) 2023.07.27
Network) 데이터 송수신  (0) 2023.07.27
Network) 서버에 접속하자!  (0) 2023.07.26
DNS ) DNS 서버  (0) 2023.07.25
HTTP) HTTP Request Message 작성  (0) 2023.07.25