인터넷이 존재하는 동안 여러 클라이언트-서버 응용 프로그램이 개발되었다. 이 프로그램들을 다시 규정할 필요는 없지만 어떤 일을 하는지 이해를 해야 한다. 또한 각 응용에 대해 어떤 옵션이 사용 가능한지 알아야 한다. 이 응용과 응용이 서로 다른 서비스를 제공하는 방법에 대한 공부는 미래에 맞춤형 응용을 만드는데 도움이 될 수 있다.
1. 월드 와이드 웹(WWW)과 하이퍼텍스트 전송 프로토콜(HTTP)
- 월드 와이드 웹(World Wide Web)
웹(Web)의 개념은 유럽원자핵공동연구소에 근무하던 팀 버너스-리가 유렵 내의 다른 장소에 있는 연구자들이 서로의 연구에 접근할 수 있도록 하기 위해 1989년 처음 제안하였다. 상업적인 웹은 1990년대 초반에 시작되었다.
- 웹 서비스 모델
웹 서버: 웹 페이지들의 저장소와 요청 처리 소프트웨어
웹 페이지: Base Object와 Reference Object들로 구성
기본객체: HTML file, 페이지 내의 다른 객체를 URL로 참조
참조 객체: HTML file, JPEG image, Java applet등등
- 브라우저
제어기, 클라이언트 프로토콜 및 해석기의 세 부분으로 구성됨.
제어기: 키보드나 마우스로부터 입력을 받아 클라이언트 프로그램을 사용하여 문서에 접속
해석기 중 하나를 사용하여 문서를 화면에 표현
- 웹 문서
WWW상의 문서는 정적, 동적 및 액티브라는 세 분류로 나뉨
Static Documents
서버에서 생성.저장된 고정-내용 문서
Dynamic Documents
브라우저가 문서를 요청할 떄마다 웹서버에 의해 생성. 웹 서버는 동적 문서를 만드는 응용 프로그램이나 스크립트를 실행. 요청에 대해 새로운 문서가 생성되기 때문에 동적 문서의 내용은 각각의 요청마다 달라질 수 있음.
Active Documents
클라이언트 사이트에서 수행될 프로그램이나 스크립트를 필요로 함. 액티브 문서를 만드는 방법 중 하나는 서버에서 자바로 작성된 프로그램인 자바 애플릿을 사용하는것. 다른 방법은 자바 스크립트를 사용하는 것.
- HTTP
하이퍼텍스트 전송 프로토콜(HTTP)은 웹으로부터 웹 페이지를 가져오기 위해 어떻게 클라이언트-서버 프로그램이 작성될 수 있는지를 정의하는데 사용된다. HTTP클라이언트는 요청을 하고 HTTP 서버는 응답을 한다. 서버는 포트 80번을 사용하고 클라이언트는 임시 포트 번호를 사용한다.
무상태 프로토콜
HTTP requesst message와 response 메시지 간의관계 정보가 웹 서버에 저장되지 않음. 서버는 수신되는 HTTP request 메시지 간의 관계 추론 불가. 웹 브라우저-웹 서버간의 통신 상태 정보를 유지하지 않음(stateless).
비영구적 연결의 예를 보여준다. 클라이언트는 이미지에 대한 하나의 링크가 포함된 파일에 액세스해야 한다. 텍스트 파일과 이미지가 동일한 서버에 있다. 여기 두 개의 연결이 필요하다. 각 연결에 대해 TCP는 연결을 설정하기 위해 최소 세 개의 핸드셰이크 메시지를 요구하지만 세 번째 핸드셰이크 메시지와 함께 요청을 보낼 수 있다. 연결이 설정되면 개체를 전송할 수 있다. 개체를 수신한 후 연결을 종료하려면 세 개의 핸드셰이크 메시지가 더 필요하다.
동일한 시나리오를 보여주지만 영구 연결(http 버전 1.1)을 사용한다. 하나의 연결 설정 및 연결 종료만 사용되지만 이미지에 대한 요청은 별도로 전송된다.
- 요청 및 응답 메시지 형식
각 메시지는 네 개의 섹션으로 구성된다.
Requset: Request line, Header line, Blank line, Body
Response: Status line, Header line, Blank line, Body
- Request Message
요청 메시지의 첫 번쨰 라인은 요청 라인이다. 이 라인에는 3개의 필드가 있고, 각각은 하나의 스페이스로 구분되며, 2개의 문자 CR과 LF로 종료된다. 각 필드는 메소드, URL, 버전이라 불린다. 메소드 필드는 요청 메시지의 유형을 정의하고 URL은 상대 웹페이지의 주소와 이름을 정의하고 버전은 프로토콜의 버전을 말한다. 요청 라인 이후 0개 이상의 요청 헤더 라인을 가질 수 있고 추가적인 정보를 클라이언트에서 서버로 보낸다.
- Response Message
응답 메시지는 상태 라인, 헤더 라인, 공백 라인 그리고 떄로 본문으로 구성되어 있다. 응답 메시지의 첫 번째 라인은 상태 라인이라 불리며, 이 라인의 3개의 필드가 스페이스로 구분되어 있고 CR과 LF로 종료된다. 첫 번째 필드는 HTTP 프로토콜의 버전을 규정한다. 상태 코드 필드는 요청의 상태에 대해 정의한다. 이것은 숫자 3개로 구성된다. 상태 문구는 텍스트 형태로 상태 코드를 설명한다. 상태 라인 이후 0 이상의 응답헤더 라인을 가질 수 있으며 본문은 서버로부터 클라이언트로 보내지는 문서를 포함한다. 응답은 오류메시지가 아니라면 존재한다.
위 예제는 문서를 읽어오는 것으로, /usr/bin/image1 경로 상에 있는 이미지를 읽어오기 위해 GET 메소드를 사용한다. 요청라인은 메소드(GET), URL, HTTP 버전(1.1)을 표시한다. 헤더는 두 라인을 갖는데, 이들은 클라이언트가 GIF와 JPEG형식으로 이미지를 수용할 수 있음을 나타낸다. 요청은 본문을 가지고 있지 않다. 응답 메시지는 상태 라인과 네 라인의 헤더를 포함한다. 헤더 라인은 날짜, 서버, 콘텐츠 부호화, 문서의 길이를 정의한다. 무선의 본문은 헤더 뒤에 온다.
이 예제에서는 클라이언트가 서버에 게시할 웹 페이지를 서버에게 전송하기를 원한다. 따라서 PUT메소드를 사용한다. 요청 라인은 메소드(PUT), URL, HTTP 버전 (1.1)을 나타낸다. 네 줄의 헤더가 존재하며, 요청 본문은 게시할 웹 페이지를 가지고 있다. 응답 메시지는 상태 라인과 네 줄의 헤더를 포함한다 생성된 문서는 CGI 문서로 본문에 포함된다.
- 쿠키
WWW는 원래 상태가 없는 개체로 설계되었다. 클라이언트는 요청을 보내고 서버는 이에 응답한다. 웹 페이지에 대한 후속 방문 간 또는 웹 사이트 내의 다른 페이지에 대한 방문 간의 상태를 유지하기 위해 개발되었다. 웹 서버가 클라이언트 하드 드라이브에 데이터를 저장하고 검색할 수 있도록 설정되어있다.
- 쿠키의 생성과 저장
- 서버가 클라이언트로부터 요구를 받았을 때, 클라이언트에 관한 정보를 파일이나 문자열로 저장한다. 정보에는 클라이언트의 도메인 이름, 쿠키의 내용(서버가 클라이언트에 관해 수집한 정보로써 예를 들어 클라이언트 이름, 등록 번호 등), 타임스탬프, 그리고 구현에 따라 다른 정보들이 포함될 수 있다.
- 서버는 클라이언트에게 보내는 응답에 쿠키를 포함한다.
- 클라이언트가 응답을 받으면, 브라우저는 도메인 서버 이름으로 정렬되는 쿠키 디렉터리에 쿠키를 저장한다.
- 쿠키 사용
- 전자 상점은 쇼핑 교객을 위해 쿠키를 사용할 수 있다.
- 등록된 사용자에게만 액세스를 허용하는 사이트는 클라이언트가 처음등록할 때 클라이언트에게 쿠키를 전송한다.
- 웹포털, 사용자가 선호하는 페이지를 선택할 때, 쿠키가 만들어지고 전송된다.
- 광고 회사에 의해 사용된다. 배너 광고를 사용자가 자주 방문하는 일부 주요 웹사이트에 게시할 수 있다.
- HTTP 보안
HTTP 자체는 보안을 제공하지 않는다. 그러나 HTTP는 안전한 소켓 계층(SSL)상에서 운영될 수 있다. 이 경우, HTTP는 HTTPS로 언급된다. HTTPS는 기밀성, 클라이언트 및 서버 인증, 그리고 데이터 무결성을 제공한다.
2. 파일 전송 프로토콜(FTP)
파일 전송 프로토콜(FTP)은 하나의 호스트에서 다른 호스트로 파일을 복사하기 위해 TCP/IP에 의해 제공되는 표준 프로토콜이다. 방식이 간단하고 수월해보이지만, 몇 가지 문제를 먼저 고려해야 한다. 예를 들면, 두 시스템이 서로 다른 파일 이름 부여 방식을 사용할 수도 있다. 두 시스템은 서로 다른 방법으로 데이터를 표현할 수도 있다. 또한 두 시스템은 서로 다른 디렉토리 구조를 가질 수도 있다. 이러한 모든 문제는 매우 간단하고 편리한 방법으로 FTP에 의해 해결된다.
클라이언트는 사용자 인터페이스와 클라이언트 제어 프로세스, 그리고 클라이언트 데이터 전송 프로세스라는 세 가지 구성요소를 가진다. 서버는 서버 제어 프로세스와 서버 데이터 전송 프로세스라는 두 가지 구성요소를 가진다. 제어 연결은 제어 프로세스 간에 만들어지고, 데이터 연결은 데이터 전송 프로세스 간에 설정된다.
- 2개의 연결에 대한 유효기간
FTP에서 2개의 연결은 다른 유효기간을 가진다. 제어 연결은 전체 대화형 FTP 세션 동안 연결이 유지되고 데이터 연결은 각 파일의 전송 활동마다 열리고 닫힌다. FTP는 2개의 잘 알려진 TCP 포트를 사용한다.
포트 21: 제어 연결을 위해 사용
포트 20: 데이터 연결을 위해 사용
3. 전자 우편
전자우편은 사용자들이 메시지를 교환하도록 해준다. 전자우편의 경우 단방향 트랜잭션으로 간주한다. 앨리스가 밥에게 전자우편을 보낼 때, 그녀는 응답을 기대하지만, 밥은 응답할 수도 있고 안 할 수도 있다. 그가 응답한다면, 그것은 또 다른 단방향 트랜잭션이다.
-사용자 에이전트
전자우편 시스템의 첫 번째 구성요소는 사용자 에이전트이다. 이것은 메시지의 송수신 과정을 보다 쉽게 만들기 위해서 사용자에게 서비스를 제공한다. 사용자 에이전트는 메시지를 작성하고, 읽고, 답하고, 전달하는 소프트웨어 패키지이다. 이것은 또한 사용자 컴퓨터의 로컬 편지함을 관리한다.
- 메시지 접근 에이전트(MAA): POP와 IMAP
전자우편 절달의 첫 번째와 두 번째 단계는 SMTP를 사용한다. 하지만 SMTP는 세 번째 단계에는 참여하지 않는데 그 이유는 SMTP가 밀어 넣기(push)프로토콜이기 떄문이다. 즉 클라이언트에서 서버로 메시지를 밀어 넣는다.
POP3
POP3(Post Office Protocol, version 3)는 간단하지만, 기능상으로 제약이 있다. 단순한 형태의 다운로드 기반 프로토콜이고 삭제모드와 유지모드라는 두 가지 모드를 가진다. 삭제 모드에서는 전자우편을 읽고 난 후, 전자우편이 편지함에서 삭제된다. 유지모드에서는 전자우편을 읽고 난 후에도 유지된다.
IMAP4
POP3와 비슷하나 더 많은 기능을 가진다. IMAP4는 다음과 같은 추가적인 기능을 제공한다.
- 모든 메시지를 메일 서버에 유지
- 메일 서버에서 폴더로 메시지 관리 기능
- 사용자는 전자우편을 내려 받기 전에 헤더를 검사할 수 있다.
- 사용자는 전자우편을 내려 받기 전에 특정 문자열로 내용을 검색할 수 있다.
- 사용자는 전자우편을 부분적으로 내려받을 수 있다. 이 기능은 대역폭이 제한되어 있고, 전자우편이 큰 대역폭을 필요로 하는 멀티미디어를 포함하는 경우에 특히 유용하다.
- 사용자는 전자우편 서버에서 편지함을 생성 또는 삭제하거나 이름을 변경할 수 있다.
- 사용자는 전자우편 저장을 위해 폴더 내에 편지함들을 체계적으로 생성할 수 있다.
- MIME
전자우편은 일부 제한점이 있다. 라틴 알파벳을 사용하는 언어만 사용할 수 있다. 또한, 이진 파일이나 비디오 혹은 오디오 데이터를 전송할 수 없다.
MIME은 전자우편을 통해서 ASCII아닌 데이터를 전송하기 위한 추가적인 프로토콜이다.
4. DNS
DNS는 다른 응용 프로그램을 지원하도록 설계되었다. 인터넷에는 이름을 주소에 매핑할 수 있는 디렉터리 시스템이 필요하다. 이것은 전화 네트워크와 유사하다.
- 이름 공간
혼란을 피가히 위해 각 장치에 할당되는 이름들은 이름과 IP 주소 간의 바인딩을 완전히 통제할 수 있또록 이름 공간(name space)으로부터 신중하게 선택해야 한다. 다시 말하면, 각 IP 주소가 유일하듯이 이름도 유일해야 하기 때문이다. 각 주소에 유일한 이름을 대응시키는 이름 공간은 두 가지 방법으로 구성할 수 있는데, 하나는 단층적(flat)이고, 다른 하나는 계층적(hierarchical)이다.
- 변환
이름을 주소로 매핑시키는 것을 이름-주소 변환이라고 한다. DNS는 클라이언트-서버 응용으로 설계되었다. 변환기는 매핑 요청을 보내기 위해 가장 가까운 DNS 서버에 접속한다. 서버가 정보를 가지고 있따면 변환기를 충족시킨다. 그렇지 않으면, 서버는 변환기에게 다른 서버들을 알아보게 하거나 정보를 제공하도록 다른 서버에 요청한다.
- 캡슐화
DNS는 UDP 또는 TCP를 사용할 수 있다. 두 경우 모두 서버에 의해 사용되는 잘 알려진 포트는 53이다. 대부분의 UDP 패킷은 512바이트의 패킷 크기 제한 떄문에 UDP는 응답 메시지의 크기가 512바이트 이하일 때 사용된다.
- 레지스트라
새로운 도메인을 어떻게 DNS에 등록할 수 있을까? 이것은 ICANN에 의해 공인된 영리 업체인 레지스트라(registrar)를 통해 이루어진다.
- DDNS
DNS에서 새로운 호스트를 추가하거나 또는 호스트를 제거, 혹은 IP 주소를 변경하는 등의 변화가 발생하면 DNS 주 파일을 변경해야만 한다. DNS 주 파일은 동적으로 갱신되어야 한다. 따라서 이러한 요구를 만족시켜 주기 위해 동적 도메인 이름 시스템(DDNS)이 필요하다.
- DNS 보안
DNS는 여러가지 방법으로 공격받을 수 있다.
- (Sniffing) 공격자는 사용자가 자주 접근하는 사이트의 성격이나 이름을 찾기 위해 DNS서버의 응답을 읽을 수 있다. 이 공격을 방지하기 위해 DNS 메시지는 기밀성을 요구한다.
- (Spoofing) 공격자는 DNS 서버의 응답을 가로채어 그것을 변경하거나 사용자가 접근하기를 원하는 사이트 또는 도메인에 사용자를 유도하는 전혀 새로운 위조 응답을 만들 수 있다. 이런 유형의 공격은 메시지 출처 인증 및 메시지 무결성을 사용하여 방지할 수 있다.
- (Dos) 공격자는 DNS 서버에 과도하게 많은 요구(Flood)를 하여 멈추게 하려고 시도한다. 이런유형의 공격은 서비스 거부 공격에 대한 준비를 통해 방지할 수 있다.
'Study > Networking' 카테고리의 다른 글
11. 멀티미디어 (0) | 2023.06.09 |
---|---|
10.1 응용층 소개 & 10.2 클라이언트-서버 패러다임 (1) | 2023.06.03 |
9.5 스트림 제어 전송 프로토콜(SCTP) (0) | 2023.06.03 |
9.4 전송 제어 프로토콜(TCP) (0) | 2023.06.03 |
9.3 사용자 데이터그램 프로토콜(UDP) (0) | 2023.06.03 |