
150 Часть III. Web-протоколы
точно маршрутизаторам в сети для пересылки пакета соответствующему хосту-по-
лучателю. Однако IP-заголовок не предоставляет достаточно информации, чтобы
ассоциировать входящий IP-пакет с нужным сокетом. Для решения этой проблемы
ТСР-отнравитель создает заголовок внутри IP-пакета, который содержит дополни-
тельную информацию. Если вновь обратиться к аналогии с обычной почтой, это
подобно помещению одного конверта внутрь другого; информации на внешнем
конверте достаточно, чтобы определить адрес получателя с точностью до почтового
отделения. С точки зрения почты, внутренний конверт является просто частью со-
держимого внешнего конверта. Получатель может открыть внешний конверт и изу-
чить информацию на внутреннем конверте.
Точно так же TCP располагается поверх IP. TCP-заголовок содержится в дан-
ных 1Р-накета. Маршрутизаторам в сети не нужно просматривать биты в ТСР-за-
головке. После того, как IP-пакет достиг компьютера-получателя, операционная
система изучит ТСР-заголовок, чтобы направить данные соответствующему соке-
ту. Сокет идентифицируется двумя 16-битпыми номерами портов, которые вклю-
чаются в ТСР-заголовок. Разделение функций между IP и TCP очень важно.
ТСР-заголовок должен содержать достаточно информации для передающего и
принимающего хостов, чтобы те могли передать данные через сокет. TCP должен
учитывать тот факт, что 1Р-накеты могут быть утеряны, повреждены или доставле-
ны не в том порядке. Эти проблемы решаются путем взаимодействия между
ТСР-отправителем и ТСР-получателем.
Рассмотрим передачу сообщения из одного приложения в другое. Операцион-
ная система на передающем компьютере делит сообщение на сегменты, каждый из
которых представляет собой последовательность байтов, помещенных в 1Р-накет.
ТСР-заголовок идентифицирует соединение, ассоциированное с сегментом. Чтобы
обработать пакеты, поступающие не в том порядке, отправитель помечает каждый
сегмент номером. Получатель отвечает за упорядочение пакетов, поступивших не
в том порядке. Если пакет 2 прибыл до пакета 1, операцио1Н1ая система получающе-
го хоста ожидает пакета 1, прежде чем доставить данные получающему приложению.
Отправитель также включает информацию, помогающую получателю определить,
были ли данные повреждены в процессе передачи. В частности, ТСР-отнравитель
вычисляет контрольную сумму содержимого пакета и включает контрольную сумму
в ТСР-заголовок; получатель пересчитывает контрольную сумму и отвергает пакет,
если результаты не совпадают.
Отправитель не знает, что пакеты достигли получателя. Чтобы разрешить эту
проблему, получатель посылает отправителю подтверждение, указывающее, что па-
кеты были получены. Например, после получения сегментов 1 и 2 получатель мо-
жет проинформировать отправителя, что первые два сегмента поступили. Если по-
лучатель имеет данные, ожидающие передачи, подтверждение и исходящий сег-
меггг могут быть включены в один пакет. Если подтверждение не получено,
отправитель делает предположение, что пакет 1 был утерян. В действительности
доставка пакета могла быть задержана, пакет мог быть поврежден, либо утеряно
подтверждение. Однако отправитель не может распознать и различить эти ситуа-
ции. Вместо этого отправитель просто передает другую копию данных, включая по-
рядковый номер. Если подтверждение не получено, отправитель может передать
еще одну копию. При получении по крайней мере одной (неповрежденной) копии
пакета получатель посылает отправителю подтверждение. Если поступило более
одной копии, получатель может просто отвергнуть лишние копии.