Internet Protocol (IP) è il principale protocollo di livello 3 (rete) della pila TCP/IP. Esso è responsabile dell’instradamento nella rete dei pacchetti, che a questo livello prendono il nome datagrammi, poichè IP offre un servizio connectionless inaffidabile, best effort, ovvero appunto a datagramma: non si ha alcuna garanzia che i pacchetti arrivino a destinazione, nè tanto meno che vengano cinsegnati in ordine, senza duplicati, ecc.
Ogni datagramma IP contiene gli indirizzi IP del mittente e del destinatario. I dispositivi di relaying di livello 3, che sono i router, usano degli appositi algoritmi di routing per inoltrare ciascun datagramma ricevuto in base al suo indirizzo di destinazione, secondo il paradigma store and forward.
Quando si ha una comunicazione tra due host situati in reti diverse, i datagrammi IP possono essere trasferiti attraverso più reti, compiendo vari hop (salti) da un router al successvo, fino a raggiungere il destinatario. Se invece la comunicazione avviene tra host posti nella stessa rete, essa può avvenire direttamente tramite gli switch di tale rete, senza bisogno di router.
Un indirizzo IP — nella versione 4 del protocollo, IPv4, che è attualmente la più diffusa — è composto da 32 bit, e viene tipicamente rappresentato in notazione decimale puntata (ad esempio 193.204.59.56). I 32 bit di un indirizzo IP sono suddivisi in due porzioni: un net-id, che identifica una rete, e un host-id, che identifica un host all’interno della rete.
Esistono cinque classi di indirizzi IP: A, B, C, D ed E. Ciascuna classe comprende uno specifico intervallo di indirizzi, e assegna agli indirizzi in questo intervallo un certo significato:
Inoltre, anche all’interno di ciascuna di queste classi esistono indirizzi riservati per scopi specifi, come ad esempio il broadcast, che sono identificati da numeri particolari.
L’assegnazione di un indirizzo IP a un host può essere statica o dinamica:
L’ente che gestisce l’assegnazione degli indirizzi IP è la IANA, Internet Assigned Numbers Authority.
Un indirizzo IP può essere pubblico o privato:
La necessità degli indirizzi privati deriva principalmente dal fatto che lo spazio degli indirizzi IPv4 è troppo piccolo: con una lunghezza di 32 bit, esistono solo $2^{32}$ diversi indirizzi (circa 4 miliardi), che sono ormai esauriti (già tutti assegnati). E’ allora indispensabile dare un indirizzo pubblico a ogni macchina in una rete. Invece, ogni macchina può tranquillamente avere un indirizzo privato, dato che questo è riutilizzabile senza problemi in reti diverse.