
- •Державний комітет зв’язку та інформатизації України
- •Современные проблемы информационных сетей
- •Инструменты и ресурсы
- •Формат пакета ping.
- •Программа tracert в Windows.
- •Порядок вызова
- •Программа tcpdump (снифер) сетевой анализатор для поиска неисправностией в сети и отладки сетевых приложений.
- •Использование tcpdump
- •Выходная информация, формируемая tcpdump
- •Программа netstat
- •4. Интерфейсы
- •Маршрутная таблица
- •Статистика протоколов
- •Процессы
- •Типы процессов
- •Прикладные процессы
- •Атрибуты процессов
- •Реальный (rgid) и эффективный (egid) идентификаторы группы
- •Жизненный путь процесса
- •Сигналы
- •Взаимодействие между процессами
- •Организация каналов
- •Взаимодействие между процессами
- •Размер канала
- •Функции к разделу fifo
- •Пример приложения клиент-сервер, использующего fifo для обмена данными. Клиент посылает серверу сообщенияHello, а сервер выводит это сообщение на терминал.
- •Права доступа к объекту
- •Идентификаторы и имена в ipc
- •Tcp как потоковый протокол
- •Чтение длины записи
- •Функции разрешения имён
- •Преобразование имён хостов
- •Аккуратное размыкание соединение
- •Вызов shutdown
- •Алгоритм Найгла
- •Программная реализация архитектуры клиент – сервер
- •1.2 Разработка программ в архитектуре “клиент-сервер”
- •Заполнение адресной структуры и получение сокета
- •Привязка известного порта и вывод listen
- •Принятие соединения.
- •Обмен данными
- •Программный интерфейс сокетов
- •Сокеты во FreeBsd
- •Типы соединения
- •Адресация
- •Адресация Internet
- •Interface сокетов
- •Создание сокета
- •Програмныйинтерфейс сокетов
- •Поддержка различных типов сокетов в доменах
- •Пример использования сокетов
- •Sdl-описание протокола сеансового уровня эталонной модели взаимосвязи открытых систем
- •Основные понятия
- •Описание служб
- •Описание протоколов
- •Службы ядра сеансового уровня
- •Блок данных протокола
- •Ясо-описание протокола сеансового уровня
- •Разбиение блока сеансового протокола
- •Описание блока блк-дир
- •Описание блока блк-исп
- •Описание процессов дир и рдт
- •Описание процесса исп
Аккуратное размыкание соединение
В работе TCP – соединения есть три фазы:
Установление соединения
Передача данных
Разрыв соединения
Так как TCP –соединения полудуплексные, потоки данных в разных направлениях не зависят друг от друга.
Например, клиент может соединиться с сервером, отправить серию запросов и закрыть свою половину соединения, предоставив серверу информацию о том, что больше запросов не будет. Сервер может продолжать посылать данные после того, как клиент прекратил отправлять запросы.
С другой стороны сервер может посылать в ответ сколько угодно данных, и клиент не знает заранее, когда ответ закончится, и тогда сервер закроет свой конец соединения, сигнализируя о конце передачи. После закрытия сервером своего конца соединения, TCP завершает фазу разрыва, чем сообщает клиенту о прекращении передачи данных.
Вызов shutdown
Используется как вызов close, но при этом передаётся дополнительный параметр, означающий, какую сторону закрыть.
#include<sys socket.h>
#int shutdown(int s,int how)
Возвращаемые значения:0-нормально, 1-ошибка.
How=0-закрывается принимающая сторона соединения. В UNIX все полученные после выполнения данные уничтожаются.
How=1-закрывается отправляющая сторона соединения. В сокете делается отметка, что данные посылаться больше не будут.
How=2-закрываются обе стороны соединения.
При выполнении shutdown не закрывает сокет по настоящему, так как ресурсы не освобождаются.
Алгоритм Найгла
Алгоритм Найгла предложен в 1984г. и влияет на стратегию отправки TCP-регулирует количество передаваемых по сети данных, достигая наиболее эффективного использования полосы пропускания. TCP посылает данные блоками, размер которых равен MSS-максимальный размер сегмента. При установлении соединения TCP может указать максимальный размер сегмента(MSS), но не больше, чем разрешено окном передачи. Для того, чтобы избежать перегрузки сети и затора (при превышении памяти маршрутизатора дейтограммы отбрасываются), а повторные передачи ещё больше загрузят сеть, используют два окна – окно передачи и окно перегрузки. Окно передачи, объявляемое TCP на клиентской стороне, предохраняет от переполнения его буферов. Окно перегрузки на серверной стороне не даёт превысить пропускную способность сети. Если ограничить объём передачи минимальным из этих окон, то оба требования управления потоком будут удовлетворены. Это алгоритм –медленный старт. Второй алгоритм –Найгла -требует, чтобы в TCP не было более одного неподтверждённого маленького сегмента менее MSS. Цель алгоритма Найгла - не дать TCP последовательностью мелких сегментов, а сохраняет в своих буферах небольшие блоки данных, пока не получит подтверждение на предыдущий маленький сегмент. При каждом вызове процедуры вывода TCP вычисляет объём данных, которые можно послать. Это минимальное значение количества данных в буфере передачи, размера окон передачи и перегрузки и MSS. Данные отправляются при выполнении хотя бы одного из следующих условий:
можно послать полный сегмент размером MSS
соединение простаивает и можно освободить буфер передачи
алгоритм Найгла отключён и можно опустошить буфер передачи
есть срочные данные для отправки
есть маленький сегмент, но его отправка уже задержана на длительный срок
окно приёма, объявленное на приёмной стороне открыть не менее чем наполовину
необходимо повторно передать сегмент
требуется послать ACK на принятые данные
Алгоритм Найгла нужно иметь возможность отключить, так как он уменьшает производительность const int on=1;
Setsockopt(s,IPPROTO_TCP,TCP_NODELAY,&on,sizeof(on));