Basic TCP · AboutNet

AboutNet all about networks

Basic TCP

Содержание

Терминология

TCB - блок памяти, выделенный CPU для обработки информации одной TCP сессии. Содержит информацию о сокете и состоянии сессии;

Socket - набор src IP, src port, dst IP, dst port;

Возможны два способа создания TCB :

  • Active open - создается на клиенте, когда приложение запрашивает сокет. Далее случайным образом создается Initial Sequence Number (ISN) и отправляется SYN;
  • Passive open - создается на сервере для дальнейших нужд (“in advance”). В сокете предопределены src IP и src Port (частичный сокет) + ISN. В режиме passive open как правило создаются несколько TCB.

Установка TCP соединения

3-Way Handshake

  1. Клиент создает TCB в режиме Active Open;
  2. Клиент отправляет SYN (x);
  3. На сервере TCB уже создан в режиме Passive Open;
  4. Сервер получает SYN (x);
  5. Сервер генерирует SYN (y) и ACK (x+1) и отправляет клиенту;
  6. Клиент получает SYN (y) и отправляет ACK (y+1)

После этого соединения считается установленным.

Иногда используется 4-way handshake (2 хоста в режиме Active Open):

  • Параллельно генерируются два SYN c разных сторон с разными ISN;
  • Также параллельно отправляются два ACK с разными ISN+1;

Создание сегмента TCP

TCP может принимать от приложения блоки данных, либо непрерывный поток. Его задача – разбить принимаемые данные на сегменты.

Алгоритм Нейгла

Идея заключается в том, что наполнение сегмента происходит до тех пор, пока от принимающей стороны не пришел ACK о получении предыдущего сегмента. При этом существует максимальный размер сегмента, при достижении которого начинается наполнение следующего сегмента, а полный отправляется.

Существует возможность отключения алгоритма Нейгла, при этом данные отправляются в сеть сразу при их получении от приложения (опция TCP_NODELAY).

MSS - Maximum Segment Size. Согласуется при handshake. Обычно определяется на основе L2 MTU. Стандартный MSS - 1460 (1460 MSS + 20 IP + 20 TCP = 1500 MTU).

Window Size - максимальное количество сегментов (в байтах) , которое можно отправить без получения ACK. Динамически изменяется в процессе передачи данных. Максимальный размер окна TCP - 65535 байт. Также используется параметр Windows Scale (Window Scaling Factor), который позволяет расширить максимальный размер окна.

Клиент при отправке данных сравнивает свой и чужой Window Size и выбирает меньший из них.

Categories: Networking