TIL

OSI 7계층 응용 계층 (Application Layer)에 대하여 (자세하게)

추운날_너를_기다리며 2024. 9. 25. 17:09

응용 계층(Application Layer)이란?

  • 응용 계층은 OSI 7계층 모델의 가장 상위 계층으로, 사용자가 네트워크 상에서 직접적으로 사용하는 애플리케이션들과 통신하는 부분을 담당합니다. 
  • 응용 계층의 주요 목적은 사용자가 네트워크를 통해 접근하는 서비스를 제공하는 것이고, 이는 이메일, 웹 브라우징, 파일 전송, 원격 로그인 등의 다양한 네트워크 서비스를 포함하며, 네트워크 상의 애플리케이션 프로세스 간의 통신을 규정합니다.
  • 응용 계층에서 사용되는 다양한 프로토콜들은 실제 데이터를 처리하는 애플리케이션 프로그램들과 하위 계층 간의 인터페이스 역할을 하며, 응용 프로그램이 네트워크 상에서 데이터를 주고받는 데 필요한 규칙들을 정의합니다.
  • 사실 OSI 7계층 모델은 이미 시장에서 도태된 네트워크 시스템이라고 합니다.
  • 현대에는 OSI 7계층 모델의 일부를 계승한 TCP/IP 모델을 대부분 사용합니다.
  • 또한, TCP/IP 모델에서도 한번 업데이트가 이루어져 사실상 Updated TCP/IP Model이라 불리는 모델을 사용합니다.

프로토콜이 갖고 있는 역할중에서 가장 중요한 것은 캡슐화와 역캡슐화입니다.

응용 계층의 주요 프로토콜과 기능

응용 계층에서는 여러 가지 프로토콜이 동작하는데 각 프로토콜은 특정한 네트워크 서비스를 지원합니다.

아래는 몇 가지 중요한 응용 계층 프로토콜들입니다.

  1. HTTP (Hypertext Transfer Protocol)
  2. DNS (Domain Name System)
  3. SMTP (Simple Mail Transfer Protocol)
  4. FTP (File Transfer Protocol)
  5. Telnet
  6. POP3 (Post Office Protocol 3)
  7. 등등 너무 많습니다.

  • 7계층 응용계층 서비스들은 고유의 포트번호를 가지고 있지만 관리자들이 변경 할 수 있습니다.
  • 또한 OSI 7계층을 보면 3계층에서는 경로설정, 탐색을 하는거 같고 4계층은 양 끝단 [End to end]의 연결제어를 하고 (3계층과 4계층의 예를 들어보자면 A-B-C가 있고 A가 사용자 C가 서버(네이버,구글 등등)이라면  A-B나 B-C통신을 제어하는 것은 3계층에서 A-B-C 전체의 통신을 제어하는것이 4계층입니다.) 5계층의 세션 계층은 예를들어 PC와 서버간의 연결관리(접속설정, 접속해제)를 하고 6계층은 표현기능(데이터의 표현) 컴퓨터가 데이터를 받았을때 이것을 사람이 알아볼 수 있게 문자로 변환하는 기능을 합니다. 그렇다면 7계층은? 바로 이 위의 모든것을 다 합니다.
  • 이 뜻은 1계층의 물리적신호 (전기적 신호 0,1)을 보내고 2계층은 LAN카드의 MAC주소를 이용하여 허브나, 스위치, 와이파이 공유기등에 데이터를 보내고 3계층 PC에 게이트웨이로 설정된 라우터로 데이터가 나가고 목적지까지 가기위한 경로를 라우팅테이블에서 확인 후 목적지에 가기위해 거쳐야 할 라우터에 전송합니다. 4계층은 PC에서 라우터와 라우터의 전송 즉 전체적인 전송을 제어하고 5계층은 PC와 서버간의 연결을 제어하고 6계층은 서버에서 받은 데이터 (0,1)의 데이터 표현과 암호화 및 코드 간의 번역을 담당합니다. 7계층은 하위 계층에서 받은 정보로 사용자가 알아볼 수 있게 인터페이스를 출력합니다.
  • 상위 계층은 하위계층의 기능을 포함하지만 반대로 생각하면 하위계층이 없으면 상위계층은 동작하지 않습니다.
  • 즉 인터넷이 안된다 할때 해결하려면 하위계층부터 차근차근 확인하면 문제를 해결 할 수 있다는 뜻 입니다.

