어플리케이션을 개발한다는 것은 다른 곳에 있는 어플리케이션과 네트워크를 통해서 소통하고 상호작용할 수 있다는 것이다. 그렇지만 네트워크 연결을 위한 소프트웨어을 개발하는 것이 아니라. 네트워크는 고정되어 있고 해당 어플리케이션에 특정서비스를 제공하기 때문에 어플리케이션만 구축하면 된다.
어플리케이션 구조는 네트워크 구조와는 분명히 다르다. 현재는 두종류의 네트워크 어플리케이션 구조를 사용하고 있다.
항상 동작하고 있는 호스트를 서버라고 하는데, 이 때 서버와의 서비스는 클라이언트들의 요청을 받을 때에 제공된다. 서버는 고정된 IP 주소를 가지고 있다. 이때 클라이언트들은 서버의 주소로 패킷을 보내 언제든 서버에 연결 할 수 있다. 이 때 클라이언트들간에는 연결이 일어나지 않는다. 서버를 거쳐서 서로 통신한다. 오늘날 대부분의 네트워크에서 사용하는 방식이다. 대표적인 예시로는 웹,전자메일이 존재한다.
P2P 구조에서는 중앙 서버가 존재하지않고 서로가 서버가 되어서 서로에게 데이터를 요청하고, 주고 받는다. → 이러한 특성을 ‘자가확장성’ 이라고 한다. 이러한 구조에서는 IP 주소가 계속해서 바뀌기 떄문에 IP관리 문제나 보안, 신뢰성, 성능 면에서 여러가지 고려사항이 존재한다.
: 호스트 내에서 실행되고 있는 프로그램
같은 호스트 안에서 프로세스들은 OS 에서 정의된 IPS 통신으로 상호작용이 가능하다. 하지만 다른 호스트에서 프로세스간의 상호작용은 메세지를 교환을 통해 이루워진다.
프로세는 다음과 같이 소켓을 통해서 네트워크로 메세지를 주고 받는다.
특정한 곳으로 데이터를 전달하기 위해서는 그곳의 주소가 필요하다. 이때 주소로 사용되는 식별자는 두가지가 있다. 첫번째로는 호스트의 IP 이고 두번째로는 프로세스의 port number이다. ex) HTTP server : 80, mail seerver : 25