응용 계층(Application Layer)이란?
- 응용 계층은 OSI 7계층 모델의 가장 상위 계층으로, 사용자가 네트워크 상에서 직접적으로 사용하는 애플리케이션들과 통신하는 부분을 담당합니다.
- 응용 계층의 주요 목적은 사용자가 네트워크를 통해 접근하는 서비스를 제공하는 것이고, 이는 이메일, 웹 브라우징, 파일 전송, 원격 로그인 등의 다양한 네트워크 서비스를 포함하며, 네트워크 상의 애플리케이션 프로세스 간의 통신을 규정합니다.
- 응용 계층에서 사용되는 다양한 프로토콜들은 실제 데이터를 처리하는 애플리케이션 프로그램들과 하위 계층 간의 인터페이스 역할을 하며, 응용 프로그램이 네트워크 상에서 데이터를 주고받는 데 필요한 규칙들을 정의합니다.
- 사실 OSI 7계층 모델은 이미 시장에서 도태된 네트워크 시스템이라고 합니다.
- 현대에는 OSI 7계층 모델의 일부를 계승한 TCP/IP 모델을 대부분 사용합니다.
- 또한, TCP/IP 모델에서도 한번 업데이트가 이루어져 사실상 Updated TCP/IP Model이라 불리는 모델을 사용합니다.
응용 계층의 주요 프로토콜과 기능
응용 계층에서는 여러 가지 프로토콜이 동작하는데 각 프로토콜은 특정한 네트워크 서비스를 지원합니다.
아래는 몇 가지 중요한 응용 계층 프로토콜들입니다.
- HTTP (Hypertext Transfer Protocol)
- DNS (Domain Name System)
- SMTP (Simple Mail Transfer Protocol)
- FTP (File Transfer Protocol)
- Telnet
- POP3 (Post Office Protocol 3)
- 등등 너무 많습니다.
- 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 동작 과정:
- 사용자가 브라우저에 URL을 입력하고, 브라우저는 해당 서버에 GET 요청을 보냅니다.
- 서버는 클라이언트의 요청(Request)을 받고, 해당 리소스를 찾아 응답(Response)을 클라이언트에 보냅니다.
- 클라이언트는 서버에서 받은 응답(Response)를 처리하고, 이를 사용자가 볼 수 있는 형태(HTML 페이지 등)로 렌더링합니다.
HTTP Request
- 웹 브라우저는 웹 서버에 데이터를 요청하는 클라이언트 프로그램입니다. 요청은 서버가 인식할 수 있는 약속된 형식 (HTTP 형식)을 따라야 한다.
- 요청 데이터는 HEADER와 BODY로 구성된다.
- 필수 요소로 요청의 제일 처음에 와야 하는 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
- Stauts Code는 다른 곳에 정리하엿습니다. - https://dydgustmdfl1231.tistory.com/52
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의 주요 기능:
- 이름 해석(Name Resolution): 도메인 이름을 IP 주소로 변환해줍니다.
- 도메인 이름 등록: 도메인 소유자는 DNS를 통해 자신이 소유한 도메인 이름을 등록하고 관리할 수 있습니다.
- 부하 분산(Load Balancing): DNS는 여러 서버 중에서 부하가 적은 서버로 요청을 분산시키는 역할도 할 수 있습니다.
DNS의 동작 과정:
- 사용자가 브라우저 주소창에 URL을 입력합니다.
- 브라우저가 입력된 도메인의 IP 주소를 알아내기 위해 운영체제를 거쳐 DNS Resolver에 요청을 보냅니다.
- DNS Resolver는 로컬 DNS 캐시에 이전에 방문한 도메인 정보가 있는지 확인합니다. 만약 캐시에 기록이 있다면, 추가적인 DNS 조회가 필요하지 않습니다. 이 단계에서 바로 IP 주소를 응답해 줄 수 있습니다.
- 캐시에 정보가 없는 경우, DNS Resolver는 루트 DNS 서버에서 최상위 도메인(TLD) DNS 서버의 IP 주소 정보를 알아냅니다.
- DNS Resolver는 최상위 도메인(TLD) DNS 서버에 연결하여 권한 네임 서버(Authoritative Name Server)의 IP 주소를 요청하여 받아냅니다.
- 최종적으로 DNS Resolver는 권한 네임 서버에서 도메인의 최종 IP 주소를 마침내 알아냅니다. 이렇게 받아 온 IP 주소는 로컬 DNS 캐시에 저장됩니다. 이후로는 같은 요청이 있다면 DNS Resolver에서 바로 응답이 가능합니다.
- 받아온 최종 IP 주소를 다시 거꾸로 운영체제를 거쳐 브라우저로 전달합니다. 결국 사용자는 웹 브라우저를 통해 마침내 해당 IP 서버에 연결할 수 있습니다.
DNS의 동작 과정(요약):
- 사용자가 브라우저에 www.example.com을 입력하면, 먼저 로컬(사용자 컴퓨터에 캐시된) DNS 서버에서 해당 도메인의 IP 주소를 찾습니다.
- 로컬 DNS 서버에 정보가 없다면, 루트 DNS 서버에 요청을 보내 해당 도메인의 IP 주소를 확인합니다.
- 루트 서버는 해당 도메인의 권한이 있는 TLD(Top-Level Domain) 서버로 요청을 전달합니다. 예를 들어, 루트 서버가 TLD 서버로 example.com을 보낼 경우 .com TLD 서버가 이 요청을 처리하게 됩니다.
- TLD 서버는 도메인의 네임서버를 알려주고, 네임서버는 최종적으로 IP 주소를 반환합니다.
- 브라우저는 네임서버에서 최종적으로 반환받은 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가 보안성을 강화한 형태로 많이 대체되었습니다.
응용 계층의 역할 요약
응용 계층은 네트워크 상의 다양한 서비스와 애플리케이션이 사용자의 요청을 처리할 수 있도록 하는 인터페이스 역할을 합니다. 이 계층은 프로토콜들을 통해 웹 서비스, 파일 전송, 이메일 등 여러 애플리케이션들이 서로 통신할 수 있도록 규정하고 지원합니다. 즉, 응용 계층은 사용자와 네트워크 간의 상호작용을 직접 관리하며, 애플리케이션 간의 데이터 전송, 통신 규칙의 정의, 세션 관리, 에러 처리, 데이터 표현 및 변환 등을 통해 네트워크 상의 다양한 서비스가 원활히 작동하도록 보장합니다.
출처:
- https://velog.io/@jakeseo_me/OSI-7%EA%B3%84%EC%B8%B5-%EC%8B%9C%EB%A6%AC%EC%A6%88-5-%EC%84%B8%EC%85%98-%ED%91%9C%ED%98%84-%EC%9D%91%EC%9A%A9-%EA%B3%84%EC%B8%B5
- https://ko.wikipedia.org/wiki/%EC%9D%91%EC%9A%A9_%EA%B3%84%EC%B8%B5
- https://datatracker.ietf.org/doc/html/rfc1123
- https://leejoongwon.tistory.com/51
- https://sigmasabjil.tistory.com/37
- https://velog.io/@dnjscksdn98/HTTP-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
- https://nordvpn.com/ko/blog/dns-explained/
'TIL' 카테고리의 다른 글
express.urlencoded()에 대한 간단한 조사 (0) | 2024.09.28 |
---|---|
JavaScript 다양한 디자인 패턴 (간단하게) (0) | 2024.09.26 |
OSI 7계층 응용 계층 (Application Layer)에 대하여 (간단 소개) (0) | 2024.09.24 |
Status Code 종류별로 한줄로 설명하기 - 틀린 부분 또는 추가할 부분 지적 O (0) | 2024.09.24 |
Repository Pattern 간단한 소개 (1) | 2024.09.23 |