8.1. 응용계층

“응용”(Application)계층은 최 상단 계층으로 호스트(종단시스템)간의 소프트웨어 동작관련 계층이므로
하위 계층의 네트워크나 전송계층의 소프트웨어와 구별됩니다.


응용계층은 대표적으로 “Client/Server” 와 “P2P” 구조들이 있습니다.

1). “Client/Server”구조 : 서버 호스트는 상시 켜져있으며, 고정된 IP를 가지고 있습니다.

클라이언트 호스트들은 서버에 서비스를 요청하고 서버는 서비스 요청에 응답하는 방식으로 이루어집니다.

클라이언트 끼리는 직접 통신하지는 않습니다. 오늘날 대부분의 서비스는 해당 방식을 사용합니다.


2). “P2P”구조 : 상시 켜져있는 독립서버를 사용하기 보다는 “피어”(Peer)들 끼리 모여서 서로 직접 통신하여

서비스를 주고 받는 방식입니다. 피어는 클라이언트들이고, 거대한 상호 연결구조로 서비스를 이어나갑니다.

오늘날 P2P방식은 P2P파일공유 서비스들에 많이 사용됩니다.


“소켓”(Socket)은 응용 계층 프로세스와 전송 계층 간의 인터페이스 입니다.


“SSL”(Secure Sockets Layer) 은 암호화 및 무결성, 보안인증 등 프로세스간의 보안 서비스를 제공합니다.
( HTTPS 는 HTTP -> SSL(암호화) -> TCP -> 네트워크 -> TCP -> SSL(복호화) -> HTTP )

전송계층에서는 throughput이나 timing의 보장이 없는데 반해,
응용계층에서는 처리율과 시간 보장 서비스를 제공하여 “시간 민감”(Time-sensitive) 프로세스들도
제대로 동작 할 수 있게 해줍니다.


8.2. HTTP

“HTTP”(Hypertext Transfer Protocol)은 클라이언트와 서버로 두 개의 프로그램으로 동작하며,

웹페이지를 구성하기 위해 필수적으로 사용되는 프로토콜입니다.

하이퍼 링크를 접속하면, “HTTP요청메시지”를 서버로 전송하고 서버는 “HTTP응답 메시지”를 화면에 띄워줍니다.


HTTP는 TCP를 사용하여 통신하고 “비상태”(Stateless) 프로토콜 입니다.

( 비상태는 서버측에서 클라이언트의 정보를 모르는 채로 HTTP통신을 하는 것을 말합니다. )

비상태 프로토콜에서 클라이언트의 정보를 사용해야 하는 경우에는

“웹 쿠키”를 사용하여 문제를 해결 할 수 있습니다.

“set-Cookie”로 요청 헤더에 저장되고 서버로 쿠키 값을 전달하여

특정 사용자에게 더 적합한 문서를 보여줄 수 있습니다.

예를 들면 로그인은 클라이언트 정보를 가지고 있어야 하므로, 웹 쿠키( 세션 )를 이용하여 로그인 상태를 유지합니다.

이로써 Stateless HTTP 에서 Stateful Session 을 유지할 수 있습니다.


“프록시 서버”(Proxy Server)는 클라이언트와 서버 사이에서 둘을 중개하여

서로 간접적으로 접속할 수 있도록 해주는 시스템입니다.

직접 연결하지 않고 한 번 거쳐서 연결되기에 얻는 이 점들이 있어 많이 사용됩니다.

(대표적인 이점으로 보안과 익명성, IP추적을 1차 보호, 특수한 방화벽 우회, 웹 서비스를 배포할 때의 리버스 프록시)


프록시 서버는 또한, “웹 캐시”(Web Cache)를 사용하여 웹 서버의 부담을 줄이는 서비스도 일부 제공합니다.

프록시 서버에 HTTP객체 사본이 없거나 업데이트가 되지 않은 경우 웹 서버에서 응답을 받고 필요에 따라 갱신하고,

만약 있고 최신의 것이라면, 즉시 캐시에 있는 것을 보여줍니다.

웹 캐시는 이미지, CSS, JS 등을 주로 보관, 사용합니다.


HTTP는 “비지속 연결”, “지속 연결” 두 가지 방법 중 하나를 연결상태로 사용합니다.

1). “HTTP 비지속 연결”(HTTP non-persistent connection) : 한 번 3way-handshake로 연결하여 정보를
하나 전달 받고 TCP연결을 끊고를 반복하여 정보를 전달하는 방법입니다.

2). “HTTP 지속 연결”(HTTP persistent connection) : 한 번 3way-handshake로 연결하여 정보를 여러번 요청하여 받고
마지막에 연결을 끊어 정보를 전달하는 방법입니다.


HTTP는 “request message”(메시지 형식)을 준수하여야만 문맥을 이해할 수 있습니다.

다음은 request message를 나열한 것입니다.

1). HTTP 응답 메시지 포멧은 상태라인 – 헤더라인 – 공백라인 – 메시지 ; 로 구성되어 있습니다.

