Redis Desktop Manager 에서 오른쪽 Size : 5 옆에

 

TTL  : -1  

 

이라고 적혀있는걸 볼 수 있는데

 


TTL 이 무엇일까?

 

TTL : Time To Live 의 약자로 해당 패킷의 생존 시간을 의미한다.

 

IP 패킷 내에 있는 값 으로서, 그 패킷이 네트워크 내에 너무 오래 있어서 버려져야 하는지의 여부를

라우터에게 알려주는 역할을 한다.
패킷들은, 여러 가지 이유로 적당한 시간 내에 지정한 장소에 배달되지 못하는 수가 있다.
예를 들어, 부정확한 라우팅 테이블의 결합은 패킷을 끝없이 순환하도록 만들 수도 있다.
그래서 일정한 시간이 지나면 그 패킷을 버릴건지 혹은 재전송할 것인지를 결정하도록 하기 위해서

발신인에게 알릴 수 있는 방법으로 TTL이 사용된다.

 

TTL 초기 값은 OS에 의해 대게 8bit 길이의 패킷 헤더에 설정된다.

TTL 은 일정시간을 초단위로 지정하고, 설정 시간이 지나면 패킷을 버리도록 하기위해 고안한 방법이다.

 

패킷을 받는 각 라우터는 TTL 필드 내의 값에서 1을 감소시키는데, 이는 곧 남은 TTL 값은 패킷이 버려지기 전에 허용되는 라우터의 갯수를 의미한다. 

 

각, Router는 TTL 패킷이 날라올때 TTL Value를 1씩 감소시킨다.

 

TTL 값이 0이 되었을때는 라우터는 그것을 감지하여 해당 패킷을 버리고 *ICMP 메세지를 발신지 host 에게 보내게 된다.

 

ICMP 메세지란?? ↓

더보기

ICMP(Internet Control Message Protocol) 이란

ICMP 는 TCP/IP에서 IP 패킷을 처리할 떄 발생되는 문제를 알려주는 프로토콜이다.


IP에는 오로지 패킷을 목적지에 도달시키기 위한 내용들로만 구성되어 있다. 따라서 정상적으로 target(목적지) 호스트에 도달하는 경우에는 IP에서 통신이 성공하고 종료 됨으로 아무런 문제가 없다.

그러나, 만일 전달해야 할 목적지 호스트가 꺼져있거나, 선이 단절된 경우와 같은 비정상적인 경우에 이 패킷 전달을 의뢰한 출발지(src) 호스트에 이러한 사실을 알려야 하지만, IP에는 그러한 에러에 대한 처리 방법이 명시되어 있지 않다. OSI7계층 중 3계층(Network Layer)의 IP 프로토콜은 전송상태에 대한 관리가 이루어지지 않는 신뢰할 수 없는 프로토콜이다. 

이러한 IP의 부족한 점을 메꾸기 위해 사용되는것이 바로 ICMP 프로토콜이다.

ICMP는 해당 호스트가 없거나, 해당 포트에 대기중에 서버 프로그램이 없는 등의 에러 상황이 발생할 경우 IP 헤더에 기록되어 있는 출발지(src) 호스트로 이러한 에러 메세지를 보내주고 네트워크 상태를 진단해주는 역할을 수행한다.

 

[ ICMP 프로토콜의 구조 ]

 

Type(8bits) Code(8bits) Checksum(16bits)
Rest of the header
Data Section

- Type : ICMP 메시지의 유형 / 용도

   ex) Type 3 : Destination Unreachable 목적지 도달 불가

- Code : Type의 세부 내용으로 Type과 Code가 조합되어 ICMP 메시지의 목적과 용도를 나타낸다. (Code가 없는 Type도 존재)

   ex) Type 3 Code 3 : Port Unreachable UDP 포트가 열려있지 않음

- Checksum : ICMP 메시지 오류를 검사하기 위한 값

- Rest of the header : Type 과 Code 에 따라 추가되는 헤더

- Data section : 데이터가 위치하는 영역



이렇게 에러 상황을 받게된 src 호스트는 target 호스트에 대한 정보를 대충이나마 확인 가능한것이다.

에러 메세지로는 크기 아래의 표가 있다.

Desination Unreachable (Type 3)  목적지에 도달하지 못함
Time Exceeded (Type 11)  타임 아웃이 발생하여 IP 패킷이 폐기되었음을 알리는 메세지.
 사유는 Code로 알 수 있다.
Redirection (Type 5)  라우팅 경로가 잘못되어 새로운 경로를 이전 호스트에게 알려주는 메세지


에러메시지 안에 에러 코드가 존재하여 원인을 조금 더 깊이 파악할 수 있다.

 

예를 들면 Time Exceeded ( Type 11) 에 관련 에러 코드는 

 

Code 0(Time To Live exceeded in Transit) : IP 패킷이 최종 목적지에 도달하기 전에 TTL값이 0이 되어 해당 패킷이 폐기되었음을 알리는 메시지이다.

Code 1(Fragment reassembly time exceeded) : IP 패킷 재조합 과정에서 타임아웃이 발생하여 해당 IP 데이터그램이 모두 폐기되었음을 알리는 메시지. 일반적으로 IP 데이터그램의 일부 단편이 전송과정에서 손실될 경우 재조합 과정에서 실패하여 발생한다.


Destinaion Unreachable( Type 3) 에 관련 에러 코드는 

