埠號調研 URG和PSH 及TCP的計時器

2021-08-04 05:22:22 字數 3758 閱讀 1861

埠號是用來標識目的主機當中的唯一網路程序,因此ip位址+埠號=》套接字;套接字可以確定唯一的乙個程序。

tcp/ip協議中引入一種叫做「套接字」的應用程式軟體,有了這樣一種技術,一台電腦就可以與任意一台具有套接字的電腦通訊。

埠的分類:

從性質來分:

1)公認埠:0—1024,緊密繫結一些特定的服務,這類埠不可重新定義它的作用物件,例如80號埠對應http,23號埠對應telnet服務

2)註冊埠:1025-49151,這些埠多數沒有明確的定義服務物件,不同程式可以根據實際需要自己定義,

3)動態和/或私有埠:49152-65535,不應把常用服務分配在這些埠上,一些木馬程式非常喜歡用這些埠;

根據所提供的服務方式不同可以分為tcp相關埠和udp相關埠;

udp類的有:

1)http:80號超文字傳輸協議,常用的「www服務」,「web服務」就是這個埠

2)dns:53號,網域名稱解析服務;

3)snmp:161號,簡單網路管理協議;

4)oicq:既接收服務又提供服務;oicq伺服器採用8000號埠,傾聽是否有資訊到來,oicq則採用4000號埠,向外傳送資訊;

1、urg推送位

緊急資料的起始點=序號;

緊急資料的終止點=序號+緊急指標;

(綜上,緊急指標就是記錄緊急資料的位元組數,緊急指標永遠為正數)

1)在緊急資料後面的資料為普通資料,需要按序快取

2)視窗為0也可以傳送緊急資料

3)緊急資料都處理完成後,tcp就告訴程序恢復到正常操作

例如,已經傳送了很長的乙個程式要在遠地的主機上執行。但後來發現了一些問題,需要取消程式的執行。因此使用者從鍵盤發出中斷命令(ctrl+c)。如果不使用緊急資料,那麼這兩個字元會被儲存在接受tcp的快取末尾。只有在所有的資料被處理完畢後這兩個字元才會被交付給接收方。這樣就浪費了很多時間。

urg強調的是直接讀取資料,我們不會將該資料複製到快取中,我個人認為,這個資料(緊急指標指向的資料)並不是真正意義上的」資料」,而是對真正意義上」資料」的一種操作.

2、psh推送位

psh=1,該報文希望,到達對端時,將這個報文及快取區之間快取尚未交付的資料一併交付給程序。

1)psh的資料=本報文資料+快取區資料

2)psh的方向—>單方向(接收psh報文的一端)

psh強調的是盡快將資料交付給上層(協議),而不需要經過強迫資料互動(預設tcp/ip是將資料快取到一定的上限,再將資料遞交給上層,以提高網路效能).可見,該部分資料是需要複製到快取中的

3、區別

urg交付給程序的資料:只有緊急資料

psh交付給程序的資料:緩衝區排好序的資料及當前報文中的資料