이 중에서 HTTP와 DNS에 대해 더 깊이 살펴보겠습니다.

HTTP (Hypertext Transfer Protocol)

  • HTTP는 인터넷에서 웹페이지를 전송하는 데 사용되는 가장 기본적인 프로토콜입니다.
  • 웹 브라우저가 웹 서버와 통신할 수 있도록 하며, 주로 클라이언트(웹 브라우저)와 서버 간의 상호작용을 처리합니다.
  • HTTP/1.1 (keepalive)으로 HTTP/1.1 이전의 HTTP 통신에서는 매번 HTTP 요청을 보낼 때마다 일일이 TCP 연결을 맺고 끊고 했다.
  • 그러나 HTTP/1.1부터는 keepalive라는 기능이 추가되어, TCP 연결을 한 번 맺었다면, 필요한 데이터를 모두 교환한 이후에 연결이 끊어집니다.
  • HTTP/2 (빠른 것부터 응답)으로 HTTP/2 이전에는 각 요청에 대한 응답이 얼마나 걸리든 상관없이 요청이 들어온 순서대로 응답을 했습니다.
  • 그러나 HTTP/2 부터는 요청에 대한 응답이 빠른 것부터 응답하여 순서대로 응답하지 않아도 되어 속도의 향상을 이루었습니다.

HTTP의 특징:

  • 클라이언트-서버 모델: HTTP는 클라이언트와 서버 간의 요청(Request)와 응답(Response)으로 동작합니다. 클라이언트는 웹 브라우저가 될 수 있으며, 사용자가 웹사이트에 접근할 때 서버에 특정 자원(이미지, HTML 파일, 동영상 등)을 요청합니다. 서버는 이에 대한 응답으로 해당 자원을 클라이언트에 제공합니다.
  • 비연결성(Connectionless): HTTP는 기본적으로 비연결형 프로토콜로, 각 요청과 응답이 독립적으로 이루어집니다. 클라이언트가 서버에 요청을 보낸 후 클라이언트가 응답을 받으면 연결이 종료됩니다. 새로운 요청을 위해서는 다시 연결을 설정해야 합니다. 이는 성능을 높이는 데 유리하지면, 상태를 유지하지 않는다는 단점이 있습니다.
  • 상태 비저장성(Stateless): HTTP는 Stateless 프로토콜로, 각 요청은 서로 독립적입니다. 즉, 서버는 이전 요청과 다음 요청 간의 상태를 기억하지 않습니다. 이를 해결하기 위해 저희는 Cookie나 Session 같은 기술이 추가로 사용됩니다.

HTTP의 주요 메서드:

  • GET: 서버에서 데이터를 요청하는 메서드입니다. 예를 들어, 사용자가 웹 브라우저에서 URL을 입력하면 브라우저는 해당 URL에 대해 GET 요청을 보냅니다.
  • POST: 서버로 데이터를 전송하는 메서드입니다. 주로 Form 데이터와 같은 데이터를 서버에 보낼 때 사용합니다. 즉, 사용자가 웹 페이지에 있는 양식(Form)에 텍스트, 이베일 주소, 비밀번호, 파일 등을 입력하고 해당 데이터를 출력하면 이 데이터가 서버로 전송됩니다. 이 과정에서 사용되는 데이터가 Form 데이터 입니다.
  • PUT: 서버에 자원을 업로드하거나 수정할 때 사용됩니다.
  • DELETE: 서버에서 특정 자원을 삭제할 때 사용됩니다.

