"컴퓨터 네트워킹 : 하향식 접근(제7판)"을 읽고 정리한 내용입니다.
2.1 네트워크 애플리케이션의 원리
2.1.1 네트워크 애플리케이션 구조
애플리케이션 구조 2가지
- 클라이언트-서버(Client-server) 구조
- P2P(peer-to-peer) 구조
클라이언트-서버 구조
- 서버
- 항상 켜져있는 호스트이다.
- 고정 IP 주소를 갖는다.
- 데이터 센터가 사용되기도 한다.
- 클라이언트
- 서버와 통신한다.
- 클라이언트끼리 직접적으로 통신하지 않는다.
- 유동적인 IP 주소를 가질 수 있다.
P2P 구조
- 서버가 항상 켜져있지 않는다.
- 피어(Peer)라는 임의의 종단 시스템과 직접적으로 통신한다.
- 피어는 다른 피어에게 서비스를 요청하고, 다른 피어에게 서비스를 제공한다. (즉, 자체 확장성(Self scalability)을 갖는다.)
- 피어는 간혈적으로 연결되고 IP 주소가 변한다.
2.1.2 프로세스 간 통신
프로세스
- 하나의 호스트 내에서 실행되는 프로그램이다.
- 같은 호스트 내에서 두 개의 프로세스는 IPC(Inter-Process Communication)을 사용해서 통신한다. (이는 OS의 영역이다.)
- 다른 호스트에서의 프로세스들은 메세지 교환에 의해 통신한다.
클라이언트 프로세스
- 통신을 초기화하는 프로세스
서버 프로세스
- 연결을 기다리는 프로세스
소켓
- 프로세스는 소켓을 통해서 메세지를 주고 받는다.
- 애플리케이션과 네트워크 사이의 API라고도 한다.
프로세스 주소 배정
- 메세지를 받기 위해서 프로세스는 식별자를 반드시 가지고 있어야 한다.
- 식별자는 호스트 프로세스와 연관된 IP 주소와 PORT 번호를 모두 가져야 한다.
- IP 주소는 32비트로 구성된다.
- 같은 호스트에서 많은 프로세스들이 작동되기 때문에 IP 주소만으로는 프로세스를 식별할 수 없다. 따라서, PORT 번호도 필요하다.
2.1.3 애플리케이션이 이용 가능한 트랜스포트 서비스
트랜스포트 계층에서 애플리케이션에 제공하는 서비스
- 데이터 무결성(Data Integrity)
- 프로세스 간 신뢰적 데이터 전송을 제공한다.
- 몇몇 애플리케이션(파일 전송)은 100% 신뢰 가능한 데이터 전송을 필요로 한다.
- 다른 애플리케이션(오디오)은 약간의 손실은 견딜 수 있다.
- 처리량(Throughput)
- 어느정도 명시된 속도에서 보장된 처리율을 제공한다.
- 몇몇 애플리케이션은 효과적이려면 최소한의 처리량을 필요로 한다.
- 시간(Timing)
- 시간 보장을 제공한다.
- 몇몇 애플리케이션은 효과적이려면 낮은 딜레이를 필요로 한다.
- 보안(Security)
- 암호화, 암호 해독 등을 제공한다.
* reliable : no loss, no delay, inorder delivery
2.1.4 인터넷 전송 프로토콜이 제공하는 서비스
- 인터넷은 애플리케이션에게 2개의 전송 프로토콜, 즉 UDP와 TCP를 제공한다.
TCP 서비스
- 신뢰할 수 있는 전송(reliable transport) : 전송 프로세스와 수신 프로세스 사이의 신뢰할 수 있는 전송
- 흐름 제어(flow control) : sender가 receiver를 압도하지 않는다.
- 혼잡 제어(congestion control) : 네트워크가 과부화될 때 sender를 스로틀한다.
- 연결지향형(connection-oriented) : 클라이언트와 서버 프로세스 사이에 setup 과정이 필요하다. (3-way handshaking)
UDP 서비스
- 신뢰할 수 없는 데이터 전송(unreliable data transfer) : 전송 프로세스와 수신 프로세스 사이의 신뢰할 수 없는 전송
- 비연결형(connection loss service)
2.2 웹과 HTTP
2.2.1 HTTP 개요
- HTTP는 웹의 애플레이케이션 계층 프로토콜이다.
- 클라이언트-서버 모델
- 클라이언트 : 요청, 수신, 웹 객체를 나타내는 브라우저
- 서버 : 웹 서버는 요청에 응답하여 객체를 보낸다.
- TCP를 전송 프로토콜로 사용한다.
- 클라이언트가 서버에 PORT 번호 80으로 TCP 연결을 시작한다.
- 서버는 클라이언트로부터 TCP 연결을 승인한다.
- 무상태(Stateless)이다.
- 서버는 과거의 클라이언트 요청들에 대해 정보를 유지하지 않는다.
- 기본적으로 지속 연결을 사용한다.
웹 페이지
- 웹 페이지는 객체들로 구성된다.
- 객체는 HTML 파일, JPEG 이미지, 자바 애플릿, 오디오 파일 등이 될 수 있다.
2.2.2 비지속 연결과 지속 연결
비지속 연결 HTTP(non-persistent HTTP)
- 최대 1개의 객체가 TCP 연결을 통해 전송된다.
- 그 다음에 연결은 종료된다.
- 그러므로 여러개의 객체들을 다운로드하려면 여러개의 연결이 필요하다.
지속 연결(persistent HTTP)
- 클라이언트와 서버 사이의 단일 TCP 연결을 통해 여러개의 객체들을 전송될 수 있다.
2.2.3 HTTP 메세지 포맷
HTTP 응답 상태 코드
- 200 OK
- 301 Moved Permanently
- 400 Bad Request
- 404 Not Found
- 505 HTTP Version Not Supported
2.3 인터넷 전자메일
전자메일의 3가지 주요 구성요소
- User agents(mail reader)
- 메일 메세지를 작성하거나 수정하거나 읽거나 한다.
- Mail servers
- 사용자를 위한 수신 메세지를 포함하는 메일박스가 있다.
- 보내질 메일 메세지를 위한 메세지 큐가 있다.
- 이메일 메세지를 보내기 위해 메일 서버 사이에서 SMTP 프로토콜을 사용한다.
- SMTP : Simple Mail Transfer Protocol
- 클라이언트 : 상대 메일 서버로 메일을 보낼 때 SMTP 클라이언트로 동작한다.
- 서버 : 상대 메일 서버로부터 메일을 받을 때 SMTP 서버로 동작한다.
2.3.1 SMTP
- 클라이언트에서 서버의 25 PORT 번호로 신뢰할 수 있는 메일 메세지를 전송하기 위해서 TCP를 사용한다.
- 3단계로 이루어진다.
- Handshaking
- 메세지의 전송
- 폐쇄
- 명령/응답 상호작용이다.
- 명령(command) : 아스키 텍스트
- 응답(response) : 상태 코드와 문구
- 메세지는 7비트 아스키여야 한다.
2.3.4 메일 접속 프로토콜
- 메일 서버로부터 메일을 꺼내오는 프로토콜이다.
- POP(Post Office Protocol) : 110 PORT 번호를 사용한다.
- 3단계로 이루어진다.
- 인증(authorization phase)
- 트랜젝션(transaction phase)
- 갱신
- 3단계로 이루어진다.
- IMAP(Internet Mail Access Protocol)
- HTTP
2.4 DNS(Domain Name Service) - 인터넷의 디렉토리 서비스
2.4.1 DNS가 제공하는 서비스
- 호스트 네임을 IP 주소로 변환해주는 서비스이다. (name resolution)
- 호스트 엘리어싱 서비스 : 복잡한 호스트 네임(정식 호스트 네임)을 가진 호스트는 하나 이상의 별명(별칭 호스트 네임)을 가질 수 있도록 한다.
- 메일 서버 엘리어싱 : 별칭 호스트 네임에 대한 정식 호스트 네임을 얻어올 수 있다.
- 로드 분산 : 여러 중복 서버 사이의 부하를 분산하기 위해서 사용한다.
DNS
- 다양한 네임 버서의 계층 구조로 구현된 분산된 데이터베이스이다.
- 호스트와 네임 서버가 이름을 알기위해 통신하는 애플리케이션 계층 프로토콜이다.
2.4.2 DNS 동작 원리 개요
분산 계층 데이터베이스
- 확장성 문제를 다루기 위해 DNS는 많은 서버를 이용하고 이들을 계층 형태로 구성하며 전 세계에 분산시킨다.
- 3가지 유형의 DNS 서버가 있다.
- 루트(Root) DNS 서버
- 최상위 레벨 도메인 네임(TLD, top-level domain) DNS 서버
- 책임(Authoritative) DNS 서버