목차
Application Layer (사용자 공간 User Space)
네트워크는 결국 처음부터 끝까지 "프로토콜"에 대한 이야기이고, 애플리케이션 레이어는 애플리케이션, 즉 프로세스(웹 브라우저 등)를 위한 통신 프로토콜 규약에 대한 이야기입니다.
Network APP
웹 브라우저, 이메일, 멀티 게임, 유튜브 등 스트리밍, VOIP 등등 Network APP은 네트워크를 사용하는 프로그램들입니다.
Network APP은 다음 2가지 경우가 있습니다.
■Client-Server paradigm (HTTP, FTP..)
서버를 사용하는 방식.
-서버-
Always on host. 항상 호스트가 켜져있습니다.
permanent IP address. 고정 ip주소를 사용합니다.
자주 데이터 센터로 운용됩니다.
-클라이언트-
클라이언트끼리 통신하지 않고 서버를 거쳐서 통신합니다.
연결은 항상 연결되어 있지는 않습니다.
■Peer-peer paradigm
특정 서버가 있는게 아니라 동등한 애들끼리 직접 통신합니다.
항상 켜져있는 서버가 없고, end system(서로의 연결된 컴퓨터끼리) 통신합니다. 종단간(end to end) 직접 통신?
peer끼리 서로 서비스를 요구,제공하며 상황에 따라 서버, 클라이언트 역할을 합니다.
Sockets
네트워크에서 이름 및 주소를 지정하는 통신 연결점(종료점)으로 프로세스 간 메시지를 주고 받는 애플리케이션, 전송(Transport)계층 사이 인터페이스 역할을 합니다.
프로세스들은 소켓을 통해 메시지를 주고 받습니다.
HTTP(HyperText Transfer Protocol)
HTTP는 웹 애플리케이션-레이어 프로토콜로 브라우저랑 서버가 통신할 때 사용하는 프로토콜입니다. 웹상에서 정보를 주고 받을 수 있는 프로토콜입니다.
○ 웹 페이지 : HTML파일, 이미지, 오디오 등으로 구성
클라이언트-서버 모델로 요청/응답(request/response)으로 매우 심플한 프로토콜입니다.
- TCP 사용 : 웹 페이지의 내용이 손실되면 안되기에 TCP를 사용합니다.
클라이언트 : TCP 소켓 생성, TCP 연결 요청
서버 : TCP 연결 요청 수락 후 통신 시작 - Stateless : 기본적으로 서버가 클라이언트를 기록하지 않습니다. 간단(stateful 반대)
- Stateless한 HTTP에서 데이터를 남기고 싶으면 쿠키를 사용합니다.
쿠키는 클라이언트에게 쿠키 번호를 주고, 서버는 백엔드 서버에 쿠키를 저장해, 클라이언트에게 request가 오면 백엔드에서 쿠키를 확인해 적절히 활용합니다.
HTTP 통신의 2타입
- Non - Persistent : (~1.0ver) : 1 request - 1 response 방식
TCP 커넥션 연결 → 1 오브젝트 통신 → TCP 커넥션 종료 - Persistent HTTP (1.1ver~) : n request - 1 response 방식
TCP 커넥션 연결 → 싱글 TCP 커넥션에서 멀티플 오브젝트 통신 → TCP 커넥션 종료
HTTP/3
2022년 HTTP/3 표준화 버전부터는 TCP가 아닌 UDP를 사용한다고 합니다.
Quick UDP Internet Connections (QUIC)라 불리는 프로토콜은 구글에서 개발한 프로토콜로, UDP 위에서 동작하며 동시에 TCP의 신뢰성과 보안성을 유지합니다. QUIC는 TCP의 한계를 극복하고 더 나은 성능과 효율성을 제공하기 위해 설계되었다 합니다.
WEB Cache (Proxy Server)
구글에 접속할 때 매번 내 컴퓨터에서 구글까지 왕복한다면 비용이 매우 큽니다. 구글 서버는 트래픽이 많아 힘들 것이고, 클라리언트는 느려서 힘들고, 네트워크 제공자는 외부 네트워크 접속이 많아 비용이 높아서 힘듭니다.
그래서 내부 네트워크에 프록시 서버를 둬서 구글 접속에 첫 요청을 구글 서버에서 받아올 때, 복사본을 프록시 서버에 저장해서 이후 동일한 요청은 미국까지 갈게 아니라 내부 네트워크 프록시 서버에서 가져오는 방법입니다.
구글 서버는 트레픽이 적어서 좋고, 클라이언트는 빠른 응답으로 좋고, 네트워크 서비스 제공자는 비용을 적게 써서 좋은 방식입니다. 결국 목적과 비용을 고려하면 정답이 나온다고 합니다...
DNS(Domain Name System)
특정 서버에 접속하기 위해서는 IP주소, 포트 번호를 알아야합니다. IP 주소는 현재 IPv4로 32bit를 사용하며 255.255.255.255 형태로 쓰입니다. 하지만 이렇게 IP를 직접 기억하기 어려우니 특정 도메인명을 정해 도메인명을 쓰면 그에 맞는 IP를 변환시켜 쓰는 것이 DNS입니다. hostName → IP address
- DNS는 Application Layer 프로토콜입니다. 결국은 규약
- 분산된(Distributed), 계층(Hierarchical) DataBase 구조.
DNS가 중앙화(Centralized)된 구조였다면 하나가 동작하지 않으면 모든 서버가 동작하지 않을 수 있는 점과 DNS 자체가 너무 거대하기 때문입니다.
DNS는 이론적인 Root DNS, 그 아래 .com, .org, .edu 등 구분 서버 그 아래 naver.com 등 서버로 계층적 구조를 띄고 있습니다.
DNS 동작 예시
1. 반복적 질의(Iterated Query) : Local DNS 서버에 없다면 상위 DNS 서버부터 재귀적으로 다음 DNS서버를 물어보는 형태입니다.
2. 재귀적 질의(recursive Query) : Local DNS 서버에 없다면 상위 DNS에 질문하고, 질문받은 서버가 직접 하위 서버에게 물어보며 찾는 형태입니다. 단점으로 root의 부담이 커지는 점이 있습니다.
*Local DNS 서버 : 도메인명에 해당하는 IP를 찾기위해 가장 먼저 찾는 DNS 서버.
'강의 > 컴퓨터네트워크' 카테고리의 다른 글
Link Layer (1) | 2023.12.29 |
---|---|
Network Layer (0) | 2023.12.28 |
컴퓨터 네트워크 - Transport Layer (2) | 2023.08.29 |
Transport Layer - 요약 (0) | 2023.05.03 |
Application Layer - 시험 요약 정리 (0) | 2023.04.20 |