TCP標誌:PSH和URG

TCP標頭包含幾個一位布爾字段,稱爲標誌,用於影響TCP連接上的數據流。忽略RFC 3168爲擁塞通知添加的CWR和ECE標誌,有六個TCP控制標誌。下面列出的其中四個用於控制TCP連接的建立,維護和拆除,並且對於甚至進行了基本數據包分析的任何人都應該熟悉。

  • SYN - 啓動連接
  • ACK - 確認收到的數據
  • FIN - 關閉連接
  • RST - 中止連接以響應錯誤

其他兩個標誌,PSH(推)和URG(緊急),並不是衆所周知的。它們是今天文章的焦點。

PSH標誌

要了解PSH標誌的功能,我們首先需要了解TCP如何緩衝數據。TCP在OSI模型的第四層運行; 它向上層提供了一個簡單的套接字,可以讀取和寫入,掩蓋了基於分組的通信的複雜性。爲了允許應用程序隨時讀取和寫入此套接字,緩衝區在兩個方向上都在TCP連接的兩端實現。

下圖顯示了在發送之前發送方如何緩衝數據,以及接收時接收方如何緩衝數據。

 

當發送多個最大段大小(MSS)的數據(例如,傳輸大文件)時,緩衝區允許更有效的數據傳輸。但是,在處理需要儘可能快地傳輸數據的實時應用程序時,大緩衝區的弊大於利。考慮一下Telnet會話會發生什麼,例如,如果TCP在發送數據包之前等待有足夠的數據來填充數據包:在第一個數據包進入遠程設備之前,您必須鍵入超過一千個字符。不是很有用。

這是PSH標誌進入的地方.TCP在會話級別提供的套接字可由應用程序寫入,可選擇立即“推送”數據,而不是等待其他數據進入緩衝區。發生這種情況時,傳出TCP數據包中的PSH標誌設置爲1(打開)。在接收到設置了PSH標誌的分組時,連接的另一側知道立即將該分段轉發到應用程序。總而言之,TCP的推送功能完成了兩件事:

  • 發送應用程序通知TCP應立即發送數據。
  • TCP報頭中的PSH標誌通知接收主機應立即將數據推送到接收應用程序。

我們可以看到在HTTP GET請求的數據包捕獲中使用的PSH標誌的示例。在數據包#4中,我們看到初始HTTP請求已設置其PSH標誌,表示客戶端沒有其他數據要添加,並且請求應立即發送到應用程序(在本例中爲Web守護程序)。我們還看到服務器在包#36上設置了PSH標誌,包含所請求文件的最後字節。同樣,PSH標誌用於通知接收方發送方沒有其他數據要傳輸(暫時)。

如上所述,PSH標誌還用於促進通過TCP的實時通信。短Telnet會話的數據包捕獲表明,所有攜帶Telnet數據的數據包都設置了PSH標誌,以防止TCP按鍵緩衝。

URG標誌

URG標誌用於通知接收站段內的某些數據是緊急的並且應該優先。如果設置了URG標誌,則接收站將評估緊急指針,即TCP標頭中的16位字段。該指針指示從第一個字節開始計算的段中有多少數據是緊急的。

 

現代協議並未充分利用URG標誌,但我們可以在之前引用的Telnet數據包捕獲中看到它的一個示例。在包#86中發送的0xFF字符在包#70中的Telnet命令0xF2(242)之前,表示數據標記。根據RFC 854,應該在設置TCP URG標誌的情況下發送此命令。分組#68中的緊急指針指示該分段的第一個字節(在這種情況下是整個分段)應該被認爲是緊急數據。

不可否認,這可能不是URG旗幟最具說明性的例子,但在真實世界的捕捉中發現它的其他用途卻令人驚訝地難以實現。

有關TCP的PSH和URG功能的更多討論,請在線查看“TCP / IP指南”

 

轉自:http://packetlife.net/blog/2011/mar/2/tcp-flags-psh-and-urg/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章