나만의 작은 도서관

[Network] OSI 7계층 #5. 응용 계층, DNS, HTTP 본문

Common/CS-네트워크

[Network] OSI 7계층 #5. 응용 계층, DNS, HTTP

pledge24 2024. 6. 19. 22:02

응용 계층

출처: https://www.whatismyip.com/application-layer/

 응용 계층(Application Layer)은 컴퓨터 네트워크에서 데이터를 최종 사용자에게 제공하고 애플리케이션 간의 통신을 담당하는 계층입니다. OSI 7계층 모델의 최상위 계층이며, TCP/IP 모델에서도 맨 위에 위치해 있습니다. 이 계층은 사용자와 소프트웨어 애플리케이션이 네트워크를 통해 데이터를 교환하는 데 필요한 인터페이스와 프로토콜을 제공합니다.

주요 기능 및 역할

출처: https://www.javatpoint.com/osi-model
  1. 데이터 표현 및 변환:
    • 데이터가 사용자와 통신하기 위해 필요로 하는 형식으로 변환됩니다. 예를 들어, 이메일 전송 시 텍스트, 이미지 등의 다양한 형식의 데이터가 전송될 수 있습니다.
    • 데이터 암호화, 압축 및 포맷 변환이 이 계층에서 이루어집니다.
  2. 네트워크 서비스 제공:
    • 응용 계층은 이메일, 파일 전송, 웹 브라우징, 원격 데스크탑 접근 등의 서비스를 제공합니다.
    • 사용자는 직접 이 계층에서 제공하는 서비스를 통해 네트워크와 상호작용합니다.
  3. 애플리케이션 간 통신:
    • 이 계층은 애플리케이션이 데이터를 전송하고 받는 방법을 정의합니다.
    • 웹 서버와 클라이언트, 이메일 서버와 클라이언트 등의 통신이 이 계층에서 관리됩니다.
  4. 프로토콜 관리:
    • HTTP, FTP, SMTP, DNS, Telnet 등의 다양한 프로토콜이 이 계층에 속합니다.
    • 각 프로토콜은 특정 유형의 데이터 전송 및 네트워크 서비스를 처리하도록 설계되어 있습니다.

주요 프로토콜

출처: https://www.sitesbay.com/computer-network/cn-application-layer-of-osi-model
  1. HTTP (HyperText Transfer Protocol):
    • 웹 브라우저와 웹 서버 간의 통신을 담당하며, 웹 페이지를 요청하고 응답을 전달하는 역할을 합니다.
  2. FTP (File Transfer Protocol):
    • 네트워크를 통해 파일을 전송하는 데 사용되는 프로토콜입니다. 파일 업로드와 다운로드를 지원합니다.
  3. SMTP (Simple Mail Transfer Protocol):
    • 이메일 전송을 관리하는 프로토콜로, 이메일 클라이언트와 서버 간의 메일 전송을 처리합니다.
  4. DNS (Domain Name System):
    • 도메인 이름을 IP 주소로 변환하는 데 사용되는 시스템으로, 인터넷의 전화번호부 역할을 합니다.
  5. Telnet:
    • 원격으로 컴퓨터에 접속하고 명령을 실행할 수 있도록 하는 프로토콜입니다.

예시 및 적용

  • 웹 브라우징: 사용자가 브라우저를 통해 웹 페이지를 요청하면, HTTP 프로토콜을 사용하여 서버에서 해당 페이지를 가져와 사용자에게 표시합니다.
  • 이메일: 이메일을 작성하고 전송할 때 SMTP를 사용하여 메시지를 보내고, POP3 또는 IMAP을 사용하여 서버에서 메시지를 가져옵니다.
  • 파일 전송: FTP를 사용하여 원격 서버에 파일을 업로드하거나 다운로드할 수 있습니다.

DNS

 

DNS(Domain Name System)는 인터넷에서 사용자가 입력한 도메인 이름(예: www.example.com)을 IP 주소(예: 192.0.2.1)로 변환하여, 해당 주소에 접근할 수 있게 해주는 시스템입니다. DNS는 인터넷의 전화번호부와 유사하게 작동하여, 사람이 읽기 쉬운 도메인 이름을 컴퓨터가 이해할 수 있는 IP 주소로 변환합니다. 이 과정은 인터넷을 탐색하는 데 필수적이며, 웹사이트 방문, 이메일 전송, 기타 네트워크 작업에서 중요한 역할을 합니다.

