Конфигурация TCP/IP в SVR4 напоминают две
предыдущие системы, однако доступно значительно
меньше опций. В файле /etc/conf/pack.d/ip/space.c
определены две константы, которые могут быть
изменены, после чего ядро должно быть
перестроено, а система перезагружена.
Большинство из переменных, которые мы
описали в двух предыдущих разделах, определены в
ядре, однако необходимо иметь patch (patch (англ.) -
заплата; исправления, поставляемые
производителями к программному обеспечению),
чтобы модифицировать их. В качестве примера
можно привести переменную tcp_keepidle со
значением 14400.
Solaris 2.2
Solaris 2.2 это типичная Unix система
нового поколения. Она предоставляет программу,
которая позволяет администратору изменить опции
конфигурации для системы TCP/IP. Это позволяет
осуществлять переконфигурацию без модификации
файлов с исходными текстами и перестройки ядра.
Конфигурационная программа называется ndd(1)
. Мы можем запустить программу, чтобы посмотреть,
какие параметры могут быть просмотрены или
модифицированы в UDP модуле:
solaris % ndd /dev/udp \?
udp_wroff_extra (read and write-чтение и запись)
udp_def_ttl (read and write-чтение и запись)
udp_first_anon_port (read and write-чтение и запись)
udp_trust_optlen (read and write-чтение и запись)
udp_do_checksum (read and write-чтение и запись)
udp_status (read only-только чтение)
Мы можем указать пять модулей: /dev/ip,
/dev/icmp, /dev/arp, /dev/udp
и /dev/tcp. Знак вопроса в качестве
аргумента (перед которым необходимо поставить
обратный слэш, чтобы предотвратить
интерпретацию вопросительного знака
интерпретатором команд) сообщает программе о
необходимости показать список всех параметров
для этого модуля. В качестве примера, который
запрашивает значение переменной, можно привести
следующее:
solaris % ndd /dev/tcp tcp_mss_def
536
Чтобы изменить значение переменной,
необходимо с привилегиями суперпользователя
ввести следующее:
solaris # ndd -set /dev/ip ip_forwarding 0
Эти переменные могут быть поделены на три
категории:
- Переменные конфигурации, которые могут быть
изменены системным администратором (например, ip_forwarding).
- Переменные статуса, которые могут быть
только просмотрены (например, ARP кэш). Обычно, эта
информация предоставляется в формате, пригодном
для чтения, командами ifconfig, netstat
и arp.
- Отладочные переменные, предназначенные для
исходного кода ядра. Включение некоторых из них
генерирует отладочный вывод ядра, что может
значительно снизить производительность.
Сейчас мы опишем эти параметры для каждого
модуля. Все параметры могут быть считаны и
записаны, если они не помечены "только для
чтения" (Read only). Эти параметры только для чтения
являются переменными статуса (см. выше, пункт 2).
Переменные, упомянутые в пункте 3, помечены как
"отладочные" (Debug). Все временные
характеристики приведены в миллисекундах, что
отличается от других систем, которые обычно
указывают время в некотором количестве
500-миллисекундных тиков часов.
/dev/ip
ip_cksum_choice
- (Отладочная) Осуществляет выбор между двумя
независимыми реализациями алгоритма расчета контрольной суммы IP.
ip_debug
- (Отладочная) Включает печать отладочного
вывода от ядра, если больше чем 0. Чем больше
значение, тем больше генерируется вывода. По
умолчанию 0.
ip_def_ttl
- Значение TTL по умолчанию для исходящих IP
датаграмм (если не указано на транспортном
уровне). По умолчанию 255.
ip_forward_directed_broadcasts
- Если равно 1 (по умолчанию), принятые
датаграммы, адрес назначения которых является
широковещательным адресом непосредственно
подключенного интерфейса, перенаправляются
как широковещательные запросы канального
уровня. Если равно 0, эти датаграммы молча
отбрасываются.
ip_forward_src_routed
- Если равно 1 (по умолчанию), принятые
датаграммы, содержащие опцию
маршрутизации от источника, перенаправляются.
Если равно 0, эти датаграммы отбрасываются.
ip_forwarding
- Указывает, будет ли система перенаправлять
входящие IP датаграммы: 0 означает нет
перенаправления, 1 обозначает перенаправляет
всегда и 2 (по умолчанию) означает, что
перенаправление осуществляется только в том
случае, если функционирует два или более
интерфейсов.
ip_icmp_return_data_bytes
- Количество байт данных после IP заголовка,
которые возвращаются в ICMP ошибке. По умолчанию 64.
ip_ignore_delete_time
- (Отладочная) Минимальное время жизни записи
в таблице маршрутизации IP (IRE). По умолчанию 30
секунд. (Этот параметр приводится в секундах, а не
в миллисекундах).
ip_ill_status
- (Только для чтения) Отображает статус для
структуры данных уровня, находящегося ниже IP.
Существует одна структура нижнего уровня для
каждого интерфейса.
ip_ipif_status
- (Только для чтения) Отображает статус каждой
структуры данных IP интерфейса (IP адрес, маска
подсети и так далее). Существует только одна
структура для каждого интерфейса.
ip_ire_cleanup_interval
- (Отладочная) Интервал, с которым
просматриваются записи в таблице маршрутизации
IP для возможного удаления. По умолчанию 30000
миллисекунд (30 секунд).
ip_ire_flush_interval
- Интервал, через который информация ARP
безусловно удаляется из таблицы маршрутизации IP.
По умолчанию 1200000 миллисекунд (20 минут).
ip_ire_pathmtu_interval
- Интервал, через который алгоритм
определения транспортного MTU
пытается увеличить MTU. По умолчанию 30000
миллисекунд (30 секунд).
ip_ire_redirect_interval
- Интервал, через который записи в таблице
маршрутизации IP, которые получены с помощью ICMP
перенаправления, удаляются. По умолчанию 60000
миллисекунд (60 секунд).
ip_ire_status
- (Только для чтения) Отображает все записи в
таблице маршрутизации IP.
ip_local_cksum
- Если равно 0 (по умолчанию), IP не рассчитывает
контрольную сумму IP или контрольную
сумму верхних протоколов (TCP, UDP, ICMP или IGMP)
для датаграмм, которые отправляются или
принимаются через loopback интерфейс.
Если равно 1, контрольные суммы рассчитываются.
ip_mrtdebug
- (Отладочная) Включает печать отладочного
вывода, связанного с групповой маршрутизацией
ядра, если равно 1. По умолчанию равно 0.
ip_path_mtu_discovery
- Если равно 1 (по умолчанию), определение
транспортного MTU осуществляется уровнем IP. Если
равно 0, IP никогда не установит бит "не
фрагментировать" для исходящих датаграмм.
ip_respond_to_address_mask
- Если равно 0 (по умолчанию), хост не отвечает
на ICMP запросы маски адреса. Если равно 1 -
отвечает.
ip_respond_to_echo_broadcast
- Если равно 1 (по умолчанию), хост отвечает на ICMP эхо запросы, которые отправлены на
широковещательный адрес. Если равно 0 - не
отвечает.
ip_respond_to_timestamp
- Если равно 0 (по умолчанию), хост не отвечает
на ICMP запросы временной марки. Если
равно 1 - отвечает.
ip_respond_to_timestamp_broadcast
- Если равно 0 (по умолчанию), хост не отвечает
на ICMP запросы временной марки, которые
отправлены на широковещательный адрес. Если
равно 1 - отвечает.
ip_rput_pullups
- (Отладочная) Счетчик количества буферов в
драйвере сетевого интерфейса, который
необходимо опросить, чтобы получить полный IP
заголовок. Устанавливается в 0 во время загрузки
и может быть сброшен в 0.
ip_send_redirects
- Если равно 1 (по умолчанию), хост отправляет ICMP перенаправления, когда
функционирует как маршрутизатор. Если равно 0 - не
отправляет.
ip_send_source_quench
- Если равно 1 (по умолчанию), хост генерирует ICMP ошибки подавления источника, когда
входящие датаграммы отбрасываются. Если равно 0 -
не генерирует.
ip_wroff_extra
- (Отладочная) Количество байт
дополнительного пространства, необходимого в
буфере, чтобы расположить IP заголовки. По
умолчанию 32.
/dev/icmp
icmp_bsd_compat
- (Отладочная) Если равно 1 (по умолчанию), поле
длины в IP заголовке принятой датаграммы
настраивается так, чтобы исключить длину IP
заголовка. Это совместимо с Berkeley реализациями и
необходимо для приложений, которые читают
символьные (raw) IP или символьные ICMP пакеты. Если
равно 0, поле длины не изменяется.
icmp_def_ttl
- Значение TTL по умолчанию для
исходящих ICMP сообщений. По умолчанию 255.
icmp_wroff_extra
- (Отладочная) Количество байт
дополнительного пространства в буферах,
необходимого, чтобы расположить IP опции и
заголовки канального уровня. По умолчанию 32.
/dev/arp
arp_cache_report
- (Только для чтения) ARP кэш.
arp_cleanup_interval
- Интервал, после которого запись удаляется
из ARP кэша. По умолчанию 300000 миллисекунд (5 минут).
(IP поддерживает свой собственный кэш полной ARP
трансляции; см. ip_ire_flush_interval.)
arp_debug
- (Отладочная) Если равно 1, включает печать
отладочного вывода ARP драйвера. По умолчанию 0.
/dev/udp
udp_def_ttl
- TTL по умолчанию для исходящих UDP датаграмм.
По умолчанию 255.
udp_do_checksum
- Если равно 1 (по умолчанию), рассчитывается контрольная сумма UDP для исходящих UDP
датаграмм. Если равно 0, исходящие UDP датаграммы
не содержат контрольной суммы. (В отличие от
большинства других реализаций, этот флаг
контрольной суммы UDP не влияет на входящие
датаграммы. Если получена датаграмма, которая
имеет ненулевую контрольную сумму, контрольная
сумма всегда будет проверена.)
udp_largest_anon_port
- Самый большой номер порта,
который может быть назначен как динамически
назначаемый UDP порт. По умолчанию 65535.
udp_smallest_anon_port
- Начальный номер порта, с которого
начинаются динамически назначаемые UDP порты. По
умолчанию 32768.
udp_smallest_nonpriv_port
- Процессу требуются привилегии
суперпользователя, чтобы назначить самому себе
номер порта меньше чем этот. По умолчанию 1024.
udp_status
- (Только для чтения) Статус всех локальных
конечных точек UDP: локальный IP адрес и порт,
удаленный IP адрес и порт.
udp_trust_optlen
- (Отладочная) В настоящее время не
используется.
udp_wroff_extra
- (Отладочная) Количество байт
дополнительного пространства, необходимого,
чтобы расположить в буфере IP опции и заголовки
канального уровня. По умолчанию 32.
/dev/tcp
tcp_close_wait_interval
- Значение 2MSL: время, которое
необходимо провести в состоянии TIME_WAIT.
По умолчанию 240000 миллисекунд (4 минуты).
tcp_conn_grace_period
- (Отладочная) Время, добавляемое к значению
таймера при отправке SYN. По умолчанию 500
миллисекунд.
tcp_conn_req_max
- Максимальное количество необслуженных запросов на соединение, которые могут
быть поставлены в очередь для любой слушающей
конечной точки. По умолчанию 5.
tcp_cwnd_max
- Максимальное значение окна
переполнения. По умолчанию 32768.
tcp_debug
- (Отладочная) Если равно 1, включается печать
отладочного вывода TCP. По умолчанию 0.
tcp_deferred_ack_interval
- Время, которое необходимо подождать перед
отправкой задержанного ACK. По
умолчанию 50 миллисекунд.
tcp_dupack_fast_retransmit
- Количество последовательно пришедших
дублированных ACK, которые включают быструю
повторную передачу и алгоритм быстрого
восстановления. По умолчанию 3.
tcp_eager_listeners
- (Отладочная) Если равно 1 (по умолчанию), TCP
завершает трехразовое рукопожатие перед
передачей нового соединения приложению с
ожидающим пассивным открытием. Это способ,
которым пользуется большинство реализаций TCP.
Если равно 0, TCP передает пришедший запрос на
соединение (принятый SYN) приложению и не
завершает трехразовое рукопожатие до тех пор,
пока приложение не примет соединение. (Установка
этого значения в 0 может сломать многие
существующие приложения.)
tcp_ignore_path_mtu
- (Отладочная) Если равно 1, определение
транспортного MTU игнорирует принятые ICMP
сообщения о необходимости фрагментации. Если
равно 0 (по умолчанию), для TCP включается алгоритм
определения транспортного MTU.
tcp_ip_abort_cinterval
- Полное время тайм-аута повторной передачи,
когда TCP осуществляет активное открытие. По
умолчанию 240000 миллисекунд (4 минуты).
tcp_ip_abort_interval
- Полное время тайм-аута повторной передачи
для TCP соединения, после того как оно
установлено. По умолчанию 120000 миллисекунд (2
минуты).
tcp_ip_notify_cinterval
- Величина тайм-аута, когда TCP осуществляет
активное открытие, после чего TCP уведомляет IP о
необходимости найти новый маршрут. По умолчанию
10000 миллисекунд (10 секунд).
tcp_ip_notify_interval
- Величина тайм-аута для установленного
соединения, после истечения которого TCP
уведомляет IP о необходимости найти новый
маршрут. По умолчанию 10000 миллисекунд (10 секунд).
tcp_ip_ttl
- TTL, используемый для исходящих TCP
сегментов. По умолчанию 255.
tcp_keepalive_interval
- Время, в течение которого соединение не
используется, по истечению которого будет
отправлена проба "оставайся в
живых". По умолчанию 7200000 миллисекунд (2 часа).
tcp_largest_anon_port
- Самый большой номер порта, который может
быть использован как динамически
назначаемый порт TCP. По умолчанию 65535.
tcp_maxpsz_multiplier
- (Отладочная) Указывает множитель MSS, на
основании которого данные, которые выдает
приложение, разбиваются на пакеты. По умолчанию 1.
tcp_mss_def
- Значение MSS по умолчанию для
нелокальных пунктов назначения. По умолчанию 536.
tcp_mss_max
- Максимальный MSS. По умолчанию 65495.
tcp_mss_min
- Минимальный MSS. По умолчанию 1.
tcp_naglim_def
- (Отладочная) Максимальное значение порога
алгоритма Нагла для каждого
соединения. По умолчанию равно 65535. Значение для
соединения начинается с минимального MSS
или этого значения. Значение для соединения
устанавливается в 1 опцией сокета TCP_NODELAY,
которая выключает алгоритм Нагла.
tcp_old_urp_interpretation
- (Отладочная) Если равно 1 (по умолчанию),
используется старая (но наиболее
распространенная) BSD интерпретации указателя срочности: он указывает на 1 байт
позади последнего байта срочных данных. Если
равно 0, используется интерпретация, приведенная
в требованиях к хостам RFC: указатель срочности
указывает на последний байт срочных данных.
tcp_rcv_push_wait
- (Отладочная) Максимальное количество байт,
полученных без установленного флага
PUSH, перед тем как данные передаются приложению.
По умолчанию 16384.
tcp_rexmit_interval_initial
- (Отладочная) Первоначальная величина
тайм-аута повторной передачи. По умолчанию 500
миллисекунд.
tcp_rexmit_interval_max
- (Отладочная) Максимальная величина
тайм-аута повторной передачи. По умолчанию 60000
миллисекунд (60 секунд).
tcp_rexmit_interval_min
- (Отладочная) Минимальная величина тайм-аута
повторной передачи. По умолчанию 200 миллисекунд.
tcp_rwin_credit_pct
- (Отладочная) Часть приемного окна (в
процентах), которая должна быть буферизирована,
перед тем как управление потоком проверяет
каждый принятый сегмент. По умолчанию 50%.
tcp_smallest_anon_port
- Начальный номер порта, с
которого начинаются динамические назначаемые
порты TCP. По умолчанию 32768.
tcp_smallest_nonpriv_port
- Процессу требуются привилегии
суперпользователя, чтобы назначить самому себе
номер порта меньше чем этот. По умолчанию 1024.
tcp_snd_lowat_fraction
- (Отладочная) Если не равно 0, метка "низкой
воды" отправляющего буфера равна
размеру отправляющего буфера поделенного на это
значение. По умолчанию 0 (выключено).
tcp_status
- (Только для чтения) Информация о всех TCP
соединениях.
tcp_sth_rcv_hiwat
- (Отладочная) Если не равно 0, значение
устанавливается в метку "высокой воды" для
потока. По умолчанию равно 0.
tcp_sth_rcv_lowat
- (Отладочная) Если не равно 0, значение
устанавливается в метку "низкой воды" для
потока. По умолчанию 0.
tcp_wroff_xtra
- (Отладочная) Количество байт
дополнительного пространства, необходимого,
чтобы расположить в буферах IP опции и заголовки
канального уровня. По умолчанию 32.
AIX 3.2.2
AIX 3.2.2 позволяет установить сетевые опции с
использованием команды no. Она может
отобразить значения опций, установить значения
опций или установить значения по умолчанию.
Например, посмотреть опцию можно следующим
образом:
aix % no -o udp_ttl
udp_ttl = 30
Модифицированы могут быть следующие опции.
arpt_killc
- Время (в минутах) перед тем, как
неиспользуемая запись ARP полностью удаляется. По
умолчанию 20.
ipforwarding
- Если равно 1 (по умолчанию), IP
датаграммы всегда перенаправляются. Если равно 0,
перенаправление выключено.
ipfragttl
- Время жизни (в секундах) для IP фрагментов,
которые ожидают повторной сборки. По
умолчанию 60.
ipsendredirects
- Если равно 1 (по умолчанию), хост будет
отправлять ICMP перенаправления, когда
перенаправляет IP датаграммы. Если равно 0, ICMP
перенаправления не отправляются.
loop_check_sum
- Если равно 1 (по умолчанию), контрольная
сумма IP рассчитывается для датаграмм, которые
посылаются по loopback интерфейсу. Если
равно 0, эта контрольная сумма не рассчитывается.
nonlocsrcroute
- Если равно 1 (по умолчанию), полученные
датаграммы, содержащие опцию
маршрутизации от источника, перенаправляются.
Если равно 0, эти датаграммы отбрасываются.
subnetsarelocal
- Если равно 1 (по умолчанию), IP адрес
назначения с тем же самым идентификатором сети,
как и у отправляющего хоста, однако с другим
идентификатором подсети, считается локальным.
Если равно 0, только IP адреса назначения
принадлежащие непосредственно подключенной
подсети считаются локальными. Кратко это описано
на рисунке Е.1. Когда происходит отправка на
локальный пункт назначения, TCP выбирает MSS,
основываясь на MTU исходящего интерфейса. Когда
происходит отправка на нелокальные пункты
назначения, TCP использует значение по умолчанию
(536) в качестве MSS.
tcp_keepidle
- Количество 500-миллисекундных тиков часов
перед отправкой пробы "оставайся в
живых". Значение по умолчанию 14400 (2 часа).
tcp_keepintvl
- Количество 500-миллисекундных тиков часов
перед отправкой последовательных проб
"оставайся в живых", если не получен отклик.
Значение по умолчанию 150 (75 секунд).
tcp_recvspace
- Размер по умолчанию приемного
буфера TCP. Это оказывает влияние на предлагаемый
размер окна. Значение по умолчанию 16384.
tcp_sendspace
- Размер по умолчанию отправляющего
буфера TCP. Значение по умолчанию 16384.
tcp_ttl
- Значение TTL по умолчанию для TCP
сегментов. Значение по умолчанию 60.
udp_recvspace
- Размер по умолчанию приемного
буфера UDP. Значение по умолчанию 41600, что
позволяет принять 40 датаграмм размером 1024 байта.
udp_sendspace
- Размер по умолчанию отправляющего
буфера UDP. Определяет максимальный размер UDP
датаграммы, которая может быть отправлена. По
умолчанию 9216.
udp_ttl
- Значение TTL по умолчанию в UDP датаграммах. По
умолчанию 30.
4.4BSD
4.4BSD это первый релиз Berkeley, который
предоставлял динамическую конфигурацию
большого количества параметров ядра. При этом
использовалась команда sysctl(8) . Имена
параметров были выбраны так, чтобы напоминать
имена MIB из SNMP. Просмотреть параметры можно
следующим образом:
vangogh % sysctl net.inet.ip.forwarding
net.inet.ip.forwarding = 1
Чтобы изменить параметр (обязательно с
привилегиями суперпользователя), можно сделать
следующее:
vangogh # sysctl -w net.inet.ip.ttl=128
Могут быть изменены следующие параметры.
net.inet.ip.forwarding
- Если равно 0 (по умолчанию), IP
датаграммы не перенаправляются. Если равно 1,
перенаправление включено.
net.inet.ip.redirect
- Если равно 1 (по умолчанию), хост будет
отправлять ICMP перенаправления при
перенаправлении IP датаграмм. Если равно 0, ICMP
перенаправления не отправляются.
net.inet.ip.ttl
- Значение TTL по умолчанию для TCP и UDP. По
умолчанию 64.
net.inet.icmp.maskrepl
- Если равно 0 (по умолчанию), хост не отвечает
на ICMP запросы маски адреса. Если
равно 1 - отвечает.
net.inet.udp.checksum
- Если равно 1 (по умолчанию), рассчитывается контрольная сумма UDP для исходящих UDP
датаграмм, а для входящих UDP датаграмм, если
контрольная сумма не равна нулю, она проверяется.
Если равно 0, исходящие UDP датаграммы не содержат
контрольной суммы, и не осуществляется проверка
контрольной суммы для входящих UDP датаграмм, даже
если отправитель рассчитал контрольную сумму.
Помимо этого, большое количество
переменных, которые мы описали раньше в этом
приложении, находятся в различных файлах
исходных текстов (tcp_keepidle, subnetsarelocal и
так далее) и могут быть модифицированы.