네트워크 어플리케이션 : 서로 다른 종단시스켐(osi 7계층을 모두 만족하는 시스템. 즉 host)에서 동작하며, 네트워크를 통해 통신한다.
ex) 웹 서버와 웹 브라우저 간 소통
application은 network core(router, switch)를 고려할 필요가 없다.
application이 동작하는 동안 network core devices는 동작하지 않기 때문.
네트워크 어플리케이션의 구조에는 하단과 같이 client-server, P2P 구조의 2가지가 존재한다.
server :
항상 켜져 있는 호스트
이며, 고정된 IP 주소를 갖고 있다. 한 서버 호스트가 클라이언트로의 모든 요청에 응답하는 것은 불가능하므로 data center가 강력한 가상의 서버를 생성하는 데 흔히 이용된다.
client :
server와 소통하는 호스트
이며 간헐적으로 서버와 연결될 수 있다. 서버와는 다르게 유동적인 IP 주소를 가질 수 있으며, 클라이언트들끼리직접적인 소통이 불가
하다.
P2P : 는 서버에
최소한으로 의존
하거나 전혀 의존하지 않는다. 서버에 의존하는 대신 application은peer
라는 간헐적으로 연결된 호스트들이 서로직접 통신
하도록 한다. 특정 서버를 통하지 않고 peer끼리 통신하므로 이를 peer to peer(P2P)구조라고 한다.
OS에서 실제로 통신하는 것은 프로세스
이다.
process : host에서 실행되는 프로그램이다. 프로그램의 인스턴스라고 표현하기도 한다.
같은 컴퓨터 상에서 process들끼리 통신하기 위해 OS가 system call
이라는 인터페이스를 만들어 process끼리 통신함.
이를 통해 같은 컴퓨터 내의 process들끼리 inter process communication(IPC)를 할 수 있다.
실제로 IPC를 실행하는 모델에는 message passing과 shared memory방식이 있다고 한다.
서로 다른 호스트들 사이에서 프로세스 간 통신을 하려면, 먼저 상대 소켓의 주소가 필요하다.
프로세스가 메세지를 주고 받기 위해서는 그 프로세스의 소켓
을 이용한다.
socket : 데이터를 내보내거나 받는 창구. application process와 transport protocol의 인터페이스 역할을 해 api라고도 볼 수 있다.
방금 전 언급한 같은 호스트의 프로세스 간 통신에서는 process들끼리 통신하기 위해 system call이라는 인터페이스를 os에서 구축해 놓았다면, 다른 호스트의 프로세스 간 통신에서는 socket
이라는 인터페이스를 구축한다.
socket의 주소를 이용해 다른 호스트의 프로세스 간에 데이터를 주고받는다. 상대의 socket주소로 메세지를 주고받음
(message interchange)으로써 통신을 할 수 있는 것이다.
프로세스의 역할로 client와 server를 구분 지을 수 있는데, client는 두 프로세스 간의 통신 세션에서 통신을 초기화하는 프로세스이고, server는 세션을 시작하기 위해 접속을 기다리는 프로세스를 말한다.
1.4.2에서 상대 process와 통신을 하기 위해서는 상대 프로세스의 주소가 필요하다고 했는데, 이 주소가 바로 IP address와 port number이다.
ex) 우리가 네이버에 접속하고자 할 때 -> 네이버라는 웹 서버가 돌고 있는 프로세스의 소켓 주소를 입력해야 한다.
=> www.naver.com : DNS라는 system에 의해 IP로 변환
=> default로 포트 넘버 80이 입력
결과 : www.naver.com의 ip와 포트 넘버 80으로 네이버에 접속 성공!
HTTP : Hypertext(HTML) Transfer Protocol의 약자로, 웹의 application layer protocol이며, 클라이언트와 서버가 서로 HTTP 메시지를 교환해 통신함.
client : 웹의 객체들을 요청하고, 받고, 전시하는 브라우저
server : 웹 서버가 요청받은 객체를 response에 담아 보낸다.
1) 웹 페이지는 객체들로 구성되며, 이 객체들은 HTML 파일이나 JPEG 이미지, 오디오 파일 등이 될 수 있다.
웹 페이지는 여러 개의 참조된 객체들을 포함하는 base HTML-file로 구성된다.
이 때, 각 객체는 url로 주소를 지정할 수 있다.
2) http는 port번호 80을 이용하며, tcp로 서버와 클라이언트를 연결한다. 또, http는 stateless, 즉 이전의 history가 현재 영향을 끼치지 않는다.
3) HTTP에서 클라이언트와 서버의 상호작용이 TCP 상에서 발생할 때, TCP request와 TCP response가 같은 TCP 연결을 통하는가와 분리된 다른 TCP 연결을 통하는지에 따라 persistent HTTP인지, non-persistent HTTP인지가 구별된다.
가정 ) 웹 페이지가 기본 HTML 파일과 10개의 JPEG 이미지로 구성되어 있고, 총 11개의 객체가 같은 서버 내에 있다고 가정하자.
위의 상황에서의 non-persistent response time은 11 * (2RTT + transfer time)이다.
non-persistent에서 한 객체 당 response time은 tcp연결요청 - tcp 연결 수락(TCP connection initiate)의 1RTT와 객체 1개 request - response로 1RTT, 실제 파일이 이동하는 transfer time까지 합쳐서 2RTT + transfer time이 소요.
따라서 non-persistent에서 한 객체 당 response time이 2RTT + transmission time이 걸리기 때문에 총 11개의 객체가 존재하는 위 예시에는 11 * (2RTT + transfer time)이 걸리게 되는 것이다.
RTT : Round Trip Time의 약자로, 한 패킷이 클라이언트에서 서버로 갔다가 다시 되돌아오는 데 걸리는 시간을 의미한다.
가정 ) 웹 페이지가 기본 HTML 파일과 10개의 JPEG 이미지로 구성되어 있고, 총 11개의 객체가 같은 서버 내에 있다고 가정하자.
위의 상황에서의 persistent response time은 11 * (1RTT + transfer time) + 1RTT이다.
persistent에서 제일 처음 TCP 연결을 제외하고 한 객체 당 response time은 객체 1개 request - response로 1RTT, 실제 파일이 이동하는 transfer time까지 합쳐서 1RTT + transfer time이 소요.
따라서 persistent HTTP에서 한 객체 당 response time이 1RTT + transmission time이 걸리고, 객체를 제일 처음 전송할 때 TCP connection을 해야 하기 때문에 1RTT가 소요되기 때문에 총 11개의 객체가 존재하는 위 예시에는 11 * (1RTT + transfer time) + 1RTT이 걸리게 되는 것이다.