兩者的共同點:都是一種對資料的處理方式.只不過urg是處理在前端(收到資料後立馬對真正意義上」資料」進行操作,所以說」緊急.而psh是在處理的後端,告訴核心,不用等待」滿了」再遞交資料遞交到上層.

tcp使用四種定時器(timer,也稱為「計時器」):

重傳計時器:retransmission timer

堅持計時器:persistent timer

保活計時器:keeplive timer

時間等待計時器:time_wait timer。

1、重傳計時器:retransmission timer

重傳定時器:為了控制丟失的報文段或丟棄的報文段,也就是對報文段確認的等待時間。當tcp傳送報文段時,就建立這個特定報文段的重傳計時器,可能發生兩種情況:若在計時器超時之前收到對報文段的確認,則撤銷計時器;若在收到對特定報文段的確認之前計時器超時,則重傳該報文,並把計時器復位;重傳時間=2*rtt;

rtt的值應該動態計算。常用的公式是:rtt=previous rtt*i + (1-i)*current rtt。i的值通常取90%,即新的rtt是以前的rtt值的90%加上當前rtt值的10%.

karn演算法:對重傳報文,在計算新的rtt時,不考慮重傳報文的rtt。因為無法推理出:傳送端所收到的確認是對上一次報文段的確認還是對重傳報文段的確認。乾脆不計入。

2、堅持計時器:persistent timer

專門為對付零視窗通知而設立的。

當傳送端收到零視窗的確認時,就啟動堅持計時器,當堅持計時器截止期到時,傳送端tcp就傳送乙個特殊的報文段,叫探測報文段,這個報文段只有乙個位元組的資料。探測報文段有序號,但序號永遠不需要確認,甚至在計算對其他部分資料的確認時這個序號也被忽略。探測報文段提醒接收端tcp,確認已丟失,必須重傳。

堅持計時器的截止期設定為重傳時間的值,但若沒有收到從接收端來的響應,則傳送另乙個探測報文段,並將堅持計時器的值加倍和並復位,傳送端繼續傳送探測報文段,將堅持計時器的值加倍和復位,知道這個值增大到閾值為止(通常為60秒)。之後,傳送端每隔60s就傳送乙個報文段,直到視窗重新開啟為止;補充:

堅持定時器的原理是簡單的,當tcp伺服器收到了客戶端的0滑動視窗報文的時候,就啟動乙個定時器來計時,並在定時器溢位的時候向向客戶端查詢視窗是否已經增大,如果得到非零的視窗就重新開始傳送資料,如果得到0視窗就再開乙個新的定時器準備下一次查詢。通過觀察可以得知,tcp的堅持定時器使用1,2,4,8,16……64秒這樣的普通指數退避序列來作為每一次的溢位時間。

糊塗視窗綜合症

tcp的視窗協議,會引起一種通常叫做糊塗視窗綜合症的問題,具體表現為,當客戶端通告乙個小的非零視窗時,伺服器立刻傳送小資料給客戶端並充滿其緩衝區,一來二去就會讓網路中充滿小tcp資料報,從而影響網路利用率。對於傳送方和接收端的這種糊塗行為。

再次補充:

tcp通過讓接收方指明希望從傳送方接收的資料位元組數(即視窗大小)來進行流量控制。如果視窗大小為 0會發生什麼情況呢?這將有效地阻止傳送方傳送資料,直到視窗變為非0為止。

tcp不對ack報文段進行確認, tcp只確認那些包含有資料的ack報文段。

如果乙個確認丟失了(這個確認是」接收方「向」傳送方「傳送的ack,通知」傳送方「自己的視窗已經非0了),則雙方就有可能因為等待對方而使連線終止:接收方等待接收資料(因為它已經向傳送方通告了乙個非 0的視窗),而傳送方在等待允許它繼續傳送資料的視窗更新。為防止這種死鎖情況的發生,傳送方使用乙個堅持定時器 (persist timer)來周期性地向接收方查詢,以便發現視窗是否已增大。這些從傳送方發出的報文段稱為視窗探查 (window probe)。

3、保活計時器:keeplive timer

每當伺服器收到客戶的資訊,就將keeplive timer復位,超時通常設定2小時,若伺服器超過2小時還沒有收到來自客戶的資訊,就傳送探測報文段,若傳送了10個探測報文段(沒75秒傳送乙個)還沒收到響應,則終止連線。

補充:

保活定時器更加的簡單,還記得ftp或者http伺服器都有sesstion time機制麼?因為tcp是面向連線的,所以就會出現只連線不傳送資料的「半開放連線」,伺服器當然要檢測到這種連線並且在某些情況下釋放這種連線,這就是保活定時器的作用。其時限根據伺服器的實現不同而不通。另外要提到的是,當其中一端如果崩潰並重新啟動的情況下,如果收到該端「前生」的保活探察,則要傳送乙個rst資料報文幫助另一端結束連線。

4、時間等待計時器:time_wait timer

在連線終止期使用,當tcp關閉連線時,並不認為這個連線就真正關閉了,在時間等待期間,連線還處於一種中間過度狀態。這樣就可以時重複的fin報文段在到達終點後被丟棄,這個計時器的值通常設定為一格報文段壽命期望值的兩倍。

埠號的作用及常見埠號用途說明

ip協議是由tcp udp arp icmp等一系列子協議組成的。其中,主要用來做傳輸資料使用的是tcp和udp協議。在tcp和udp協議中,都有埠號的概念存在。埠號的作用,主要是區分服務類別和在同一時間進行多個會話。舉例來說,有主機a需要對外提供ftp和www兩種服務,如果沒有埠號存在的 話,這兩...

16位埠號及埠號如何分類情況?

tcp報文段首部格式表明埠號的佔16位。一 埠和埠號 埠 邏輯埠 是指邏輯意義上用於區分服務的埠,通過不同的邏輯埠來區分不同的服務,如tcp ip 協議中的服務埠,比如用於瀏覽網頁服務的80埠,用於ftp服務的21埠等。物理埠 指的是物理存在的埠,如adsl modem 集線器 交換機 路由器上用 ...

URG和PSH的區別及聯絡

tcp協議頭部一共有六個控制位 其中包括urg ack psh rst syn fin.1 緊急urg緊急指標,告訴接受tcp模組緊要指標域指著緊要資料 2 推送psh置1時請求的資料段在接收方得到後就可直接送達應用程式,而不必等到緩衝區滿時才傳送 3 復位rst置1時重新連線。如果接收到rst位,...