Протокол IP — дейтаграммный протокол сетевого уровня без установления соединения. Его функции: фрагментация и сборка пакетов при прохождении через промежуточные сети, имеющие другие протоколы; маршрутизация; проверка контрольной суммы заголовка пакета (правильность передачи всего пакета проверяется на транспортном уровне, т.е. с помощью TCP, в оконечном узле); управление потоком — сброс дейтаграмм при превышении заданного времени жизни.
Структура дейтаграммы в IP (в скобках указано число битов) показана на рис. 1 и представлена следующим списком:
Рис. 1.  Структура IP-пакета
Приведенная структура заголовка соответствует версии IPv4. Среди недостатков этой версии — 32-битный размер адреса. Действительно, 32 бита соответствуют 232 4,3 миллиардам адресов, а это в связи с бурным ростом числа компьютеров в Internet уже вызывает затруднения с распределением адресного пространства. Поэтому разработана и постепенно вводится в действие версия IPv6, в которой применена другая структура заголовка и адресации. Как частный случай, в структуре IPv6-адреса можно разместить IPv4-адрес, т.е. сети с протоколами этих версий могут работать совместно. Пока (к 2002 г.) большинство доменов Internet работает по протоколу IPv4.
Всего в IPv4-сети одновременно может быть 216 65 тысяч дейтаграмм сообщения с разными идентификаторами, т.е. за отрезок времени, равный времени жизни дейтаграммы, может быть передано не более 216 дейтаграмм. Это один из факторов, ограничивающих пропускную способность сетей с протоколом IP. Действительно, при времени жизни 120 с имеем предельную скорость 216/120 = 546 дейтаграмм в секунду, что при размере дейтаграммы до 65 тысяч байт дает ограничение скорости приблизительно в 300 Мбит/с (такое же значение одного из ограничений предельной скорости получено выше и для протокола TCP).
С помощью 16 битов в поле "общая длина пакета" можно указать длину не более чем в 65535 байт. Однако реальные длины пакетов обычно заметно меньше, чаще всего рекомендуется иметь пакеты длиной не более 576 байт во избежание их дробления (фрагментации).
Для идентификации необходимо использовать уникальные идентификаторы пакетов. Другими словами, для разных пакетов (характеризующихся адресами получателя и отправителя и типом протокола) в сети не должно быть одинаковых идентификаторов, пока не истечет время жизни последнего пакета предыдущего сообщения.
Время жизни измеряется в хопах (числом пройденных маршрутизаторов). В первом случае контроль ведется по записанному в заголовке значению , которое уменьшается на единицу каждую секунду. Во втором случае каждый маршрутизатор уменьшает число , записанное в поле "время жизни", на единицу. При или при дейтаграмма сбрасывается.
В промежуточных сетях пакеты могут делиться на несколько фрагментов в соответствии с протоколами этих сетей. Идентификация нужна для определения принадлежности фрагмента определенной дейтаграмме. Фрагменты различаются своими номерами, а дейтаграммы — идентификаторами.
Поле "тип протокола" определяет структуру данных в дейтаграмме. Примерами протоколов могут служить TCP, UDP, ICMP и т.п. После доставки по адресу этот признак позволит определить, какой сервер должен обрабатывать поступивший пакет.
Поле "опции" в настоящее время рассматривается как резервное.
В соответствии с протоколом IP в маршрутизаторах производятся следующие действия. Сначала проверяется поле "время жизни" и, если оно равно нулю, то дейтаграмма ликвидируется. Далее по таблице маршрутизации устанавливается IP-адрес следующего маршрутизатора. Затем этот адрес переводится в MAC-адрес по ARP-таблице и пакет посылается по этому адресу к следующему маршрутизатору.