Reakce na ICMP port unreachable (IRIX)

Matus UHLAR - fantomas uhlar at fantomas.sk
Wed Oct 29 08:55:30 CET 2003


> Jan Kasprzak wrote:
>>       narazil jsem na zajimavy problem: Je nekde definovano,
>> jak se ma TCP stack a/nebo socketove API chovat pri zavolani connect(),
>> na jehoz SYN packet druha strana odpovi "ICMP port unreachable"?
>> Obvyklejsi je v tomto miste "TCP RST", je-li port neotevreny. ICMP
>> zprava se muze posilat napriklad je-li port nekde filtrovan.
>>
>>       Linux, FreeBSD a Solaris po obdrzeni ICMP port unreachable ihned
>> ukonci connect() s ECONNREFUSED, zatimco IRIX 6.5 zda se tu ICMP zpravu
>> ignoruje a proces visi uvnitr connect() dal (overil jsem tcpdumpem, ze IRIX
>> tu ICMP zpravu vidi).
>>
>>       Nenasel jsem jestli je to chyba IRIXu, nebo jestli jsou legalne
>> mozne oba pristupy, nebo pripadne jestli se toto da nekde IRIXu nastavit.

Ja som sa s tymto problemom tiez stretol, na starsej verzii FreeBSD.
tcpdumpom som zistil ze po 5. syn paketoch pride 5 port unreachable, a potom
connect vytimeoutuje.

Dan Lukes <dan at obluda.cz> wrote:
>        Pripomel bych, ze volani "connect()" neni vyhrazeno jen pro navazovani
> TCP spojeni. A jelikoz seznam moznych IP protokolu neni uzavreny, je
> nepravdepodobne, ze by existovala takova definice, o ktere mluvis.
>
>        IMHO je to implementacni zalezitost - connect by mel zhavarovat, pokud
> je zrejme, ze se spojeni nepodarilo.
>
>        Nicmene, mozna je v tom IRIX preci jen nevinne. Veta "ICMP zprava se
> muze posilat napriklad je-li port nekde filtrovan" totiz je i neni
> pravda - zavisi to na vykladu - a chybny vyklad muze vest ke vzniku
> popsanych problemu.

ak to zavisi na vyklade, potom je spravna, je tam totiz slovicko "moze"

>        Existuje totiz nazor zalozeny na RFC1122, ze PORT UNREACHABLE muze
> zasilat vyhradne cilovy stroj.

to vsak nic nemeni na tom, ze to PORT UNREACHABE moze prist a ked pride,
malo by sa spojenie prerusit.

> Ostatne, pokud je duvodem zaslani ICMP filtr, mela by zasilana zprava byt
> ADMIN PROHIBITED nikoli PORT UNREACHABLE.

konkretne toto som nikde nenasiel.

FreeBSD ipfw option reject posiela defaultne ICMP host unreachable;
linuxovy REJECT posiela standardne icmp port unreachable;
ak systemak teda nastavi tieto "defaultne" moznosti, pride naspat ICMP.

>        Nikoli uplne jasne nasledky ma i vyslovny zakaz pouzit PORT UNREACH v
> pripadech, kdy transportni protokol ma vlastni mechanismus pro totez
> (pricemz TCP RST je vyslovne zmineno jako priklad).

no yo, rfc1122 sekcia 3.2.2.1:

            A transport protocol
            that has its own mechanism for notifying the sender that a
            port is unreachable (e.g., TCP, which sends RST segments)
            MUST nevertheless accept an ICMP Port Unreachable for the
            same purpose.

>        Implementace IRIXu je tedy spravna - patrne dokonce spravnejsi nez
> implementace ostatnich zminenych OS. Je tedy dost dobre mozne, ze zadna
> "oprava" ani "nastaveni" pro zmenu chovani v tomto bode existovat nebude.

spravna? co je spravne na tom, ze ak host dostane informaciu o
nedosiahnutelnosti ciela, NEPRERUSI pokusy o spojenie? Z informativneho
hladiska by to pre neho malo znamenat presne to iste - nejde to, kasli na
to).

tym skor ze vo vami spominanom RFC1122 je napisane (sekcia 4.2.3.9):

            o    Destination Unreachable -- codes 2-4

                 These are hard error conditions, so TCP SHOULD abort
                 the connection.

co znamena dve veci:

1. RFC1122 si v bodoch 3.2.2.1 a 4.2.3.9 protireci
2. IRIX jednoznacne bod 4.2.3.9 porusuje.
3. ak za budeme drzat fundamentalneho pravidla (be liberal in what you
   accept), musi sa bod 4.2.3.9 dodrziavat a 3.2.2.1 nie...

--
Matus UHLAR - fantomas, uhlar at fantomas.sk ; http://www.fantomas.sk/
Warning: I don't wish to receive e-mail advertising to this address.
Varovanie: Nezelam si na tuto adresu dostavat akukolvek reklamnu postu.
Christian Science Programming: "Let God Debug It!".



More information about the net mailing list