2009-05-14 10 views
78

TCP/IP를 통해 통신하는 두 가지 구성 요소가 있습니다. 구성 요소 A는 서버/수신기로 작동하고 구성 요소 B는 클라이언트입니다. 두 사람은 최대한 빨리 의사 소통을해야합니다. 언제든지 하나의 연결 만있을 수 있습니다 (이 질문과는 별도 임). 우리 회사의 선임 개발자는 연결을 확실히 유지하기 위해 두 구성 요소 사이에 응용 프로그램 수준의 하트 비트를 사용해야한다고 말했습니다.TCP 연결을 열린 상태로 유지하려면 하트 비트가 필요합니까?

TCP/IP로 연결 상태를 유지할 수 있다고 생각했지만 많은 응용 프로그램간에 하트 비트를 보내는 것은 꽤 일반적인 방법이라고 말하는 수많은 블로그/사이트를 읽었습니다.

구성 요소 A 하트 비트 구성 요소 B의 일부분을 알고 있으므로 구성 요소 B와의 통신 문제 (링크가 작동 중지되었거나 구성 요소 B가 실행되지 않음)가 있으면 지원을 알릴 수 있습니다. 심장 박동이 다른 이유로 필요합니까? 그러한 것을 열어두기 위해 자주 "배관 안에"무언가가 있도록하는 것과 같은 것입니까?

구성 요소 A는 20 초마다 현재 하트 비트 구성 요소 B이고 구성 요소 B로부터 120 초 이내에 아무것도 수신되지 않으면 연결을 닫습니다. 그런 다음 연결이 끊어진 경우 구성 요소 B가 주기적으로 재 연결을 시도한다는 가정하에 연결 수신 대기를 재개합니다. 이것은 성공적으로 작동합니다.

내 질문을 반복하십시오 : TCP/IP 연결을 유지하기 위해 하트 비트가 필요합니까?

+1

이 동작은 구현에 따라 다를 수 있습니까? 이것은 TCP 표준에 지정된 것입니까, 아니면 구현 세부 사항으로 남았습니까? 바라건대 다른 사람도 그 대답을 할 수 있기를 바랍니다. – dss539

+0

구현 세부 사항은 모든 TCP/IP 기반 프로토콜이 전적으로 사용자에게 맡겨져있는 것은 아니므로 말합니다. – Lloyd

+3

예 - TCP/IP로 인한 것이 아니기 때문에 - 연결되지 않은 TCP 연결을 차단하는 경향이있는 방화벽 및 홈 라우터와 같은 다른 하드웨어 또는 소프트웨어가 연결될 수 있으므로 관련 : http://stackoverflow.com/questions/ 3907537/keep-alive-tcp-ip-connected-sockets-over-the-internet-how-how-and-how-much/5149662 # 5149662 – markmnl

답변

45

은 열려 있어도됩니다. 예를 들어, 프로토콜은 예를 들어 PING 명령으로 죽은 연결, IRC를 감지하는 데 도움이되는 하트 비트를 구현하는 것이 일반적입니다.

+31

Keepalive의 다른 일반적인 이유는 nat 게이트웨이를 통해 연결을 유지하는 것입니다. TCP 자체는 keepalive가 작동 할 필요가 없지만 nat 게이트웨이가 주어진 시간 초과 후 tcp 연결을 "drop"하는 것은 일반적입니다. – nos

+2

일반적인 시간 초과 란 무엇입니까? 초, 분, 시간? 보통 – MiniGod

+2

초입니다. – Lloyd

1

하트 비트라고하는 것은 타임 아웃을 설정할 때 유용합니다. 소켓이 열렸지 만 상대방이 BSOD를 겪고있는 것 같습니다. 존재하지 않는 클라이언트/서버를 탐지하는 가장 쉬운 방법 중 하나는 시간 초과를 설정하고 메시지가 너무 자주 수신되는지 확인하는 것입니다.

어떤 사람들은 NOOP (No Opps)라고 부릅니다.

아니요, 연결 상태를 유지할 필요가 없으며 상태가 무엇인지 아는 데 도움이됩니다.

+1

나는 FTP가 특별히 NOOP 명령도 가지고 있다고 생각한다. – Lloyd

0

연결이 열린 상태로 유지됩니다. 하트 비트를 구현할 필요가 없으며 소켓을 사용하는 대부분의 응용 프로그램은 하트 비트를 구현하지 않습니다.

3

TCP/IP 연결을 유지하는 데 하트 비트가 필요합니까?

연결이 끊어졌을 때를 감지하는 데 유용합니다.

10

직접 하트 비트를 보낼 필요가 없습니다. TCP 연결은 사용법에 관계없이 열려 있습니다.

TCP는 선택적 keepalive 메커니즘을 구현합니다.이 메커니즘은 나중에 데이터를 보내고 연결이 닫혔 음을 알기보다는 닫힌 연결을 적시에 식별하는 데 사용할 수 있습니다.

+0

리눅스에서 어떻게 작동할까요? 사실 작동합니까? 타임 아웃 시간을 2 시간 미만으로 예약 할 수 있습니까? 예를 들어 30 초? –

