수신된 패킷 길이가 MTU보다 큰 경우 호스트는 ICMP "조각화 필요"를 보내지 않습니다.

수신된 패킷 길이가 MTU보다 큰 경우 호스트는 ICMP "조각화 필요"를 보내지 않습니다.

내 네트워크의 MTU 관련 문제를 해결하고 있습니다. 지식이 부족하고 여기에 대한 설명이 필요합니다. :)

클라이언트 호스트(NI에서 MTU=1500바이트로 구성됨)가 서버 호스트(NI에서 MTU=1400으로 구성됨)로 트래픽을 보내는 설정이 있습니다. 클라이언트는 때때로 서버 호스트의 MTU(예: 1450바이트)보다 크고 DF 플래그가 설정된 패킷을 보냅니다.

두 호스트 모두 PMTUD를 활성화했지만( sysctl net.ipv4.ip_no_pmtu_discreturn 실행 0, 따라서 DF 플래그 실행) 어떤 이유로 클라이언트는 이 특정 경로에 대해 더 낮은 MTU를 사용해야 한다는 사실을 학습하지 못합니다. ip route get %server-ip-here%특별한 MTU가 반환되지 않습니다.

두 호스트는 서로 매우 가깝고(동일한 DC에는 라우터가 하나만 있음) 두 호스트 사이의 모든 장치 중 99.9%가 1450바이트 패킷을 잘 처리할 수 있으므로 삭제할 이유가 없습니다. ICMP "조각화 필요"를 다시 보냅니다.

내가 이해한 바로는 네트워크 인터페이스의 MTU가 1400바이트이므로 서버 호스트에서 패킷이 삭제되는 것입니다.

PMTUD에서 찾은 모든 기사에 따르면 이러한 ICMP 패킷은 클라이언트와 서버 사이의 라우터에 의해서만 전송되는 것 같습니다.

누군가 내 아이디어를 확인해 줄 수 있나요?길이가 로컬로 구성된 MTU보다 길기 때문에 최종 호스트가 수신 패킷을 삭제하는 경우 ICMP "조각화 필요"를 보내지 않습니까?

답변1

실제로 ICMP 조각을 보내는 데 필요한 사항을 문서화한 RFC 1191(경로 MTU 검색)만 찾을 수 있었습니다.

2. 계약개요

기본 아이디어는 소스 호스트가 처음에 경로의 PMTU가 첫 번째 홉의 (알려진) MTU라고 가정하고 DF 비트 세트와 함께 해당 경로의 모든 데이터그램을 보내는 것입니다. 데이터그램이 너무 큰 경우전달 예정잔해 없음라우터를 통해길을 따라,그 라우터그것들은 폐기될 것이고 "DF를 조각화하고 설정해야 함"을 의미하는 코드와 함께 ICMP 목적지 도달 불가 메시지가 반환될 것입니다[7].

4. 라우터 사양

언제라우터할 수 없는앞으로데이터그램이 다음 홉 네트워크의 MTU를 초과하고 Don't Fragment(조각화 안 함) 비트가 설정되어 있기 때문에 라우터는 ICMP Destination Unreachable 메시지를 데이터그램 소스에 반환해야 하며 코드에서 "조각화가 필요하며 DF"임을 나타냅니다. 놓여 있다".

모든 설명에서는 ICMP가 호스트가 아닌 라우터에 의해 전송된다고 가정합니다. 재전송 시 결정이 발생합니다.다른인터페이스의 MTU가 너무 낮아서 수신할 수 없습니다.

호스트(수신된 패킷을 라우팅하지 않음)가 이러한 ICMP를 발행할 수 있는 규정은 없습니다. 다음을 수행하려는 애플리케이션에 직접 오류를 보냅니다.방사그런 패킷이지만 만약 그렇다면받았다"공식적으로" 지원하지 않는(MTU가 1400이기 때문에) 크기 1500의 패킷은 하드웨어가 이를 삭제하거나(그러나 그렇지 않거나 논란의 여지가 있음) 패킷을 삭제합니다. t, 내 생각엔 이것은 (RFC에서) 정의되지 않은 동작이고 OS 네트워크 스택이 이를 받아들일 수 있는 것 같습니다.

LAN의 구성이 정확하다고 가정해야 합니다. 호스트는 동일한 브로드캐스트 도메인의 다른 모든 노드와 동일한 MTU를 갖습니다.

관련 정보