Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2009-10-28

Разные MTU и блокирование ICMP

Вот уж вечные проблемы. Старый, добрый ну-просто-повсеместно распространенный TCP/IP. И до сих пор лезут проблемы.

Суть технологии состоит в том, что
когда два хоста соединяются друг с другом, то устанавливается DF бит
"Dont Fragmen"), который запрещает фрагментацию пакетов на роутерах.
Это заставляет роутер, который собирается перенаправить пакет через
соединение с MTU меньше размера пакета, отбрасывать пакеты и
отправлять хосту-отправителю сообщение типа ICMP 3:4. Данное сообщение
типа "Destination is unreachable" означает "Хост недоступен, поскольку
пакет слишком большой и роутер не будет его фрагментировать". В
добавлении к данному сообщению, при применении PMTUD, прилагается
размер MTU нижестоящего за роутером участка. Таким образом,
хост-отправитель, после получения ICMP 3:4 с информацией от PMTUD,
уменьшает размер отправляемого пакета и пересылает его заново. Как
итог -- пакеты доходят до хоста-получателя без фрагментации.

Все операционные системы с 1988 года поддерживают технологию PMTUD.
Однако, проблема может быть в том, что либо вышестоящий над вашим
соединением роутер, либо некий роутер между вами и удаленным сервером,
либо сам удаленный веб-сервер могут БЛОКИРОВАТЬ некоторые типы ICMP
пакетов, включая ICMP 3:4. В этом месте хочется передать привет
параноидальным администраторам -- НЕ ДЕЛАЙТЕ ТАК, НЕ БЛОКИРУЙТЕ ICMP
трафик! Как итог - соединение между хостами устанавливается, но пакеты
от одного хоста к другому не доставляются, отбрасяваясь где-то по
пути... Похоже на наши симптомы?

Собственно проблема не нова, ее начали обсуждать еще в 1998 году.
Называется она Path MTU Discovery Black Hole, и описана в RFC 2923.

По сути, потенциально этой проблеме подвержено любой PPPoE соединение,
поскольку его MTU меньше типового MTU в 1500 байт и, для прохождение
через PPPoE, TCP/IP пакет необходимо либо фрагментировать, либо
использовать PMTUD.

В тоже время, если у вас обыкновенная машина с DSL модемом, вы не
столкнетесь с этой проблемой, поскольку на этапе инициализации
соединения с удаленными серверами размер пакета будет вычислен исходя
из размера MTU PPPoE соединения.

Однако, если у вас DSL роутер (например как у меня, на базе линукса),
то вы в зоне риска, поскольку ваша машина, при установлении соединения
с удаленными серверами, по умолчанию оперирует размером пакета исходя
из MTU локальной сети, которое установлено в 1500. В тоже время,
пакеты от удаленных серверов к вам проходят через канал роутера,
который имеет MTU PPPoE соединения, т.е. 1492...


opennet.ru/base/net/pppoe_mtu

Вот уж действительно, не надо блокировать ICMP. А не будешь блокировать - легко зафлудят. Что делать, куда бежать? Интересно, какие проблемы будут в версии 6 IP?


Сцылки дня:

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)