+0

이 기능을 사용하려면 애플리케이션이 킵 얼라이브를 지원해야합니다. 리눅스에서 활성화만으로는 충분하지 않습니다. –

-2

로이드 (Lloyd)와 같은 많은 프로토콜이 하트 비트 또는 건강 상태 유형을 구현합니다. 연결이 아직 열려 있고 무엇이든 놓친 경우도 있습니다.

1

하트 비트가 없으면 TCP/IP 연결이 열려 있는지 여부는 중요하지 않습니다.

1

하트 비트는 TCP 프로토콜의 필수 요소는 아닙니다. 상대방이 비표준 방식으로 연결을 종료했는지 (즉, 떼어 내기 프로세스를 거치지 않았 음) 여부를 감지 할 수 있습니다.

2

TCP는 연결 상태를 유지합니다. 응용 프로그램 하트 비트는 장애 조치,로드 균형 조정 또는 관리자에게 잠재적 인 문제에 대한 경고와 같은 응용 프로그램 수준 고려 사항을위한 것입니다.

44

다른 많은 사람들이 지적했듯이 TCP 연결은 자체 장치에 맡기면 그대로 유지됩니다. 그러나 연결 도중에 상태 (예 : 방화벽)를 추적하는 장치가있는 경우 상태 테이블 항목이 만료되지 않게하려면 keepalives가 필요할 수 있습니다.

+0

TCP 연결이 영원히 살아 있다고 말할 것입니까? – user7817808

1

프로토콜로 TCP/IP는 가까운 패킷을 보낼 때까지 닫히지 않은 것으로 지정됩니다. 나는 무선 또는 인터넷 연결이 불안정한 상태에서도 소켓을 열어 두었습니다.

그러나 이것은 모두 구현에 따라 다릅니다. 연결이 "죽었다"고 생각하기 전에 응답을 기다릴 최대 시간을 의미하는 "시간 초과"가있을 가능성이 높습니다. 경우에 따라서는 응용 프로그램 자체를 기반으로하며 가끔은 NAT 라우터를 기반으로합니다.

따라서 불량 연결을 감지하고 열어 둘 수 있도록 "하트 비트"를 유지하는 것이 좋습니다.

3

심장 박동은 당신이 살아 있다는 것을 서버에 알리는 좋은 방법입니다. 즉, 서버가 DoS 공격 방지 시스템을 사용하고 있다면, 서버 (서버)는 특정 연결에 대해 할당 된 모든 리소스를 제거 할 수 있습니다. 지정된 기간 동안 활동이 감지 된 후
하트 비트 메커니즘을 구현할 필요가 없습니다.

하지만 애플리케이션을 설계 할 때 주된 기준은 응답 성이 좋습니다. 연결 설정, DNS 조회 및 경로 발견에 시간을 낭비하고 싶지는 않습니다. 항상 연결을 유지하고 하트 비트를 계속 보내면 응용 프로그램은 연결이 살아 있다는 것을 알고 연결 설정은 필요하지 않습니다. 그냥 보내고받을 수 있습니다.

9

Windows를 사용하는 경우 TCP Keep-alive에주의하십시오. Windows 레지스트리를 사용하거나 setsockopt를 통해 전역 적으로 설정하지 않는 한 기본적으로 비활성화됩니다.

기본 연결 유지 간격은 2 시간입니다.

http://msdn.microsoft.com/en-us/library/ms819735.aspx

당신은 당신의 자신의 심장 박동을 구현하고 TCP 연결 유지 창문에 2 시간 연결 유지 살아가 바람직하지 않은 경우 사용하지 않도록해야합니다.

2

기본적으로 TCP 연결은 경로를 따라 스위치에 저장된 링크 상태를 만듭니다. 끊어진 연결을 감지하기 위해 (하나의 연결이 끊어지면 (적절한 연결 해제없이)), 이러한 상태는 일정 기간 동안 사용하지 않으면 퇴보해야합니다. 그리고 이런 일이 발생하면 TCP 연결이 끊어졌습니다. 시간 제한이 얼마나 오래되었는지는 정확하게 알 수 없지만 장치 제작자 및/또는 인터넷 제공 업체에 의존하는 것 같습니다. 유휴 SSH 터미널 세션이 Kabel-BW 제공 연결을 사용할 때 몇 시간 동안 열렸을 때 이전의 1 & 인터넷 공급자가 종료 한 후 유휴 시간이 15 분 미만인 빠른 속도 였음을 기억합니다 ...

마지막으로, 나는 이전 연사와 결론을 짓는다. 하트 비트는 연결이 여전히 살아 있고 발로 차 있는지를 말해주는 좋은 방법이다.컴포넌트 경우

17

:

  • 는 기존의 유선 네트워크에
  • 도 그들 사이에 방화벽 또는 NAT 라우터는 다음

필요가 없습니다 충돌이 없습니다 심장 박동이있다.

이러한 가정 중 하나라도 틀리면 (나는 당신을보고 있습니다!) 하트 비트가 오히려 빨리 필요하게됩니다.

관련 문제