Mam dwa komponenty, które komunikują się przez TCP / IP. Składnik A działa jako serwer / odbiornik, a składnik B jest klientem. Obaj powinni komunikować się tak szybko, jak to możliwe. W dowolnym momencie może istnieć tylko jedno połączenie (choć to nie dotyczy tego pytania). Starszy programista w mojej firmie powiedział, że muszę używać pulsów na poziomie aplikacji między dwoma komponentami, aby zapewnić, że połączenie pozostanie otwarte.
Myślałem, że połączenie pozostaje otwarte przez TCP / IP, ale przeczytałem wiele blogów / witryn, mówiąc, że jest to dość standardowa praktyka, aby pulsować między tymi aplikacjami.
Wiem, po części, dlaczego komponent A pulsuje komponentem B, więc może informować pomoc techniczną o problemach z komunikacją z komponentem B (albo łącze jest wyłączone, albo komponent B nie działa). Czy bicie serca jest potrzebne z innego powodu? Żeby zapewnić, że często coś jest „w rurze”, co spowoduje, że będzie otwarta?
Składnik A obecnie bije składnik B co 20 sekund i zamyka połączenie, jeśli nic nie zostanie odebrane ze składnika B w ciągu 120 sekund. Następnie wznawia nasłuchiwanie połączeń przy założeniu, że składnik B będzie okresowo próbował ponownie nawiązać połączenie, jeśli łącze zostanie zerwane. To działa pomyślnie.
Powtarzam moje pytanie: czy bicie serca jest niezbędne do utrzymania aktywnego połączenia TCP / IP?
Odpowiedzi:
Połączenie powinno pozostać otwarte bez względu na to, ale tak, często zdarza się, że protokoły implementują bicie serca, aby pomóc wykryć martwe połączenia, na przykład IRC z poleceniem PING .
źródło
Jak wielu innych zauważyło, połączenie TCP pozostanie aktywne, jeśli zostanie pozostawione jego własnym urządzeniom. Jeśli jednak masz urządzenie w środku połączenia, które śledzi swój stan (takie jak zapora), możesz potrzebować funkcji utrzymywania aktywności, aby zapobiec wygaśnięciu wpisu tabeli stanu.
źródło
Jeśli twoje komponenty:
wtedy nie musisz mieć bicia serca.
Jeśli którekolwiek z tych założeń jest fałszywe (patrzę na ciebie, GPRS!), Bicie serca staje się konieczne dość szybko.
źródło
Nie musisz sam wysyłać bicia serca. Połączenie TCP pozostanie otwarte niezależnie od użycia.
Zauważ, że TCP implementuje opcjonalny mechanizm utrzymywania aktywności , który może być użyty do zidentyfikowania zamkniętego połączenia w odpowiednim czasie, zamiast wymagać wysłania danych w późniejszym terminie i dopiero wtedy odkryć, że połączenie jest zamknięte.
źródło
Jeśli używasz systemu Windows, zachowaj ostrożność podczas korzystania z TCP Keep-alive. Domyślnie jest wyłączony, chyba że włączysz go globalnie w rejestrze systemu Windows lub przez setsockopt.
Domyślny interwał utrzymywania aktywności to 2 godziny.
http://msdn.microsoft.com/en-us/library/ms819735.aspx
Być może będziesz musiał zaimplementować własne bicie serca i wyłączyć utrzymywanie aktywności TCP w systemie Windows, jeśli 2-godzinne utrzymywanie przy życiu nie jest pożądane.
źródło
Są przydatne do wykrywania utraty połączenia.
źródło
TCP utrzyma połączenie przy życiu. Puls aplikacji służy do rozważań na poziomie aplikacji, takich jak przełączanie awaryjne, równoważenie obciążenia lub ostrzeganie administratorów o potencjalnych problemach.
źródło
Bicie serca to dobry sposób, aby powiedzieć serwerowi, że żyjesz, co oznacza, że jeśli serwer korzysta z systemów zapobiegania atakom DoS, to (serwer) może usunąć wszystkie zasoby przydzielone dla tego konkretnego połączenia po wykryciu nieaktywny przez określony czas.
Nie mają mandatu do wdrażania jakichkolwiek mechanizmów bicia serca.
Ale jest to dobre, jeśli projektujesz aplikację, w której głównym kryterium jest responsywność. Nie będziesz chciał tracić czasu na konfigurowanie połączeń, wyszukiwanie DNS i wykrywanie ścieżek. Po prostu utrzymuj połączenie przez cały czas, wysyłaj bicie serca, a aplikacja wie, że połączenie jest aktywne, a konfiguracja połączenia nie jest wymagana. Po prostu wysyłaj i odbieraj.
źródło
TCP / IP jako protokół jest określony jako niezamykany, dopóki nie wyślesz bliskiego pakietu. Gniazdka pozostały otwarte nawet po nierównych połączeniach bezprzewodowych lub internetowych.
Jednak wszystko to jest bardzo zależne od implementacji. Najprawdopodobniej nastąpi „limit czasu”, który oznacza maksymalny czas oczekiwania na odpowiedź przed uznaniem połączenia za „martwe”. Czasami jest to oparte na samej aplikacji, czasami na routerach NAT.
Dlatego zdecydowanie zalecam zachowanie „bicia serca” w celu wykrycia złych połączeń i pozostawienia ich otwartych.
źródło
Zasadniczo połączenie TCP tworzy stany łączy przechowywane w przełącznikach wzdłuż trasy. Aby wykryć zerwane połączenia (np. Gdy jeden odpowiednik ulegnie awarii (bez wysłania odpowiedniego rozłączenia)), stany te muszą zostać eksmitowane po okresie bezczynności. A kiedy to się stanie, twoje połączenie TCP zostało zamknięte. Chociaż nie mogę dokładnie określić, jak długie są te limity czasu, wydaje się, że zależą one od producentów urządzeń i / lub dostawców Internetu. Pamiętam, że moje bezczynne sesje terminala SSH zostały szybko (mniej niż 15 minut bezczynności) zamknięte przez mojego byłego dostawcę Internetu 1 & 1, podczas gdy pozostawały otwarte przez kilka godzin, gdy korzystałem z połączenia dostarczonego przez Kabel-BW ...
Na koniec kończę z moimi poprzednimi mówcami: bicie serca to dobry sposób, aby stwierdzić, czy połączenie jest nadal żywe i działa ...
źródło
To, co nazywasz biciem serca, jest przydatne, gdy próbujesz ustawić limity czasu. Twoje gniazdo może wydawać się otwarte, ale osoba po drugiej stronie może cierpieć na BSOD. Jednym z najłatwiejszych sposobów wykrywania niedziałających klientów / serwerów jest ustawienie limitu czasu i upewnienie się, że wiadomość jest otrzymywana co jakiś czas.
Niektórzy nazywają ich NOOPami (No Ops).
Ale nie, nie są one konieczne do utrzymania połączenia, pomagają tylko wiedzieć, jaki jest stan.
źródło
Powiedziałbym, że jeśli nie masz pulsu, nie ma znaczenia, czy twoje połączenie TCP / IP jest otwarte, czy nie.
źródło
Bicie serca nie jest konieczne w przypadku protokołów TCP. Jego implementacja ma na celu wykrycie, czy druga strona zakończyła połączenie w niestandardowy sposób (tj. Nie przeszła przez proces zrywania).
źródło
Połączenie pozostanie otwarte - nie ma potrzeby wdrażania pulsu, a większość aplikacji korzystających z gniazd nie robi tego.
źródło
Wiele protokołów implementuje bicie serca lub stan zdrowia, jak powiedział Lloyd. Tylko po to, abyś wiedział, że połączenie jest nadal otwarte i jeśli coś przeoczyłeś
źródło