종종 전달되지 않는 ICMP 오류에 의존하지 않고 경로 MTU 검색을 수행합니다.
이 프로그램은 ICMP 블랙홀이 있는 경우 MTU 크기를 감지하는 보다 안정적인 방법인 RFC 4821에 설명된 대로 패킷화 계층 경로 MTU 검색을 수행합니다.
TCP 연결은 다양한 지표(네트워크 성능, 패킷 손실, ICMP 오류 메시지 등)에 따라 시간이 지남에 따라 MTU 크기를 자동으로 조정하지만 연결 없는 프로토콜의 경우에는 그렇지 않습니다.
성능이 필수적인 경우 처리량 , 패킷 조각화 및 경로 안정성은 스트림 성능을 최적화하기 위해 분석해야 할 세 가지 주요 지표입니다. 경로 신뢰성이 항상 우리에게 달려 있는 것은 아니기 때문에 성능을 심각하게 저하시킬 수 있는 패킷 조각화를 수행하지 않으면 서 처리량을 최대화하기 위해 노력해야 합니다 [1] .
경로 MTU 검색에 대한 원래 제안은 Don't Fragment(조각화 안 함) 필드가 설정된 IPv4 패킷이 너무 커서 전파할 수 없을 때 전달되는 ICMP Fragmentation Needed
패킷에 의존했습니다. 불행히도 일부 라우터는 이러한 종류의 오류를 생성하지 않고 대신 큰 패킷을 자동으로 무시하도록 선택합니다. 클라이언트는 패킷 손실의 원인을 확인할 방법이 없습니다.
모든 호스트는 ICMP_ECHO 쿼리를 지원해야 하므로 ICMP 메시지가 임의의 양의 데이터를 받아들이고 다양한 크기의 패킷을 서버에 보낸다는 사실을 활용할 수 있습니다. IPv4 패킷에서 Don't Fragment(조각화 안 함) 필드를 켜고 응답을 수신하면 사실상 이 MTU 크기가 유효함을 확인하는 ACK(ICMP_ECHOREPLY 패킷 형식)를 기다리는 것입니다.
이제 이 경로에서 지원하는 최대 MTU 크기를 찾기 위해 패킷 크기와 관련하여 이진 검색을 수행하면 됩니다.
ICMP 모드에서는 다양한 크기의 일부 ICMP_ECHO 요청이 생성됩니다.
ICMP Fragmentation Needed
)가 수신되면 해당 MTU 크기가 유효하지 않은 것으로 선언되고 임계값이 낮아집니다.ICMP 모드 의 유일한 요구 사항은 호스트가 ping 메시지에 응답할 수 있어야 한다는 것입니다.
동일한 알고리즘이 UDP 패킷에 적용되지만 승인 메시지를 다시 보내려면 수신 호스트에서 서버( udp_server.py )를 실행해야 합니다.
이 프로그램은 대부분의 Linux 배포판과 OSX에서 제대로 실행됩니다.
gcc -Wall -Wextra mtu_discovery.c mtu.c -o plpmtu
경고/오류를 보고하면 안 됩니다. 그렇다면 문제를 열어주세요.
ICMP 모드 에서 실행하려면 다음을 입력하세요.
sudo ./plpmtu -p icmp -s <server-ipaddr>
대신 UDP 모드를 실행하려면 다음을 수행하세요.
sudo ./plpmtu -p udp -s <server-ipaddr:port>
원시 소켓을 사용하려면 관리자 권한이 필요합니다.
지정자 | 설명 |
---|---|
-p {icmp/udp} | 어떤 모드로 작동할지 선택하세요. |
-s <주소[:포트]> | 서버의 주소를 지정합니다. UDP 모드에서 실행하는 경우 ':port'를 추가하여 대상 포트도 지정해야 합니다(예 -s 8.8.8.8:12345 ). |
-l <주소:포트> | 선택 과목. 바인딩()할 주소를 선택하세요. UDP 모드에서 사용됩니다. 제거될 수도 있습니다. |
-t <시간 초과> | 선택 과목. 서버의 응답을 기다리는 최대 시간을 선택합니다. 기본값은 1초입니다. 시간은 밀리초 단위로 표시됩니다. |
-r <최대 요구사항> | 선택 과목. MTU 크기가 유효하지 않다고 선언하는 데 필요한 최대 실패 시도 횟수를 선택합니다. 기본값은 3회입니다. |
sudo ./plpmtu -p icmp -s 184.12.26.131
184.12.26.131로 MTU 검색(ICMP 모드)을 수행합니다.
sudo ./plpmtu -p udp -s 184.12.26.131:24000 -t 1500 -r 5
포트 24000에서 184.12.26.131로 MTU 검색(UDP 모드)을 수행합니다. 1.5초 이내에 5회 연속 응답이 수신되지 않으면 MTU 임계값을 줄입니다.