Соединение в TCP
Многие знают, что в TCP перед отправкой данных нужно установить соединение, и что для этого используется процедура "трехкратного рукопожатия". Своих студентов на экзамене я всегда спрашивал: зачем в TCP устанавливать соединение?
Самый популярный ответ: чтобы обеспечить гарантию доставки. Ведь TCP - это протокол, который надежно передает данные.
Но для гарантии доставки используются подтверждения. Чтобы подтверждать получение сегментов не нужно устанавливать соединение. В этом месте многие задумывались. Но большинство отвечало правильно.
Кроме гарантии доставки в TCP есть еще гарантия сохранения порядка следования сообщений. Чтобы сообщения не перепутались при передаче по сети, TCP нумерует данные в потоке байт. Процедура установки соединения нужна именно чтобы договориться о том, какие числа отправитель и получатель будут использовать в качестве начального номера в потоке байт. Называется процедура синхронизация, для нее используется флаг SYN (сокращение от synchronization).
Следующий вопрос: зачем такая сложная схема? Почему нельзя нумеровать байты в каждом соединение всегда с одного и того же числа, например, с нуля? Причина в том, что в сетях всегда возникают ошибки. Могут возникнуть несколько инкарнаций одного соединения. Например, отправитель установил соединение, начал передавать данные, после этого произошел сбой. Отправитель перезагрузился, снова установил соединение и начал передавать данные.
Если всегда нумеровать данные в потоке байт с нуля, то получатель не сможет отличить данные из разных инкарнаций соединения. Поэтому нужно, чтобы номера начальных байтов в потоке со временем увеличивались. Чтобы узнать, какие именно номера будут использоваться для конкретного соединения, проводится процедура синхронизации.
компьютерные сети
протокол tcp
соединение tcp