Home

Page 31
Page 31
background image

В  этом  смысле  можно  провести  следующую  аналогию.  Пусть  производитель  картофеля 

нуждается  в  его  транспортировке  на  дальние  расстояния,  для  чего  нанимает  перевозчика (TCP). 
Производитель  привозит  картофель  на  собственном  транспорте  ближнего  действия  (например,  в 
телегах) и сваливает на площади, при этом его привозят на площадь постоянно, по мере появления 
нового  собранного  картофеля,  так  что  куча  картофеля  на  площади  постоянно  пополняется. 
Перевозчик по мере появления собственного свободного транспорта погружает часть картофеля (в 
зависимости  от  размера  появившегося  транспорта)  и  увозит  получателю.  При  этом  не  имеет 
значения,  привозят  ли  картофель  на  площадь  в  самосвалах  или  на  тележках  (это  зависит  от 
скорости  уборки),  увозит  ли  транспортировщик  картофель  на  теплоходах  или  в  багажнике 
велосипеда (это остается на усмотрение перевозчика), в любом случае куча картофеля с площади, 
куда  ее  сваливает  поставщик  постепенно  перетекает  в  хранилище  получателя.  Этот  пример 
иллюстрирует  то,  что  ключевой  задачей TCP является  передача  всех  отданных  ему  байтов 
приложению  получателя,  при  этом  исходный  набор  байтов  рассматривается  как 
неструктурированный  поток.  Данный  пример  не  содержит  в  себе  необходимых  аналогий  для 
иллюстрации  нумерации  и  квитирования,  это  нужно  понимать – он  иллюстрирует  лишь  работу  с 
неструктурированным потоком байт.  

Из  этого  примера  ясно,  что  именно  протокол TCP отвечает  за  рассечение  потока  байтов, 

которые генерирует приложение, на части, согласующиеся с MTU сетей. Действительно, положим 
файловый сервер передает большой файл клиенту. Должно ли программное обеспечение файлового 
сервера знать, блоки данных какого размера максимально возможны в данной канальной сети? Нет, 
конечно  же,  приложение  просто  записывает  нужные  данные  в  память  (буфер  передачи TCP) по 
мере наличия там свободного места. Именно TCP должен определить, какого размера блоки данных 
необходимо  формировать  для  передачи  по  сети, «нарезать»  содержимое  буфера  передачи  на 
соответствующие  куски  (сегменты),  сформировать  собственный  заголовок  и  передать  протоколу 
третьего уровня. Более детально о тонкостях процесса сегментации мы поговорим позже, пока же 
сформулируем базовые принципы работы протокола TCP. 

•  TCP всегда устанавливает соединение между двумя приложениями перед отправкой данных 

•  После  отправки  сегмента  протокол TCP запускает  специальный  таймер  и  ожидает  от 

принимающей стороны подтверждения данного сегмента 

•  Если  за  время  таймаута  подтверждение  не  приходит, TCP выполняет  повторную  передачу 

сегмента  и  снова  запускает  таймер  повторной  передачи,  обычно  последующие  значения 
таймера  повторной  передачи  больше,  нежели  предыдущие,  в  дальнейшем  это  будет 
разъяснено. 

•  После получения сегмента TCP генерирует подтверждение (квитанцию) для отправителя 

•  На  основании  последовательных  номеров  принятых  сегментов  модуль TCP должен 

упорядочить принятые данные и передать их приложению. При этом необходимо обеспечить 
правильный  порядок  следования  данных,  отсутствие  пропущенных  данных,  отсутствие 
дублирования данных. 

 

Изучая  протокол IP мы  сначала  знакомились  с  принципами  и  методами  его  работы,  лишь 

упоминая, что в заголовке присутствуют адреса отправителя и получателя, но отсутствуют маски, а 
затем  подробно  рассматривали  заголовок  протокола,  и  по  ходу  изучения  заголовка  протокола 
детально останавливались на том, какие функции выполняют те или иные поля. С протоколом TCP 
такой подход себя не оправдывает – протокол слишком сложен и громоздок. Не удастся описать все 
принципы  его  работы,  не  рассмотрев  предварительно  хотя  бы  в  общей  форме  поля  его  заголовка 
(важнейших для понимания принципов работы протокола полей много, в отличие от протокола IP). 
С другой стороны, если предварительно делать обзор полей заголовка, нет никаких шансов по ходу 
этого  рассмотрения  детально  описывать  работу  каждого  поля.  Поэтому  мы  выбираем  следующий 
подход: сперва мы сделаем ОБЗОР заголовков TCP, лишь кратко  касаясь использования того или 
иного поля (все же методы работы протокола хотя бы в общих чертах сформулированы), а затем, 
когда  у  Вас  будет  базовая  информация  о  том,  что  вообще  есть  в  заголовке TCP, мы  станем 
последовательно изучать функционирование протокола TCP, в ходе этого изучения функции полей 
заголовка TCP будет постепенно становиться ясны.  

Итак, начнем обзор полей заголовка. Для начала отметим, что заголовок TCP может иметь 

переменную  длину  и  содержит  в  себе  обязательную  постоянную  часть  и  может  содержать 
необязательные  опции.  Длина  обязательной  части  заголовка  составляет 20 байт,  длина 


Copyright © 2021 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.