Linux에서 traceroute 명령을 사용하는 방법

Linux traceroute 명령을 사용하여 네트워크 패킷 여정의 느린 구간을 찾아내고 느린 네트워크 연결 문제를 해결할 수 있습니다. 방법을 알려드리겠습니다!

traceroute 작동 방식

traceroute의 작동 방식을 이해하면 결과를 훨씬 더 쉽게 이해할 수 있습니다. 경로가 복잡할수록 네트워크 패킷 목적지에 도달하기 위해 이동해야 하는 만큼 감속이 발생할 수 있는 위치를 정확히 찾아내기가 더 어렵습니다.

작은 조직의 근거리 통신망 (LAN)은 비교적 간단할 수 있습니다. 적어도 하나의 서버와 라우터 또는 두 대가 있을 것입니다. 복잡성이 증가합니다. 광역 네트워크 (WAN) 서로 다른 위치 간에 또는 인터넷을 통해 통신합니다. 그런 다음 네트워크 패킷은 라우터 및 게이트웨이.

데이터 패킷의 메타데이터 헤더는 길이, 출처, 이동 경로, 사용 프로토콜 등을 설명합니다. 프로토콜 사양은 헤더를 정의합니다. 프로토콜을 식별할 수 있으면 헤더에서 각 필드의 시작과 끝을 확인하고 메타데이터를 읽을 수 있습니다.

traceroute는 다음을 사용합니다. TCP/IP 일련의 프로토콜 및 전송 사용자 데이터그램 프로토콜 패킷. 헤더에는 다음이 포함됩니다. TTL(Time to Live) (TTL) 필드, 8비트 정수 값을 포함합니다. 이름에서 알 수 있듯이 지속 시간이 아니라 개수를 나타냅니다.

패킷은 라우터를 통해 출발지에서 목적지로 이동합니다. 패킷이 라우터에 도착할 때마다 TTL 카운터가 감소합니다. TTL 값이 1에 도달하면 패킷을 수신하는 라우터는 값을 감소시키고 이제 0임을 알게 됩니다. 그런 다음 패킷은 폐기되고 “시간 초과”되었기 때문에 여정의 다음 홉으로 전달되지 않습니다.

라우터가 보낸다 인터넷 메시지 제어 프로토콜 (ICMP) 시간 초과 패킷 시간 초과를 알리기 위해 패킷의 원본으로 메시지를 다시 보냅니다. Time Exceeded 메시지는 원래 헤더와 원래 패킷 데이터의 처음 64비트를 포함합니다. 이것은 6페이지에 정의되어 있습니다. 의견 요청 792.

따라서 traceroute가 패킷을 보낸 다음 TTL 값을 1로 설정하면 패킷은 폐기되기 전에 첫 번째 라우터까지만 도달합니다. 라우터로부터 ICMP 시간 초과 메시지를 수신하고 왕복에 걸린 시간을 기록할 수 있습니다.

그런 다음 TTL을 2로 설정하여 연습을 반복합니다. 두 홉 후에 실패합니다. traceroute는 TTL을 3으로 늘리고 다시 시도합니다. 이 프로세스는 대상에 도달하거나 최대 홉 수(기본적으로 30)가 테스트될 때까지 반복됩니다.

일부 라우터가 제대로 재생되지 않음

일부 라우터에는 버그가 있습니다. 그들은 패킷을 폐기하고 ICMP 시간 초과 메시지를 발생시키는 대신 TTL이 0인 패킷을 전달하려고 합니다.

에 따르면 시스코, 일부 인터넷 서비스 공급자(ISP)는 라우터가 릴레이하는 ICMP 메시지 수를 속도 제한합니다.

일부 장치는 ICMP 패킷을 보내지 않도록 구성되어 있습니다. 이는 종종 장치가 무의식적으로 참여하도록 강요되지 않도록 하기 위한 것입니다. 분산 서비스 거부, 같은 스머프 공격.

traceroute에는 5초의 응답에 대한 기본 제한 시간이 있습니다. 5초 이내에 응답을 받지 못하면 시도가 중단됩니다. 이것은 매우 느린 라우터의 응답이 무시됨을 의미합니다.

