Network

[웹 브라우저의 동작] 4. 프로토콜 스택

ju_young 2021. 5. 16. 12:42
728x90

이전에 설명했듯이 웹 서버에 메시지를 송신하기위해서는 OS의 내부에 있는 "프로토콜 스택"에 의뢰한다고 했다. 이제 이 "프로토콜 스택"에서 데이터를 송ㆍ수신하는 동작을 알아보겠다.

데이터 송ㆍ수신의 4단계

우선 데이터 송ㆍ수신의 전체적인 순서와 단계를 알아보겠다.

클라이언트와 서버들끼리 데이터를 송ㆍ수신하기 위해서는 클라이언트, 서버 각각에는 소켓을 만들고 서로 파이프를 연결하게 된다. 파이프를 연결하게되서야 서로 데이터를 송ㆍ수신하고 연결을 끊는다. 이 단계는 다음과 같다.

  1. 소켓을 만든다. (소켓 생성)
  2. 서버측의 소켓에 파이프를 연결한다. (접속)
  3. 데이터 송ㆍ수신(송ㆍ수신)
  4. 파이프 분리 및 소켓 말소(연결 끊기)

먼저 서버 측에서 소켓을 만들고 소켓에 클라이언트가 파이프를 연결하기를 기다린다. 그러면 클라이언트측에서 파이프를 연결하고 데이터 송ㆍ수신 동작을 실행한다. 모든 데이터의 송ㆍ수신이 끝나면 파이브를 분리하고 연결을 끊어야하는데 이때는 어느 쪽에서 분리해도 상관없다.

이 단계에 따라 Socket 라이브러리 안의 프로그램 부품들을 순번대로 호출하여 송ㆍ수신 동작을 실행하게 된다. 여기서 한 가지 짚고 넘어가야할 점은 동작을 실행하는 것은 OS 내부의 프로토콜 스택이라는 것이다. 해당 데이터 송ㆍ수신 프로그램 부품은 애플리케이션에서 의뢰받은 내용을 그대로 프로토콜 스택에 전달하는 중개역을 수행한다.

소켓 생성

먼저 소켓을 만들기 위해서는 socket이라는 프로그램 부품을 호출한다. 지금은 간단하게 socket을 호출하면 소켓이 생긴다고 생각하자.

소켓이 만들어지면 "디스크립터"라는 것이 돌아오는데 이 "디스크립터"라는 녀석은 소켓을 식별하기 위해 사용하는 것이다. 예를 들어 한 대의 컴퓨터에 여러 개의 소켓이 존재할 경우 "디스크립터"라는 놈으로 식별할 수 있다는 것이다.

접속

접속할 때는 connect라는 프로그램 부품을 호출하는데, 이 때 디스크립터, 서버의 IP 주소, 포트 번호라는 세 가지 값을 지정한다.

디스크립터는 소켓을 만들 때 돌아온 디스크립터이고 connect가 이 디스크립터를 프로토콜 스택에 알려주게 된다. 그러면 프로토콜 스택이 디스크립터를 보고 어느 소켓을 서버 측의 소켓에 접속할지 판단하여 접속 동작을 실행한다.

IP 주소와 포트 번호는 각각 어느 컴퓨터의 어느 소켓인지를 알려주는 값들이다.

여기서 디스크립터와 포트 번호의 다른 점을 알 수가 있는데 디스크립터는 컴퓨터 한대의 내부에서 소켓을 식별하기 위해 사용하는 것이고 포트 번호는 접속 상대 측에서 소켓을 식별하기 위해 사용하는 것이다.

데이터 송ㆍ수신

데이터를 송신할 때는 write를 호출하는데 이 때는 디스크립터와 송신 데이터를 지정한다. 디스크립터로 소켓을 지정하면 기록된 연결 상대를 찾아 그곳을 향해 데이터를 송신하게 된다.

데이터를 수신할 때는 read를 호출하는데 수신한 응답메시지를 "수신 버퍼"라고 부르는 메모리 영역에 저장한다. 긜고 수신 버퍼에 메시지를 저장한 시점에서 메시지를 애플리케이션에 건네주게 된다.

연결 끊기

close를 호출하여 연결을 끊는다. 그러면 소켓 사이를 연결한 파이프가 분리되고 소켓도 없어진다.

728x90

'Network' 카테고리의 다른 글

예시로 이해하는 CSRF Attack  (1) 2024.01.10
HTTP 버전별 특징  (0) 2023.05.25
[웹 브라우저의 동작] 3. DNS  (0) 2021.05.15
[웹 브라우저의 동작] 2. IP  (0) 2021.05.14
[웹 브라우저의 동작] 1. HTTP  (0) 2021.05.12