Jak wyświetlić buforowane PMTU w systemie Linux (i we wszystkich innych systemach operacyjnych)


13

Kiedy pinguję zdalną stronę z ustawionym bitem DF i rozmiarem pakietu, który jest zbyt duży dla mojego routera, pierwsza wiadomość ICMP „wymagana fragmentacja” jest wysyłana z routera. Następnie wiadomość pochodzi od mojego lokalnego hosta.

Netstat -rC (w systemie Linux) pozwala mi przeglądać pamięć podręczną tabeli routingu, ale

1) Wygląda na to, że wyświetla MTU w kolumnie o nazwie MSS (której spodziewałbym się, że będzie to niższy TCP MSS łącza)

2) Zawsze pokazuje wartość jako 1500

Mój host lokalny musi gdzieś buforować PMTU, aby mógł wygenerować komunikat wymagający fragmentacji. Ale jak to widzę?

Oto przykład na moim komputerze (-n na netstat hamuje odwrotne wyszukiwanie DNS):

[root@vbcentos ~]# ping -c 4 -M do -s 1431 212.58.244.69
PING 212.58.244.69 (212.58.244.69) 1431(1459) bytes of data.
From 217.155.134.6 icmp_seq=1 Frag needed and DF set (mtu = 1458)
From 217.155.134.4 icmp_seq=2 Frag needed and DF set (mtu = 1458)
From 217.155.134.4 icmp_seq=2 Frag needed and DF set (mtu = 1458)
From 217.155.134.4 icmp_seq=2 Frag needed and DF set (mtu = 1458)

--- 212.58.244.69 ping statistics ---
1 packets transmitted, 0 received, +4 errors, 100% packet loss, time 1002ms

[root@vbcentos ~]# netstat -rCn
Kernel IP routing cache
Source          Destination     Gateway         Flags   MSS Window  irtt Iface
217.155.134.3   217.155.134.4   217.155.134.4   il        0 0          0 lo
217.155.134.4   212.58.244.69   217.155.134.6          1500 0          0 eth0
217.155.134.4   217.155.134.4   217.155.134.4   l     16436 0          0 lo
217.155.134.3   217.155.134.255 217.155.134.255 ibl       0 0          0 lo
217.155.134.4   212.58.244.69   217.155.134.6          1500 0          0 eth0
217.155.134.6   217.155.134.4   217.155.134.4   il        0 0          0 lo
212.58.244.69   217.155.134.4   217.155.134.4   l         0 0          0 lo
[root@vbcentos ~]#

EDYCJA: Zgodnie z sugestią:

ip route get to 212.58.244.69

daje

212.58.244.69 via 217.155.134.6 dev eth1  src 217.155.134.4
    cache  mtu 1500 advmss 1460 hoplimit 64

Co również wydaje się błędne, ponieważ MSS jest tylko 40 mniej niż Mtu, który jest interfejsem Mtu, a nie PMTU


1
W Fedorze 22 netstat -rCnnic nie zwraca, ale watch ip route get to $HOSTpokazuje, co jest grane, w tym pamięć podręczną TTL. ip route show cachedpokazuje, że prawdopodobnie również coś wypisuje, ale tego nie robi.
David Tonhofer,

Odpowiedzi:



1

W systemie Windows użyj polecenia netsh, aby wyświetlić „docelową pamięć podręczną”, w której znajdują się te informacje. Na przykład (przy założeniu IPv4):

netsh interface ipv4 show destinationcache

1

MSS powinien być o 40 bajtów mniejszy niż MTU (nie obejmuje nagłówków bajtów IPv4 (20 bajtów) i tcp (20)). To jest poprawne.

Potrzebna fragmentacja ICMP jest wysyłana przez router, a nie przez serwer.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.