簡體   English   中英

為什么TCP保持活動數據包不觸發I / O事件? 是因為沒有有效載荷或序列號比連接的序列號小1

[英]why TCP keep-alive packet doesn't trigger I/O event? Is it because no payload or sequence number is 1 less than sequence number of connection

我想讓我的服務器在收到“保持活動數據包”時通知應用程序層。 我想知道“保持活動”數據包不觸發I / O事件的原因是什么。 是因為TCP Keep Alive數據包沒有數據,還是序列號比連接的序列號小1。

我做了一些測試,讓我的客戶發送“保持活動數據包”。 我的服務器使用epoll,但未觸發。

我也想知道我是否填充一個字節以保持活動數據包數據/有效載荷,我的應用程序是否會收到通知/ I / O事件/ Epoll觸發?

您不必為此感到驚訝。 例如,您也不會收到RST數據包的通知。

這些是傳輸級消息傳遞詳細信息。 在應用程序級別,TCP為您提供字節流,而與低級詳細信息無關。 如果要具有應用程序級心跳,則應在應用程序級協議上實現它們。

您的最新編輯似乎源於某種混亂。 您不能將數據添加到Keep Alive數據包中,原因有兩個:

  • 首先,它們是由網絡層發送的,應用程序無法控制它們(除了超時)
  • 更重要的是,如果您通過某種(深色)魔術來設法干擾網絡層(例如,對內核進行了修補:)並開始將數據放入其中,則它們將不再是保持活動狀態的數據包,而將變為正常的數據包,從而承載數據。 當然,不但如此,您的接收者還將收到有關數據的通知,這些數據將成為消息流的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM