인터넷상에서 간단한 메시지 하나를 주고받기 위해서는 두 대의 컴퓨터 클라이언트와 서버로 나누어진 각각의 컴퓨터가 필요하다. 두 대의 컴퓨터가 거리상으로 멀리 있다고 가정하에 클라이언트 컴퓨터가 "Hello, World"라는 메시지를 클라이언트 컴퓨터에 보내기 위해서는 인터넷망을 사용해야 한다. 그러나 인터넷망은 단순한 규칙을 갖지 않는다. 수많은 중간 노드를 거쳐서 서버로 향하게 된다.
복잡한 인터넷망에서 클라이언트 컴퓨터가 서버 컴퓨터로 메시지를 주고받기 위해서는 최소한의 규칙이 필요하다. 이때 사용되는 규칙을 IP 주소라 한다. IP는 지정한 IP 주소(IP Address)에 데이터 전달하고, 패킷(Packet)이라는 통신 단위로 데이터 전달하는 역할을 한다. 패킷의 기본 규칙에는 출발지 IP, 목적지 IP에 대한 정보가 포함하고 있다. 이러한 패킷은 중간에 사라지거나 순서대로 오지 않을 수 있는 한계성을 갖고 있다.
IP에 문제가 되었던 패킷의 소실과 순서가 꼬이는 등의 문제를 해결할 수 있는 것이 TCP이다. TCP는 연결 지향(TCP 3 way handshake) 적인 특징을 갖고 있다. 즉 두 컴퓨터가 연결이 됐는지 확인 후 연결하고 메시지를 보낸다. 또 데이터의 전달을 보증해 주며 순서 또한 보증해 준다. 현재는 대부분의 애플리케이션에서 TCP를 사용한다.
UDP는 기능이 거의 없다. IP와 거의 같다. +PORT +체크 섬 정도만 추가되었고 단순하고 빠르다. TCP 같은 경우는 기능도 너무 많고 3 way handshake의 시간이 너무 오래 걸리며 데이터의 양도 많다. 즉 내가 더 이상 최적화할 수가 없다. 그러나 UDP는 애플리케이션 레벨에서 내가 원하는 것을 최적화할 수 있다.
만약 클라이언트 컴퓨터에 여러 가지 일을 한다고 가정했을 때 IP만 이용해서는 패킷들의 올바르게 도착할 수 있을지 알 수 없다. 그래서 TCP/IP 패킷 정보에 출발지 PORT, 목적지 PORT에 대한 정보를 포함하고 있다. 즉 다시 말해 같은 IP 내에서 프로세스 구분하는 것이 PORT이다.
기존의 IP는 신규 IP로 변경될 수 있고 기억하기 쉽지 않다. DNS를 사용한 면 이러한 문제를 해결할 수 있다. 이 시스템은 도메인 명을 IP 주소로 변환한다. 마치 전화 번 번호부 같은 역활를 한다. DNS 서버에 구입한 도메인을 등록하면 클라이언트가 DNS 서버에 도메인을 요구한다. 그럼 DNS 서버가 IP 주소를 응답하는 구조이다.