Як працює інтернет

Як працює інтернет

Перш ніж описувати, як влаштований протокол TCP, давайте розберемося, навіщо він взагалі потрібен. Отже, ми хочемо відправити HTTP-запит на будь-якої віддалений комп'ютер. Ми знаємо, що на 80-й порт, але як про це дізнається комп'ютер, до якого ми звертаємося? Для нього-то запит просто прийде на його мережеву карту, тому номер порту потрібно десь прописати.

Крім того, цілком може бути, що кілька пакетів загубляться, поки йдуть від нас до віддаленого комп'ютера і назад, тому хотілося б, щоб отримання інформації було «цілісним» - не можна було щось не отримати, або отримати, але неправильно.

Щоб це контролювати, потрібно спочатку «повідомити» віддалений комп'ютер, мовляв, «Так і так, хочемо встановити з'єднання, ми такі-то, робити будемо то-то».

Саме для цього, вказівки номерів портів і контролю цілісності з'єднання і потрібен протокол TCP. Тепер розглянемо його структуру. Взята вона цілком і повністю з RFC 793, так як, як ви, напевно, пам'ятаєте, всі протоколи описані в стандартах RFC.

Як працює інтернет

Не лякайтеся великої кількості англійського тексту, зараз все буде зрозуміло. «Ширина картинки» - 4 байта, тобто, раз Source Port і Destination Port в першому рядку займають половину всієї довжини, то кожне з полів по 2 байта розміром. Відповідно, Padding довжиною 1 байт, а Sequence Number - 4 байта.

Source Port і Destination Port - це порти, відповідно, наш, і призначення. Як ви вже знаєте з попередніх статей, порт з нашого боку (Source) - випадковий, порт з боку сервера (Destination) - 80. Коли сервер буде нам відповідати, будемо навпаки, Source Port - 80, Destination Port - той же самий випадковий, з якого ми посилали запит.

Далі йдуть кілька зарезервованих біт (Reserved) і набір прапорів (URG, ACK, і так далі). Ці прапори будуть розібрані пізніше.

Поле Window каже, який максимальний розмір може прийняти комп'ютер без підтвердження. Наприклад, якщо там записано 16384, то ми можемо відсилати комп'ютера максимум 16384 байта, після чого або ми повинні отримати підтвердження того, що вони прийняті, або (якщо не отримаємо), відправляти їх ще раз, або взагалі вирішити, що комп'ютер несправний. Звичайно, цілком ймовірно, що ми отримаємо підтвердження вже після перші 1000 байт - в такому випадку, просто, ми вважаємо, що «вікно було очищено», і ми знову можемо відправляти 16384 байта.

Поле CheckSum - містить контрольну суму пакета. Розраховується вона за певним алгоритмом, для нас не дуже важливо якого, головне те, що якщо пакет буде зіпсований при передачі, контрольна сума не зійдеться, і в роботу такий пакет не піде. На нього не буде відіслано підтвердження прийому, і він буде перевідправлений повторно.

Поле Urgent Pointer спочатку призначалася для вказівки на те, що інформація «важлива», і повинна бути оброблена в першу чергу (до речі, для цієї ж мети призначався прапор URG). Але з розвитком швидкостей Інтернету про це поле все давно забули і не використовують.

Схожі статті