По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
На сегодняшний день распространение компьютерных сетей ни у кого не вызывает удивления. Десятки тысяч компаний ведут свою деятельность, так или иначе используя компьютеры, ноутбуки и другие устройства. Поэтому одной из самых востребованных на рынке на сегодняшний день является профессия сетевого администратора. В любой мало-мальски современной компании именно этот сотрудник является ключевым, ведь без его деятельности остальные сотрудники не смогут оперативно обмениваться данными для обработки, а значит затратят больше времени и в итоге будут оставлены позади более технологичными и эффективными конкурентами. Что это вообще такое? Сетевое администрирование это, говоря по-простому, обслуживание компьютерной сети организации. То есть, прокладка и настройка сети, подключение новых устройств, создание новых локальных сетей и подсетей, курирование работы сети, а также повышение эффективности обмена данными путем внедрения новых методик. Итак, чтобы получить профессию сетевого администратора прежде всего необходимо пройти обучение. Отмечу, что специалисты с высшим или средним специальным профильным образованием гораздо более востребованы на рынке труда. Однако сейчас получение профильного или смежного образования не является проблемой многие ВУЗы и ССУЗы стран СНГ подготавливают специалистов соответствующей квалификации. Специальность "сетевой администратор" или "сетевой инженер" можно найти, например, в московских МТУСИ, МФТИ, МИФИ, МГУ, МГТУ Баумана, МИРЭА, питерских СПбГУ, СПбГМТУ, СПбПУ, новосибирских ННИГУ и СГУГиТ, минских БГУ и БГУИР Более двух с половиной сотен ВУЗов предлагают обучение по данной специальности А самому можно? Конечно, есть вариант изучить сетевое администрирование самостоятельно на недостаток информации в век интернета жаловаться грех. Однако в этом случае будущий сетевой администратор должен обладать хорошей самодисциплиной и усидчивостью для усвоения теоретического материала. Однако, теория теорией, а практика - это практика. Не лишним будет устроиться на стажировку помощником сетевого администратора в какую-нибудь организацию, чтобы постичь практическую сторону вопроса: архитектуру сетей, настройку коммутаторов, обновление сетевого ПО на серверах и рабочих станциях (особенно полезным будет стать специалистом-универсалом: проводить настройку сети под ОС Linux и Windows, уметь работать с DevOps, освоить искусство построения сети). Также это хороший шанс для продолжения карьеры. Имея за плечами опыт работы с локальными сетями, можно добавлять новую строчку в резюме. Также не лишним будет отметить участие в профильных обучающих лекциях, семинарах и вебинарах. Это также необходимые для работы мероприятия, поскольку в этой профессии, чтобы оставаться конкурентоспособным специалистом, необходимо идти в ногу со временем, изучать и применять новые методы работы и уметь работать с большим количеством техники, как правило, "заточенной" под различные сетевые стандарты. Не пренебрегайте дополнительным обучением, особенно если по его итогам обучающая компания выдает сертификат о прохождении многие работодатели сочтут наличие такого документа бесспорным плюсом. (Причем, даже если обучение будет пройдено не по компьютерным сетям, а, скажем, по тестированию программ это смежные специальности). Итак, пройдя вышеописанные этапы Вам осталось только найти подходящую вакансию. Разместите резюме на соответствующем сайте и ждите звонков от компаний, заинтересованных в поиске сотрудника. Сразу обращаю Ваше внимание, что многие компании понимают работу системного администратора как "слесаря по компьютерам", который будет выполнять кучу работы, не связанной с тем, что прописано в должностных обязанностях. Поэтому не стесняйтесь уточнять этот вопрос при телефонных беседах или при личных собеседованиях. А что в итоге? Пройдя собеседование и получив согласие, присмотритесь к организации, в которой Вы планируете работать. Поищите в интернете отзывы бывших сотрудников. Если всё в порядке смело заступайте в должность и несите трудовую в отдел кадров. Скоро в ней будет красоваться надпись "Сетевой администратор". Заработная плата на этом поприще (на старте!) составляет примерно 50-70 тысяч рублей. Это не так уж и мало в наше время. Но если найти узкую специализацию и продолжать в ней развитие есть все шансы эту цифру удвоить, а то и утроить разумеется, если повезет с компанией-работодателем.
img
В этом руководстве узнаем, как настроить сервер Nginx для производственной среды. Тестовый веб-сервер отличается от рабочего сервера в планах безопасности и производительности. По умолчанию, веб-сервер Ngnix готов к работе сразу после установки. Тем не менее, настройки по умолчанию недостаточны для рабочего севера. Поэтому мы сфокусируемся на настройке сервера для большей производительности в случае высокой и нормальной нагрузки, а также на настройках безопасности в целях защиты от любопытного пользователя. Если у вас не установлен веб-сервер, можете узнать, как сделать это перейдя по ссылке. Здесь показано как установить Ngnix на Unix платформы. Рекомендуется выбирать установку из исходного кода, так как обычный релиз не включает некоторые модули, используемые в этом руководстве. Настройка производительности и безопасности Nginx Требования У вас должны быть установлены нижеследующие компоненты и убедитесь, что веб-сервер запущен на системе на базе Debian, например Ubuntu. Ubuntu или любая система семейства Debian wget Vim (текстовый редактор) Также имейте ввиду, что некоторые команды из этого руководства придется запускать от имени привилегированного пользователя пользуясь командой sudo. Разбор структуры конфигурации Nginx В этом разделе рассмотрим следующие вопросы: Структура Nginx Разделы событий, HTTP и Mail Правильный синтаксис Nginx В конце раздела узнаете об структуре конфигурационного файла Nginx, роль и назначение каждого раздела и как задавать директивы внутри разделов. Весь файл конфигурации Nginx разделен на такие разделы, как event section, http section, mail section и т.д. Основной конфигурационный файл расположен по пути /etc/ngnix/ngnix.conf, а другие - /etc/nginx. Основная секция В этой секции расположены директивы, для которых нет специальных разделов. Такие директивы как user nginx, worker_processes 1, error_log /var/log/nginx/error.log warn, pid /var/run/nginx.pid могут быть расположены в этом разделе. Но некоторые из этих директив могут быть в секции event, например werker_processes. Разделы (Секции) В Nginx разделы используются для определения конфигурации разных модулей. Например, секция http section содержит настройки ngx_http_core module, секция even section определяет настройки ngx_event module, а секция mail хранит настройки модуля ngx_mail module. Список доступных разделов можно просмотреть по этой ссылке. Директивы Директивы в Nginx состоят из имени переменной и ряда аргументов. Например, директива worker_processes – имя переменной, а auto – значение: worker_processes auto; В конце каждой директивы обязательно нужно поставить точку с запятой ; Наконец, файл конфигурации Nginx должен соответствовать определенному набору правил. Ниже приведен допустимый синтаксис конфигурации Nginx: Директивы начинаются с имени переменной, а затем следуют один или несколько аргументов Директивы заканчиваются точкой с запятой ; Разделы определяются фигурными скобками {} Раздел может быть внутри другого раздела Конфигурация вне любого раздела является частью глобальной конфигурации Nginx. Строки, начинающиеся со знака #, являются комментариями. Настройка производительности Nginx В этой части мы сконфигурируем Nginx для лучшей работы как во время интенсивного трафика, так и во время пиковой нагрузки. Будут рассмотрены следующие настройки: Workers Активность Ввода/вывода диска Сетевой активности Буферов Сжатия Кеширования Времени ожидания Итак, в терминале введите следующую команду, чтобы перейти в директорию nginx и показать ее содержимое: cd nginx && ls Найдите папку conf. В этой папке и находится файл nginx.conf. Мы используем этот файл для настройки Nginx. Теперь, чтобы перейти в папку conf и открыть файл nginx.conf с помощью редактора vim, выполните следующие команды: cd conf sudo vim nginx.conf Ниже на скриншоте показан как выглядит файл nginx.conf Workers Чтобы улучшить работу веб-сервера Nginx нужно настроить должным образом так называемые воркеры. Это своего рода потоки ядра, которые управляют параллельным выполнением процессов. Настройка воркеров дает возможность эффективней обрабатывать запросы клиентов. Если все еще не закрыли vim, нажмите i чтобы перейти к режиму редактирования nginx.conf. Скопируйте и вставьте код указанный ниже в раздел events: events { worker_processes auto; worker_connections 1024; worker_rlimit_nofile 20960; multi_accept on; mutex_accept on; mutex_accept_delay 500ms; use epoll; epoll_events 512; } worker_processes: Эта директива регулирует количество воркеров в Nginx. Значение этой директивы устанавливается на auto, чтобы разрешить Nginx определять количество доступных ядер, дисков, загрузки сервера и сетевой подсистемы. Однако можно определить количество ядер, выполнив команду lscpu на терминале. worker_connections: Эта директива задает значение количества одновременных подключений, которые могут быть открыты воркером. Значение по умолчанию - 512, но здесь оно установлено 1024, что позволяет одному воркеру одновременно принимать соединение от клиента. worker_rlimit_nofile: Эта директива как-то связана с worker_connections. Для обработки большого одновременного соединения устанавливается большое значение. multi_accept: Эта директива позволяет воркеру принимать множество соединений в очереди одновременно. Очередь в этом контексте просто означает последовательность объектов данных, ожидающих обработки. mutex_accept: Эта директива отключена по умолчанию. Но поскольку мы настроили много работников в Nginx, мы должны включить его, как показано в коде выше, чтобы позволить работникам принимать новые соединения один за другим. mutex_accept_delay: Эта директива определяет время ожидания воркера перед принятием нового подключения. После включения accept_mutex воркеру назначается блокировка mutex на период, указанный в accept_mutex_delay. По истечении этого периода следующий воркер готов принять новые подключения. use: Эта директива указывает метод обработки подключения от клиента. В этом руководстве мы решили установить значение epoll, потому что мы работаем на платформой Ubuntu. Метод epoll является наиболее эффективным методом обработки для платформ Linux. epoll_events: Значение этой директивы указывает количество событий, которые Nginx передаст ядру. Чтение/запись диска В этом разделе мы настроим асинхронные операции ввода-вывода в Nginx для обеспечения эффективной передачи данных и повышения эффективности кэширования. Дисковый ввод-вывод относится к операциям записи и чтения между жестким диском и ОЗУ. Мы будем использовать функцию sendfile() внутри ядра для отправки небольших файлов. Для задания директив можно использовать http section, location section и server section. location section и server section могут быть вложены в разделе http section, чтобы сделать конфигурацию более читабельной. Скопируйте и вставьте следующий код в location section, расположенный в http section: location /pdf/ { sendfile on; aio on; } location /audio/ { directio 4m directio_alignment 512 } Sendfile: Чтобы использовать ресурсы операционной системы, установите для этой директивы значение on. Sendfile передает данные между дескрипторами файлов в пространстве ядра ОС, не отправляя их в буферы приложений. Эта директива будет использоваться для обслуживания небольших файлов. Directio: Эта директива повышает эффективность кэширования, позволяя выполнять чтение и запись непосредственно в приложение. Directio - это функция файловой системы каждой современной операционной системы. Эта директива будет использоваться для обслуживания больших файлов, например видео. Aio: Эта директива обеспечивает многопоточность для операций записи и чтения. Многопоточность - это модель выполнения, позволяющая выполнять несколько потоков отдельно друг от друга при совместном использовании ресурсов процесса хостинга. directio_alignment: В этой директиве для переноса данных назначается значение размера блока. Она касалась директивы directio. Сетевой уровень В этом разделе мы используем такие директивы, как tcp_nodelay и tcp_nopush, чтобы небольших пакеты не ждали в очереди перед отправкой. Обычно, когда пакеты передаются в "частях", они имеют тенденцию заполнять высоконагруженную сеть. Джон Нагл построил алгоритм буферизации для решения этой проблемы. Целью алгоритма буферизации Nagle является предотвращение заполнения высоконагруженной сети небольшими пакетами. Скопируйте и вставьте следующий код в раздел HTTP: http { tcp_nopush on; tcp_nodelay on; } tcp_nodelay: Эта директива по умолчанию отключена, чтобы позволить небольшим пакетам ждать указанный период времени, прежде чем они будут отправлены одновременно. Для немедленной отправки всех данных эта директива включена. tcp_nopush: Поскольку tcp_nodelay директива включена, небольшие пакеты отправляются одновременно. Однако, если вы все еще хотите использовать алгоритм буферизации Джона Нагле, мы также можем включить tcp_nopush, чтобы собрать пакеты в одну пачку и отправлять их все одновременно. Буфер Рассмотрим, как настроить буферы запросов в Nginx для эффективной обработки запросов. Буфер - это временное хранилище, где данные хранятся в течение некоторого времени и обрабатываются. Можно скопировать код указанный ниже в раздел server. server { client_body_buffer_size 8k; client_max_body_size 2m; client_body_in_single_buffer on; client_body_temp_pathtemp_files 1 2; client_header_buffer_size 1m; large_client_header_buffers 4 8k; } Важно четко понимать, функции указанных директив client_body_buffer_size: Эта директива задает размер буфера для тела запроса. Если планируется запустить веб-сервер на 64-разрядных системах, необходимо установить значение 16k. Если требуется запустить веб-сервер в 32-разрядной системе, установите значение 8k. client_max_body_size: Если вы собираетесь обрабатывать большие загрузки файлов, необходимо установить для этой директивы значение не менее 2m или более. По умолчанию установлено значение 1m. client_body_in_file_only: Если вы отключили директиву, закомментировав ее client_body_buffer_size, а директива client_body_in_file_only включена, Nginx будет сохранять буферы запросов во временный файл. Это не рекомендуется для производственной среды. client_body_in_single_buffer: Иногда не все тело запроса хранится в буфере. Остальная часть сохраняется или записывается во временный файл. Однако если предполагается сохранить или хранить все запросы в буфер запросов в одном буфере, необходимо включить эту директиву. client_header_buffer_size: Эту директиву можно использовать чтобы дать заголовков запросов доступ к буферу. Это значение можно задать равным 1m. large_client_header_buffers: Эта директива используется для задания максимального количества и размера для чтения заголовков больших запросов. Максимальное число и размер буфера можно точно установить в 4 и 8k. Сжатие Еще одним способом оптимизации работы веб-сервера является сжатие объема данных, передаваемых по сети, является. В этом разделе мы используем директивы, такие как gzip, gzip_comp_level, и gzip_min_length, чтобы сжать данные. Вставьте следующий код в раздел http, как показано ниже: http { gzip on; gzip_comp_level 2; gzip_min_length 1000; gzip_types text/xml text/css; gzip_http_version 1.1; gzip_vary on; gzip_disable "MSIE [4-6] ."; } gzip: Если требуется включить сжатие ответа, установите значение этой директивы в on. По умолчанию он отключен. gzip_comp_level: Эту директиву можно использовать для установки степени сжатия ответа. Чтобы не тратить ресурсы ЦП, не нужно устанавливать слишком высокий уровень сжатия. По шкале от 1 до 9 лучше установить уровень сжатия 2 или 3. gzip_min_length: Устанавливает минимальную длину ответа, который будет сжиматься методом gzip. Длина определяется только из поля content-length заголовка ответа. Можно установить значение более 20 байт. gzip_types: Эта директива разрешает сжатие ответа методом gzip для указанных MIME-типов. По умолчанию, тип text/html всегда сжимается. Можно добавить другой тип, например, text/css, как показано в коде выше gzip_http_version: Эта директива позволяет выбрать минимальную HTTP-версию запроса, необходимую для сжатия ответа. Можно использовать значение по умолчанию 1.1. gzip_vary: Разрешает или запрещает выдавать в ответе поле заголовка Vary: Accept Encoding, если директива gzip включена. gzip_disable: Некоторые браузеры, такие как Internet Explorer 6, не поддерживают сжатие gzip. Эта директива использует поле User-Agent заголовка для отключения сжатия методом gzip для определенных браузеров. Кеширование Используйте функции кэширования, чтобы сократить количество обращений для многократной загрузки одних и тех же данных. Nginx предоставляет функции кэширования метаданных статического содержимого через директиву open_file_cache. Эту директиву можно поместить в разделы server, location и http: http { open_file_cache max=1,000 inactive=30s; open_file_cache_valid 30s; open_file_cache_min_uses 4; open_file_cache_errors on; } open_file_cache: Эта директива по умолчанию отключена. Включите его, если требуется внедрить кэширование в Nginx. В нем могут храниться дескрипторы открытых файлов, информация об их размерах и времени модификации, информация о существовании каталогов, информация об ошибках поиска файла — “нет файла”, “нет прав на чтение” open_file_cache_valid: Эта директива определяет время, через которое следует проверять актуальность информации об элементе в open_file_cache. open_file_cache_min_uses: Задаёт минимальное число обращений к файлу в течение времени, заданного параметром inactive директивы open_file_cache, необходимых для того, чтобы дескриптор файла оставался открытым в кэше. open_file_cache_errors: Эту директиву можно использовать, чтобы разрешить Nginx кэшировать ошибки, такие как “нет файла”, “нет прав на чтение” при доступе к файлам. Таким образом, каждый раз, когда к ресурсу обращается пользователь, не имеющий на это права, Nginx отображает тот же самый отчет об ошибке «в доступе отказано» Время ожидания Настройте время ожидания, используя директивы, такие как keepalive_timeout и keepalive_requests, чтобы предотвратить растрачивание ресурсов при длительном ожидании подключений. В разделе HTTP скопируйте и вставьте следующий код: http { keepalive_timeout 30s; keepalive_requests 30; send_timeout 30s; } keepalive_timeout: Сохраняйте связь в течение 30 секунд. Значение по умолчанию - 75 секунд. keepalive_requests: Настройка количества запросов для поддержания активности в течение определенного времени. Количество запросов можно задать равным 20 или 30. keepalive_disable: если вы хотите отключить поддержку keepalive для определенной группы браузеров, используйте эту директиву. send_timeout: Установка времени ожадания для передачи данных клиенту. Настройки безопасности Nginx В этой части рассматриваются только способы настройки безопасности самого Nginx, а не веб-приложения. Мы не будем разбирать такие методы веб-атаки, как инъекция SQL и так далее. Здесь мы рассмотрим настройки следующих параметров: Ограничение доступа к файлам и каталогам Настройка журналов для мониторинга подозрительных действий Защиту от DDoS атак Отключение вывода списка файлов и директорий Ограничение доступа к файлам и каталогам Давайте рассмотрим как можно ограничить доступ к важным и чувствительным файлам системы с помощью следующих методов. Использование HTTP Аутентификации С ее помощью мы можем ограничить доступ к конфиденциальным файлам или разделам системы, не предназначенных для публичного доступа, запросив аутентификацию у пользователей или даже администраторов. Выполните следующую команду, чтобы установить утилиту создания файлов паролей, если она не установлена. apt-get install -y apache-utils Далее создайте файл паролей и пользователя с помощью утилиты htpasswd. htpasswd входит в набор утилит apache2-utils. sudo htpasswd -c /etc/apache2/ .htpasswd mike Проверить результат работы можно командой: cat etc/apache2/ .htpasswd Скопируйте и вставьте следующий код в разделе location: location /admin { basic_auth "Admin Area"; auth_basic_user_file /etc/apache2/ .htpasswd; } Используя директиву Allow В дополнение к директиве basic_auth мы можем использовать директиву allow для ограничения доступа к указанным каталогам. Чтобы разрешить доступ как конкретным каталогам только с указанных адресов вставьте нижеследующий код в раздел location: location /admin { allow 192.168.34.12; allow 192.168.12.34; } Настройка журналирования подозрительных действий В этом разделе настроим error и access логи, чтобы вести мониторинг запросов. Их можно использовать для определения кто заходил систему в указанный период времени или какой пользователь открывал конкретный файл и т.д. error_log: Позволяет настроить запись событий в определенный файл, например syslog или stderr. Можно также указать уровень журналирования, которые требуется записывать. access_log: Позволяет регистрировать запросы пользователей в файле access.log Для этого в разделе http введите следующие изменения: http { access_log logs/access.log combined; error_log logs/warn.log warn; } Предотвращение DDoS атак DDoS атаки один из самых легкореализуемых и потому часто применяемых видов атак. Защитить свой веб-сервер от атак такого вида можно поменяв следующие настройки. Ограничение запросов пользователей Для ограничения числа запросов от пользователей можно использовать директивы limit_req_zone и limit_req. Следующий код нужно добавить в раздел location, который вложен в раздел server limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; server { location /admin.html { limit_req zone=one; } } Ограничение на число подключений Директивы limit_conn и limit_conn_zone можно использовать для ограничения числа подключение к конкретным зонам. Например, код указанный ниже ограничивает число подключений десятью. Код должен располагаться в разделе location раздела server server { location /products/ { limit_conn addr 10; } } Разрыв медленных соединений Директива как client_body_timeout задаёт таймаут при чтении тела запроса клиента. Таймаут устанавливается не на всю передачу тела запроса, а только между двумя последовательными операциями чтения. Если по истечении этого времени клиент ничего не передаст, обработка запроса прекращается с ошибкой 408 (Request Time-out). А client_header_timeout задаёт таймаут при чтении заголовка запроса клиента. Если по истечении этого времени клиент не передаст полностью заголовок, обработка запроса прекращается с ошибкой 408 (Request Time-out). Добавьте следующее в раздел server. server { client_body_timeout 5s; client_header_timeout 5s; } Отключение вывода списка директорий Чтобы отключить вывод директорий на странице можно использовать директиву auto_index. Она располагается в разделе location, а значение должно быть установлено в off. location / { auto_index off; } Заключение Итак, в этом руководстве показали, как можно настроить веб-сервер Nginx для более безопасной и оптимальной работы. На этом, конечно, работа не заканчивается. Если на Nginx крутится какое-то приложение с доступом в Интернет, то можно прибегнуть к облачным решениям защиты и оптимизации.
img
Основная цель TCP состоит в том, чтобы обеспечить транспортировать данные поверх IP. Как протокол более высокого уровня, он полагается на возможности адресации и мультиплексирования IPv6 для передачи информации на правильный хост назначения. По этой причине TCP не требует схемы адресации. Управление потоком TCP использует метод скользящего окна для управления потоком информации по каждому соединению между двумя хостами. Рисунок 1 демонстрирует это. На рисунке 1 предположим, что начальный размер окна установлен равным 20. Затем последовательность событий: В момент времени t1 отправитель передает 10 пакетов или октетов данных (в случае TCP это 10 октетов данных). В момент времени t2 получатель подтверждает эти 10 октетов, и для окна установлено значение 30. Это означает, что отправителю теперь разрешено отправлять еще до 30 октетов данных перед ожиданием следующего подтверждения; другими словами, отправитель может отправить до 40 октетов, прежде чем он должен будет дождаться подтверждения для отправки дополнительных данных. В момент времени t3 отправитель отправляет еще 5 октетов данных, номера 11–15. В момент времени t4 приемник подтверждает получение октетов через 15, и окно устанавливается на 40 октетов. В момент времени t5 отправитель отправляет около 20 октетов данных, пронумерованных 16–35. В момент времени t6 получатель подтверждает 35, и окно устанавливается на 50. Следует отметить несколько важных моментов, касающихся этой техники: Когда получатель подтверждает получение определенного фрагмента данных, он неявно также подтверждает получение всего, что было до этого фрагмента данных. Если приемник не отправляет подтверждение—к примеру , передатчик отправляет 16-35 в момент времени t5, а приемник не отправляет подтверждение—отправитель будет ждать некоторое время и считать, что данные никогда не поступали, поэтому он будет повторно отправлять данные. Если получатель подтверждает некоторые данные, переданные отправителем, но не все, отправитель предполагает, что некоторые данные отсутствуют, и ретранслирует с точки, которую подтвердил получатель. Например, если отправитель передал 16-35 в момент времени t6, а получатель подтвердил 30, отправитель должен повторно передать 30 и переслать. Окно устанавливается как для отправителя, так и для получателя Вместо использования номеров октетов TCP присваивает каждой передаче порядковый номер; когда приемник подтверждает определенный порядковый номер, передатчик предполагает, что приемник фактически получил все октеты информации вплоть порядкового номера передачи. Для TCP, таким образом, порядковый номер действует как своего рода “стенография” для набора октетов. Рисунок 2 демонстрирует это. На рисунке 2: В момент времени t1 отправитель объединяет октеты 1–10 и передает их, помечая их как порядковый номер 1. В момент времени t2 получатель подтверждает порядковый номер 1, неявно подтверждая получение октетов 1–10. В момент времени t3 отправитель связывает октеты 11–15 вместе и передает их, помечая их как порядковый номер 2. В момент времени t4 получатель подтверждает порядковый номер 2, неявно подтверждая октеты, отправленные через 15. В момент времени t5 предположим, что 10 октетов поместятся в один пакет; в этом случае отправитель отправит два пакета, один из которых содержит 16–25 с порядковым номером 3, а другой - октеты 26–35 с порядковым номером 4. В момент времени t6 приемник подтверждает порядковый номер 4, неявно подтверждая все ранее переданные данные. Что произойдет, если один пакет информации будет пропущен? Что делать, если первый пакет из потока в 100 пакетов не получен? Используя систему, описанную на рисунке 2, получатель просто не подтвердит этот первый пакет информации, вынуждая отправителя повторно передать данные через некоторое время. Однако это неэффективно; каждый потерянный пакет информации требует полной повторной отправки из этого пакета. Реализации TCP используют два разных способа, чтобы получатель мог запросить один пакет. Первый способ - тройное признание. Если получатель трижды подтверждает пакет, который предшествует последнему подтвержденному серийному номеру, отправитель предполагает, что получатель запрашивает повторную передачу пакета. Три повторных подтверждения используются для предотвращения неправильной доставки пакетов или отброшенных пакетов, вызывающих ложный запрос на повторную передачу. Второй способ заключается в реализации выборочных подтверждений (SACK).15 SACK добавляет новое поле к подтверждению TCP, которое позволяет получателю подтвердить получение определенного набора серийных номеров, а не предполагать, что подтверждение одного серийного номера также подтверждает каждый более низкий серийный номер. Как долго передатчик ждет перед повторной передачи? Первый способ, которым отправитель может обнаружить потерянный пакет - это время ожидания повторной передачи (RTO), которое рассчитывается как функция времени приема-передачи (RTT или rtt). Rtt — это временной интервал между передачей пакета отправителем и получением подтверждения от получателя. RTT измеряет задержку в сети от передатчика до приемника, время обработки в приемнике и задержку в сети от приемника до передатчика. Обратите внимание, что rtt может варьироваться в зависимости от пути, по которому каждый пакет проходит через сеть, локальных условий в момент коммутации пакета и т. д. RTO обычно рассчитывается как средневзвешенное значение, при котором более старые временные интервалы оказывают меньшее влияние, чем более поздние измеренные значения. Альтернативным механизмом, используемым в большинстве реализаций TCP, является быстрая ретрансляция. При быстрой повторной передаче получатель добавляет единицу к ожидаемому порядковому номеру в любом подтверждении. Например, если отправитель передает последовательность 10, получатель подтверждает последовательность 11, даже если он еще не получил последовательность 11. В этом случае порядковый номер в подтверждении подтверждает получение данных и указывает, какой порядковый номер он ожидает от отправителя для передачи в следующий раз. Если передатчик получает подтверждение с порядковым номером, который на единицу больше последнего подтвержденного порядкового номера три раза подряд, он будет считать, что следующие пакеты были отброшены. Таким образом, существует два типа потери пакетов в TCP, когда реализован быстрый запуск. Первый-это стандартный тайм-аут, который возникает, когда отправитель передает пакет и не получает подтверждения до истечения срока действия RTO. Это называется отказом RTO. Второй называется быстрым сбоем ретрансляции. Эти два условия часто обрабатываются по-разному. Как выбирается размер окна? При выборе размера окна необходимо учитывать ряд различных факторов, но доминирующим фактором часто является получение максимально возможной производительности при одновременном предотвращении перегрузки канала. Фактически, контроль перегрузки TCP, вероятно, является основной формой контроля перегрузки, фактически применяемой в глобальном Интернете. Чтобы понять контроль перегрузки TCP, лучше всего начать с некоторых определений: Окно приема (RWND): объем данных, которые приемник готов принять; это окно обычно устанавливается на основе размера буфера приемника или какого-либо другого ресурса, доступного в приемнике. Это размер окна, объявленный в заголовке TCP. Окно перегрузки (CWND): объем данных, которые передатчик готов отправить до получения подтверждения. Это окно не объявляется в заголовке TCP; получатель не знает размер CWND. Порог медленного запуска (SST): CWND, при котором отправитель считает соединение с максимальной скоростью передачи пакетов без возникновения перегрузки в сети. SST изначально устанавливается реализацией и изменяется в случае потери пакета в зависимости от используемого механизма предотвращения перегрузки. Большинство реализаций TCP начинают сеансы с алгоритма медленного старта. 16 На этом этапе CWND начинается с 1, 2 или 10. Для каждого сегмента, для которого получено подтверждение, размер CWND увеличивается на 1. Учитывая, что такие подтверждения должны занимать ненамного больше времени, чем один rtt, медленный запуск должен привести к удвоению окна каждого rtt. Окно будет продолжать увеличиваться с этой скоростью до тех пор, пока либо пакет не будет потерян (приемник не сможет подтвердить пакет), CWND не достигнет RWND, либо CWND не достигнет SST. Как только любое из этих трех условий происходит, отправитель переходит в режим предотвращения перегрузки. Примечание. Каким образом увеличение CWND на 1 для каждого полученного ACL удваивает окно для каждого rtt? Идея состоит в следующем: когда размер окна равен 1, вы должны получать один сегмент на каждый RTT. Когда вы увеличиваете размер окна до 2, вы должны получать 2 сегмента в каждом rtt; на 4, вы должны получить 4 и т. д. Поскольку получатель подтверждает каждый сегмент отдельно и увеличивает окно на 1 каждый раз, когда он подтверждает сегмент, он должен подтвердить 1 сегмент в первом rtt и установить окно на 2; 2 сегмента во втором rtt, добавляя 2 к окну, чтобы установить окно на 4; 4 сегмента в третьем RTT, добавив 4 к окну, чтобы установить размер окна равным 8 и т. д. В режиме предотвращения перегрузки CWND увеличивается один раз за каждый rtt, что означает, что размер окна перестает расти экспоненциально, а вместо этого увеличивается линейно. CWND будет продолжать расти либо до тех пор, пока получатель не подтвердит получение пакета (TCP предполагает, что это означает, что пакет был потерян или отброшен), либо пока CWND не достигнет RWND. Существует два широко распространенных способа, которыми реализация TCP может реагировать на потерю пакета, называемых Tahoe и Reno. Примечание. На самом деле существует множество различных вариаций Tahoe и Reno; здесь рассматриваются только самые базовые реализации. Также существует множество различных методов реагирования на потерю пакета, когда соединение находится в режиме предотвращения перегрузки. Если реализация использует Tahoe, и потеря пакета обнаружена посредством быстрой повторной передачи, она установит SST на половину текущего CWND, установит CWND на исходное значение и снова начнет медленный запуск. Это означает, что отправитель снова будет передавать 1, 2 или 10 порядковых номеров, увеличивая CWND для каждого подтвержденного порядкового номера. Как и в начале процесса медленного запуска, это приводит к удвоению CWND каждого rtt. Как только CWND достигнет SST, TCP вернется в режим предотвращения перегрузки. Если реализация использует Reno, и потеря пакета обнаружена посредством быстрой повторной передачи, она установит SST и CWND на половину текущего CWND и продолжит работу в режиме предотвращения перегрузки. В любой реализации, если обнаруживается потеря пакета из-за того, что получатель не отправляет подтверждение в пределах RTO, CWND устанавливается на 1, и медленный запуск используется для увеличения скорости соединения. Контроль ошибок TCP предоставляет две формы обнаружения ошибок и управления ими: Сам протокол, наряду с механизмом управления окнами, обеспечивает доставку данных в приложение по порядку и без какой-либо недостающей информации. Контрольная сумма дополнения единицы, включенная в заголовок TCP, считается более слабой, чем Cyclic Redundancy Check (CRC) и многие другие формы обнаружения ошибок. Эта проверка ошибок служит дополнением, а не заменой, коррекции ошибок, обеспечиваемой протоколами ниже и выше в стеке. Если получатель обнаруживает ошибку контрольной суммы, он может использовать любой из описанных здесь механизмов, чтобы запросить отправителя повторно передать данные—просто не подтверждая получение данных, запрашивая повторную передачу через SACK, активно не подтверждая получение данных через быструю повторную передачу или отправляя тройное подтверждение для конкретного сегмента, содержащего поврежденные данные. Номера портов TCP TCP не управляет каким-либо типом мультиплексирования напрямую; однако он предоставляет номера портов, которые приложения и протоколы выше TCP в стеке протоколов могут использовать для мультиплексирования. Хотя эти номера портов передаются в TCP, они обычно непрозрачны для TCP; TCP не придает никакого значения этим номерам портов, кроме использования их для отправки информации правильному приложению на принимающем узле. Номера TCP-портов делятся на два широких класса: хорошо известные и эфемерные. Хорошо известные порты определяются как часть спецификации протокола верхнего уровня; эти порты являются портами «по умолчанию» для этих приложений. Например, службу, поддерживающую Simple Mail Transfer Protocol (SMTP), обычно можно найти, подключившись к узлу с использованием TCP на порт номер 25. Службу, поддерживающую Hypertext Transport Protocol (HTTP), обычно можно найти, подключившись к узлу с использованием TCP на порт 80. Эти службы не обязательно должны использовать эти номера портов; большинство серверов можно настроить на использование какого-либо номера порта, отличного от указанного в спецификации протокола. Например, веб-серверы, не предназначенные для общего (или общедоступного) использования, могут использовать какой-либо другой TCP-порт, например 8080. Эфемерные порты значимы только для локального хоста и обычно назначаются из пула доступных номеров портов на локальном хосте. Эфемерные порты чаще всего используются в качестве исходных портов для TCP-соединений; например, хост, подключающийся к службе через порт 80 на сервере, будет использовать эфемерный порт в качестве исходного TCP-порта. До тех пор, пока любой конкретный хост использует данный эфемерный номер порта только один раз для любого TCP-соединения, каждый сеанс TCP в любой сети может быть однозначно идентифицирован через исходный адрес, исходный порт, адрес назначения, порт назначения и номер протокола, работающего поверх TCP. Настройка сеанса TCP TCP использует трехстороннее рукопожатие для установки сеанса: Клиент отправляет синхронизацию (SYN) на сервер. Этот пакет является обычным TCP-пакетом, но с битом SYN, установленным в заголовке TCP, и указывает, что отправитель запрашивает сеанс для настройки с получателем. Этот пакет обычно отправляется на хорошо известный номер порта или на какой-то заранее установленный номер порта, который, как известно клиенту, будет прослушиваться сервером по определенному IP-адресу. Этот пакет включает в себя начальный порядковый номер клиента. Сервер отправляет подтверждение для SYN, SYN-ACK. Этот пакет подтверждает порядковый номер, предоставленный клиентом, плюс один, и включает начальный порядковый номер сервера в качестве порядкового номера для этого пакета. Клиент отправляет подтверждение (ACK), включающее начальный порядковый номер сервера плюс один. Этот процесс используется для обеспечения двусторонней связи между клиентом и сервером перед началом передачи данных. Первоначальный порядковый номер, выбранный отправителем и получателем, в большинстве реализаций рандомизирован, чтобы не дать стороннему злоумышленнику угадать, какой порядковый номер будет использоваться, и захватить сеанс TCP на начальных этапах его формирования.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59