Передача информации в 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х фазовое рукопожатие
- Пакет с флагами SYN
Ответ Ack на запрос один этап
- SYN
- ACK
Если сервер не может установить соединение (например, переполнены буферы), то SYN не устанавливается в 1. Происходит RESET. Если по истечении тайм-аута сервер не получил ответа, он закрывает соединение. Если станция не получила подтверждения, она повторно пошлет запрос соединения.