Home

Page 47
Page 47
background image

последней  квитанции.  Следовательно,  передавая  новую  порцию  данных,  клиент  указывает  в  поле 
Sequence Number значение X+1+Q. Что клиент указывает в поле Acknowledged Number? Очевидно, 
клиент по прежнему ожидает от сервера байта с номером Y+1, следовательно поле Acknowledged 
Number  заполняется  клиентом  значением Y+1. Можно  ли  сказать,  что  клиент  передает  серверу 
квитанцию?  Формально  данный  сегмент  ничего  нового  не  квитирует – сервер  еще  вообще  не 
передавал  данных  серверу,  однако  каждая  сторона  обязана  заполнять  в  каждом  сегменте  поле 
Acknowledged Number номером ожидаемого байта и устанавливать флаг ACK, показывающий, что 
поле Acknowledged Number необходимо интерпретировать удаленной стороне. Итак, пусть сегмент 
номер 6 передан – как  сервер  сформирует  на  него  квитанцию  при    условии,  что  собственных 
данных  для  передачи  у  сервера  нет – попросим  помочь  ответить  на  этот  вопрос  студентов, 
проверим  их  понимание.  Сначала  подчеркиваем,  поле Acknowledged Number должно  принять 
значение X+1+Q+W, затем  поясняем,  почему  поле Sequence Number по  прежнему  принимает 
значение Y+1, более того, так как в данном сегменте полезных данных тоже нет, то и следующем 
(как минимум) сегменте, который пошлет сервер, поле Sequence Number так же будет равно Y+1. И 
еще  раз  для  закрепления:  пусть  клиент  передает  еще  один  сегмент  с R байт  полезных  данных, 
просим  студентов  самих  указать  соответствующие  значения  полей  Sequence Number и 
Acknowledged Number.  

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

следующее: 
•  TCP  может  работать  с  гарантированием  доставки  данных  в  том  случае,  когда  существует 

однонаправленный поток данных между приложениями, в таком случае в обратном направлении 
отправляются TCP сегменты БЕЗ полезных данных – чистые квитанции 

•  В поле Sequence Number ВСЕГДА необходимо указывать номер байта, который будет первым 

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

•  В поле Acknowledged Number всегда необходимо указывать ОЖИДАЕМЫЙ от партнера номер 

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

•  Значения,  используемые  в  поле Sequence Number клиентом  жестко  связаны  со  значениями, 

которые  будут  использованы  в  поле Acknowledged Number сервером,  и  наоборот,  значения, 
используемые в поле Sequence Number сервером жестко связаны со значениями, которые будут 
использованы  в  поле Acknowledged Number клиентом.  Значения  полей Sequence Number, 
используемые  клиентом  и  сервером  НЕ  связаны,  значения  полей Acknowledged Number, 
используемые клиентом и сервером так же НЕ связаны. У студентов часто возникает проблема – 
они  ищут  связь  между  значениями  полей Sequence Number двух  участников  соединения. 
Рассмотрим такой пример: пусть я нумерую свои бумажные письма числами (1, 2, 3 etc), а Вы 
нумеруете  свои  письма  буквами (a, b, с etc), при  этом  в  каждом  письме  мы  в  уголке  пишем 
номер  данного  письма,  ставим / и  пишем  номер  последнего  прочтенного  письма  собеседника. 
Ясно,  что  в  моих  письмах  до  черты  ВСЕГДА  будут  цифры  а  после  черты – всегда  буквы,  а  в 
Ваших наоборот, до черты – буквы, после черты – цифры и никогда не возникнет иная ситуация.  

Подчеркнем,  что  рассмотренный  пример  иллюстрирует  ВОЗМОЖНОСТЬ  протокола TCP 

работать в условиях, когда в одном из направлений соединения нет потока данных, при этом TCP 
может работать и в условиях, когда поток данных есть в обоих направлениях.  
 


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

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