우리가 평소에 자주 사용하는 인터넷은 사실 양쪽에 클라이언트와 서버를 두고 있다. 클라이언트와 서버가 중간에 인터넷을 두고 통신한다는 표현이 더 정확할 지도 모른다. 그렇다면 어떤 기준으로 그리고 어떤 방법으로 이들은 통신하는 것일까?

이러한 인터넷은 무수히 많은 망으로 연결이 되어 있다. 클라이언트가 "hello world"라는 요청을 보내면 인터넷 망에 있는 여러 노드를 거쳐 목적지인 서버까지 전달된다. 인터넷에서는 일종의 규약 즉, 프로토콜을 사용하며 수많은 망을 거쳐 올바른 목적지로 데이터를 보낸다.

우리가 택배를 주고 받을 때, 발송인과 수취인의 주소로 각각을 구분하듯, 통신의 객체인 클라이언트와 서버들은 각각의 주소를 가지고 있다. 이것을 IP(Internet Protocol)라고 한다.
IP주소의 역할은 지정한 목적지의 IP주소에 데이터를 전달할 수 있도록 도와주며, 패킷(Packet)이라는 통신 단위로 데이터를 전달한다. 이 패킷은 데이터에 대한 각종 정보를 가지고 있다. 출발지IP와 목적지IP로 전송 데이터를 감싸는 형태를 가지고 있다. 클라이언트가 데이터를 전송하면 이 패킷이 노드를 타고 알맞은 목적지까지 도달하게 된다. 서버 또한 데이터를 받고 다시 응답 데이터를 클라이언트에게 보낸다. 이때 목적지IP는 당연히 클라이언트의 IP주소가 된다.

패킷을 받을 대상이 어떤 상태인지 알 수 없다.
패킷이 제대로 전달되었는지 알 수 없다. 혹은 패킷이 순서대로 전달되지 않을 수 있다.

클라이언트는 데이터의 수취인인 서버가 정상적인 상태인지 아닌지 알 수가 없다. 만약 서버가 불능인 상태에서 데이터를 보내게 되면 데이터는 무의미하게 소실된다. 하지만 클라이언트는 패킷이 소실되었는지조차 알 수 없다.
서버가 정상적으로 작동하여 패킷을 제대로 받는 상황에서도 문제가 생길 수 있다. 여러 개의 패킷을 전달하는 상황에서, 먼저 보낸 패킷이 나중에 보낸 패킷보다 늦게 도착하는 경우도 발생할 수 있다.
클라이언트 A가 서버 B에게 데이터를 보낼 때 항상 같은 노드들을 타고 전달되지 않는다. 노드들의 트래픽을 고려하여 다른 경로로 전달되는데, 이 과정에서 먼저 보낸 데이터가 더 느린 경로를 타고 더 늦게 도착할 수 있다. 패킷 전달의 순서에 문제가 생길 수 있다. 이러한 문제들을 해결하기 위해 TCP와 UDP 프로토콜이 등장한다.