Упорядоченный, надежный поток байтов

ТСР-соединение доставляет данные в виде упорядоченного потока, гарантируя доставку данных. Каждый IP-пакет имеет заголовок, информация в котором идентифицирует хосты отправителя и получателя. Информации из IP-заголовка доста- точыо маршрутизаторам в сети для пересылки пакета соответствующему хосту-получателю. Однако IP-заголовок не предоставляет достаточно информации, чтобы ассоциировать входящий IP-накет с нужным сокетом. Для решения этой проблемы ТСР-отправигель создает заголовок виутри IP-иакета, который содержит дополнительную информацию. Если вновь обратиться к аналогии с обычной почтой, эго подобно помещению одного конверта внутрь другого; информации на внешнем конверте достаточно, чтобы определить адрес получателя с точиостыо до почтового отделения. С точки зрения почты, внутренний конверт является просто частью содержимого внешнего конверта. Получатель может открыть внешний конверт и изучить информацию на внутреннем конверте.

Точно так же TCP располагается поверх IP. TCP-заголовок содержится в данных IP-накета. Маршрутизаторам в сети не нужно просматривать биты в ТСР-за- головке. После того, как IP-пакет достиг компыогера-получателя, операционная система изучит TCP-заголовок, чтобы направить данные соответствующему соке- ту. Сокег идентифицируется двумя 16-битными номерами портов, которые включаются в TCP-заголовок. Разделение функций между IP и TCP очень важпо. TCP-заголовок должен содержать достаточно информации для передающего и принимающего хостов, чтобы те могли передать данные через сокет. TCP должен учитывать тот факт, что IP-пакеты могут быть утеряны, повреждены или доставлены не в том порядке. Эти проблемы решаются путем взаимодействия между TCP-отправителем и ТСР-получателем.

Рассмотрим передачу сообщения из одного приложения в другое. Операционная система на передающем компьютере делит сообщение на сегменты, каждый из которых представляет собой последовательность байтов, помещенных в IР-пакет. TCP-заголовок идентифицирует соединение, ассоциированное с сегментом. Чтобы обработать пакеты, поступающие не в том порядке, отправитель помечает каждый сегмент номером. Получатель отвечает за упорядочение пакетов, поступивших не в том порядке. Если пакет 2 прибыл до пакета 1, операционная система получающего хоста ожидает пакета 1, прежде чем доставить данные получающему приложению. Отправитель также включает информацию, помогающую получателю определить, были ли дапные повреждены в процессе передачи. В частности, ТСР-отправитель вычисляет контрольную сумму содержимого пакета и включает контрольную сумму в TCP-заголовок; получатель пересчитывает контрольную сумму и отвергает пакег, если результаты не совпадают.

Отправитель не знает, что пакеты достигли получателя. Чтобы разрешить эту проблему, получатель посылает отправителю подтверждение, указывающее, что пакеты были получены. Например, после получения сегментов 1 и 2 получатель может проинформировать отправителя, что первые два сегмента поступили. Если получатель имеет данные, ожидающие передачи, подтверждение и исходящий сегмент могут быть включены в один пакет. Если подтверждение не получено, отправитель делает предположение, что пакет 1 был утерян. В действительности доставка пакета могла быть задержана, иакет мог быть поврежден, либо угеряпо подтверждение. Однако отправитель не может распознать и различить эти ситуации. Вместо этого отправитель просто передает другую копию данных, включая порядковый номер. Если подтверждение не получено, отправитель может передать еще одну копию. При получении по крайней мере одной (неповрежденной) копии пакета получатель посылает отправителю нодтверждепие. Если поступило более одной копии, получатель может просто отвергнуть лишние копии.

Источник: Web-протоколы. Теория и практика. — M.: ЗАО «Издательство БИНОМ», 2002 г. – 592 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100