DNS의 주요 기능

  1. 이름 해결(Name Resolution):
    • DNS는 도메인 이름을 IP 주소로 변환합니다. 예를 들어, 사용자가 웹 브라우저에 www.example.com을 입력하면, DNS는 이 도메인 이름을 해당 웹사이트의 서버 IP 주소로 변환합니다.
  2. 도메인 이름 구조 관리:
    • DNS는 계층 구조를 사용하여 도메인 이름을 조직적으로 관리합니다. 예를 들어, example.com은 최상위 도메인인 .com 하위에 위치하며, www.example.com은 example.com의 하위 도메인입니다.
  3. DNS 서버 역할:
    • DNS 서버는 도메인 이름과 IP 주소의 매핑 정보를 저장하고 제공하는 역할을 합니다. 이러한 서버는 여러 계층으로 구성되어 있으며, 루트 서버, 최상위 도메인(TLD) 서버, 권한 있는 DNS 서버 등이 포함됩니다.
  4. 부하 분산(Load Balancing):
    • DNS는 여러 IP 주소에 동일한 도메인 이름을 매핑하여, 트래픽을 여러 서버로 분산시켜 서버 과부하를 방지할 수 있습니다.

DNS의 작동 원리

출처: https://www.geeksforgeeks.org/domain-name-system-dns-in-application-layer/

 

DNS가 도메인 이름을 IP 주소로 변환하는 과정은 다음과 같은 단계로 이루어집니다(해당 단계는 위의 GIF예시의 순서 번호와 상관 없습니다.)

  1. 사용자가 도메인 이름 입력:
    • 사용자가 웹 브라우저에 www.example.com과 같은 도메인 이름을 입력합니다.
  2. DNS 재귀 쿼리:
    • 사용자 장치의 운영 체제는 이 도메인 이름을 IP 주소로 변환하기 위해 DNS 재귀 쿼리를 로컬 DNS 서버(또는 ISP 제공 DNS 서버)에 전송합니다.
    • 로컬 DNS 서버가 이 정보를 캐시하고 있을 수 있지만, 없다면 루트 DNS 서버에 쿼리를 전달합니다.
  3. 루트 DNS 서버 쿼리:
    • 루트 DNS 서버는 해당 도메인의 최상위 도메인(TLD) 서버(.com, .net 등)의 IP 주소를 로컬 DNS 서버에 반환합니다.
  4. TLD DNS 서버 쿼리:
    • 로컬 DNS 서버는 TLD DNS 서버에 쿼리를 보내고, TLD 서버는 해당 도메인의 권한 있는 DNS 서버의 IP 주소를 반환합니다.
  5. 권한 있는 DNS 서버 쿼리:
    • 로컬 DNS 서버는 권한 있는 DNS 서버에 쿼리를 보내고, 이 서버는 www.example.com에 대한 IP 주소를 반환합니다.
  6. IP 주소 반환:
    • 로컬 DNS 서버는 이 IP 주소를 사용자 장치에 반환합니다. 그러면 사용자 장치는 해당 IP 주소로 웹사이트에 접근하게 됩니다.

DNS 서버 종류

출처: https://www.geeksforgeeks.org/whats-is-domain-name-systemdns/
  1. 루트 DNS 서버:
    • 인터넷의 최상위 DNS 서버로, TLD 서버의 위치 정보를 제공하는 역할을 합니다.
    • 전 세계적으로 13개의 루트 서버가 존재하며, 각 서버는 여러 위치에 분산되어 있습니다.
  2. TLD DNS 서버:
    • 특정 최상위 도메인(.com, .org 등)에 대한 정보를 제공하며, 해당 TLD의 권한 있는 DNS 서버의 위치를 제공합니다.
  3. 권한 있는 DNS 서버(Authoritative DNS Server):
    • 도메인 이름과 IP 주소의 최종 매핑 정보를 제공하는 서버로, 특정 도메인에 대해 권한을 가지고 있습니다.
  4. 재귀 DNS 서버(Recursive DNS Server):
    • 사용자 장치에서의 DNS 쿼리를 받아들이고, 필요한 경우 여러 DNS 서버에 쿼리를 보내어 최종 IP 주소를 찾는 역할을 합니다. 이 서버는 ISP나 기업 네트워크에 의해 제공됩니다.

