TCP протокол простыми словами
TripiniFKYL & Сергей Зыбнев
Что такое протокол TCP?
TCP (Transmission Control Protocol) - это протокол транспортного уровня, предоставляющий транспортировку (передачу) потока данных, с необходимостью предварительного установления соединения, благодаря чему гарантирует целостность получаемых данных, также выполняет повторный запрос данных в случае потери данных. Помимо этого он проверяет дублирование пакетов.
Является обязательным протоколом стандарта TCP/IP.
Чем обеспечена надежность передачи данных?
Данные от приложения разбиваются на блоки определенного размера, которые будут отправлены.
- Когда TCP посылает сегмент, он устанавливает "таймер", ожидая подтверждения.
- Когда TCP принимает данные, он отправляет подтверждение.
- TCP осуществляет расчет контрольной суммы для заголовка и данных, если контрольная сумма не соответствует нужной, TCP отбрасывает его и не генерирует подтверждение.
- Так как TCP сегменты передаются в виде IP датаграмм, а они могут прибывать беспорядочно, так же беспорядочно могут прибывать и сегмент, после получения всех данных TCP может изменить их последовательность, получая результат в правильном порядке.
Заголовок TCP

Порядковый номер - если установлен флаг SYN, то начальное значение номера последовательности - ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь номер ISN + 1. Если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот номер последовательности.
- Номер подтверждения - если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый получателем в следующий раз.
- Длина заголовка - задается словами по 32 бита
- Размер окна - количество байт, которые готов принять получатель без подтверждения.
- Контрольная сумма - включает заголовок, данные.
- Указатель срочности - указывает последний байт срочных данных, на которые надо немедленно реагировать.
URG - флаг срочности, если = 0, поле игнорируется.
ACK - флаг подтверждения, включает поле "номер подтверждения", если = 0, поле игнорируется.
PSH - флаг требует выполнения операции push, модуль TCP должен срочно передать пакет программе.
RST - флаг прерывания соединения, используется для отказа в соединении.
SYN - флаг синхронизации порядковых номеров, используется при установлении соединения.
FIN - флаг окончание передачи, со стороны отправителя.
Рассмотрим заголовок с помощью Wireshark

TCP порты
Номер порта условное 16-битное число от 65535, указывающее, какой программе предназначался пакет. Все номера портов TCP, которые меньше чем 1024 - зарезервированы и зарегистрированны в (IANA). Номера портов UDP и TCP не пересекаются.
20-21 - File Transfer Protocol (FTP)
22 - Secure Shell (SSH)
23 - Telnet
25 - Simple Mail Transfer Protocol (SMTP)
80 - Hypertext Transfer Protocol (HTTP)
110 - Post Office Protocol (POP3)
123 - Network Time Protocol (NTP)
143 - Internet Message Access Protocol (IMAP)
161 - Simple Network Management Protocol (SNMP)
443 - HTTP Secure (HTTPS) HTTP over TLS/SSL
Как устанавливается TCP-соединения.
Предположим, что процесс, работающий на одном хосте, хочет установить соединение с другим процессом на другом хосте. Перед началом передачи каких-либо данных, согласно протоколу TCP, стороны должны установить соединение. (Процесс "трехкратного рукопожатия")

Запрашиваемая сторона отправляет SYN сегмент, указывая номер порта сервера, к которому клиент хочет подсоединиться, и исходный номер последовательности клиента (ISN).
Сервер отвечает своим сегментом SYN, содержащим исходный номер последовательности сервера. Сервер также подтверждает приход SYN клиента с использованием ACK (ISN + 1). На SYN используется один номер последовательности.
Клиент должен подтвердить приход SYN от сервера своим сегментом SYN, содержащий исходный номер последовательности клиента (ISN + 1) и с использованием ACK (ISN + 1).
Бит SYN установлен в 0, так как соединение установлено.
После установления соединения TCP, эти два хоста могут передавать данные друг другу, они могут передавать информацию одновременно.