추적 경로 설치

traceroute는 이미 Fedora 31에 설치되었지만 Manjaro 18.1 및 Ubuntu 18.04에 설치해야 합니다. Manjaro에 traceroute를 설치하려면 다음 명령을 사용하십시오.

sudo pacman -Sy traceroute

그만큼

Ubuntu에 traceroute를 설치하려면 다음 명령을 사용하십시오.

sudo apt-get install traceroute

그만큼

추적 경로 사용

위에서 다루었듯이 traceroute의 목적은 컴퓨터에서 목적지까지 각 홉에서 라우터의 응답을 이끌어내는 것입니다. 어떤 사람들은 입술을 다물고 아무 것도 주지 않을 수도 있고, 다른 사람들은 아마 아무렇지도 않게 콩을 쏟을 것입니다.

예를 들어, 우리는 추적 경로를 실행할 것입니다 블라니 성 유명한 아일랜드의 웹사이트 블라니 스톤. 전설에 따르면 Blarney Stone에 키스하면 “Gift of the Gab”이라는 축복을 받게 됩니다. 도중에 만나는 라우터가 적절하게 말썽꾸러기였으면 합니다.

다음 명령을 입력합니다.

traceroute www.blarneycastle.ie

그만큼

첫 번째 줄은 다음 정보를 제공합니다.

대상 및 해당 IP 주소입니다.
traceroute가 포기하기 전에 시도할 홉 수입니다.
우리가 보내는 UDP 패킷의 크기입니다.

다른 모든 줄에는 홉 중 하나에 대한 정보가 들어 있습니다. 세부 사항을 살펴보기 전에 컴퓨터와 Blarney Castle 웹 사이트 사이에 11개의 홉이 있음을 알 수 있습니다. Hop 11은 또한 우리가 목적지에 도착했음을 알려줍니다.

각 홉 라인의 형식은 다음과 같습니다.

장치의 이름 또는 장치가 자체적으로 식별되지 않는 경우 IP 주소입니다.
IP 주소.
세 가지 테스트 각각에 대해 왕복 소요된 시간입니다. 별표가 여기에 있으면 해당 테스트에 대한 응답이 없다는 의미입니다. 장치가 전혀 응답하지 않으면 세 개의 별표가 표시되고 장치 이름이나 IP 주소는 표시되지 않습니다.

아래 내용을 검토해 보겠습니다.

홉 1: 첫 번째 호출 포트(말장난 없음)는 로컬 네트워크의 DrayTek Vigor 라우터입니다. 이것이 UDP 패킷이 로컬 네트워크를 떠나 인터넷에 연결되는 방식입니다.
홉 2: 이 장치가 응답하지 않았습니다. ICMP 패킷을 보내지 않도록 구성되었을 수 있습니다. 또는 응답했지만 너무 느려서 traceroute 시간이 초과되었을 수 있습니다.
홉 3: 장치가 응답했지만 이름을 얻지 못하고 IP 주소만 받았습니다. 이 줄에 별표가 있습니다. 이는 세 가지 요청 모두에 대한 응답을 받지 못했다는 의미입니다. 이는 패킷 손실을 나타낼 수 있습니다.
홉 4 및 5: 더 많은 익명 홉.
홉 6: 다른 원격 장치가 세 가지 UDP 요청을 각각 처리했기 때문에 여기에는 많은 텍스트가 있습니다. 각 장치의 (오히려 긴) 이름과 IP 주소가 인쇄되었습니다. 이것은 많은 양의 트래픽을 처리하기 위한 많은 하드웨어가 있는 “풍부하게 채워진” 네트워크를 만날 때 발생할 수 있습니다. 이 홉은 영국에서 가장 큰 ISP 중 하나에 속하므로 동일한 원격 하드웨어가 우리의 세 가지 연결 요청을 처리한다면 작은 기적이 될 것입니다.
홉 7: UDP 패킷이 ISP 네트워크를 떠날 때 만든 홉입니다.
홉 8: 다시, 우리는 IP 주소를 얻었지만 장치 이름은 얻지 못했습니다. 세 가지 테스트가 모두 성공적으로 반환되었습니다.
홉 9 및 10: 익명 홉이 두 개 더 있습니다.
Hop 11: Blarney Castle 웹사이트에 도착했습니다. 성은 아일랜드 코크에 있지만, IP 주소 지리적 위치, 웹사이트는 런던에 있습니다.

