관리 메뉴

HAMA 블로그

keepalive 란? 본문

Network

keepalive 란?

[하마] 이승현 (wowlsh93@gmail.com) 2015. 7. 22. 21:20

1. TCP/IP 에서의  Keepalive 


- 옵션이므로 설정여부는 상황에 따라 다르다.

TCP keepalive는 setsockopt()을 사용하여 소켓 옵션(SO_KEEPALIVE)을 설정하면 사용할 수 있게 됩니다.

소켓 옵션이 설정되면 tcp_keepalive_interval로 지정된 시간 동안 연결이 유휴 상태가 되었을 때 keepalive 탐색 패킷을 보냅니다.

- 두 지점간에 상대방의 안부를 묻기위해 payload 가 없는 패킷을 주기적으로 보내는것이다. (지정된 시간동안 서로 패킷교환이 없을 경우에 ) 

- 그 패킷에 반응이 없으면 접속을 끊는다. 

- NAS 같은것은 중간에서 두 지점사이에 데이타 교환이 없으면 , 큐의 오래된쪽으로 이동시켜 놓는데 (결국 임의로 삭제하면 , 두 지점의 연결이 

   갑자기  끊김)  Keepalive 옵션을 통해서 꾸준히 유지중이라고 NAS 에게 알려주는 장점이 있다.

-  keepalive를 사용하는 주된 이유는 종단 시스템 중의 하나가 다운될 때 발생할 수 있는 한쪽만 열린 연결 상태를 정리하는 것입니다. 


2. HTTP 에서의  Keepalive 


- http 는 특성상 커넥션을 유지하지 않습니다. 

- 하지만 keepalive 를 설정하면 유지하게 됩니다.

- KeepAliveTimeout   5 하면 5 초동안 유지됩니다.

- 서버는 연결을 맺을수있는 소켓을 생성하는데 한계가 있습니다.

- 따라서 연결을 오래 유지하면 , 다른 사람들이 연결을 못하게됩니다.

- 하지만 사람들이 적게 접속한다면, 소수의 사람이 빠르게 인터넷을 사용할수있습니다. (리소스를 얻기위해 재 접속이 필요없으니)

- 마찬가지로 서버의 메모리 용량이 무지 크다면,  KeepAlive 설정을 해줘도 넉넉한 커넥션을 맺을수 있겠지요.

- 너무 오래 놔둘 필요는 없고 2~5초 정도면 충분할듯합니다.


3. 소켓  timeout 이란 

첫째, Connection 에서의 타임아웃

=> 연결시도를 설정한 타임아웃까지는 해봐라~ 설정시간이 지나면 그냥 포기해~ 그게 편해~~

둘째. read/write 에서의 타임아웃 

=> 한쪽이 먼일이 생기거나, 랜선이 빠졌는데도 불구하고 오매불망 기다리고있을순 없잖아.  |
     타임아웃 시간까지만 기다리고 , 그만 잊고 새 색시 찾으러 가야지~  



소켓 옵션이 설정되면 tcp_keepalive_interval로 지정된 시간 동안 연결이 유휴 상태가 되었을 때 keepalive 탐색 패킷을 보냅니다.
응답 메시지가 수신될 때까지 또는 tcp_ip_abort_interval로 지정된 시간이 다 경과할 때까지 탐색 패킷을 보냅니다. 응답은 연결 상대측을 지연시키는 요소의 영향을 받습니다. 연결 상대측이 연결을 닫거나 다시 부팅을 하면 응답 메시지는 RST(reset packet)가 됩니다. 수신 주소에 도달할 수 없다는 ICMP 메시지를 수신하게 될 가능성도 있습니다. 라우터가 고장나거나 케이블 연결이 끊긴 경우에 그런 상황이 발생합니다. 그 외에도 많은 가능한 상황이 있습니다. 탐색 패킷 자체는 tcp_rexmit_interval로 지정된 간격으로 보내집니다.

keepalive를 15분 미만으로 설정해서는 안된다고 제안하는 이유 중의 하나는 바로 이것입니다. 그렇게 설정하면 TCP가 장애를 일으킬 가능성이 다분히 있습니다. tcp_rexmit_interval의 값은 3초로 기본 설정됩니다. 20초 정도로 높게 설정할 수도 있습니다. 그런데, tcp_keepalive_interval을 tcp_rexmit_interval 보다 작은 값으로 줄이면, 재전송하기 전에 keepalive 탐색 패킷을 보낼 것입니다. 하지만, 네트워크가 느리거나 팻 상태가 되면 재전송이 매우 중요합니다. 어쩌면 통신 상대측 시스템이 느려서 아직 응답하지 않은 것일 수도 있습니다. 재전송을 보내는 이유가 바로 이것입니다. 이것은 누군가에게 조금 전에 내가 한 말을 들었느냐고 묻는 것과 같습니다. 상대방이 없다고 판단되면 대화를 미리 중단하거나 상대방이 있는지 알아 보려고 시간을 낭비하게 될 것입니다. 상대측이 여전히 대화에 참여하고 있다면 그에게 직접 조금 전에 내가 한 말을 들었느냐고 다시 묻게 될 것입니다. 이렇게 되면 네트워크가 팻 상태가 됩니다. 네트워크가 팻 상태가 되면 될수록 제대로 작동이 되려면 재전송을 더 많이 해야 합니다. 그렇게 하여 TCP가 장애를 일으키게 됩니다.






레퍼런스:

http://egloos.zum.com/munhwan/v/1006786

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Network_Programing/Documents/Sockettimeout

'Network' 카테고리의 다른 글

Half close socket 이란  (0) 2015.09.07
SSH 터널링 상세이론  (0) 2015.07.14
홀펀칭 기초  (0) 2015.07.14
와이파이로 기기간 연결 강화한다  (0) 2015.06.11
모바일기기 wifi의 ip주소를 수동으로 설정하기  (0) 2015.06.11
Comments