Linux는 호스트별 MTU 테이블을 유지합니까?

Linux는 호스트별 MTU 테이블을 유지합니까?

6번째(6-over-4) 라우터를 포함하는 IPv6 라우팅을 실험하고 있는데 이더넷을 통해 기본 IPv6를 실행하는 라우팅 세그먼트에 맞을 만큼 작은 패킷 크기를 사용할 때 패킷 크기가 충분히 작은 경우 라우팅 세그먼트가 너무 커서 IPv4에서 IPv6 캡슐화를 수용할 수 없는 경우(즉, 1481~1500바이트) 패킷이 조각화되지 않는 한 경로를 통과하지 못합니다. 응답 호스트가 라우팅 측의 6번째 라우터로부터 Packet Too Big 오류를 수신하면 응답을 조각화하기 시작하고 한동안 계속됩니다.

그러나 ICMPv6은 상태 비저장이므로 Linux에는 일정 기간 동안 대상 호스트에 대한 너무 큰 패킷 메시지의 MTU 값을 저장하는 테이블이 어딘가에 있다는 의미입니다. 맞습니까? 그렇다면 이 표를 어떻게든 볼 수 있을까요? ip이 명령의 다양한 하위 명령을 살펴봤지만 비슷한 것을 찾을 수 없습니다. 이 표는 UDP와 같은 프로토콜에 대한 것입니까, 아니면 ICMPv6에만 해당됩니까?

답변1

Linux는 검색된 MTU가 대상에 연결할 수 있는 인터페이스의 MTU보다 낮을 때 경로 MTU 검색(RFC 1191)을 통해 학습된 원격 대상의 MTU를 캐시합니다.

캐시를 보려면 "ip 경로 표시 캐시"를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

me@server:~$ ip -6 route show cache 
1234:8108:1111:111:1111:1111:ff38:57be via fe80::8243:abcd:4216:a4c0 dev eno12399np0 metric 1024 expires 35sec mtu 1280 hoplimit 64 pref medium

me@server:~$ ip route show cache
1.2.3.4 via 192.0.2.1 dev eno12399np0 
    cache expires 154sec mtu 1420 

답변2

Linux(그리고 다른 곳에서도 믿습니다)에서 MTU는 원격 호스트가 아닌 인터페이스별로 구성됩니다. 실행하여 확인해주세요

ip a

그러면 각 인터페이스의 MTU 번호가 표시됩니다.

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp6s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
    inet 10.0.42.23/24 brd 10.0.42.255 scope global enp8s0
       valid_lft forever preferred_lft forever

제 경우에는 loMTU가 65536바이트이고 enp6s11500바이트가 있습니다.

관련 정보