그래서 혼혈이었다. 어떤 장치는 공놀이를 하고 어떤 장치는 응답했지만 이름을 알려주지 않았으며 다른 장치는 완전히 익명으로 유지되었습니다.

그러나 우리는 목적지에 도착했고 11홉 거리에 있으며 여행의 왕복 시간은 13.773밀리초와 14.715밀리초라는 것을 알고 있습니다.

장치 이름 숨기기

우리가 보았듯이 때때로 장치 이름을 포함하면 디스플레이가 복잡해집니다. 데이터를 더 쉽게 보기 위해 -n(매핑 없음) 옵션을 사용할 수 있습니다.

이 예에서 이를 수행하기 위해 다음을 입력합니다.

traceroute -n blarneycastle.ie

그만큼

이렇게 하면 병목 현상을 나타낼 수 있는 왕복 시간에 대해 큰 숫자를 더 쉽게 선택할 수 있습니다.

홉 3가 조금 의심스러워 보이기 시작했습니다. 지난 번에는 두 번만 응답했고 이번에는 한 번만 응답했습니다. 물론 이 시나리오에서는 우리가 통제할 수 없습니다.

그러나 회사 네트워크를 조사하는 경우 해당 노드에 대해 조금 더 깊이 파고드는 것이 좋습니다.

traceroute 시간 초과 값 설정

기본 제한 시간(5초)을 연장하면 더 많은 응답을 받을 수 있습니다. 이를 위해 -w(대기 시간) 옵션을 사용하여 7초로 변경합니다. (이것은 부동 소수점 숫자입니다.)

다음 명령을 입력합니다.

traceroute -w 7.0 blarneycastle.ie

그만큼

큰 차이가 없었으므로 응답 시간이 초과되었을 수 있습니다. 익명의 홉이 의도적으로 비밀이 될 가능성이 있습니다.

테스트 횟수 설정

기본적으로 traceroute는 각 홉에 3개의 UDP 패킷을 보냅니다. -q(쿼리 수) 옵션을 사용하여 이를 위 또는 아래로 조정할 수 있습니다.

traceroute 테스트 속도를 높이기 위해 다음을 입력하여 전송하는 UDP 프로브 패킷 수를 줄입니다.

traceroute -q 1 blarneycastle.ie

그만큼

이렇게 하면 각 홉에 단일 프로브가 전송됩니다.

초기 TTL 값 설정

TTL의 초기 값을 1이 아닌 다른 값으로 설정하고 일부 홉을 건너뛸 수 있습니다. 일반적으로 TTL 값은 첫 번째 테스트 세트에 대해 1로 설정되고 다음 테스트 세트에 대해 2로 설정되는 식입니다. 5로 설정하면 첫 번째 테스트는 5번을 시도하고 1-4번 홉을 건너뜁니다.

Blarney Castle 웹사이트가 이 컴퓨터의 11개 홉이라는 것을 알고 있으므로 다음을 입력하여 11번 홉으로 바로 이동합니다.

traceroute -f 11 blarneycastle.ie

그만큼

이는 목적지에 대한 연결 상태에 대한 훌륭하고 요약된 보고서를 제공합니다.

배려하라

traceroute는 네트워크 라우팅을 조사하거나 연결 속도를 확인하거나 병목 현상을 식별하는 데 유용한 도구입니다. Windows에는 유사하게 작동하는 tracert 명령도 있습니다.

그러나 UDP 패킷 급류로 알 수 없는 장치를 공격하고 싶지는 않으며 스크립트나 무인 작업에 traceroute를 포함하는 것을 조심해야 합니다.

traceroute가 네트워크에 가할 수 있는 로드는 성능에 부정적인 영향을 미칠 수 있습니다. 당장 고쳐야 하는 상황이 아닌 한 정상 업무 시간 외에 사용하는 것이 좋습니다.