2). HTTP 응답 메시지 포맷은 라인끝에 반드시 \r\n 이 들어가야 개행임을 알 수 있습니다.

3). HTTP 응답 메시지 포맷은 띄어쓰기를 구별합니다, HTTP, CRUD는 대문자로 기입해야 합니다.

4). 상태라인에는 {HTTP와 버전 또는 CRUD와 파일 주소} {상태코드} {상태코드에 따른 사유문구}\r\n 로
구성되어 있습니다.

5). 헤더라인에는 {해당 HTTP에 대한 각종 정보}: {정보의 내용}\r\n 들로 구성되어 있습니다. (여러 개 가능합니다.)

6). 헤더라인이 끝나면 추가로 공백라인 \r\n이 반드시 있어야 합니다.
(즉, 헤더라인 마지막 정보의 \r\n과 함께 두 번 연속으로(\r\n\r\n) 있어야 합니다.)

7). 공백라인 이후에는 웹 메시지 내용이므로, 보통 화면에 띄울 html이 여기에 들어가게 됩니다.
( 마지막에는 \r\n 이 있어야 메시지 형식의 끝으로 인식합니다. )


링크계층 ppt 큰그림 HTTP 동작

8.3. DNS

“DNS”(Domain Name System)는 IP를 사람들이 쓰기 쉬운 이름으로 변환하여 사용하는 시스템입니다.


“FQDN”(Fully Qualified Domain Name)은 도메인의 풀네임으로 {호스트네임}.{도메인네임}으로 구성된 것을 말합니다.

예를들어 이 사이트는 www.minuset.com(또는 minuset.com) 인데,

이 때, www 가 호스트네임이 되고, minuset.com 이 도메인네임이 됩니다.

또한, “TLD”(Top Level Domain)는 가장 오른쪽에 적힌 최상위 도메인네임 입니다. ( 이 사이트의 TLD는 com 입니다. )

도메인은 역순으로, 가장 우측 최상위부터 왼쪽 하위로 구성되어 있으며,

실제로 도메인을 찾을 때도 역순으로 담당 지점을 지나 목적지까지 도달하는 방식을 사용합니다.


DNS를 IP로 치환하기 위해서는 “루트네임서버”나 서버 주변에 해당 DNS를 알고있는 서버까지
Anycast 방식으로 퍼지면서 찾아내는 방식입니다.

이 때, UDP:53 port를 보통 사용해서 DNS질의(DNS 프로토콜)를 하고,

해당 네임서버가 답을 아는경우에는 “Authoritative answer” 와 답(해당 IP)을 주고,

해당 네임서버가 답을 모르는 경우에는 다른 주변 네임서버를 검색해서 “Non-authoritative answer” 와

응답 또는 실패 결과를 줍니다.


DNS네임서버는 DNS응답 내역을 저장해 두었다가 이후 같은 질의가 왔을 때,

더 빠르게 응답하기 위해 “DNS 캐시”를 사용합니다.

DNS 캐시는 일정시간이 지나면 사라지고 질의가 지속되면 계속 캐시에서 살아남게 됩니다. (영구적이지 않습니다.)


DNS가 제공하는 서비스로는 다음 4가지가 있습니다.

1). Hostname to IP : 호스트네임을 IP주소로 변환해줍니다.

2). Host aliasing : 간단한 별칭네임으로 복잡한 호스트네임을 갈 수 있게 해줍니다.

(도메인과 IP의 다대일과 유사합니다.)

3). Mail server aliasing : 특정 메일 주소를 간단한 별칭 도메인으로 연결시켜 줍니다.

(메일주소를 도메인이름으로 할 수 있습니다. 이를 Mail forwarding 이라고도 표현합니다.)

4). Load distribution : 하나의 도메인으로 여러 IP를 연결하여 분산 접속을 할 수 있게 해줍니다.

(도메인과 IP의 일대다와 유사합니다.)


DNS네임서버에는 DNS와 함께 “자원레코드”(Resource Record 또는 RR)를 저장하고,

모든 DNS네임서버의 응답은 하나 이상의 자원레코드를 가진 메시지 형태로 응답합니다.

특정 DNS책임서버는 해당 DNS의 Type A 레코드를 가지고 있습니다.

다음은 자원레코드 유형 중 대표적으로 쓰이는 4가지를 나열 한 것입니다.

1). “A 레코드”(Address 레코드) : 호스트네임에 대한 IPv4를 명시합니다. ( AAAA 는 IPv6 입니다. )

2). “NS 레코드”(Name Server 레코드) : 도메인에 대한 책임DNS서버를 명시합니다.

3). “MX 레코드”(Mail eXchanger 레코드) : 별칭네임에 대한 메일 서버를 명시합니다.

4). “CNAME 레코드”(Canonical name 레코드) : 별칭네임에 대한 지정한 호스트네임을 명시합니다.


DNS와 IP는 보통 일대일을 쓰지만, 다대일 또는 일대다 또는 다대다도 가능합니다.


링크계층 ppt 큰그림 DNS 동작

Leave a Reply

Your email address will not be published. Required fields are marked *