2014-04-30 27 views
-2

在套接字中,keepalive不會關閉套接字。客戶端發送一個keepalive標誌給服務器,如果服務器同意連接不會被關閉。如果我很好地理解了這個概念,客戶端只要客戶端沒有數據要發送,就會向服務器發送一個保活包(包含空數據)。「keepalive」功能如何與套接字一起使用?

但是,何時可以關閉一個插座?

以下是我能想到的

  1. 服務器/客戶端的具體情景關閉連接
  2. 超時異常

路由器可以關閉連接?

+0

我們在這裏談論什麼應用層協議?路由器通常不會關閉連接。防火牆或IDS可能會將其確定爲違反某些規則併發送RST(使用TCP連接)或開始雙向丟棄端點組合的數據包。 –

+0

@ MichaelJ.Gray:路由器在一段時間後關閉空閒連接。 FTP是一個臭名昭着的例子。在長文件傳輸過程中,除非客戶端在命令連接上使用TCP保留,否則路由器可能會關閉空閒命令連接,因此路由器不會關閉它。 –

+0

@RemyLebeau我從來沒有說過他們沒有。我寫道他們通常不會。另外,FTP服務器軟件通常是空閒連接被終止的原因。如果路由器正在終止空閒連接,並且它不作爲直接上游提供者,則它也被廣泛認爲是錯誤配置。對於某些類型的連接,ISP通常具有1-2小時的空閒限制,但通常僅適用於那些按需計量或撥打的用戶。但是與往常一樣,由於基礎設施的類型不同,配置因地區而異。 –

回答

2

你混淆了兩個不同的東西叫做keepalive。

  1. 在HTTP Keepalive中,它默認從HTTP 1.1開啓,客戶端必須明確請求關閉它。在HTTP 1.0中沒有這樣的事情,但有一個非正式的約定要求它:一個Connection: keep-alive頭。當使用保持活動狀態時,在發送/接收HTTP響應之後,任何一方都關閉連接。當不使用保持活動時,雙方關閉連接。

  2. 在TCP keepalive中,TCP堆棧發送的序列號低於已經確認的序列號的字節,這應該引起接收器用當前序列號發送ACK。

在HTTP或TCP中,連接可以在任何時候真正關閉,並且對等端只需檢測並處理該連接。

相關問題