HTTP 동작 과정:

  1. 사용자가 브라우저에 URL을 입력하고, 브라우저는 해당 서버에 GET 요청을 보냅니다.
  2. 서버는 클라이언트의 요청(Request)을 받고, 해당 리소스를 찾아 응답(Response)을 클라이언트에 보냅니다.
  3. 클라이언트는 서버에서 받은 응답(Response)를 처리하고, 이를 사용자가 볼 수 있는 형태(HTML 페이지 등)로 렌더링합니다.

HTTP Request

  • 웹 브라우저는 웹 서버에 데이터를 요청하는 클라이언트 프로그램입니다. 요청은 서버가 인식할 수 있는 약속된 형식 (HTTP 형식)을 따라야 한다.
  • 요청 데이터는 HEADERBODY로 구성된다.

  • 필수 요소로 요청의 제일 처음에 와야 하는 3개의 필드가 있다.
    • 요청 메서드: GET, PUT, POST, OPTIONS 등의 요청 방식이 온다.
    • 요청 URL: 요청하는 자원의 위치를 명시한다.
    • HTTP 프로토콜 버전 : 웹 브라우저가 사용하는 프로토콜 버전이다.
  • 그 외의 키값
    • Host: 요청을 보내는 Host
    • Content-Type: 요청에 바디가 있는 경우 그 파일 포멧 (ex) Content-Type: application/json
    • Cookie: 웹 브라우저에 저장된 쿠키들
    • User-Agent: 클라이언트의 정보, 이를 통해 사용하는 브라우저 감지

HTTP Response

  • 프로토콜과 응답코드 : 웹 브라우저가 사용하는 프로토콜, 서버의 응답 상태 (1xx~5xx), 응답 메시지를 보여줍니다.
  • Set-Cookie: 웹 브라우저에게 쿠키 생성을 요청합니다. (ex) Set-Cookie: UserID=tester; Max-Age=3600; Version=1
  • Content-Type: 응답에 바디가 있는 경우 현재 리퀘스트 또는 리스폰스의 바디에 들어 있는 데이터가 어떤 타입인지를 나타냅니다. (ex) Content-Type: text/html; charset=utf-8

HTTP Status Code

HTTP와 HTTPS의 다른점

  • HTTPS URL은 "https://" 로 시작한다. 기본 포트번호는 443이다. HTTP URL은 "http://" 로 시작한다. 기본 포트번호는 80이다.
  • HTTP는 평문 데이터를 기반으로 하기 때문에, 유저정보와 같은 민감한 정보가 인터넷 상에 그대로 노출된다. 이 정보는 수집되거나 변조될 수 있다. HTTPS는 이러한 공격을 견딜 수 있도록 설계돼 있다.
  • HTTPS는 인증서를 이용해서, 접속 사이트를 신뢰할 수 있는지 평가할 수 있다.
  • 일반적으로 HTTPS는 HTTP에 비해서 (매우 많이)느리다. 많은 양의 데이터를 처리할 경우 성능의 차이를 체감할 수 있다. 많은 웹 사이트들이 민감한 정보를 다루는 페이지 (로그인 혹은 유저정보) 페이지를 HTTPS로 전송하고, 기타 페이지는 HTTP로 전송하는 방법을 사용한다.

DNS (Domain Name System)

  • DNS는 인터넷 상에서 사람이 쉽게 기억할 수 있는 도메인 이름을 IP 주소로 변환해 주는 프로토콜입니다.
  • 인터넷에서 컴퓨터 간의 통신은 IP 주소를 기반으로 이루어지지만, 사람들은 숫자로 이루어진 IP 주소를 기억하기 어렵기 때문에 이를 해결하기 위해 도메인 체계가 도입되었습니다.
  • DNS는 사용자가 www.example.com과 같은 도메인 이름을 입력하면 이를 해당 IP 주소 (예: 192.168.0.1)로 변환하여 웹 서버와의 연결을 도와줍니다.
  • 즉,  DNS 도메인 이름을 IP주소로 변환하여 주는 시스템을 말하므로 DNS는 인터넷에서 사용되는 주소록과 같은 존재입니다.

