Передача информации в TCP. Сокеты

Порты и их номера

Немного о производительности

Краткая история TCP

Заголовок

Формат дейтаграммы

Особенности

Лекция 7. Протокол TCP

TCP – протокол, ориентированный на соединение, с подтверждением, полнодуплексный.

Заголовок TCP – это блоки 32 битных слов, а данные – неструктурированные блоки байт. Каждый байт идентифицирован номером.

Исходный порт | Порт назначения | SEQ # - Номер первого байта | ACK # | Размер окна | Смещение от начала данных | Флаги | Опции | CRC

 

  • Исходный порт – 16-битный идентификатор процесса, пославшего запрос;
  • Порт назначения – 16-битный идентификатор процесса, получившего запрос;
  • SEQ # – номер последовательности байтов (номер первого байта);
  • ACK # – последний номер следующего байта, который предполагает получить источник;
  • Размер окна – количество байт, которые будут получены и отправлены.
    • Протокол TCP использует механизм скользящего окна. Скользящее окно устанавливает, сколько байт мы принимаем или передаем в текущий момент. Осуществляется механизм скользящего окна при помощи SEQ и ACK.
  • Смещение – смещение в окне;
  • Флаги:
    • URG (URGent) – показывает, что передаются срочные данные;
    • PUSH – указатель на немедленную отсылку пакета (без буферизации);
    • RST(ReSeT) – переустановка соединения URG;
    • SYN – началось соединение;
    • FIN – кончилось соединение;
  • Опции – например, макс. размер сегмента TCP;
  • CRC – считается по заголовку TCP и части заголовка IP (адреса, тип). Часть алгоритма выполняется сетевым адаптером.

TCP реализован в 1981 году. Однако с каждой версией сетевой ОС протокол TCP совершенствуется.

Протокол TCP очень влияет на производительность сети. Он не гарантирует доставку, а занимается ей.

Порт – идентификатор процесса (задачи, task), который будет выполняться на более высоком уровне. Номера портов нужно где-то вести. Регулирует номера задач организация IANA.

Для процессов, которые являются общими и описаны на верхних уровнях модели OSI (например, FTP, Telnet), выделены номера от 0 до 1023.

Существуют специальные RFC, где описаны процессы, которые зарегистрированы. Например, Oracle. Номера портов с 1024.

Есть рекомендация начинать все порты своих приложений с 8000.

Любая рабочая станция будет выбирать некий номер порта для того, чтобы передавать данные . Предположим, 8711. К номеру порта будет присоединяться IP-адрес станции, например 10.1.1.9. Вводится понятие «сокет» (socket) – IP-адрес и порт. На каком-то сервере, где работает ядро сетевой ОС, будет запущен некий процесс, например, POP3 (110 порт) и еще один процесс на порту 80. IP-адрес у них одинаковый (10.1.1.9). Сокет образуется из IP и порта. Каждый процесс идентифицируется двумя сокетами: сокетом сервера и сокетом рабочей станции. Если одновременно будет обрабатываться по данному порту несколько процессов от разных приложений – тогда порт называют мультиплексированным.

SYN=1 ACK=? SEQ=730
Начало передачи

Процедура handshaking – 3х фазовое рукопожатие

  1. Пакет с флагами SYN
  2. Ответ Ack на запрос один этап
  3. SYN
  4. ACK

 

Если сервер не может установить соединение (например, переполнены буферы), то SYN не устанавливается в 1. Происходит RESET. Если по истечении тайм-аута сервер не получил ответа, он закрывает соединение. Если станция не получила подтверждения, она повторно пошлет запрос соединения.