DNS 프로토콜

  1. DNS 쿼리(Query):
    • DNS 클라이언트가 특정 도메인 이름에 대한 IP 주소를 요청하는 메시지입니다.
  2. DNS 응답(Response):
    • DNS 서버가 해당 도메인 이름에 대한 IP 주소를 반환하는 메시지입니다.
  3. DNS 캐싱:
    • DNS 서버는 자주 요청되는 도메인 이름의 매핑 정보를 일정 시간 동안 캐시에 저장하여, 성능을 향상시키고 트래픽을 줄입니다.

DNS 보안

  1. DNS 캐시 포이즈닝(DNS Cache Poisoning):
    • 공격자가 DNS 서버의 캐시에 악의적인 정보를 주입하여 사용자를 잘못된 IP 주소로 유도하는 공격입니다.
  2. DNSSEC(DNS Security Extensions):
    • DNS 응답의 무결성을 확인하고 위조된 응답을 방지하기 위해 사용되는 보안 확장입니다.

HTTP

출처: https://www.ionos.ca/digitalguide/hosting/technical-matters/what-is-http/

HTTP(HyperText Transfer Protocol)는 웹에서 데이터를 주고받기 위한 프로토콜입니다. 웹 브라우저와 웹 서버 간의 통신을 가능하게 하며, 웹 페이지, 이미지, 동영상 등 다양한 콘텐츠를 전송하는 데 사용됩니다. HTTP는 인터넷의 핵심 프로토콜 중 하나로, 웹의 기반이 되는 통신 규칙을 정의합니다.

HTTP의 주요 기능

  1. 클라이언트-서버 모델:
    • HTTP는 클라이언트(주로 웹 브라우저)와 서버 간의 요청-응답(request-response) 모델을 기반으로 합니다.
    • 클라이언트는 서버에 요청을 보내고, 서버는 클라이언트의 요청에 대한 응답을 반환합니다.
  2. 무상태(stateless):
    • HTTP는 무상태 프로토콜로, 각 요청 간에 상태 정보를 유지하지 않습니다. 즉, 서버는 각 요청을 독립적으로 처리합니다.
    • 이를 보완하기 위해 쿠키, 세션 등이 사용되어 지속적인 상태를 유지합니다.
  3. 확장성:
    • HTTP는 헤더와 다양한 메소드(GET, POST 등)를 통해 다양한 기능을 확장할 수 있습니다.
    • 이를 통해 데이터 전송, 인증, 캐시 제어 등 다양한 작업을 수행할 수 있습니다.

HTTP 요청(Request)와 응답(Response)

  1. HTTP 요청 메시지:
    • 요청 라인(Request Line): 요청 메소드(GET, POST 등), 요청 URL, HTTP 버전으로 구성됩니다.
    • 헤더(Header): 요청에 대한 메타데이터(예: 콘텐츠 타입, 인증 정보 등)를 포함합니다.
    • 본문(Body): 주로 POST 요청에서 사용되며, 클라이언트가 서버에 전송하는 데이터입니다.
    예시
    GET /index.html HTTP/1.1
    Host: www.example.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
    Accept: text/html

  2. HTTP 응답 메시지:
    • 상태 라인(Status Line): HTTP 버전, 상태 코드(예: 200, 404 등), 상태 메시지로 구성됩니다.
    • 헤더(Header): 응답에 대한 메타데이터(예: 콘텐츠 타입, 길이 등)를 포함합니다.
    • 본문(Body): 서버가 클라이언트에게 보내는 실제 데이터(예: HTML 문서, 이미지 등)입니다.
    예시
    HTTP/1.1 200 OK
    Content-Type: text/html; charset=UTF-8
    Content-Length: 138