DNS 서버의 종류

  • 순환 DNS 서버 (DNS Recursive Server/ DNS resolver): 요청 받은 도메인에 매치되는 IP 주소를 찾기 위해 계층적으로 DNS 쿼리를 수행합니다. DNS 쿼리의 첫 단계에 해당합니다. DNS 캐시를 저장하는 곳 이기도 합니다.
  • 루트 DNS 서버 (Root Name Server): 순환 DNS 서버에서 처음으로 DNS 쿼리 요청을 보내는 서버입니다. 해당 도메인의 확장자(.com, .net, .org 등)에 따른 TLD 네임 서버의 주소를 DNS Resolver에 응답해 줍니다.
  • 최상위 도메인 DNS 서버 (TLD Name Server): 최상위 도메인(.com, .net, .org 등)에 대한 DNS 정보를 관리합니다. 루트 DNS 서버와 권한 네임 서버의 중간 단계입니다.
  • 권한 네임 서버 (Authoritative Name Server): 도메인의 IP 주소를 응답해주는 최종 단계 DNS 서버입니다. 여기서 얻은 IP 주소가 순환 DNS 서버를 거쳐 브라우저까지 전달됩니다.

DNS의 주요 기능:

  1. 이름 해석(Name Resolution): 도메인 이름을 IP 주소로 변환해줍니다.
  2. 도메인 이름 등록: 도메인 소유자는 DNS를 통해 자신이 소유한 도메인 이름을 등록하고 관리할 수 있습니다.
  3. 부하 분산(Load Balancing): DNS는 여러 서버 중에서 부하가 적은 서버로 요청을 분산시키는 역할도 할 수 있습니다.

DNS의 동작 과정:

  1. 사용자가 브라우저 주소창에 URL을 입력합니다.
  2. 브라우저가 입력된 도메인의 IP 주소를 알아내기 위해 운영체제를 거쳐 DNS Resolver에 요청을 보냅니다.
  3. DNS Resolver는 로컬 DNS 캐시에 이전에 방문한 도메인 정보가 있는지 확인합니다. 만약 캐시에 기록이 있다면, 추가적인 DNS 조회가 필요하지 않습니다. 이 단계에서 바로 IP 주소를 응답해 줄 수 있습니다.
  4. 캐시에 정보가 없는 경우, DNS Resolver는 루트 DNS 서버에서 최상위 도메인(TLD) DNS 서버의 IP 주소 정보를 알아냅니다.
  5. DNS Resolver는 최상위 도메인(TLD) DNS 서버에 연결하여 권한 네임 서버(Authoritative Name Server)의 IP 주소를 요청하여 받아냅니다.
  6. 최종적으로 DNS Resolver는 권한 네임 서버에서 도메인의 최종 IP 주소를 마침내 알아냅니다. 이렇게 받아 온 IP 주소는 로컬 DNS 캐시에 저장됩니다. 이후로는 같은 요청이 있다면 DNS Resolver에서 바로 응답이 가능합니다.
  7. 받아온 최종 IP 주소를 다시 거꾸로 운영체제를 거쳐 브라우저로 전달합니다. 결국 사용자는 웹 브라우저를 통해 마침내 해당 IP 서버에 연결할 수 있습니다.

