나만의 작은 도서관
[Network] OSI 7계층 #5. 응용 계층, DNS, HTTP 본문
응용 계층
응용 계층(Application Layer)은 컴퓨터 네트워크에서 데이터를 최종 사용자에게 제공하고 애플리케이션 간의 통신을 담당하는 계층입니다. OSI 7계층 모델의 최상위 계층이며, TCP/IP 모델에서도 맨 위에 위치해 있습니다. 이 계층은 사용자와 소프트웨어 애플리케이션이 네트워크를 통해 데이터를 교환하는 데 필요한 인터페이스와 프로토콜을 제공합니다.
주요 기능 및 역할
- 데이터 표현 및 변환:
- 데이터가 사용자와 통신하기 위해 필요로 하는 형식으로 변환됩니다. 예를 들어, 이메일 전송 시 텍스트, 이미지 등의 다양한 형식의 데이터가 전송될 수 있습니다.
- 데이터 암호화, 압축 및 포맷 변환이 이 계층에서 이루어집니다.
- 네트워크 서비스 제공:
- 응용 계층은 이메일, 파일 전송, 웹 브라우징, 원격 데스크탑 접근 등의 서비스를 제공합니다.
- 사용자는 직접 이 계층에서 제공하는 서비스를 통해 네트워크와 상호작용합니다.
- 애플리케이션 간 통신:
- 이 계층은 애플리케이션이 데이터를 전송하고 받는 방법을 정의합니다.
- 웹 서버와 클라이언트, 이메일 서버와 클라이언트 등의 통신이 이 계층에서 관리됩니다.
- 프로토콜 관리:
- HTTP, FTP, SMTP, DNS, Telnet 등의 다양한 프로토콜이 이 계층에 속합니다.
- 각 프로토콜은 특정 유형의 데이터 전송 및 네트워크 서비스를 처리하도록 설계되어 있습니다.
주요 프로토콜
- HTTP (HyperText Transfer Protocol):
- 웹 브라우저와 웹 서버 간의 통신을 담당하며, 웹 페이지를 요청하고 응답을 전달하는 역할을 합니다.
- FTP (File Transfer Protocol):
- 네트워크를 통해 파일을 전송하는 데 사용되는 프로토콜입니다. 파일 업로드와 다운로드를 지원합니다.
- SMTP (Simple Mail Transfer Protocol):
- 이메일 전송을 관리하는 프로토콜로, 이메일 클라이언트와 서버 간의 메일 전송을 처리합니다.
- DNS (Domain Name System):
- 도메인 이름을 IP 주소로 변환하는 데 사용되는 시스템으로, 인터넷의 전화번호부 역할을 합니다.
- Telnet:
- 원격으로 컴퓨터에 접속하고 명령을 실행할 수 있도록 하는 프로토콜입니다.
예시 및 적용
- 웹 브라우징: 사용자가 브라우저를 통해 웹 페이지를 요청하면, HTTP 프로토콜을 사용하여 서버에서 해당 페이지를 가져와 사용자에게 표시합니다.
- 이메일: 이메일을 작성하고 전송할 때 SMTP를 사용하여 메시지를 보내고, POP3 또는 IMAP을 사용하여 서버에서 메시지를 가져옵니다.
- 파일 전송: FTP를 사용하여 원격 서버에 파일을 업로드하거나 다운로드할 수 있습니다.
DNS
DNS(Domain Name System)는 인터넷에서 사용자가 입력한 도메인 이름(예: www.example.com)을 IP 주소(예: 192.0.2.1)로 변환하여, 해당 주소에 접근할 수 있게 해주는 시스템입니다. DNS는 인터넷의 전화번호부와 유사하게 작동하여, 사람이 읽기 쉬운 도메인 이름을 컴퓨터가 이해할 수 있는 IP 주소로 변환합니다. 이 과정은 인터넷을 탐색하는 데 필수적이며, 웹사이트 방문, 이메일 전송, 기타 네트워크 작업에서 중요한 역할을 합니다.
DNS의 주요 기능
- 이름 해결(Name Resolution):
- DNS는 도메인 이름을 IP 주소로 변환합니다. 예를 들어, 사용자가 웹 브라우저에 www.example.com을 입력하면, DNS는 이 도메인 이름을 해당 웹사이트의 서버 IP 주소로 변환합니다.
- 도메인 이름 구조 관리:
- DNS는 계층 구조를 사용하여 도메인 이름을 조직적으로 관리합니다. 예를 들어, example.com은 최상위 도메인인 .com 하위에 위치하며, www.example.com은 example.com의 하위 도메인입니다.
- DNS 서버 역할:
- DNS 서버는 도메인 이름과 IP 주소의 매핑 정보를 저장하고 제공하는 역할을 합니다. 이러한 서버는 여러 계층으로 구성되어 있으며, 루트 서버, 최상위 도메인(TLD) 서버, 권한 있는 DNS 서버 등이 포함됩니다.
- 부하 분산(Load Balancing):
- DNS는 여러 IP 주소에 동일한 도메인 이름을 매핑하여, 트래픽을 여러 서버로 분산시켜 서버 과부하를 방지할 수 있습니다.
DNS의 작동 원리
DNS가 도메인 이름을 IP 주소로 변환하는 과정은 다음과 같은 단계로 이루어집니다(해당 단계는 위의 GIF예시의 순서 번호와 상관 없습니다.)
- 사용자가 도메인 이름 입력:
- 사용자가 웹 브라우저에 www.example.com과 같은 도메인 이름을 입력합니다.
- DNS 재귀 쿼리:
- 사용자 장치의 운영 체제는 이 도메인 이름을 IP 주소로 변환하기 위해 DNS 재귀 쿼리를 로컬 DNS 서버(또는 ISP 제공 DNS 서버)에 전송합니다.
- 로컬 DNS 서버가 이 정보를 캐시하고 있을 수 있지만, 없다면 루트 DNS 서버에 쿼리를 전달합니다.
- 루트 DNS 서버 쿼리:
- 루트 DNS 서버는 해당 도메인의 최상위 도메인(TLD) 서버(.com, .net 등)의 IP 주소를 로컬 DNS 서버에 반환합니다.
- TLD DNS 서버 쿼리:
- 로컬 DNS 서버는 TLD DNS 서버에 쿼리를 보내고, TLD 서버는 해당 도메인의 권한 있는 DNS 서버의 IP 주소를 반환합니다.
- 권한 있는 DNS 서버 쿼리:
- 로컬 DNS 서버는 권한 있는 DNS 서버에 쿼리를 보내고, 이 서버는 www.example.com에 대한 IP 주소를 반환합니다.
- IP 주소 반환:
- 로컬 DNS 서버는 이 IP 주소를 사용자 장치에 반환합니다. 그러면 사용자 장치는 해당 IP 주소로 웹사이트에 접근하게 됩니다.
DNS 서버 종류
- 루트 DNS 서버:
- 인터넷의 최상위 DNS 서버로, TLD 서버의 위치 정보를 제공하는 역할을 합니다.
- 전 세계적으로 13개의 루트 서버가 존재하며, 각 서버는 여러 위치에 분산되어 있습니다.
- TLD DNS 서버:
- 특정 최상위 도메인(.com, .org 등)에 대한 정보를 제공하며, 해당 TLD의 권한 있는 DNS 서버의 위치를 제공합니다.
- 권한 있는 DNS 서버(Authoritative DNS Server):
- 도메인 이름과 IP 주소의 최종 매핑 정보를 제공하는 서버로, 특정 도메인에 대해 권한을 가지고 있습니다.
- 재귀 DNS 서버(Recursive DNS Server):
- 사용자 장치에서의 DNS 쿼리를 받아들이고, 필요한 경우 여러 DNS 서버에 쿼리를 보내어 최종 IP 주소를 찾는 역할을 합니다. 이 서버는 ISP나 기업 네트워크에 의해 제공됩니다.
DNS 프로토콜
- DNS 쿼리(Query):
- DNS 클라이언트가 특정 도메인 이름에 대한 IP 주소를 요청하는 메시지입니다.
- DNS 응답(Response):
- DNS 서버가 해당 도메인 이름에 대한 IP 주소를 반환하는 메시지입니다.
- DNS 캐싱:
- DNS 서버는 자주 요청되는 도메인 이름의 매핑 정보를 일정 시간 동안 캐시에 저장하여, 성능을 향상시키고 트래픽을 줄입니다.
DNS 보안
- DNS 캐시 포이즈닝(DNS Cache Poisoning):
- 공격자가 DNS 서버의 캐시에 악의적인 정보를 주입하여 사용자를 잘못된 IP 주소로 유도하는 공격입니다.
- DNSSEC(DNS Security Extensions):
- DNS 응답의 무결성을 확인하고 위조된 응답을 방지하기 위해 사용되는 보안 확장입니다.
HTTP
HTTP(HyperText Transfer Protocol)는 웹에서 데이터를 주고받기 위한 프로토콜입니다. 웹 브라우저와 웹 서버 간의 통신을 가능하게 하며, 웹 페이지, 이미지, 동영상 등 다양한 콘텐츠를 전송하는 데 사용됩니다. HTTP는 인터넷의 핵심 프로토콜 중 하나로, 웹의 기반이 되는 통신 규칙을 정의합니다.
HTTP의 주요 기능
- 클라이언트-서버 모델:
- HTTP는 클라이언트(주로 웹 브라우저)와 서버 간의 요청-응답(request-response) 모델을 기반으로 합니다.
- 클라이언트는 서버에 요청을 보내고, 서버는 클라이언트의 요청에 대한 응답을 반환합니다.
- 무상태(stateless):
- HTTP는 무상태 프로토콜로, 각 요청 간에 상태 정보를 유지하지 않습니다. 즉, 서버는 각 요청을 독립적으로 처리합니다.
- 이를 보완하기 위해 쿠키, 세션 등이 사용되어 지속적인 상태를 유지합니다.
- 확장성:
- HTTP는 헤더와 다양한 메소드(GET, POST 등)를 통해 다양한 기능을 확장할 수 있습니다.
- 이를 통해 데이터 전송, 인증, 캐시 제어 등 다양한 작업을 수행할 수 있습니다.
HTTP 요청(Request)와 응답(Response)
- 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
- 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 메소드
- GET:
- 서버에서 리소스를 가져오는 데 사용됩니다. 주로 웹 페이지나 데이터를 요청할 때 사용됩니다.
- 데이터는 URL에 쿼리 문자열로 포함될 수 있으며, 본문을 가지지 않습니다.
- POST:
- 서버에 데이터를 제출하는 데 사용됩니다. 주로 양식 제출, 데이터 업로드 등에 사용됩니다.
- 데이터는 본문에 포함됩니다.
- PUT:
- 서버에 리소스를 업로드하거나 기존 리소스를 업데이트하는 데 사용됩니다.
- DELETE:
- 서버에서 리소스를 삭제하는 데 사용됩니다.
- HEAD:
- GET 요청과 유사하지만, 응답 본문을 제외한 헤더 정보만 반환받습니다.
- 주로 리소스의 메타데이터를 가져오는 데 사용됩니다.
- OPTIONS:
- 서버에서 사용할 수 있는 메소드와 통신 옵션을 확인하는 데 사용됩니다.
- PATCH:
- 리소스의 일부를 업데이트하는 데 사용됩니다.
HTTP 상태 코드
HTTP 상태 코드는 서버가 클라이언트 요청을 어떻게 처리했는지를 나타내는 3자리 숫자입니다. 주요 상태 코드는 다음과 같습니다:
- 2xx: 성공(Successful):
- 200 OK: 요청이 성공적으로 처리되었습니다.
- 201 Created: 요청이 성공적으로 처리되었으며, 새로운 리소스가 생성되었습니다.
- 3xx: 리다이렉션(Redirection):
- 301 Moved Permanently: 요청한 리소스가 영구적으로 새로운 URL로 이동했습니다.
- 302 Found: 요청한 리소스가 일시적으로 다른 URL로 이동했습니다.
- 4xx: 클라이언트 오류(Client Error):
- 400 Bad Request: 클라이언트의 요청이 잘못되었습니다.
- 401 Unauthorized: 인증이 필요하며, 클라이언트가 인증되지 않았습니다.
- 403 Forbidden: 클라이언트가 요청한 리소스에 접근할 권한이 없습니다.
- 404 Not Found: 요청한 리소스를 찾을 수 없습니다.
- 5xx: 서버 오류(Server Error):
- 500 Internal Server Error: 서버에서 요청을 처리하는 중에 오류가 발생했습니다.
- 502 Bad Gateway: 서버가 게이트웨이 또는 프록시 역할을 하는 중에 잘못된 응답을 받았습니다.
- 503 Service Unavailable: 서버가 현재 요청을 처리할 수 없는 상태입니다.
HTTP 버전
- HTTP/1.0:
- 각 요청에 대해 새로운 연결을 설정하는 단순한 모델을 사용합니다.
- 상태 코드와 메시지의 기본적인 구조를 정의합니다.
- HTTP/1.1:
- 지속적 연결(persistent connection)과 파이프라이닝(pipelining)을 도입하여 성능을 향상시킵니다.
- 캐싱 메커니즘과 호스트 헤더를 통해 가상 호스팅을 지원합니다.
- HTTP/2:
- 데이터 압축, 서버 푸시(Server Push), 멀티플렉싱(Multiplexing)을 통해 성능을 개선합니다.
- 이진 프로토콜을 사용하여 효율성을 높입니다.
- HTTP/3:
- QUIC 프로토콜을 기반으로 하며, 더 빠르고 안전한 데이터 전송을 제공합니다.
- 연결 설정 및 데이터 전송의 지연을 줄여 성능을 크게 향상시킵니다.
HTTP 보안
- HTTPS (HyperText Transfer Protocol Secure):
- HTTP의 보안 버전으로, TLS(전송 계층 보안)를 사용하여 데이터의 암호화, 무결성, 인증을 제공합니다.
- HTTPS를 사용하면 클라이언트와 서버 간의 데이터 전송이 암호화되어, 중간에서 데이터가 도청되거나 변경되는 것을 방지할 수 있습니다.
- TLS/SSL:
- 전송 계층 보안(TLS)과 보안 소켓 계층(SSL)은 인터넷에서 데이터 통신의 보안을 위해 사용되는 프로토콜입니다.
- HTTPS는 이러한 보안 프로토콜을 통해 HTTP 통신을 암호화합니다.
'Common > CS-네트워크' 카테고리의 다른 글
[Network] 로드 밸런싱(Load Balancing) (0) | 2024.06.26 |
---|---|
[Network] 1분 간단 질문. OSI 7계층이란 무엇일까요? (0) | 2024.06.26 |
[Network] OSI 7계층 #4. 전송 계층, UDP/TCP (0) | 2024.06.17 |
[Network] 서브넷 마스크, IP주소의 구분, 라우팅과 라우터 (0) | 2024.05.29 |
[Network] OSI 7계층 #3. 네트워크 계층 (0) | 2024.05.28 |