[서버] TTL

2015. 9. 12. 22:24프로그래밍/서버

728x90
728x90

Time to live

컴퓨터나 네트워크에서 데이터의 유효 기간을 나타내기 위한 방법이다.

TTL은 계수기, 타임스탬프 형태로 데이터에 포함된다. 정해진 유효기간이 지나면 데이터는 폐기된다.

컴퓨터 네트워크에서 TTL은 패킷의 무한 순환을 방지하는 역할을 한다.

어플리케이션에서 TTL은 캐시의 성능이나 프라이버시 수준을 향상시키는 데에 사용되기도 한다.


mac terminal에서 ping localhost


IP 패킷

IP에서 TTL은 8비트 크기의 필드다. IPv4 헤더에서 TTL은 20 옥텟 중 8번째 옥텟.

IPv6 헤더에서 40 옥텟 중 8번째 옥텟이다. TTL의 최대값은 단일 옥텟의 최대값에 해당하는 255이다.

권장되는 초기 값은 64.


TTL 값은 IP 데이터그램이 인터넷 시스템 내에 존재할 수 있는 시간의 상한.

TTL 필드는 데이터그램의 송신자에 의해 설정된다.

목적지까지 경로에 있는 모든 라우터들에 의해 그 값이 감소된다.


사이트마다 핑 보냈을 때 TTL 감소


목적지에 다다르기 전에 TTL 필드 값이 0이 되면 해당 데이터그램은 폐기된다.

ICMP 에러 데이터 그램 11 - Time Exceeded가 송신자에게 보내진다.

전달되지 못한 데이터그램이 인터넷 시스템 내에서 지속적으로 순환하여 넘쳐나는 상황을 방지한다.


IPv4 환경에서 TTL 값의 단위는 초이며, 이론적으로 이 값을 목적지까지 경로에 경유하게 되는 모든 호스트에서

1 이상의 양만큼 감소될 수 있다. 그러나 실제 적요엥서 TTL 값은 매 홉(hop)마다 1씩 감소된다.

이러한 상황을 고려하여, IPv6에서 이 필드의 명칭은 홉 리미트(hop limit)로 변경되었다.


DNS 레코드

TTL은 도메인 네임 시스템(DNS)에서도 사용된다.

DNS에서 권한있는 네임서버는 특정 리소스 레코드의 TTL 값을 설정한다.

재귀적 캐시 네임서버가 권한 있는 네임서버에 질의를 보낼 때, 캐시 네임서버는 그 레코드를

TTL 값에 해당하는 시간동안 캐시에 저장해 둔다.

추후 스터브 리졸버(stub resolver)가 캐시 네임 서버에 동일한 레코드에 대한 질의를 보낼 때,

해당 레코드의 TTL 값이 아직 만료되지 않았다면 캐시 네임서버는 권한있는

네임서버에 질의를 보낼 필요 없이 캐시에 저장된 정보를 이용해 바로 응답하게 된다.

네임서버는 특정 도메인이 존재하지 않음을 나타내는 NXDOMAIN 응답에 대해서도 TTL 값을 가질 수 있다.

다만 이 경우에는 일반적으로 그 값이 최대 3시간 정도로 짧다.


TTL값이 짧으면 상위의 권한있는 네임서버에 가해지는 부하가 커진다.(단점)

반면 메일 교환 레코드(mail exchange record)와 같은 주소 변경에 민감한 서비스엔 적합하다.(장점)

특정 서비스의 주소가 옮겨지는 경우, 이로 인한 혼란을 최소화하기 위해 DNS 관리자는 레코드의 TTL 값을 찾춘다.


과거에 주로 사용되던 TTL 값은 86400(24시간).

권한 있는 네임서버가 DNS 레코드를 변경했을 때 전 세계에 흩어지는 DNS 서버들이 최대 24시간 동안

업데이트되지 않은 옛 주소를 갖고 있을 수 있다.


오늘날 새로운 DNS 방식은 의도적으로 매우 낮게 설정된 TTL 값을 가질 수 있다.

TTL 값은 레코드 단위로 할당되며, 전 세계의 모든 표준 DNS 시스템은 특정 레코드의 TTL 값을

개별적으로 설정하는 것을 허용한다.

728x90
반응형

'프로그래밍 > 서버' 카테고리의 다른 글

[서버] 홀펀칭  (4) 2015.09.13
[서버] nagle 알고리즘  (0) 2015.09.13
[서버] UDP 패킷 손실에 대하여  (0) 2015.09.12
TCP Max Packet  (0) 2015.09.11
리눅스 vim cheat sheet  (2) 2015.09.05
TCP vs UDP  (1) 2015.08.18
HTTP  (0) 2015.08.12