MTU og Black-hole deteksjon (IP-Stack nyhet)
Har jo skrevet en del om den nye IP-Stacken til Windows Vista og Windows Server 2008 tidligere, men her er en liten ting til som kanskje er mest for spesielt interesserte...
MTU og PMTU
Maximum Transmission Unit er rett og slett maksimum størrelsen i bytes som en gitt protokoll kan sende. For enkelte protokoller er størrelsen definert i standarden (eks: Ethernet), mens for andre er MTU gjenstand for forhandlinger ved opprettelsen av tilkoblingen.
Path MTU, PMTU, er i IP protokollen definert som den største MTU verdien det vil være mulig å sende hele veien fra Sender til Mottaker uten at pakkene blir fragmentert. Det vil si at den routern med minst MTU blir det "svakeste leddet" og således bestemmer PMTU for koblingen.
RFC 1191 definerer en metode for PMTU Discovery. Denne går i all enkelhet ut på å sette "Don't Fragment" opsjonen i IP headern og sende en pakke. Metoden går så ut i fra at alle enheter på veien som syns MTU er for stor da vil sende en ICMP beskjed tilbake ("Fragmentation Needed and Don't Fragment was Set") siden DF opsjonen er satt og enheten derfor ikke skal dele opp pakken på eget initiativ.
MTU = | Maximum Transmission Unit |
PMTU = | Path Maximum Transmission Unit |
DF = | Dont fragment (ikke del opp denne pakka opsjonen i IP headern) |
ICMP = | Internet Control Message Protocol |
Host Unreachable melding. Kan være av flere grunner, type nr 4 er "Fragmentation Needed and Don't Fragment was Set" når PMTU er for stor. Omtales også som ICMP "Datagram Too Big" |
Problemet
Problemet består i at ikke alle enheter sender en ICMP "Host Unreachable (4)" melding tilbake. Istedefor dropper de pakka i alle stillhet (eller et filter et annet sted stopper den) og Sender finner dermed ikke ut av pakka ikke kom fram før den begynner å savne kvittering for mottak (ACK). Og at ACK mangler kan komme av ulike årsaker, mens "Host Unreachable (4)" er en mer entydig tilbakemelding. (Ofte er det med god grunn at all ICMP trafikk blokkeres i nett, f.eks pga DoS angrep)
Løsningen
Windows Vista sin IP-Stack har PMTU Black hole deteksjon skrudd på som standard og forsøker derfor å detektere at pakker blir droppet pga for stor PMTU uten å stole på ICMP tilbakemeldinger. Dette gjøres ved å justere PMTU størrelsen når full-størrelse TCP Segmenter med DF flagget satt blir sendt på nytt. PMTU settes da til 536 bytes, DF flagget droppes og segmentet blir sendt på nytt.
(IPv6 = 1220 bytes)
Resultatet kan bli en mindre PMTU størrelse enn mulig, men det sikrer at TCP koblingen blir holdt åpen og fungerende i alle fall.