HTTP 메소드

  1. GET:
    • 서버에서 리소스를 가져오는 데 사용됩니다. 주로 웹 페이지나 데이터를 요청할 때 사용됩니다.
    • 데이터는 URL에 쿼리 문자열로 포함될 수 있으며, 본문을 가지지 않습니다.
    예시: GET /index.html HTTP/1.1
  2. POST:
    • 서버에 데이터를 제출하는 데 사용됩니다. 주로 양식 제출, 데이터 업로드 등에 사용됩니다.
    • 데이터는 본문에 포함됩니다.
    예시: POST /submit-form HTTP/1.1
  3. PUT:
    • 서버에 리소스를 업로드하거나 기존 리소스를 업데이트하는 데 사용됩니다.
    예시: PUT /upload/image.jpg HTTP/1.1
  4. DELETE:
    • 서버에서 리소스를 삭제하는 데 사용됩니다.
    예시: DELETE /delete/file.txt HTTP/1.1
  5. HEAD:
    • GET 요청과 유사하지만, 응답 본문을 제외한 헤더 정보만 반환받습니다.
    • 주로 리소스의 메타데이터를 가져오는 데 사용됩니다.
    예시: HEAD /index.html HTTP/1.1
  6. OPTIONS:
    • 서버에서 사용할 수 있는 메소드와 통신 옵션을 확인하는 데 사용됩니다.
    예시: OPTIONS / HTTP/1.1
  7. PATCH:
    • 리소스의 일부를 업데이트하는 데 사용됩니다.
    예시: PATCH /update/user/1 HTTP/1.1

HTTP 상태 코드

HTTP 상태 코드는 서버가 클라이언트 요청을 어떻게 처리했는지를 나타내는 3자리 숫자입니다. 주요 상태 코드는 다음과 같습니다:

  1. 2xx: 성공(Successful):
    • 200 OK: 요청이 성공적으로 처리되었습니다.
    • 201 Created: 요청이 성공적으로 처리되었으며, 새로운 리소스가 생성되었습니다.
  2. 3xx: 리다이렉션(Redirection):
    • 301 Moved Permanently: 요청한 리소스가 영구적으로 새로운 URL로 이동했습니다.
    • 302 Found: 요청한 리소스가 일시적으로 다른 URL로 이동했습니다.
  3. 4xx: 클라이언트 오류(Client Error):
    • 400 Bad Request: 클라이언트의 요청이 잘못되었습니다.
    • 401 Unauthorized: 인증이 필요하며, 클라이언트가 인증되지 않았습니다.
    • 403 Forbidden: 클라이언트가 요청한 리소스에 접근할 권한이 없습니다.
    • 404 Not Found: 요청한 리소스를 찾을 수 없습니다.
  4. 5xx: 서버 오류(Server Error):
    • 500 Internal Server Error: 서버에서 요청을 처리하는 중에 오류가 발생했습니다.
    • 502 Bad Gateway: 서버가 게이트웨이 또는 프록시 역할을 하는 중에 잘못된 응답을 받았습니다.
    • 503 Service Unavailable: 서버가 현재 요청을 처리할 수 없는 상태입니다.

HTTP 버전

  1. HTTP/1.0:
    • 각 요청에 대해 새로운 연결을 설정하는 단순한 모델을 사용합니다.
    • 상태 코드와 메시지의 기본적인 구조를 정의합니다.
  2. HTTP/1.1:
    • 지속적 연결(persistent connection)과 파이프라이닝(pipelining)을 도입하여 성능을 향상시킵니다.
    • 캐싱 메커니즘과 호스트 헤더를 통해 가상 호스팅을 지원합니다.
  3. HTTP/2:
    • 데이터 압축, 서버 푸시(Server Push), 멀티플렉싱(Multiplexing)을 통해 성능을 개선합니다.
    • 이진 프로토콜을 사용하여 효율성을 높입니다.
  4. HTTP/3:
    • QUIC 프로토콜을 기반으로 하며, 더 빠르고 안전한 데이터 전송을 제공합니다.
    • 연결 설정 및 데이터 전송의 지연을 줄여 성능을 크게 향상시킵니다.

HTTP 보안

  1. HTTPS (HyperText Transfer Protocol Secure):
    • HTTP의 보안 버전으로, TLS(전송 계층 보안)를 사용하여 데이터의 암호화, 무결성, 인증을 제공합니다.
    • HTTPS를 사용하면 클라이언트와 서버 간의 데이터 전송이 암호화되어, 중간에서 데이터가 도청되거나 변경되는 것을 방지할 수 있습니다.
  2. TLS/SSL:
    • 전송 계층 보안(TLS)과 보안 소켓 계층(SSL)은 인터넷에서 데이터 통신의 보안을 위해 사용되는 프로토콜입니다.
    • HTTPS는 이러한 보안 프로토콜을 통해 HTTP 통신을 암호화합니다.