DNS의 동작 과정(요약):

  1. 사용자가 브라우저에 www.example.com을 입력하면, 먼저 로컬(사용자 컴퓨터에 캐시된) DNS 서버에서 해당 도메인의 IP 주소를 찾습니다.
  2. 로컬 DNS 서버에 정보가 없다면, 루트 DNS 서버에 요청을 보내 해당 도메인의 IP 주소를 확인합니다.
  3. 루트 서버는 해당 도메인의 권한이 있는 TLD(Top-Level Domain) 서버로 요청을 전달합니다. 예를 들어, 루트 서버가 TLD 서버로 example.com을 보낼 경우 .com TLD 서버가 이 요청을 처리하게 됩니다.
  4. TLD 서버는 도메인의 네임서버를 알려주고, 네임서버는 최종적으로 IP 주소를 반환합니다.
  5. 브라우저는 네임서버에서 최종적으로 반환받은 IP 주소를 사용하여 웹 서버에 접속하고, 사용자는 웹사이트에 접근할 수 있게 됩니다.

DNS의 구조:

  • 루트 DNS 서버: DNS 체계의 최상위에 있으며, TLD 서버로 요청을 전달합니다.
  • TLD 서버: .com, .org, .net 등 최상위 도메인을 관리하는 서버입니다.
  • 권한 DNS 서버 (Authoritative DNS Server): 특정 도메인에 대한 최종 IP 주소 정보를 가지고 있는 서버입니다.

DNS vs IP 주소

  • DNS와 IP 주소는 웹 서버가 네트워크를 하는 과정에서 계속 같이 나오는 개념입니다. 둘은 네트워크에서 사용되는 주소 체계의 컴포넌트 역할을 합니다.
  • 두가지 개념의 쉬운 이해를 위하여 전화번호부에 빗대어 설명할 수 있습니다.
  • 여기서 DNS는 전화번호부를 생각할 수 있고, 도메인은 사람의 이름, IP 주소는 전화번호로 생각하면 됩니다.
  • 예를 들어, 우리가 홍길동이라는 사람에게 전화를 걸고 싶다고 가정합시다.
  • 그러면 전화번호부 이름 목록에서 홍길동을 찾아서 그에 해당되는 전화 번호로 전화를 걸면 됩니다.
  • 마찬가지로 사용자가 어떤 웹사이트에 연결을 요청할 때, 네트워크 시스템은 DNS에 있는 웹사이트 도메인을 먼저 찾습니다.
  • 그 다음에 그에 해당되는 IP 주소로 연결을 도와줍니다.

요약해서, DNS는 www.example.com과 과 같은 도메인 이름을 IP 주소로 변환하기 위한 목록 서버입니다. IP 주소는 네트워크에서 컴퓨터의 위치를 최종 식별하여 접근하는 데 사용 됩니다.

 

응용 계층의 다른 주요 프로토콜

  • FTP (File Transfer Protocol): 파일을 서버와 클라이언트 간에 전송하는 프로토콜입니다. 주로 대용량 파일 전송 시 사용됩니다.
  • SMTP (Simple Mail Transfer Protocol): 이메일을 전송하는 데 사용되는 프로토콜입니다. 클라이언트가 이메일을 작성해 보내면, SMTP 서버가 이를 수신자의 메일 서버로 전달합니다.
  • Telnet: 원격 컴퓨터에 접속하여 명령어를 입력하고 처리 결과를 받을 수 있는 프로토콜입니다. SSH가 보안성을 강화한 형태로 많이 대체되었습니다.

응용 계층의 역할 요약

응용 계층은 네트워크 상의 다양한 서비스와 애플리케이션이 사용자의 요청을 처리할 수 있도록 하는 인터페이스 역할을 합니다. 이 계층은 프로토콜들을 통해 웹 서비스, 파일 전송, 이메일 등 여러 애플리케이션들이 서로 통신할 수 있도록 규정하고 지원합니다. 즉, 응용 계층은 사용자와 네트워크 간의 상호작용을 직접 관리하며, 애플리케이션 간의 데이터 전송, 통신 규칙의 정의, 세션 관리, 에러 처리, 데이터 표현 및 변환 등을 통해 네트워크 상의 다양한 서비스가 원활히 작동하도록 보장합니다.

 

 

 

 

 

출처: