Протокол TCP — это протокол, который ориентирован на соединения и предназначен для обеспечения надежного обмена информационными данными между процессами, выполняемыми или на одном и том же компьютерном оборудовании или на различных компьютерных устройствах.
Сущность понятия «протокол ТСР»
Протокол TCP (Transmission Control Protocol, что означает, протокол управляющий передачей) применяется в качестве надежного протокола, обеспечивающего взаимодействие через взаимосвязанную сеть компьютеров. TCP выполняет проверку того факта, что данные доставлены по назначению и без ошибок.
TCP является ориентированным на соединения протоколом, предназначенным для обеспечения надежного информационного обмена среди процессов, выполняемых или на одном и том же компьютерном оборудовании или на разных компьютерах. Термин «ориентированный на соединения» подразумевает, что пара процессов или приложений прежде чем обменяться какими-нибудь данными должны организовать TCP-соединение. В этом моменте протокол TCP отличается от протокола UDP, который является протоколом «без организации соединения» и позволяет осуществлять широковещательную передачу данных неопределенному количеству пользователей.
Если приложение выполняет отправку данных при помощи TCP, то данные перемещаются вниз по стеку протоколов. Данные должны пройти по каждому уровню и в конце концов должны быть переданы через сеть в виде потока битов. Каждый уровень в совокупности протоколов TCP/IP способен добавить к данным определённую информацию в форме заголовков.
По прибытии пакета на конечный узел в сети, он снова должен пройти через все уровни снизу доверху. Все уровни проверяют данные, выделяя из пакета свою информацию в заголовке и, наконец, данные должны достигнуть серверного приложения в том же самом формате, в каком они покинули приложение-клиент.
Общие сведения о протоколе TCP
Сегментом является порция данных, которую TCP отправляет на IP. Порция данных, которую IP должен отправить уровню сетевого интерфейса, именуется дейтаграммой IP. Все сегменты TCP, отправленные через соединение, обладают назначенным ему числом, которое именуется «порядковым номером» (sequence number). Оно применяется для того, чтобы обеспечить получение данных в правильном порядке.
На рисунке ниже представлена структура заголовка TCP:
Рисунок 1. Структура заголовка TCP: Автор24 — интернет-биржа студенческих работ
Порядковые номера и номера подтверждений применяются TCP для того, чтобы обеспечить получение всего пакета данных в необходимом порядке. Биты управления должны содержать различные флаги, которые указывают статус данных. Данные биты управления, обычно представляемые трехбуквенными сокращениями, бывают следующих типов:
- Бит URG, который сообщает, что у сегмента имеется набор срочных данных.
- Бит ACK, который сообщает, что у сегмента имеется номер подтверждения.
- Бит PSH, который указывает, что данные следует протолкнуть к получающему пользователю.
- Бит RST, который служит для сброса соединения.
- Бит SYN, который применяется для синхронизации порядковых номеров.
- Бит FIN, который указывает на конец данных.
Для того, чтобы установить соединения TCP применяет процесс, именуемый «трехфазным квитированием». Как видно из названия, этот процесс имеет в своём составе три шага:
- Клиент должен инициировать взаимодействие с сервером, отправляя сегмент с установленным битом SYN. Данный сегмент должен содержать начальный порядковый номер клиента.
- Сервер должен ответить отправкой сегмента с вложенными битами SYN и ACK. Данный сегмент должен содержать начальный порядковый номер сервера и номер подтверждения, который на единицу больше порядкового номера клиента (то есть, он равен следующему порядковому номеру, ожидаемому от клиента).
- Клиент подтверждает данный сегмент путём отправки обратно сегмента, в котором установлен бит ACK. Номер подтверждения должен быть на единицу больше порядкового номера сервера, а порядковый номер должен быть равен номеру подтверждения сервера.
TCP должен передавать данные порциями, которые называются сегментами. Для гарантирования правильного и в должном порядке получения сегментов, каждому из них присваивается порядковый номер. Получатель должен отправить подтверждение получения сегмента. Когда подтверждение не приходит до истечения интервала, то есть, тайм-аута, то данные должны быть отправлены снова. Каждому октету (восьми битам) данных присваивается порядковый номер. Порядковый номер сегмента равняется порядковому номеру первого октета данных в сегменте и это число должно быть отправлено в заголовке TCP этого сегмента.
TCP применяет порядковые номера для того, чтобы гарантировать такой момент, что дублирующие данные получающему приложению передаваться не будут, и данные будут доставлены в правильном порядке. Заголовок TCP должен содержать контрольную сумму, чтобы гарантировать правильность данных при доставке. Если будет принят сегмент с неправильной контрольной суммой, то он просто будет отброшен, и подтверждение не будет отправлено. Это подразумевает, что, когда значение тайм-аута истечет, отправитель должен повторить передачу сегмента.
TCP осуществляет управление объемом направляемых ему данных, выполняя возврат с каждым подтверждением «размер окна». «Окном» является объем данных, который способен принять получатель. Между прикладной программой и потоком данных в сети расположен буфер данных. «Размер окна» практически является разностью между размером буфера и объемом сохраненных в нем данных. Это число должно быть отправлено в заголовке для того, чтобы сообщить удаленному хосту о текущем размере окна. Такой прием принято называть «скользящим окном» (Sliding Window). Принятые данные должны сохраняться в данном буфере, и приложение имеет возможность обращения к буферу и считывания из него данных со свойственной ему скоростью. По мере того как приложение выполняет считывание данных, буфер опустошается и может принять следующий пакет данных, поступающих из сети.