TCP報文段中的URG和PSH

一:TCP報文段的首部格式
首先明白TCP雖然是面向字節流的,但TCP傳輸的數據單元確實報文段,一個TCP報文段分爲首部和數據兩部分,而TCP的全部功能都體現在它首部中的個字段的作用,因此只有弄清楚TCP首部個字段的作用才能掌握TCP的工作原理.
TCP報文段首部的前20個字節是固定的,後面有4n字節是根據需要而增加的選項,,因此TCP首部的最小長度是20字節
這裏寫圖片描述

二:首部固定部分各字段的意義:

(1)源端口和目的端口: 各佔兩字節,分別寫入源端口號和目的端口號和UDP的分用類似,TCP的分用也是通過端口實現的.
(2)序號: TCP是面向字節流的,在一個TCP連接中傳送的字節流中的每一個字節都按順序編號.整個要傳送的字節流的起始序號必須在連接簡歷時設置,首部中的序號字段值則指的是本報文段所發送的數據的第一個字節的序號.
(3)確認號: 佔4字節是期望收到對方下一個報文段的第一個數據字節的序號
若確認號 =N,則表明:到序號N-1爲止的所有數據都正確收到.
(4)數據偏移 : 佔4位,它指出TCP報文段的數據起始處距離TCP報文段的起始處有多遠,這個字段實際上是指出TCP報文段的首部長度.
(5)保留: 佔6位,保留爲今後使用,但目前應置爲0
(6)窗口: 佔2字節.. 窗口字段用來控制對方發送的數據量,可以告知對方目前本身有的緩衝器容量(Receive Buffer) 還可以接收封包。當 Window=0 時,代表緩衝器已經額滿,所以應該要暫停傳輸數據。單位爲字節。TCP連接的一端根據設置的緩存空間大小確定自己的接收窗口大小,然後通知對方以確定對方的發送窗口的上限,這個值是本機期望一次接收的字節數。
(7)校驗和: 佔2字節當數據要由發送端送出前,會進行一個檢驗的動作,並將該動作的檢驗值標註在這個字段上; 而接收者收到這個封包之後,會再次的對封包進行驗證,並且比對原發送的 Checksum 值是否相符,如果相符就接受,若不符就會假設該封包已經損毀,進而要求對方重新發送此封包!在計算檢驗和時,要在TCP報文段的前面加上12字節的僞首部。
(8)緊急指針: 佔2字節這個字段是在 Code 字段內的 URG = 1 時纔會產生作用。可以告知緊急數據所在的位置(緊急指針指出在本報文段中的緊急數據的最後一個字節的序號)。
(9)選項:長度可變。CP首部可以有多達40字節的可選信息,用於把附加信息傳遞給終點,或用來對齊其它選項。
目前此字段僅應用於表示接收端可以接收的最大數據區段容量,若此字段不使用, 表示可以使用任意數據區段的大小。 這個字段較少使用。
TCP首部的主要選項:
最大報文段長度MSS是TCP報文段中的數據字段的最大長度。MSS告訴對方TCP:“我的緩存所能接收的報文段的數據字段的最大長度是MSS個字節。”

三:TCP報文段首部6個控制位
(1):緊急URG: 當URG =1時,表明緊急指針字段有效.他告訴系統此報文段中有緊急數據,應儘快傳送(相當於高優先級數據),而不要按原來的排隊序列來傳送
如:已經發送了很長的一個程序要在遠地的主機上運行,但後來發現了一些問題,需要取消該程序的運行,用戶從鍵盤發出中斷Ctrl-C命令,如果不使用緊急數據,那麼這兩個字符將存儲在接受TCP的緩存末尾,只有在所有數據處理完畢後這兩個字符才被交付接收方的應用進程,這樣就會浪費很多時間.

當URG置1時,發送應用進程告訴發送方的TCP右緊急數據要傳送,於是發送方TCP就把緊急數據插入到本報文段數據的最前面,而在緊急數據後面的數據仍是普通數據.這時要與首部中的緊急指針字段配合使用.
(2)確認ACK: 僅當ACK =1時確認號字段纔有效.當ACK =0時,確認號無效.TCP規定,在連接建立後所有傳送的報文段都必須把ACK置1
(3)推送PSH : 當兩個應用進程進行交互式的通信時,有時宰一端的應用進程希望鍵入一個命令後立即就能夠收到對方的響應,在這種情況下,TCP就可以使用推送(push)操作.這時,發送方TCP把PSH置1,並立即創建一個報文段發送出去.接收方TCP收到PSH =1的報文段,就儘快地交付接受應用進程,而不是等到整個緩存都填滿了後再向上交付.
注意:雖然應用程序可以選擇推送操作,但推送操作還很少使用

(4)復位RST: 當RST =1時,表明TCP連接中出現嚴重差錯(如由於本主機崩潰或其他原因),必須釋放連接,然後再建立運輸連接.RST置1還用來拒絕一個非法的報文段或拒絕打開一個連接,RST也可稱爲重建位或重置位.
(5)同步STN: 在連接建立時用來同步序號.當SYC =1而ASK =0時,表明這時一個連接請求報文段.對方若同意建立連接,則應響應報文段中使用SYN=1和ASK =1.因此,SYN置1就表示這是一個連接請求或者連接接受報文
(6)終止FIN: 用來釋放一個連接,當FIN =1時,說明此報文的發送方的數據已發送完畢,並要求釋放運輸連接.

部分參考<<計算機網絡>>

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