좋은 프로그램은 마음의 여유에서 나온다.

리눅스 네트워크 환경 본문

운영체제/리눅스

리눅스 네트워크 환경

좋은데이 2013. 1. 28. 10:06

레퍼런스 : 컴퓨터 네트워크 프로그래밍 Unix version(김종화 저)


리눅스 : 우분투 12.04버전 (AWS 인프라 이용)


traceroute 명령어

자신의 호스트가 임의의 호스트와 어떤 경로(라우터들)를 통해 연결되어 있는지 찾아주는 명령어이다.

traceroute는 IP 헤더의 TTL값을 이용한다.

TTL(Time to live) 값은 라우터를 지날 때 마다 1씩 감소한다. IP는 TTL 값을 이용해 데이터그램이 네트워크 상에서 없어지지 않고 떠돌아 다니는 것을 방지한다.

TTL 값이 0이 되면 라우터에서 이 데이터그램을 버리고 송신측 호스트에게 ICMP TIME EXCEEDED 메시지를 전송해주는 특성을 이용하여 중간에 있는 라우터들을 파악한다.

aws에 있는 호스트에서 aaa.com까지의 경로를 출력한 화면

traceroute의 동작 과정


자신의 호스트는 UDP 데이터그램의 TTL을 1로 설정하여 전송한다.


첫번째 라우터(10.146.68.2)는 데이터그램을 받아서 TTL을 1감소시킨다. 이때 TTL이 0이 되므로 ICMP TIME EXCEEDED에러를 호스트에게 돌려준다. 


자신의 호스트에서는 ICMP에러가 어디서 왔는지를 보고 첫번째 라우터를 찾을 수 있다.


같은 방법으로 이번엔 TTL을 2로 설정하여 보낸다.


만약 데이터그램이 목적지에 도착하면(aaa.com) UDP 데이터그램을 수신할 프로세스가 대기하지 않으므로 ICMP PORT UNREACHABLE 에러를 돌려준다. 


이 에러를 수신하면 목적지에 도착했다는 것을 알고 traceroute는 동작을 마친다.


***로 나오는 부분은 디폴트로 5초이내에 ICMP 에러 등의 응답이 안오면 '*'로 표시한다.


보안등의 이유로 ICMP 에러를 라우터가 돌려주지 않는 경우 등이있다.


ms나 *이 3개로 나오는 이유는 traceroute명령이 3개의 데이터그램을 테스트용으로 보내기 때문이다.

Comments