Code 1(Host Unreachable) : 최종 단계의 라우터가 목적지 호스트로 패킷 전송에 실패한 경우

Code 2(Protocol Unreachable) : 목적지 호스트에서 특정 프로토콜을 사용할 수 없는 경우

Code 3(Port Unreachable) : 목적지 호스트에 해당 UDP포트가 열려있지 않는 경우

(TCP의 경우에 포트가 열려있지 않으면 TCP RST 패킷을 반환한다)

Code 4(Fragmentation needed and don't fragment was set) IP 패킷의 단편화가 반드시 필요하지만 IP 헤더의 Don't fragment 플래그가 설정되어 단편화할 수 없는 경우 라우터에 의해 반환된다.



가 있다.



통신 유뮤 확인시 자주 쓰이는 윈도우의 ping 같은 경우도 ICMP 프로토콜을 이용한 방법이다.

 

 

내 컴퓨터인 A에서 B컴퓨터의 상태를 보기 위해 명령어 "ping [ B (IP주소) ] 를 입력하게 되면 윈도우에서는 자연스럽게 ICMP 프로토콜을 이용하여 해당 프로토콜을 상대방(B)으로 보내게 된다.

 

그렇게 되면 B로 가는 도중 생기는 에러들을 위에서 본 유형에 맞게 끔 에러메시지, 에러 코드( ex) code 3 , 11 등등) 으로 회신하게 되며, 해당 정보를 바탕으로 송신자 컴퓨터(A)의 경우 수신자 컴퓨터(B)와의 현재 통신(네트워크) 상태를 확인할 수 있다. 

 

 

32바이트 정보를 보냈고, 걸린 시간은 얼마고, TTL은 얼마인지 표시해준다.

TTL의 정보에 따라 OS 정보를 파악할 수도 있다.

 

OS 마다 기본 TTL default 값이 다른데 보통은 아래와 같다.

 

- Window 운영체제 기반 : TTL=128

- UNIX 운영체제 기반 : TTL=64

- Others : TTL=255

 


 

 

 

 

 

 

------------------------------< 알기쉬운 예제 >---------------------------------

 

[PC1]-------[Switch]--------(Router1)----------(Router2)---------(DNS Server)

 

- PC1(10.1.1.1/24)

- Router1 Serial 0/1(10.1.1.254/24)

- Router1 Serial 1/1(10.1.2.1/24)

- Router2 Serial 0/1(10.1.2.2/24)

- Router2 Serial 1/1(10.1.3.2/24)

- DNS Server (10.1.3.3/24)

 

 

여기서 Network는 3개로 구성되어 있고,

PC1(192.168.1.1)에서 DNS Server로 Ping을 때려서 TTL 값이 62가 나왔다고 치자.

 

인터넷망을 통틀어 Router는 총 30개를 넘어가지 않는 것을 가정하면,

TTL Value에서 뺄수있는 수는 -30을 넘지 않는다고 생각 할 수 있다.

그럼 TTL이 62가 나왔으니 128-30=88, 255-30=225인걸 감안하면 DNS Server는 Windows기반도 Others도 아니라는

것을 알 수 있는데 그럼 결과로 DNS Server는 Unix 기반의 운영체제라는 것을 알 수 있다.

 

앞에서 Unix 기반은 TTL 값이 64라고 하였다. 하지만 화면에서는 TTL이 62값이 나온 이유는

Router를 2개를 건너뛰어 64-2(라우터 개수)= 62 가 나왔다는 추측을 할 수 있다는 것이다.

 

그럼 ping명령어 한번으로

PC1과 DNS Server 사이에는 Router가 2개가 있고,

DNS Server는 Unix 기반이라는 결과를 얻을 수가 있다.

 

ㅇ ping test는 망계층(OSI Layer3)의 ICMP(internet control message protocol)를
   이용하여 그 기능을 제공하고 있다.

ㅇ ICMP메세지는 type에 따라 여러종류가 있으나
   ping test는 이중 type 8,0(echo request, echo replay)번을 사용한다.
    
ㅇ 송신측에서 상대편 ip address로 ping test를 하면
   icmp type 8번 packet이 상대편 호스트로 전달되고
   상대편 호스트는 icmp type 0번 packet을 송신측으로 재전송함

ㅇ 송신측에서 전송하고 수신할 때 까지의 시산을 RTT(Round Trip Time)이며
   그냥 간단히 "Time"이라고 쓰기도 한다.

ㅇ icmp패킷은 인터넷망에서 목적지에 찾아가기 위해서
   ip패킷으로 encapsulation되어 전송되게 된다.
   이때 ip 헤더부분에 8bit의 TTL(Time To Live)필드가 존재한다.
   TTL필드는 ip패킷이 한 홉(Router)을 지날 때 마다 1씩 감소하여 0이 되면
   그 패킷은 인터넷상에서 영원히 삭제됩니다(Router에서 패기처분)
   이는 루핑되는 ip패킷에 의한 인터넷망의 부하를 줄이도록 설계된 부분이다.

ㅇ 결론적으로 TTL에 8bit가 할당되었으므로,
   TTL이 가질 수 있는 가장 큰 값은 2의 8승 = 255가 된다.
   그 값은 어플리케이션마다 default값이 다르다.
  
ㅇ ping test한 pc와 dns(168.126.63.1)간에
   Router가 존재하는 갯수(홉수)만큼 빼면은  TTL이 되는것이다.

+ Recent posts