Является ли значение MSS фиксированным в пакете SYN?
Интересно, как MSS устанавливается в пакете SYN? Это фиксированное значение в одной операционной системе или значение может быть изменено в той же операционной системе? Я знаю, что значение отличается в разных операционных системах. Также значение MSS в SYN связано с аппаратной конфигурацией? Благодарю.
2 ответа
RFC 879 описывает, как MSS используется и указывается.
Вкратце, MSS указывается во время TCP-квитирования через пакет SYN. Однако позже это значение может быть изменено самой ОС или установкой параметра протокола.
Вы можете установить опцию TCP_MAXSEG через setsockopt.
Можем ли мы установить значение MSS во время сеанса TCP, установив опцию сокета TCP_MAXSEG? Мое требование - отредактировать значение MSS во время текущего сеанса передачи данных по протоколу TCP.
В то время как значение MSS в пакетах SYN и SYNACK устанавливается инициатором и стороной ответчика соответственно, широко распространенная практика, известная как ограничение MSS, может привести к изменению MSS сетевым элементом на пути - это часто используется для уменьшения MSS всех соединений, проходящих через какой-то туннельный канал. Например, PPPoE обычно используется в жилых широкополосных сетях и требует MTU 1492 и соответствующего IPv4 MSS 1452, поэтому, пока SYN может оставить ваш компьютер с MSS 1460 (при условии, что вы используете Ethernet с MTU 1500), но как только он передает ограничивающий MSS маршрутизатор ISP, MSS в пакете SYN впоследствии будет изменен на 1452, а также для пакета SYNACK входящего / ответчика, поэтому соединение продолжается с уменьшенным MSS 1452. Эта практика, похоже, используется вместо Обнаружение MTU пути, основанное на использовании ответов ICMP Fragmentation Needed от сети, поскольку они могут быть потеряны в плохо настроенных сетях и с помощью определенных методов балансировки нагрузки.