.\" -*- coding: UTF-8 -*- .\" SPDX-License-Identifier: Linux-man-pages-1-para .\" .\" This man page is Copyright (C) 1999 Andi Kleen . .\" and Copyright (C) 2008 Michael Kerrisk .\" Note also that many pieces are drawn from the kernel source file .\" Documentation/networking/ip-sysctl.txt. .\" .\" 2.4 Updates by Nivedita Singhvi 4/20/02 . .\" Modified, 2004-11-11, Michael Kerrisk and Andries Brouwer .\" Updated details of interaction of TCP_CORK and TCP_NODELAY. .\" .\" 2008-11-21, mtk, many, many updates. .\" The descriptions of /proc files and socket options should now .\" be more or less up to date and complete as at Linux 2.6.27 .\" (other than the remaining FIXMEs in the page source below). .\" .\" FIXME The following need to be documented .\" TCP_MD5SIG (2.6.20) .\" commit cfb6eeb4c860592edd123fdea908d23c6ad1c7dc .\" Author was yoshfuji@linux-ipv6.org .\" Needs CONFIG_TCP_MD5SIG .\" From net/inet/Kconfig: .\" bool "TCP: MD5 Signature Option support (RFC2385) (EXPERIMENTAL)" .\" RFC2385 specifies a method of giving MD5 protection to TCP sessions. .\" Its main (only?) use is to protect BGP sessions between core routers .\" on the Internet. .\" .\" There is a TCP_MD5SIG option documented in FreeBSD's tcp(4), .\" but probably many details are different on Linux .\" http://thread.gmane.org/gmane.linux.network/47490 .\" http://www.daemon-systems.org/man/tcp.4.html .\" http://article.gmane.org/gmane.os.netbsd.devel.network/3767/match=tcp_md5sig+freebsd .\" .\" TCP_COOKIE_TRANSACTIONS (2.6.33) .\" commit 519855c508b9a17878c0977a3cdefc09b59b30df .\" Author: William Allen Simpson .\" commit e56fb50f2b7958b931c8a2fc0966061b3f3c8f3a .\" Author: William Allen Simpson .\" .\" REMOVED in Linux 3.10 .\" commit 1a2c6181c4a1922021b4d7df373bba612c3e5f04 .\" Author: Christoph Paasch .\" .\" TCP_THIN_LINEAR_TIMEOUTS (2.6.34) .\" commit 36e31b0af58728071e8023cf8e20c5166b700717 .\" Author: Andreas Petlund .\" .\" TCP_THIN_DUPACK (2.6.34) .\" commit 7e38017557bc0b87434d184f8804cadb102bb903 .\" Author: Andreas Petlund .\" .\" TCP_REPAIR (3.5) .\" commit ee9952831cfd0bbe834f4a26489d7dce74582e37 .\" Author: Pavel Emelyanov .\" See also .\" http://criu.org/TCP_connection .\" https://lwn.net/Articles/495304/ .\" .\" TCP_REPAIR_QUEUE (3.5) .\" commit ee9952831cfd0bbe834f4a26489d7dce74582e37 .\" Author: Pavel Emelyanov .\" .\" TCP_QUEUE_SEQ (3.5) .\" commit ee9952831cfd0bbe834f4a26489d7dce74582e37 .\" Author: Pavel Emelyanov .\" .\" TCP_REPAIR_OPTIONS (3.5) .\" commit b139ba4e90dccbf4cd4efb112af96a5c9e0b098c .\" Author: Pavel Emelyanov .\" .\" TCP_FASTOPEN (3.6) .\" (Fast Open server side implementation completed in Linux 3.7) .\" http://lwn.net/Articles/508865/ .\" .\" TCP_TIMESTAMP (3.9) .\" commit 93be6ce0e91b6a94783e012b1857a347a5e6e9f2 .\" Author: Andrey Vagin .\" .\" TCP_NOTSENT_LOWAT (3.12) .\" commit c9bee3b7fdecb0c1d070c7b54113b3bdfb9a3d36 .\" Author: Eric Dumazet .\" .\" TCP_CC_INFO (4.1) .\" commit 6e9250f59ef9efb932c84850cd221f22c2a03c4a .\" Author: Eric Dumazet .\" .\" TCP_SAVE_SYN, TCP_SAVED_SYN (4.2) .\" commit cd8ae85299d54155702a56811b2e035e63064d3d .\" Author: Eric Dumazet .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH tcp 7 "15 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ tcp \- протокол TCP .SH СИНТАКСИС .nf \fB#include \fP \fB#include \fP \fB#include \fP .PP \fItcp_socket\fP\fB = socket(AF_INET, SOCK_STREAM, 0);\fP .fi .SH ОПИСАНИЕ Эта реализация протокола TCP, описанного в RFC\ 793, RFC\ 1122 и RFC\ 2001 с расширениями NewReno и SACK. Данный протокол предоставляет пользователю надёжное полнодуплексное соединение двух сокетов для потоковой передачи поверх \fBip\fP(7) версий v4 и v6. TCP гарантирует доставку данных в правильном порядке и повторно передаёт потерявшиеся пакеты. Для выявления ошибок передачи протоколом генерируются и проверяются контрольные суммы пакетов. TCP не сохраняет границы записей. .PP Только что созданный сокет TCP не имеет локального или удалённого адреса и не является полностью определённым. Для создания исходящего соединения TCP с другим сокетом TCP используйте \fBconnect\fP(2). Для приёма новых входящих соединений сперва подключите сокет к локальному адресу и порту с помощью \fBbind\fP(2), а затем вызовите \fBlisten\fP(2) для перевода сокета в режим прослушивания. После этого через новый сокет можно принимать каждое входящее соединение с помощью \fBaccept\fP(2). Сокет, для которого успешно отработали \fBaccept\fP(2) или \fBconnect\fP(2), является полностью определённым и может передавать данные. Данные не могут быть переданы через слушающий или ещё не соединённый сокет. .PP Linux поддерживает высокопроизводительные расширения TCP RFC\ 1323. Они включают в себя: защиту против оборотной последовательности номеров (PAWS), масштабирование окна и метки времени. Масштабирование окна позволяет использовать большие (> 64\ КБ) окна TCP для поддержки соединений с большой задержкой или высокой пропускной способностью. Для их использования необходимо увеличить размеры буферов приёма и передачи. Это можно сделать глобально через файлы \fI/proc/sys/net/ipv4/tcp_wmem\fP и \fI/proc/sys/net/ipv4/tcp_rmem\fP, или для отдельных сокетов, используя параметры сокетов \fBSO_SNDBUF\fP и \fBSO_RCVBUF\fP в вызове \fBsetsockopt\fP(2). .PP Максимальный размер буферов сокета объявляется, используя механизмы \fBSO_SNDBUF\fP и \fBSO_RCVBUF\fP и ограничен значениями в файлах \fI/proc/sys/net/core/rmem_max\fP и \fI/proc/sys/net/core/wmem_max\fP. Заметим, что TCP в действительности бронирует в два раза больше места, чем размер буфера, запрошенный в вызове \fBsetsockopt\fP(2), поэтому последующий вызов \fBgetsockopt\fP(2) не возвратит тот же размер буфера, что был запрошен в вызове \fBsetsockopt\fP(2). TCP использует дополнительное пространство в административных целях и для внутренних структур ядра, а значения в файлах в \fI/proc\fP отражают большие размеры, по сравнению с действительными окнами TCP. Для отдельных соединений размер буфера сокета должен быть установлен до вызова \fBlisten\fP(2) или \fBconnect\fP(2). Дополнительную информацию смотрите в \fBsocket\fP(7). .PP TCP поддерживает срочные данные. Срочные данные используются для уведомления принимающей стороны о том, что частью потока данных является некоторое важное сообщение, которое должно быть обработано как можно скорее. Для отправки срочных данных укажите параметр \fBMSG_OOB\fP в вызове \fBsend\fP(2). При поступлении срочных данных ядро посылает сигнал \fBSIGURG\fP процессу или группе процессов, который указан как «владелец» сокета с помощью ioctl\-вызовов \fBSIOCSPGRP\fP или \fBFIOSETOWN\fP (или с помощью определённой в POSIX.1 операции \fBF_SETOWN\fP для \fBfcntl\fP(2)). Если задан параметр сокета \fBSO_OOBINLINE\fP, то срочные данные будут помещены в обычный поток данных (программа может проверить его размещение с помощью ioctl\-вызова \fBSIOCATMARK\fP, описанного далее), в противном случае они могут быть получены, только если для \fBrecv\fP(2) или \fBrecvmsg\fP(2) установлен флаг \fBMSG_OOB\fP. .PP При наличии внеполосных данных \fBselect\fP(2) помечает файловый дескриптор как имеющий исключительное условие, а \fIpoll (2)\fP отмечает это событием \fBPOLLPRI\fP. .PP В Linux 2.4 представлено несколько изменений по улучшению пропускной способности и масштабирования, а также дополнительные возможности: поддержка «нулевого» копирования (zero\-copy) в \fBsendfile\fP(2), явное уведомление о перегрузке, новое управление сокетами TIME_WAIT, параметры поддержки сокетов в рабочем состоянии и поддержка расширений Duplicate SACK. .SS "Форматы адресов" Протокол TCP построен поверх протокола IP (смотрите \fBip\fP(7)). Форматы адресов, определённые в \fBip\fP(7), относятся и к TCP. TCP поддерживает только соединения типа точка\-точка (point\-to\-point); широковещательная и многоадресная передача не поддерживаются. .SS "Интерфейс /proc" Системные настройки параметров TCP хранятся в каталоге \fI/proc/sys/net/ipv4/\fP. Также, большинство интерфейсов \fI/proc\fP для IP также применимы и к TCP (смотрите \fBip\fP(7)). Переменные, описанные как \fIBoolean\fP, являются целочисленными, где ненулевое значение («истина, true») означает, что соответствующий параметр включён, а нулевое значение («ложь, false») означает, что параметр включён. .TP \fItcp_abc\fP (Integer; по умолчанию: 0; в Linux 2.6.15 по Linux 3.8) .\" Since Linux 2.6.15; removed in Linux 3.9 .\" commit ca2eb5679f8ddffff60156af42595df44a315ef0 .\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt Control the Appropriate Byte Count (ABC), defined in RFC 3465. ABC is a way of increasing the congestion window (\fIcwnd\fP) more slowly in response to partial acknowledgements. Possible values are: .RS .TP \fB0\fP increase \fIcwnd\fP once per acknowledgement (no ABC) .TP \fB1\fP increase \fIcwnd\fP once per acknowledgement of full sized segment .TP \fB2\fP allow increase \fIcwnd\fP by two if acknowledgement is of two segments to compensate for delayed acknowledgements. .RE .TP \fItcp_abort_on_overflow\fP (Boolean; по умолчанию: выключен; начиная с Linux 2.4) .\" Since Linux 2.3.41 Включает сброс (resetting) соединений, если слушающий сервис слишком медленно работает и не может поддержать существующие или принять новые соединения. Это означает, что при возникновении переполнения из\-за всплеска подключений (burst), соединение будет восстановлено. Включайте этот параметр \fIтолько\fP, если вы действительно уверены, что слушающая программа не может быть настроена более быстрый приём соединений. Включение этого параметра может нарушить работу клиентов вашего сервера. .TP \fItcp_adv_win_scale\fP (integer; по умолчанию: 2; начиная с Linux 2.4) .\" Since Linux 2.4.0-test7 Count buffering overhead as \fIbytes/2\[ha]tcp_adv_win_scale\fP, if \fItcp_adv_win_scale\fP is greater than 0; or \fIbytes\-bytes/2\[ha](\-tcp_adv_win_scale)\fP, if \fItcp_adv_win_scale\fP is less than or equal to zero. .IP Пространство буфера приёма сокета является общим для приложения и ядра. TCP обслуживает часть буфера как окно TCP, о размере этого окна приёма извещается другая сторона. Остаток пространства используется как «буфер приложения», используемый для изолирования сети от задержек планирования или приложения. Значение по умолчанию \fItcp_adv_win_scale\fP — 2 — означает, что для буфера приложения используется четверть всего пространства. .TP \fItcp_allowed_congestion_control\fP (String; по умолчанию: смотрите описание; начиная с Linux 2.4.20) .\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt Показывает/назначает алгоритм управления перегрузкой из списка доступных для непривилегированных процессов (смотрите описание параметра сокета \fBTCP_CONGESTION\fP). Элементы списка разделяются пробелом и завершаются символом новой строки. В списке содержатся несколько значений из перечисленных в \fItcp_available_congestion_control\fP. Значением по умолчанию является «reno» плюс значение по умолчанию из \fItcp_congestion_control\fP. .TP \fItcp_autocorking\fP (Boolean; по умолчанию: включено; начиная с Linux 3.14) .\" commit f54b311142a92ea2e42598e347b84e1655caf8e3 .\" Text heavily based on Documentation/networking/ip-sysctl.txt Если тот параметр установлен, то ядро пытается объединить вместе как можно больше маленьких частей записываемых данных (от следующих друг за другом вызовов \fBwrite\fP(2) и \fBsendmsg\fP(2)), чтобы уменьшить общее количество посылаемых пакетов. Объединение (coalescing) выполняется, если, как минимум, один предыдущий пакет потока ждёт в очередях Qdisc или очереди отправки на устройство. Приложения по\-прежнему могут использовать параметр сокета \fBTCP_CORK\fP для получения оптимального поведения, когда они знают как/когда включать вывод (uncork) из своих сокетов. .TP \fItcp_available_congestion_control\fP (String; только для чтения; начиная с Linux 2.4.20) .\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt Показывает список зарегистрированных алгоритмов управления перегрузкой. Элементы списка разделяются пробелом и завершаются символом новой строки. Список представляет собой сокращённый набор из \fItcp_allowed_congestion_control\fP. Дополнительные алгоритмы управления перегрузкой могут быть доступны в виде модулей, но они не загружены. .TP \fItcp_app_win\fP (integer; по умолчанию: 31; начиная с Linux 2.4) .\" Since Linux 2.4.0-test7 Эта переменная определяет, сколько байтов окна TCP зарезервировано для буферизации издержек (overhead). .IP .\" .\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt A maximum of (\fIwindow/2\[ha]tcp_app_win\fP, mss) bytes in the window are reserved for the application buffer. A value of 0 implies that no amount is reserved. .TP \fItcp_base_mss\fP (Integer; по умолчанию: 512; начиная с Linux 2.6.17) .\" .\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt Начальное значение для \fIsearch_low\fP, которое будет использовано уровнем упаковки при обнаружении Path MTU (зондирование MTU). Если зондирование (probing) MTU включено, то в соединении для этого используется начальное значение MSS. .TP \fItcp_bic\fP (Boolean; default: disabled; Linux 2.4.27/2.6.6 to Linux 2.6.13) .\" .\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt Включает алгоритм управления перегрузкой BIC TCP. Алгоритм BIC\-TCP действует только на стороне отправляющего, при этом обеспечивается линейная справедливость RTT при больших окнах и предлагается масштабируемость и дружественность к TCP. Протокол объединяет две схемы, называемые аддитивное увеличение (additive increase) и увеличение дихотомическим поиском (binary search increase). Когда окно перегрузки велико, аддитивное увеличение с большим приращением обеспечивает линейную справедливость RTT, а также хорошую масштабируемость. При маленьких окнах перегрузки, увеличение дихотомическим поиском предоставляет дружественность к TCP. .TP \fItcp_bic_low_window\fP (integer; default: 14; Linux 2.4.27/2.6.6 to Linux 2.6.13) .\" .\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt Устанавливает порог окна (в пакетах) после которого запускается BIC TCP для регулировки окна перегрузки. Ниже этого порога BIC TCP действует как алгоритм по умолчанию — TCP Reno. .TP \fItcp_bic_fast_convergence\fP (Boolean; default: enabled; Linux 2.4.27/2.6.6 to Linux 2.6.13) Заставляет BIC TCP реагировать на изменения окна перегрузки более быстро. Позволяет двум потокам сообща использовать одно соединение для более быстрой сходимости. .TP \fItcp_congestion_control\fP (String; по умолчанию: смотрите описание; начиная с Linux 2.4.13) .\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt Включает алгоритм управления перегрузкой по умолчанию для новых соединений. Алгоритм «reno» доступен всегда, но в зависимости от настроек ядра могут быть и другие. Значение по умолчанию для этого файла задаётся в настройке ядра. .TP \fItcp_dma_copybreak\fP (integer; по умолчанию: 4096; начиная с Linux 2.6.24) Нижний предел (в байтах) на количество читаемых из сокета данных, которое будет снято из механизма копирования DMA, если он есть в системе и ядро было настроено с параметром \fBCONFIG_NET_DMA\fP. .TP \fItcp_dsack\fP (Boolean; по умолчанию: включено; начиная с Linux 2.4) .\" Since Linux 2.4.0-test7 Включает поддержку RFC\ 2883 TCP Duplicate SACK. .TP \fItcp_fastopen\fP (Bitmask; default: 0x1; since Linux 3.7) Enables RFC\~7413 Fast Open support. The flag is used as a bitmap with the following values: .RS .TP \fB0x1\fP Enables client side Fast Open support .TP \fB0x2\fP Enables server side Fast Open support .TP \fB0x4\fP Allows client side to transmit data in SYN without Fast Open option .TP \fB0x200\fP Allows server side to accept SYN data without Fast Open option .TP \fB0x400\fP Enables Fast Open on all listeners without \fBTCP_FASTOPEN\fP socket option .RE .TP \fItcp_fastopen_key\fP (since Linux 3.7) Set server side RFC\~7413 Fast Open key to generate Fast Open cookie when server side Fast Open support is enabled. .TP \fItcp_ecn\fP (Integer; по умолчанию: смотрите далее; начиная с Linux 2.4) .\" Since Linux 2.4.0-test7 Включает RFC\ 3168 — уведомление о явной перегрузке (Explicit Congestion Notification). .IP В этом файле могут быть следующие значения: .RS .TP \fB0\fP Отключить ECN. Не посылать и не принимать ECN. Было включено по умолчанию до Linux 2.6.30 включительно. .TP \fB1\fP Включать ECN при запросе входящими соединениями, а также запрашивать ECN при попытках исходящих соединений. .TP \fB2\fP .\" commit 255cac91c3c9ce7dca7713b93ab03c75b7902e0e Включать ECN при запросе входящими соединениями, но не запрашивать ECN при попытках исходящих соединений. Данное значение поддерживается и включено по умолчанию начиная с Linux 2.6.31. .RE .IP При включении может пропасть возможность установления соединений с некоторыми узлами из\-за некорректно работающих маршрутизаторов по пути следования, что выражается в обрыве (dropped) соединения. Однако для улучшения и содействия внедрению со значением 1 и для обхода такого некорректного оборудования был введён параметр \fBtcp_ecn_fallback\fP. .TP \fItcp_ecn_fallback\fP (Boolean; по умолчанию: включено; начиная с Linux 4.1) .\" commit 492135557dc090a1abb2cfbe1a412757e3ed68ab Включает переход на резервный вариант RFC\ 3168, Section 6.1.1.1. При включении исходящие устанавливающие ECN SYNы, на которые не было ответа за обычное время перепосылки SYN, будут перепосланы со сброшенными CWR и ECE. .TP \fItcp_fack\fP (Boolean; по умолчанию: включено; начиная с Linux 2.2) .\" Since Linux 2.1.92 Включает поддержку TCP Forward Acknowledgement (подтверждение передачи). .TP \fItcp_fin_timeout\fP (integer; по умолчанию: 60; начиная с Linux 2.2) .\" Since Linux 2.1.53 .\" .\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt Устанавливает количество секунд, в течение которых необходимо ждать последний пакет FIN перед принудительным закрытием сокета. Строго говоря, это нарушение спецификации TCP, но оно необходимо для предотвращения атак отказа в обслуживании (DoS). Значение по умолчанию в ядрах 2.2 равно 180. .TP \fItcp_frto\fP (integer; по умолчанию: смотрите далее; начиная с Linux 2.4.21/2.6) .\" Since Linux 2.4.21/2.5.43 Включает F\-RTO — расширенный алгоритм восстановления пауз при повторных передачах TCP (RTO). В частности, он полезен в беспроводных средах, где потеря пакетов обычно происходит из\-за произвольного возникающих радиопомех, а не из\-за перегрузки промежуточного маршрутизатора. Подробности смотрите в RFC 4138. .IP В этом файле могут быть следующие значения: .RS .TP \fB0\fP Отключено. Было включено по умолчанию до Linux 2.6.23 включительно. .TP \fB1\fP Включить базовую версию алгоритма F\-RTO. .TP \fB2\fP .\" commit c96fd3d461fa495400df24be3b3b66f0e0b152f9 Включить расширенный SACK алгоритм F\-RTO, если поток использует SACK. Когда используется SACK, также может использоваться и базовая версия, хотя при этом возникают случаи, где F\-RTO сработает плохо при подсчёте пакетов в потоке TCP с включённым SACK. Данное значение введено по умолчанию начиная с Linux 2.6.24. .RE .IP До Linux 2.6.22 этот параметр имел тип Boolean, в котором поддерживаются только значения 0 и 1. .TP \fItcp_frto_response\fP (integer; по умолчанию: 0; начиная с Linux 2.6.22) Если F\-RTO обнаруживает, что пауза при повторной передаче TCP не типична (т.е., паузы можно было бы избежать, если в TCP была бы установлена более длительная пауза повторной передачи), то у TCP есть несколько вариантов, что сделать дальше. Возможные значения: .RS .TP \fB0\fP Уменьшение скорости (rate) вдвое; плавный и осторожный ответ, приводит к уменьшению окна перегрузки (\fIcwnd\fP) вдвое и предельной величине медленного старта (\fIssthresh\fP) после одного RTT. .TP \fB1\fP Очень осторожный ответ; не рекомендуется, так как хотя и допускается, но плохо взаимодействует с остальным Linux TCP; немедленно уменьшает \fIcwnd\fP и \fIssthresh\fP вдвое. .TP \fB2\fP Активный ответ; отменяет оценки управления перегрузкой, которые теперь не нужны (игнорируется возможность потери повторной передачи, которая бы требовала от TCP большей бережливости); значения \fIcwnd\fP и \fIssthresh\fP восстанавливаются в значения до паузы. .RE .TP \fItcp_keepalive_intvl\fP (integer; по умолчанию: 75; начиная с Linux 2.4) .\" Since Linux 2.3.18 Количество секунд между отправкой «поддерживающих» (keep\-alive) проверочных пакетов. .TP \fItcp_keepalive_probes\fP (integer; по умолчанию: 9; начиная с Linux 2.2) .\" Since Linux 2.1.43 Максимальное количество отправляемых «поддерживающих» (keep\-alive) пакетов TCP до разрыва соединения, если не будет получено ответа от другой стороны. .TP \fItcp_keepalive_time\fP (integer; по умолчанию: 7200; начиная с Linux 2.2) .\" Since Linux 2.1.43 Количество секунд между отсутствием передаваемых данных и отправкой через соединение «поддерживающих» пакетов. Эти пакеты будут отправляться, только если установлен параметра сокета \fBSO_KEEPALIVE\fP. Значение по умолчанию равно 7200 секунд (2 часа). Бездействующее соединение разрывается примерно через 11 минут (9 пакетов, с интервалом 75 секунд) при включённом режиме keep\-alive. .IP .\" .\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt Заметим, что механизмы слежения за соединением более низкого уровня и периоды ожидания приложений могут быть гораздо короче. .TP \fItcp_low_latency\fP (Boolean; default: disabled; since Linux 2.4.21/2.6; obsolete since Linux 4.14) .\" Since Linux 2.4.21/2.5.60 .\" commit b6690b14386698ce2c19309abad3f17656bdfaea If enabled, the TCP stack makes decisions that prefer lower latency as opposed to higher throughput. It this option is disabled, then higher throughput is preferred. An example of an application where this default should be changed would be a Beowulf compute cluster. Since Linux 4.14, this file still exists, but its value is ignored. .TP \fItcp_max_orphans\fP (integer; по умолчанию: смотрите далее; начиная с Linux 2.4) .\" Since Linux 2.3.41 The maximum number of orphaned (not attached to any user file handle) TCP sockets allowed in the system. When this number is exceeded, the orphaned connection is reset and a warning is printed. This limit exists only to prevent simple denial\-of\-service attacks. Lowering this limit is not recommended. Network conditions might require you to increase the number of orphans allowed, but note that each orphan can eat up to \[ti]64\ kB of unswappable memory. The default initial value is set equal to the kernel parameter NR_FILE. This initial default is adjusted depending on the memory in the system. .TP \fItcp_max_syn_backlog\fP (integer; по умолчанию: смотрите далее; начиная с Linux 2.2) .\" Since Linux 2.1.53 Максимальное количество запросов на соединение в очереди, которые пока не получили подтверждения от клиентов. Если это количество превышается, то ядро начнёт отбрасывать запросы. Значение по умолчанию (256) увеличивается до 1024, если в системе достаточно памяти (>= 128\ МБ) и уменьшается до 128, если памяти мало (<= 32\ МБ). .IP .\" commit 72a3effaf633bcae9034b7e176bdbd78d64a71db Before Linux 2.6.20, it was recommended that if this needed to be increased above 1024, the size of the SYNACK hash table (\fBTCP_SYNQ_HSIZE\fP) in \fIinclude/net/tcp.h\fP should be modified to keep .IP .in +4n .EX TCP_SYNQ_HSIZE * 16 <= tcp_max_syn_backlog .EE .in .IP и пересобрать ядро. В Linux 2.6.20 постоянный размер \fBTCP_SYNQ_HSIZE\fP был заменён на динамически изменяемый. .TP \fItcp_max_tw_buckets\fP (integer; по умолчанию: смотрите далее; начиная с Linux 2.4) .\" Since Linux 2.3.41 Максимальное количество сокетов в состоянии TIME_WAIT, разрешённое в системе. Это ограничение существует только для предотвращения простейших атак DoS. По умолчанию равно NR_FILE*2 и изменяется в зависимости от количества памяти в системе. Если это значение превышено, то сокет закрывается и выводится предупреждение. .TP \fItcp_moderate_rcvbuf\fP (Boolean; по умолчанию: включено; начиная с Linux 2.4.17/2.6.7) .\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt Если включён, то для TCP включается автоматическая настройка приёмного буфера; при этом размер буфера (не более чем \fItcp_rmem[2]\fP) автоматически подгоняется под размер, используемый на пути прохождения трафика, в целях достижения максимальной пропускной способности. .TP \fItcp_mem\fP (начиная с Linux 2.4) .\" Since Linux 2.4.0-test7 Вектор из 3 целочисленных значений: [low, pressure, high]. Представляют собой границы, измеряемые в системных страницах памяти, используются в TCP для отслеживания использования памяти. По умолчанию рассчитываются во время загрузки ОС, зависят от количества памяти в системе (для этого в TCP может использоваться только \fIнижняя память\fP (low memory), которая в 32\-битных системах ограничена 900\-ми мегабайтами. В 64\-битных системах этого ограничения нет). .RS .TP \fIlow\fP TCP не регулирует распределение своей памяти, если число страниц, выделенных глобально, ниже этого значения. .TP \fIpressure\fP Когда количество страниц, размещённых TCP, превышает это значение, то TCP изменяет свой метод использования памяти. Это состояние отменяется при падении количества размещённых страниц ниже значения \fIlow\fP. .TP \fIhigh\fP Глобальное (общее) максимальное количество страниц, которое может использовать TCP. Это значение переопределяет все другие ограничения, накладываемые ядром. .RE .TP \fItcp_mtu_probing\fP (integer; по умолчанию: 0; начиная с Linux 2.6.17) .\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt Этот параметр контролирует TCP Packetization\-Layer Path MTU Discovery. В файле могут указываться следующие значения: .RS .TP \fB0\fP Выключен .TP \fB1\fP Включать при обнаружении чёрной дыры (black hole) ICMP .TP \fB2\fP Всегда включено, использовать начальное значение MSS из \fItcp_base_mss\fP. .RE .TP \fItcp_no_metrics_save\fP (Boolean; по умолчанию: выключено; начиная с Linux 2.6.6) .\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt По умолчанию, TCP сохраняет различные метрики соединения в кэше маршрутов при закрытии соединения для того, чтобы соединения, устанавливаемые в ближайшем будущем, могли использовать этот набор начальных состояний. Обычно, это увеличивает общую производительность, но иногда может и уменьшить её. Если \fItcp_no_metrics_save\fP включено, то TCP не кэширует метрики при закрытии соединений. .TP \fItcp_orphan_retries\fP (integer; по умолчанию: 8; начиная с Linux 2.4) .\" Since Linux 2.3.41 Максимальное количество попыток проверки другой стороны соединения перед закрытием с нашей стороны. .TP \fItcp_reordering\fP (integer; по умолчанию: 3; начиная с Linux 2.4) .\" Since Linux 2.4.0-test7 Максимальное количество пакетов, которое может быть переупорядочено в потоке TCP, при котором TCP ещё не считает что произошли потери и не переходит в состояние медленного запуска (slow start). Не рекомендуется менять это значение. Данная метрика обнаружения переупорядочивания пакетов предназначена для минимизации повторных передач, обусловленных переупорядочиванием пакетов в соединении. .TP \fItcp_retrans_collapse\fP (Boolean; по умолчанию: включено; начиная с Linux 2.2) .\" Since Linux 2.1.96 При повторной передаче пробовать посылать полноразмерные пакеты. .TP \fItcp_retries1\fP (integer; по умолчанию: 3; начиная с Linux 2.2) .\" Since Linux 2.1.43 Количество попыток повторной передачи пакетов по установленному соединению без привлечения других сетевых уровней. При превышении данного количества, сетевой уровень обновляет маршрут перед каждым повтором (если это возможно). В RFC установлено минимальное значение по умолчанию: 3. .TP \fItcp_retries2\fP (integer; по умолчанию: 15; начиная с Linux 2.2) .\" Since Linux 2.1.43 Максимальное количество попыток повторной передачи пакетов TCP по установленному соединению до того, как оно будет считаться разорванным. По умолчанию равно 15, что соответствует времени примерно от 13 до 30 минут, в зависимости от значения таймера повторной передачи. В RFC\ 1122 установлена минимальная граница в 100 секунд, которая обычно считается слишком маленькой. .TP \fItcp_rfc1337\fP (Boolean; по умолчанию: выключено; начиная с Linux 2.2) .\" Since Linux 2.1.90 Включает поведение TCP, совместимое с RFC\ 1337. Если выключено, то: если в состоянии TIME_WAIT принимается RST, то сокет закрывается немедленно, не дожидаясь конца периода TIME_WAIT. .TP \fItcp_rmem\fP (начиная с Linux 2.4) .\" Since Linux 2.4.0-test7 Вектор из 3 целочисленных значений: [min, default, max]. Эти параметры используются TCP для регулирования размера буфера приёма. TCP динамически корректирует размер буфера приёма от значений по умолчанию, указанных ниже, в диапазоне этих переменных и в зависимости от количества памяти в системе. .RS .TP \fImin\fP Минимальный размер буфера приёма, используемый каждым сокетом TCP. По умолчанию равен размеру системной страницы (в Linux 2.4 равно 4\ КБ и может уменьшаться до \fBPAGE_SIZE\fP байт в системах с малым количеством памяти). Это значение используется для того, чтобы размещение страниц памяти меньше этого значения в режиме давления (pressure) все равно выполнялось. Не ограничивает размер буфера приёма, объявленного для сокета с помощью \fBSO_RCVBUF\fP. .TP \fIdefault\fP Размер буфера приёма по умолчанию для сокетов TCP. Это значение переопределяет начальный размер буфера по умолчанию, взятый из общей глобальной переменной \fInet.core.rmem_default\fP, определённой для всех протоколов. По умолчанию равен 87380 байт (в Linux 2.4 это значение может уменьшаться до 43689 в системах с малым количеством памяти). Если желательны большие размеры буфера приёма, то это значение должно быть увеличено (влияет на все сокеты). Для разрешения больших размеров окон TCP должно быть включено \fInet.ipv4.tcp_window_scaling\fP (по умолчанию). .TP \fImax\fP Максимальный размер буфера приёма, используемый каждым сокетом TCP. Это значение не переопределяет значение глобальной переменной \fInet.core.rmem_max\fP. Не используется для ограничения размера буфера приёма, объявленного для сокета через \fBSO_RCVBUF\fP. Значение по умолчанию рассчитывается по следующей формуле .IP .in +4n .EX max(87380, min(4\ MB, \fItcp_mem\fP[1]*PAGE_SIZE/128)) .EE .in .IP (в Linux 2.4 значение по умолчанию равно 87380*2 байт, уменьшается до 87380 в системах с малым количеством памяти). .RE .TP \fItcp_sack\fP (Boolean; по умолчанию: включено; начиная с Linux 2.2) .\" Since Linux 2.1.36 Включает выборочные подтверждения TCP (TCP Selective Acknowledgements), описанные в RFC\ 2018. .TP \fItcp_slow_start_after_idle\fP (Boolean; по умолчанию: включено; начиная с Linux 2.6.18) .\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt Если включено, то разрешается поведение согласно RFC 2861 и таймаут окна перегрузки после периода простоя. Период простоя определяется текущим значением RTO (таймаут повторной передачи). Если выключено, то после окна перегрузки не следует таймаут после периода простоя. .TP \fItcp_stdurg\fP (Boolean; по умолчанию: выключено; начиная с Linux 2.2) .\" Since Linux 2.1.44 .\" RFC 793 was ambiguous in its specification of the meaning of the .\" urgent pointer. RFC 1122 (and RFC 961) fixed on a particular .\" resolution of this ambiguity (unfortunately the "wrong" one). Если значение включено, то для поля указателя срочных данных TCP используется интерпретация RFC\ 1122. Согласно этому указатель срочности указывает на последний байт срочных данных. Если это значение выключено, то для указателя на срочные данные применяется интерпретация, совместимая с BSD: указатель срочности указывает на первый байт после срочных данных. Включение этого значения может привести к проблемам с взаимодействием сетей. .TP \fItcp_syn_retries\fP (integer; default: 6; since Linux 2.2) .\" Since Linux 2.1.38 .\" commit 6c9ff979d1921e9fd05d89e1383121c2503759b9 The maximum number of times initial SYNs for an active TCP connection attempt will be retransmitted. This value should not be higher than 255. The default value is 6, which corresponds to retrying for up to approximately 127 seconds. Before Linux 3.7, the default value was 5, which (in conjunction with calculation based on other kernel parameters) corresponded to approximately 180 seconds. .TP \fItcp_synack_retries\fP (integer; по умолчанию: 5; начиная с Linux 2.2) .\" Since Linux 2.1.38 Максимальное количество попыток повторной передачи сегмента SYN/ACK у пассивного соединения TCP. Значение должно быть меньше 255. .TP \fItcp_syncookies\fP (integer; default: 1; since Linux 2.2) .\" Since Linux 2.1.43 Enable TCP syncookies. The kernel must be compiled with \fBCONFIG_SYN_COOKIES\fP. The syncookies feature attempts to protect a socket from a SYN flood attack. This should be used as a last resort, if at all. This is a violation of the TCP protocol, and conflicts with other areas of TCP such as TCP extensions. It can cause problems for clients and relays. It is not recommended as a tuning mechanism for heavily loaded servers to help with overloaded or misconfigured conditions. For recommended alternatives see \fItcp_max_syn_backlog\fP, \fItcp_synack_retries\fP, and \fItcp_abort_on_overflow\fP. Set to one of the following values: .RS .TP \fB0\fP Disable TCP syncookies. .TP \fB1\fP Send out syncookies when the syn backlog queue of a socket overflows. .TP \fB2\fP .\" commit 5ad37d5deee1ff7150a2d0602370101de158ad86 (since Linux 3.12) Send out syncookies unconditionally. This can be useful for network testing. .RE .TP \fItcp_timestamps\fP (integer; по умолчанию: 1; начиная с Linux 2.2) .\" Since Linux 2.1.36 Устанавливается в одно из следующих значений для включения меток времени RFC\ 1323 TCP: .RS .TP \fB0\fP Отключить метки времени. .TP \fB1\fP Включить метки времени, определённые в RFC1323, и использовать случайное смещение для каждого соединения, а не просто использовать текущее время. .TP \fB2\fP .\" commit 25429d7b7dca01dc4f17205de023a30ca09390d0 Как при значении 1, но без случайных смещений. Назначение \fItcp_timestamps\fP этого значения работает начиная с Linux 4.10. .RE .TP \fItcp_tso_win_divisor\fP (integer; по умолчанию: 3; начиная с Linux 2.6.9) Контролирует процент окна перегрузки, который может быть использован одиночным кадром TCP Segmentation Offload (TSO). Значение этого параметра — компромисс между временной нагрузкой (burstiness) и построением больших кадров TSO. .TP \fItcp_tw_recycle\fP (Boolean; default: disabled; Linux 2.4 to Linux 4.11) .\" Since Linux 2.3.15 .\" removed in Linux 4.12; commit 4396e46187ca5070219b81773c4e65088dac50cc .\" .\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt Включает быстрое повторное использование сокетов с TIME_WAIT. Включение данного параметра не рекомендуется, так как удалённый IP может не использовать монотонно увеличивающиеся метки времени (устройства за NAT, устройства с выделенными на подключение смещёнными метками времени). Смотрите RFC 1323 (PAWS) и RFC 6191. .TP \fItcp_tw_reuse\fP (Boolean; по умолчанию: выключено; начиная с Linux 2.4.19/2.6) .\" Since Linux 2.4.19/2.5.43 .\" .\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt Позволяет повторно использовать сокеты TIME_WAIT для новых соединений, если это безопасно с точки зрения протокола. Значение не должно изменяться без совета/запроса технических специалистов. .TP \fItcp_vegas_cong_avoid\fP (Boolean; default: disabled; Linux 2.2 to Linux 2.6.13) .\" Since Linux 2.1.8; removed in Linux 2.6.13 .\" .\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt Включает алгоритм избежания перегрузок TCP Vegas. TCP Vegas действует на стороне отправителя; он ожидает начала перегрузки, оценивая пропускную способность. TCP Vegas подгоняет частоту отправки, изменяя окно перегрузки. При включённом TCP Vegas обеспечиваются меньшие потери пакетов, но он не так стремителен как TCP Reno. .TP \fItcp_westwood\fP (Boolean; default: disabled; Linux 2.4.26/2.6.3 to Linux 2.6.13) Включает алгоритм управления перегрузками TCP Westwood+. TCP Westwood+ действует на стороне отправителя и является модификацией стека протокола TCP Reno, ориентированной на производительность управления перегрузками TCP. Он основан на оценке полосы пропускания от точки передачи до точки приёма при изменении окна перегрузки и порога медленного старта после возникновения перегрузки. Используя эту оценку TCP Westwood+ подстраивает порог медленного старта и окно перегрузки, принимая во внимание пропускную способность, полученную во время перегрузки. TCP Westwood+ значительно увеличивает плавность (fairness), по сравнению с TCP Reno, в проводных сетях и пропускную способность в беспроводных сетях. .TP \fItcp_window_scaling\fP (Boolean; по умолчанию: включено; начиная с Linux 2.2) .\" Since Linux 2.1.36 Включает изменение размера окна TCP, описанное в RFC\ 1323 Эта возможность позволяет использовать большие (> 64\ КБ) окна для соединений TCP, но она должна также поддерживаться на другой стороне соединения. Обычно, 16\-ти битовый размер поля длины окна в заголовке TCP ограничивает его размер до 64\ КБ. Если нужно обеспечить больший размер окна, то приложение должно увеличить размер своих буферов сокетов и включить возможность масштабирования окна. Если значение \fItcp_window_scaling\fP выключено, то TCP не будет согласовывать использование масштабирования окон с другой стороной во время установки соединения. .TP \fItcp_wmem\fP (начиная с Linux 2.4) .\" Since Linux 2.4.0-test7 Вектор из 3 целочисленных значений: [min, default, max]. Эти параметры используются TCP для управления размером буфера отправления. TCP динамически корректирует размер буфера отправления от значений по умолчанию, указанных ниже, в диапазоне этих переменных и в зависимости от количества доступной памяти. .RS .TP \fImin\fP Минимальный размер буфера отправления, используемый каждым сокетом TCP По умолчанию равен размеру системной страницы (в Linux 2.4 значение равно 4\ КБ). Это значение используется для того, чтобы размещение страниц памяти меньше этого значения в режиме давления (pressure) все равно выполнялось. Не ограничивает размер буфера отправления, объявленного для сокета с помощью \fBSO_SNDBUF\fP. .TP \fIdefault\fP .\" True in Linux 2.4 and 2.6 Размер буфера отправления по умолчанию для сокетов TCP Это значение переопределяет начальный размер буфера по умолчанию, взятый из общей глобальной переменной \fI/proc/sys/net/core/wmem_default\fP, определённой для всех протоколов. По умолчанию равно 16\ КБ. Если желательны большие размеры буферов отправления, то это значение должно быть увеличено (влияет на все сокеты). Для разрешения больших размеров окон TCP значение \fI/proc/sys/net/ipv4/tcp_window_scaling\fP должно быть ненулевым (по умолчанию). .TP \fImax\fP Максимальный размер буфера отправления, используемый каждым сокетом TCP. Это значение не переопределяет значение переменной \fI/proc/sys/net/core/wmem_max\fP. Не используется для ограничения размера буфера отправления, объявленного для сокета через \fBSO_SNDBUF\fP. Значение по умолчанию рассчитывается по следующей формуле .IP .in +4n .EX max(65536, min(4\ MB, \fItcp_mem\fP[1]*PAGE_SIZE/128)) .EE .in .IP (в Linux 2.4 значение по умолчанию равно 128\ КБ, уменьшается до 64\ КБ в системах с малым количеством памяти). .RE .TP \fItcp_workaround_signed_windows\fP (Boolean; по умолчанию: выключено; начиная с Linux 2.6.26) Если включено, то предполагать, что неполучение параметра окна масштабирования означает, что удалённый TCP повреждён и считать размер окна как число со знаком. Если выключено, то предполагается, что удалённый TCP не повреждён, даже если мы не получаем от него параметр окна масштабирования. .SS "Параметры сокета" .\" or SOL_TCP on Linux Для получения и задания параметров сокетов TCP используйте вызов \fBgetsockopt\fP(2) и \fBsetsockopt\fP(2), соответственно. Значение аргумента уровня параметров должно быть равно \fBIPPROTO_TCP\fP. Если не указано обратное, \fIoptval\fP — это указатель на \fIint\fP. Кроме того, сокетам TCP доступно большинство параметров сокета \fBIPPROTO_IP\fP. Дополнительная информация приведена в \fBip\fP(7). .PP В следующем списке представлены параметры только для сокетов TCP. О других параметрах, применимых к сокетам TCP, читайте в \fBsocket\fP(7). .TP \fBTCP_CONGESTION\fP (начиная с Linux 2.6.13) .\" commit 5f8ef48d240963093451bcf83df89f1a1364f51d .\" Author: Stephen Hemminger Аргументом этого параметра является строка. Данный параметр позволяет вызывающему задать используемый алгоритм управления перегрузкой TCP, для каждого сокета. Для непривилегированных процессов выбор ограничен одним из алгоритмов \fItcp_allowed_congestion_control\fP (описано выше). Привилегированные процессы (\fBCAP_NET_ADMIN\fP) могут выбирать любой из доступных алгоритмов контроля перегрузки (смотрите описание \fItcp_available_congestion_control\fP выше). .TP \fBTCP_CORK\fP (начиная с Linux 2.2) .\" precisely: since Linux 2.1.127 Если установлен, то не посылать частичные кадры. Все поставленные в очередь частичные кадры будут отосланы, когда этот параметр будет очищен. Это полезно для подготовки заголовков перед вызовом \fBsendfile\fP(2) или для оптимизации пропускной способности. В текущей реализации отводится максимум (ceiling) 200 миллисекунд, в течение которых вывод закупоривается (corked) из\-за \fBTCP_CORK\fP. Если этот максимум достигнут, то данные в очереди передаются автоматически. Этот параметр можно совмещать с \fBTCP_NODELAY\fP только начиная с Linux 2.5.71. Данный параметр не должен использоваться, если требуется переносимость кода. .TP \fBTCP_DEFER_ACCEPT\fP (начиная с Linux 2.4) .\" Precisely: since Linux 2.3.38 .\" Useful references: .\" http://www.techrepublic.com/article/take-advantage-of-tcp-ip-options-to-optimize-data-transmission/ .\" http://unix.stackexchange.com/questions/94104/real-world-use-of-tcp-defer-accept Позволяет слушающему просыпаться только при поступлении данных на сокет. Принимает целое значение (секунды), может ограничить максимальное количество попыток TCP закрытия этого соединения. Данный параметр не должен использоваться, если требуется переносимость кода. .TP \fBTCP_INFO\fP (начиная с Linux 2.4) Используется для сбора информации об этом сокете. Ядро возвращает структуру \fIstruct tcp_info\fP, определённую в файле \fI/usr/include/linux/tcp.h\fP. Данный параметр не должен использоваться, если требуется переносимость кода. .TP \fBTCP_KEEPCNT\fP (начиная с Linux 2.4) .\" Precisely: since Linux 2.3.18 Максимальное число проверок (keepalive probes) TCP, отправляемых перед сбросом соединения. Данный параметр не должен использоваться, если требуется переносимость кода. .TP \fBTCP_KEEPIDLE\fP (начиная с Linux 2.4) .\" Precisely: since Linux 2.3.18 Время (в секундах) простоя (idle) соединения, по прошествии которого TCP начнёт отправлять проверочные пакеты (keepalive probes), если для сокета включён параметр \fBSO_KEEPALIVE\fP. Данный параметр не должен использоваться, если требуется переносимость кода. .TP \fBTCP_KEEPINTVL\fP (начиная с Linux 2.4) .\" Precisely: since Linux 2.3.18 Время в секундах между отправками отдельных проверочных пакетов (keepalive probes). Данный параметр не должен использоваться, если требуется переносимость кода. .TP \fBTCP_LINGER2\fP (начиная с Linux 2.4) .\" Precisely: since Linux 2.3.41 Время жизни брошенных (orphaned) сокетов в состоянии FIN_WAIT2. Этот параметр может использоваться для переопределения общесистемного параметра из файла \fI/proc/sys/net/ipv4/tcp_fin_timeout\fP данного сокета. Значение не должно противоречить параметру \fBSO_LINGER\fP уровня сокета \fBsocket\fP(7). Данный параметр не должен использоваться, если требуется переносимость кода. .TP \fBTCP_MAXSEG\fP .\" Present in Linux 1.0 Максимальный размер сегмента для исходящих пакетов TCP. В Linux 2.2 и ранее, и в Linux 2.6.28 и новее, если этот параметр задан до установления соединения, то меняется также и значение MSS, сообщаемое другой стороне в начальном пакете. Значения, превышающие MTU интерфейса, игнорируются. TCP также будет определять минимальную и максимальную границу поверх этих значений. .TP \fBTCP_NODELAY\fP .\" Present in Linux 1.0 Если включён, то отменяется выполнение алгоритма Nagle. Это означает, что сегменты всегда отсылаются при первой же возможности, даже если к отправке назначено небольшое количество данных. Если выключен, то данные буферизируются и будут отправлены только после набора достаточно большого количества данных, поэтому небольшие пакеты с данными не отправляются. Этот параметр переопределяется \fBTCP_CORK\fP; однако, установка данного параметра вызывает явную очистку ожидающих вывода данных, даже если установлен \fBTCP_CORK\fP. .TP \fBTCP_QUICKACK\fP (начиная с Linux 2.4.4) Включает режим quickack при установке или выключает при сбросе. В этом режиме все уведомления отправляются немедленно, а не с некоторой задержкой в соответствии с обычной работой TCP. Этот флаг не постоянный, он только включает или выключает режим quickack. Последующие операции с протоколом TCP будут по своему включать/выключать этот режим в зависимости от своих внутренних протоколов, настроек и факторов. Данный параметр не должен использоваться, если требуется переносимость кода. .TP \fBTCP_SYNCNT\fP (начиная с Linux 2.4) .\" Precisely: since Linux 2.3.18 Устанавливает количество повторных передач SYN, которое должен послать TCP до отмены попытки установки соединения. Не должно превышать 255. Данный параметр не должен использоваться, если требуется переносимость кода. .TP \fBTCP_USER_TIMEOUT\fP (начиная с Linux 2.6.37) .\" commit dca43c75e7e545694a9dd6288553f55c53e2a3a3 .\" Author: Jerry Chu .\" The following text taken nearly verbatim from Jerry Chu's (excellent) .\" commit message. .\" This option takes an \fIunsigned int\fP as an argument. When the value is greater than 0, it specifies the maximum amount of time in milliseconds that transmitted data may remain unacknowledged, or buffered data may remain untransmitted (due to zero window size) before TCP will forcibly close the corresponding connection and return \fBETIMEDOUT\fP to the application. If the option value is specified as 0, TCP will use the system default. .IP Увеличение пользовательского времени задержки позволяет соединению TCP продолжать существовать дополнительные периоды при отсутствии связи. Уменьшение пользовательского времени задержки позволяет приложениям «быстро упасть», если это нужно. В противном случае ошибка может быть отложена до 20 минут при текущих системных значениях по умолчанию в обычной среде WAN. .IP Этот параметр может быть задан при любом состоянии соединения TCP, но будет задействован только при синхронизации состояний соединения (ESTABLISHED, FIN\-WAIT\-1, FIN\-WAIT\-2, CLOSE\-WAIT, CLOSING и LAST\-ACK). Кроме этого, когда используется параметр поддержания TCP (\fBSO_KEEPALIVE\fP), \fBTCP_USER_TIMEOUT\fP отменит действие поддержания для определения нужно ли закрывать соединение из\-за ошибки поддержания. .IP Этот параметр не действует, если TCP перепосылает пакет, или посылается проба поддержания. .IP Этот параметр, как и многие другие, наследуется сокетом, возвращаемым \fBaccept\fP(2), если он установлен у прослушивающего сокета. .IP Подробней о свойстве пользовательского времени задержки смотрите RFC\ 793 и RFC\ 5482 («TCP User Timeout Option»). .TP \fBTCP_WINDOW_CLAMP\fP (начиная с Linux 2.4) .\" Precisely: since Linux 2.3.41 Ограничивает размер предлагаемого окна указанным значением. Ядро считает минимальный размер как SOCK_MIN_RCVBUF/2. Данный параметр не должен использоваться, если требуется переносимость кода. .TP \fBTCP_FASTOPEN\fP (since Linux 3.6) This option enables Fast Open (RFC\~7413) on the listener socket. The value specifies the maximum length of pending SYNs (similar to the backlog argument in \fBlisten\fP(2)). Once enabled, the listener socket grants the TCP Fast Open cookie on incoming SYN with TCP Fast Open option. .IP More importantly it accepts the data in SYN with a valid Fast Open cookie and responds SYN\-ACK acknowledging both the data and the SYN sequence. \fBaccept\fP(2) returns a socket that is available for read and write when the handshake has not completed yet. Thus the data exchange can commence before the handshake completes. This option requires enabling the server\-side support on sysctl \fInet.ipv4.tcp_fastopen\fP (see above). For TCP Fast Open client\-side support, see \fBsend\fP(2) \fBMSG_FASTOPEN\fP or \fBTCP_FASTOPEN_CONNECT\fP below. .TP \fBTCP_FASTOPEN_CONNECT\fP (since Linux 4.11) This option enables an alternative way to perform Fast Open on the active side (client). When this option is enabled, \fBconnect\fP(2) would behave differently depending on if a Fast Open cookie is available for the destination. .IP If a cookie is not available (i.e. first contact to the destination), \fBconnect\fP(2) behaves as usual by sending a SYN immediately, except the SYN would include an empty Fast Open cookie option to solicit a cookie. .IP If a cookie is available, \fBconnect\fP(2) would return 0 immediately but the SYN transmission is deferred. A subsequent \fBwrite\fP(2) or \fBsendmsg\fP(2) would trigger a SYN with data plus cookie in the Fast Open option. In other words, the actual connect operation is deferred until data is supplied. .IP \fBNote:\fP While this option is designed for convenience, enabling it does change the behaviors and certain system calls might set different \fIerrno\fP values. With cookie present, \fBwrite\fP(2) or \fBsendmsg\fP(2) must be called right after \fBconnect\fP(2) in order to send out SYN+data to complete 3WHS and establish connection. Calling \fBread\fP(2) right after \fBconnect\fP(2) without \fBwrite\fP(2) will cause the blocking socket to be blocked forever. .IP The application should either set \fBTCP_FASTOPEN_CONNECT\fP socket option before \fBwrite\fP(2) or \fBsendmsg\fP(2), or call \fBwrite\fP(2) or \fBsendmsg\fP(2) with \fBMSG_FASTOPEN\fP flag directly, instead of both on the same connection. .IP Here is the typical call flow with this new option: .IP .in +4n .EX s = socket(); setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, 1, ...); connect(s); write(s); /* write() should always follow connect() * in order to trigger SYN to go out. */ read(s)/write(s); /* ... */ close(s); .EE .in .SS "Программный интерфейс сокетов" TCP предоставляет ограниченную поддержку внеполосных данных в виде (одного байта) срочных данных. В Linux это означает, что если другая сторона посылает новые внеполосные данные, то старые срочные данные вставляются как обычные данные в поток (даже когда \fBSO_OOBINLINE\fP не установлен). В этом отличие от реализации стека в BSD. .PP По умолчанию в Linux используется совместимая с BSD интерпретация поля срочного указателя. Это нарушает RFC\ 1122, но требуется для правильного взаимодействия с другими стеками. Это можно изменить через \fI/proc/sys/net/ipv4/tcp_stdurg\fP. .PP Возможно получить внеполосные данные с помощью \fIrecv\fP(2) и флага \fBMSG_PEEK\fP. .PP Since Linux 2.4, Linux supports the use of \fBMSG_TRUNC\fP in the \fIflags\fP argument of \fBrecv\fP(2) (and \fBrecvmsg\fP(2)). This flag causes the received bytes of data to be discarded, rather than passed back in a caller\-supplied buffer. Since Linux 2.4.4, \fBMSG_TRUNC\fP also has this effect when used in conjunction with \fBMSG_OOB\fP to receive out\-of\-band data. .SS "Вызовы ioctl" Следующие вызовы \fBioctl\fP(2) возвращают информацию в аргументе \fIvalue\fP. Корректный синтаксис: .PP .RS .nf \fBint\fP\fI value\fP\fB;\fP \fIerror\fP\fB = ioctl(\fP\fItcp_socket\fP\fB, \fP\fIioctl_type\fP\fB, &\fP\fIvalue\fP\fB);\fP .fi .RE .PP Значением \fIioctl_type\fP может быть одно из: .TP \fBSIOCINQ\fP .\" FIXME https://www.sourceware.org/bugzilla/show_bug.cgi?id=12002, .\" filed 2010-09-10, may cause SIOCINQ to be defined in glibc headers Возвращает количество непрочитанных данных в очереди в приёмном буфере. Сокет не должен быть в состоянии LISTEN, иначе возвращается ошибка (\fBEINVAL\fP). Значение \fBSIOCINQ\fP определено в \fI\fP. В качестве альтернативы вы можете использовать синоним \fBFIONREAD\fP, определённый в \fI\fP. .TP \fBSIOCATMARK\fP Возвращает истинное значение (т.е., \fIvalue\fP отличное от нуля), если входящие данные потока отмечены как срочные. .IP Если установлен параметр сокета \fBSO_OOBINLINE\fP и \fBSIOCATMARK\fP возвращает истинное значение, то при следующем чтении из сокета будут получены срочные данные. Если параметр сокета \fBSO_OOBINLINE\fP не установлен и \fBSIOCATMARK\fP возвращает истинное значение, то при следующем чтении из сокета будут получены байты, размещённые после срочных (для действительного чтения срочных данных требуется флаг \fBrecv(MSG_OOB)\fP). .IP Заметим, что при чтении никогда не происходит чтения за меткой срочности. Если приложение проинформировано о наличии срочных данных с помощью \fBselect\fP(2) (с аргументом \fIexceptfds\fP) или доставкой сигнала \fBSIGURG\fP, то оно может переместить метку дальше с помощью цикла, в котором постоянно проверяется \fBSIOCATMARK\fP, и выполнить чтение (запросив любое количество байт) пока \fBSIOCATMARK\fP возвращает ложь. .TP \fBSIOCOUTQ\fP .\" FIXME . https://www.sourceware.org/bugzilla/show_bug.cgi?id=12002, .\" filed 2010-09-10, may cause SIOCOUTQ to be defined in glibc headers Возвращает количество не отправленных данных в очереди отправки сокета. Сокет не должен быть в состоянии прослушивания LISTEN, иначе возвратится ошибка (\fBEINVAL\fP). Значение \fBSIOCOUTQ\fP определено в \fI\fP. Или же вы можете использовать его аналог \fBTIOCOUTQ\fP, определённый в \fI\fP. .SS "Обработка ошибок" При возникновении сетевой ошибки TCP пытается отправить пакет повторно. Если в течение некоторого времени этого сделать не удаётся, то возвращается либо \fBETIMEDOUT\fP, либо последняя ошибка, произошедшая в этом соединении. .PP Some applications require a quicker error notification. This can be enabled with the \fBIPPROTO_IP\fP level \fBIP_RECVERR\fP socket option. When this option is enabled, all incoming errors are immediately passed to the user program. Use this option with care \[em] it makes TCP less tolerant to routing changes and other normal network conditions. .SH ОШИБКИ .TP \fBEAFNOTSUPPORT\fP Переданный в \fIsin_family\fP тип адреса сокета не равен \fBAF_INET\fP. .TP \fBEPIPE\fP Другая сторона неожиданно закрыла сокет, или была произведена попытка чтения в отключённом сокете. .TP \fBETIMEDOUT\fP Другая сторона не подтвердила передачу данных через определённое время. .PP Все ошибки, определённые для \fBip\fP(7) или общего слоя сокетов, также могут быть возвращены и для TCP. .SH ВЕРСИИ Support for Explicit Congestion Notification, zero\-copy \fBsendfile\fP(2), reordering support and some SACK extensions (DSACK) were introduced in Linux 2.4. Support for forward acknowledgement (FACK), TIME_WAIT recycling, and per\-connection keepalive socket options were introduced in Linux 2.3. .SH ДЕФЕКТЫ Не все ошибки описаны. .PP .\" Only a single Linux kernel version is described .\" Info for 2.2 was lost. Should be added again, .\" or put into a separate page. .\" .SH AUTHORS .\" This man page was originally written by Andi Kleen. .\" It was updated for 2.4 by Nivedita Singhvi with input from .\" Alexey Kuznetsov's Documentation/networking/ip-sysctl.txt .\" document. Протокол IPv6 не описан. .SH "СМ. ТАКЖЕ" \fBaccept\fP(2), \fBbind\fP(2), \fBconnect\fP(2), \fBgetsockopt\fP(2), \fBlisten\fP(2), \fBrecvmsg\fP(2), \fBsendfile\fP(2), \fBsendmsg\fP(2), \fBsocket\fP(2), \fBip\fP(7), \fBsocket\fP(7) .PP The kernel source file \fIDocumentation/networking/ip\-sysctl.txt\fP. .PP В RFC\ 793 описан TCP. .br В RFC\ 1122 перечислены требования TCP и дано описание алгоритма Нагла (Nagle). .br В RFC\ 1323 описаны метки времени TCP и параметры масштабирования окна. .br В RFC\ 1337 описаны факторы риска TIME_WAIT. .br В RFC\ 3168 описано уведомление о явной перегрузке (Explicit Congestion Notification). .br В RFC\ 2581 описаны алгоритмы управления перегрузками TCP. .br В RFC\ 2018 и RFC\ 2883 описан SACK и расширения к SACK. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .