我試圖了解 TCP PSH 和 URG 標誌之間的區別。到目前為止我知道,當設置 PSH 標誌時,接收設備不會等到緩衝區已滿 - 它只是將資料發送到設備。
但是有人可以給我一個現實世界的例子,以便我可以更好地理解這個概念嗎?
我正在經歷https://packetlife.net/blog/2011/mar/2/tcp-flags-psh-and-urg/文章雖然解釋得很好,但我無法理解所給的例子。
它說,
在封包 #4 中,我們看到初始 HTTP 請求設定了 PSH 標誌,表明客戶端沒有更多資料要添加,並且請求應立即發送到應用程式(在本例中為 Web 守護程式)
如果在上述情況下,客戶端沒有進一步的資料要傳送,為什麼它不只發送設定了 FIN 標誌的資料包呢?
答案1
客戶沒有更多數據現在,但這並不意味著將來不會有。
您假設該協定只有一個來自客戶端的請求(以及一個回應)。 HTTP 的情況已經很長一段時間了——多個請求的連線重複使用甚至在 HTTP/1.1 之前就已經存在,現在已經無所不在。客戶端提交請求,等待回應,然後提交另一個請求這些長壽命連線的優點是它允許 TCP 流量控制達到最佳狀態。
許多其他協議也不是這種情況。例如,SMTP 需要交換不少於 5 個命令/回應才能發送電子郵件,且協定規範明確禁止「管線」(一次發送所有命令而不等待回應)。這意味著客戶端需要推送一條線並讓伺服器回應,推送另一條線並讓伺服器回應,等等。
當然,許多協議都是互動的– Telnet 和 SSH 要求伺服器回應每次按鍵; VNC 和 RDP 對每次滑鼠點擊做出反應。