익명 사용자
로그인하지 않음
계정 만들기
로그인
youngwiki
검색
Application Layer 문서 원본 보기
youngwiki
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
원본 보기
역사
←
Application Layer
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
상위 문서: [[컴퓨터 네트워크]] ==개요== network application(네트워크 애플리케이션)은 컴퓨터 네트워크의 존재 이유이다. 애플리케이션이 없었다면, 이를 지원하기 위한 네트워크 infrastructure와 protocol이 필요하지 않을 것이다. 이러한 애플리케이션들은 인터넷의 성공을 이끄는 원동력이며, 이를 통해 인터넷은 가정, 학교, 정부, 기업 등에 이미 필수적인 부분이 되었다. 이러한 네트워크 애플리케이션은 시대에 따라 순차적으로 개발되었다. 1970~1980년대에는 이메일과 같은 text 기반의 애플리케이션이 주가 되었다. 이후 1990년대 중반에 등장한 world wide web은 여러 웹 서비스 등을 제공하며 혁명적인 변화를 만들어내었다. 이후로도 remote login, P2P file 공유, 온라인 게임등 여러 application이 개발되었고, 그 외에도 voice over IP<ref>해당 기능을 구현하는 protocol은 특허가 등록되어 있어서 사용하기 위해서는 사용료를 내야한다.</ref>, streaming stored service<ref>YouTube, Netflix등...</ref>, SNS 등의 여러 애플리케이션이 등장하며 인터넷의 발전을 가속화했다. ==Creating a Network application== 네트워크 애플리케이션 개발의 핵심은 서로 다른 end system에서 실행되며, 네트워크를 통해 communicate(통신)하는 프로그램을 작성하는 것이다. 예를 들어, web server software는 user device와 server라는 서로 다른 end system에서 실행되며, 네트워크를 통해서 상호간의 통신을 한다. 이때 중요한 점은 네트워크 애플리케이션이 네트워크를 이용할 때는 이미 만들어져 있는 core network의 infrastructure를 그래도 활용한다는 것이다. 이 때문에 소프트웨어를 작성할 때에는 네트워크의 core 부분에 대해 고려할 필요가 없으며, 마치 end system 간의 직접적인 연결이 이루어진 것처럼 고려하여 개발하면 된다는 것이다.<ref>역으로 core 부분 또한 application의 구동에 대해서 고려할 필요가 없다.</ref> 이렇게 application software 설계를 end system에 제한하면 해당 설계를 더욱 빠르게 하고, 배포 또한 더욱 빠르게 할 수 있다. ===Application archutecture=== [[파일:ClientServer.png|대체글=Client-Server Architecture|섬네일|263x263픽셀|Client-Server Architecture]] ====Client-server architecture==== client-server 아키텍쳐는 server와 client로 구성된다. * server: 다른 host(client 등)들의 요청을 처리한다. ** 항상 켜져있으므로, client는 서버와 언제나 통신할 수 있다. ** 고정되고 공개된 IP 주소를 가지고 있어서 이릍 통해 client이 서버와 통신할 수 있다. ** 또한 server가 과부화가 될 경우에는 data center를 통해 server를 확장할 수 있다. * client: 서버와 통신하고자 하는 각 유저의 device에 해당한다. ** 항상 네트워크와 연결되어 있지는 않으며, 간헐적으로 연결된다.<ref>핸드폰의 비행기 탑승 모드가 그 예시이다.</ref> ** 동적인 IP 주소를 가지고 있기 때문에, client 사이에서의 직접적인 연결은 이루어지지 않는다.<ref>노트북은 wifi에 따라 그 IP주소가 바뀐다.</ref> client-server 아키텍쳐의 가장 큰 문제는 client 간의 통신에도 server가 필요할 뿐만 아니라, server에 대한 의존도가 높아 만약의 경우에 대한 그 위험이 매우 크다는 것이다. 하지만 최근에는 server의 성능이 비약적으로 상승함에 따라, 해당 아키텍쳐의 효율이 매우 높아졌다. [[파일:P2P.png|섬네일|263x263픽셀|P2P Architecture]] ====P2P architecture==== 고정되어 있는 server가 존재하지 않는다. 그 대신에 애플리케이션은 간헐적으로 연결되는 host간의 직접적인 통신을 이용한다. 이때 임의의 end system 사이의 직접적인 통신이 이루어지며, 이는 임의의 agent가 서버로서 기능을 할 수 있다는 것을 의미한다.<ref>하지만 여전히 각 peer들은 간헐적으로 네트워크와 연결되며, 유동적인 IP 주소를 가진다.</ref> 이때 각 peer는 다른 peer에게서 서비스를 요청하고, 다른 peer에게 서비스를 제공한다. 이러한 P2P 아키텍쳐의 가장 큰 특징 중 하나는 self scalability이다. 이는 새로운 peer가 다른 peer에게 서비스를 요구함에 따라 부하가 증가하더라도, 각각의 peer가 서비스 capacity를 증가시킨다는 것이다. 즉, 네트워크의 크기가 유동적으로 변화하며 상황에 맞추어 각 end system간의 통신을 제공한다. 이러한 특징으로 인해 P2P 아키텍쳐는 비용 측면에서 효율적이다. 왜냐하면 client-server 아키텍쳐에 비해 infrastructure나 server bandwidth가 적게 필요하기 때문이다. 하지만, 매우 분산된 구조를 가지고 있기 때문에 신뢰성, 보안, 성능 면에서 client-server 아키텍쳐에 비해 약점을 가지고 있다. ==Process communicating== Process란 host내에서 동작하고 있는 program<ref>그 자체로는 저장된 파일이므로 아무런 기능이 없다.</ref>을 의미한다. 같은 host 내에서 동작하고 있는 process는 inter-process commnication을 통해서 서로 간의 상호작용을 한다.<ref>OS에 의해서 구현된다.</ref> 하지만 end system들 또한 다수의 process를 가지고 있다. 이 때문에 서로 다른 host들 사이에서도 process 사이의 communication이 이루어질 필요가 있다. 이러한 commnication은 각각의 process들이 상대 end system에 네트워크를 통해서 message를 교환하여 이루어진다. ===Client / Server process=== 네트워크 애플리케이션은 네트워크를 통해 서로 메시지를 주고받는 프로세스의 pair로 구성된다. 예를 들어 web 애플리케이션에서는 client browser process가 web server process와 message를 교환한다. 이때 초기 상태에서 통신을 시작하는 프로세스는 client process에 해당한다. 또한 통신을 시작하기 위해 client의 message를 기다리는 프로세스는 server process에 해당한다. 이때 P2P 아키텍쳐에서는 한 peer의 프로세스에서 다른 peer의 프로세스로 파일이 전송된다. 통신하는 프로세스들의 각 pair에 대해서는 두 프로세스 중 하나를 client로, 다른 하나를 server로 구분한다. 예를 들어 P2P file sharing에서는 파일을 다운로드하는 peer가 client로, 파일을 업로드하는 peer가 server로 구분된다. 하지만 P2P 아키텍쳐에서는 하나의 프로세스가 client이자 server의 역할을 한다. 실제로 P2P file sharing에서는 하나의 프로세스가 파일을 업로드도, 다운로드도 수 있다. 그럼에도 두 프로세스 간의 통신을 고려할 때, 여전히 하나는 client, 다른 하나는 server로 구분된다. ===Socket=== 대부분의 애플리케이션은 통신하는 프로세스들의 pair로 구성되며, 각 pair의 두 프로세스는 서로 message를 주고받으며, 모든 message는 네트워크를 통해 전달된다. 이때 프로세스는 socket이라는 software interface를 통하여 message를 송수신한다. socket은 문과 같은 역할을 한다. 프로세스가 다른 host의 프로세스에 message를 보내고자 할 때, 해당 message는 문(socket)을 통해 네트워크로 전송된다. 전송된 message는 transport infrastructure를 통해 목적지로 설정된 host에 도달하면 message는 해당 host의 프로세스의 문(socket)을 통과하고, 최종적으로 수신된다. [[파일:IPandPort.png|섬네일|300x300픽셀|IP address and Port number to indentify process]] ===Addressing Processes=== message가 특정 프로세스로 잘 전달되어 수신되기 위해서는 수신하는 프로세스를 지정하는 identifier가 필요하다. 이때 두가지 정보가 필요한데, 하나는 host의 주소이고, 하나는 host 내에서 프로세스를 지정하는 식별자이다. 이때 인터넷에서 host는 IP address로 식별된다. IP address는 host device가 가지는 128 bits의 고유한 주소이다. 또한 해당 host 내에서 프로세스를 identify하는 데에는 port number가 사용된다. port number는 host의 프로세스에 지정되는 0~65635의 범위에 해당되는 indentifier이다. 이때 IP address와 port number는 pair로 사용되어 message가 의도된 프로세스에 잘 수신되도록 한다. 오른쪽의 그림은 IP address와 port number를 통해서 web server와 mail server로 올바르게 전달되는 message를 보여준다. 보통 web server와 mail server는 하나의 server 안에 구축되어 있기 때문에, port number에 따라 그에 맞는 프로세스로 수신되는 것을 보여준다. [[파일:PortnumberAssign.png|테두리|프레임없음|300x300픽셀]] 이때 port number는 프로세스에 따라 저장되므로, port number가 다른 프로세스의 port number와 겹치는 경우가 발생할 수 있다. 이러한 상황을 막기 위해서 특정한, 자주 사용되는 프로세스들은 port번호가 미리 지정되어 있다. ==각주== [[분류:컴퓨터 네트워크]]
Application Layer
문서로 돌아갑니다.
둘러보기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록