IP
Міжмережевий протокол IP специфікований у RFC 791. Це самий фундаментальний протокол з комплекту TCP/IP - передає IP-дейтаграми по інтрамережі і виконує важливу функцію, що називається маршрутизацією, по суті справи це вибір маршруту, по якому дейтаграма буде випливати з пункту А в пункт B, і використання маршрутизаторів для "стрибків" між мережами.
Його основні характеристики перераховані нижче: реалізує обмін інформації пакетами, які будемо називати IP-сегментами (максимальний розмір IP-сегмента - 65535 байт); є протоколом взаємодії без установлення логічного з'єднання; для адресації вузлів мережі використовується адреса довжиною 4 байти; забезпечує в разі потреби фрагментацію IP-сегментів; IP-сегменти мають кінцевий час життя в мережі; не гарантує надійність доставки IP-сегментів адресату; не має засобів керування інтенсивністю передачі IP-сегментів стороною, що посилає, (flow control); не гарантує правильну послідовність IP-сегментів на приймаючій стороні.
Отже, IP - ненадійний протокол, що надає сервіс доставки датаграмм без з'єднання.
Під словом ненадійний ми маємо на увазі те, що не існує гарантії того, що IP датаграмма успішно досягне пункту призначення. Однак IP надає визначений сервіс обробки деяких подій. Коли що-небудь йде не так як хотілося б, як наприклад, тимчасове переповнення буфера в маршрутизатора, IP застосовує простий алгоритм обробки помилок: він відкидає датаграмму і намагається послати ICMP повідомлення відправникові. Будь-яка необхідна надійність повинна бути забезпечена верхніми рівнями (наприклад TCP).
Термін без з'єднання (connectionless) означає, що IP не містить ніякої інформації про просування датаграмм. Кожна датаграмма обробляється незалежно від інших. Це також означає, що може бути доставлена зіпсована датаграмма. Якщо джерело відправляє дві послідовні датаграммы (перша A, потім B) в один і те ж пункт призначення, кожна з них маршрутизується незалежно і може пройти по різних маршрутах, датаграмма B може прибути раніше за A.
IP заголовок.На малюнку показаний формат IP датаграми. Стандартный розмір IP заголовка складає 20 байт, якщо нема опцій.
Старший значущий біт має номер 0 (ліворуч), а молодший значущий біт з 32-х біт має номер 31 і показаний праворуч.
4 байти з 32-бітного значення передаються в наступному порядку: спочатку біти 0 - 7, потім біти 8 - 15, потім 16 - 23 і, нарешті, 24 - 31. Такий порядок руху байтів називається big endian (метод збереження або передачі даних, при якому старший значущий біт або байт стоїть першим) і обов'язковий для всіх двійкових цілих чисел у TCP заголовках при їхній передачі по мережі. Це називається порядок мережних байтів (network byte order). Машини, що зберігають двійкові цілі в інших форматах, як наприклад у форматі little endian (little endian - метод збереження або передачі даних, при якому молодший значущий біт або байт стоїть першим), повинні конвертувати значення заголовків у відповідний порядок мережних байтів перед передачею даних.
Довжина заголовка (header length) це кількість 32-бітних слів у заголовку, включаючи будь-які опції. Тому що це 4-бітне поле, воно обмежує розмір заголовка в 60 байт. Це обмеження сильно впливає на деякі опції, такі як опція запису маршруту. Звичайна величина в цьому полі (коли відсутні опції) - 5.
Поле типу сервісу (TOS - type-of-service) складається з 3-бітного поля приставки (яке в даний час ігнорується), 4 біт TOS і невикористовуваного біта, що повинен дорівнювати 0. 4 біта TOS наступні: мінімальна затримка, максимальна пропускна здатність, максимальна надійність і мінімальна вартість. Тільки один з цих 4 біт може бути встановлений в одиницю одночасно. Якщо всі 4 біти рівні 0, це означає звичайний сервіс. RFC 1340 [Reynolds and Postel 1992] указує, як ці біти повинні бути встановлені для всіх стандартних додатків. RFC 1349 [Almquist 1992] містить деякі корекції для цього RFC і більш детальний опис характеристики TOS.
Діалогові додатки, Telnet і Rlogin, вимагають звести до мінімуму затримку, тому що вони використовуються людиною інтерактивно і здійснюють невелику передачу даних. Передача файлів з використанням FTP, з іншого боку, вимагає максимальної пропускної здатності. Максимальна надійність необхідна для мережного керування (SNMP) і для протоколів маршрутизації. Новини Usenet (NNTP) - це єдиний додаток, що вимагає мінімізації вартості.
Поле повної довжини (total length) містить повну довжину IP датаграммы в байтах. Завдяки цьому полю і полю довжини заголовка, ми знаємо, з якого місця починаються дані в IP датаграмі і їхню довжину. Тому що це поле складається з 16 біт, максимальний розмір IP датаграми складає 65535 байт. Це поле змінюється в момент фрагментації і повторної зборки датаграми.
Незважаючи на то що існує можливість відправити датаграму розміром 65535 байт, більшість канальних рівнів поділять подібну датаграму на фрагменти. Більш того, від хоста не потрібно приймати датаграму розміром більше за 576 байт. TCP поділяє користувацькі дані на частині, тому це обмеження звичайно не робить впливу на TCP. Що стосується UDP, послугами якого користуються багато додатків (RIP, TFTP, BOOTP, DNS, SNMP), те він обмежує себе 512 байтами користувацьких даних, що навіть менше обмеження в 576 байт. Більшість додатків у даний час (особливо ті, котрі підтримують NFS - Network File System) дозволяють використовувати IP датаграму розміром 8192 байта.
Однак, поле повної довжини потрібно в IP заголовку для деяких каналів (як наприклад, Ethernet), що доповнює маленькі фрейми до мінімальної довжини. Незважаючи на те що мінімальний розмір фрейму Ethernet складає 46 байт (малюнок 2.1), IP датаграма може бути ще менше. Якщо поле повної довжини не було представлено, IP рівень не буде знати, скільки 46-байтных фреймів Ethernet вийде з IP датаграми.