linux URG PSH 調研tcp定時器

2021-08-02 19:30:00 字數 2646 閱讀 3970

一、urg-&-psh

1、緊急標誌urg(u):佔1位,當urg=1時,表示緊急指標字段有效。通知傳送方本資料報文段中含有緊急資料,需要馬上傳輸,這時傳送方不會等到緩衝區滿再傳送,而是直接優先將該報文段傳送出去。

2、推送標誌psh(p):佔1位,psh=1時,表示當前報文段需要請求推送(push)操作,即接收方tcp收到推送標誌位為1的報文時 ,就立即提交給接收的應用程序,而不必等到整個快取都填滿後再向上提交。

總結:urg=1時,緊急資料(資料從序號開始到緊急指標指向位元組)不經過緩衝區直接交給上層程式,而報文段後面的普通資料還需要進入接收方緩衝區;

psh=1,希望將本報文段及傳送方緩衝區的資料一塊交付給應用程序;

3.urg和psh的區別:

緊急urg將緊急報文字段插入到普通報文字段的前面,而推送psh是利用緊急資料重新直接建立乙個報文,並立即傳送出去;

urg=1,表示緊急資料(資料從序號開始到緊急指標指向位元組)不經過緩衝區直接交付應用程序,psh=1表示盡快推送,將資料先交給緩衝區,不等待緩衝區填滿(預設tcp/ip是將資料快取到一定上限,才交由上層)就交給上層程式;

urg=1交給上層程序的只有緊急資料,psh=1交給上層程式的是緊急資料和之前接收方緩衝區排好序的資料;

二、tcp定時器

tcp 是提供可靠的傳輸層,它使用的方法之一就是確認從另一端收到的資料。但是資料和確認都可能會丟失。tcp 通過在傳送時設定乙個定時器來解決這個問題。如果當定時器溢位時還沒收到確認,它就會重傳該資料。關鍵在於超時和重傳策略,即怎樣決定超時的時間間隔和如何確定重傳的頻率。

對於每個連線,tcp 管理著四個不同的定時器:重傳定時器、堅持定時器、保活定時器 以及 2msl 定時器。

1、重傳定時器

為了防止丟失資料報文段或確認報文段,當 tcp 傳送報文段時,啟動了特定報文段的重傳計時器,若在計時器超時之前收到對報文段的確認,則撤銷計時器。若收到特定報文段的確認之前計時器已經超時,則重傳該報文,並把計時器復位。這裡最重要的是超時的時間計算,有關該時間的請查閱具體的演算法,這裡不再進行記錄。

2、堅持定時器

堅持定時器主要是解決零視窗大小通知可能導致的死鎖問題。剛開始接收端向傳送端傳送了乙個零視窗報文段。在不久之後,如果接收端的快取區有一定的空間可以接收資料,此時接收端就會向傳送端傳送了乙個非零視窗大小的報文段(即視窗更新),但是這個非零視窗大小的報文段在傳輸過程中丟失,導致傳送端無法接收到該非零視窗大小的報文段。因此,傳送端就會一直處於等待非零視窗大小的報文端通知,由於接收端已經傳送了非零視窗大小的報文段,而且並不知道該報文段在傳輸過程中丟失,則接收端會一直處於等待接收資料狀態,如果沒有任何措施的話,這個死鎖的局面會一直延續下去。

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

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

堅持定時器的原理:當 tcp 伺服器收到了客戶端的 0 滑動視窗報文時,啟動乙個定時器來計時,並在定時器溢位的時向客戶端查詢視窗是否已經增大,如果得到非零的視窗就重新開始傳送資料,如果得到零視窗就再開乙個新的定時器準備下一次查詢。

3、保活定時器

保活定時器是為了應對 tcp 連線雙方出現長時間的沒有資料傳輸的情況。如果客戶端與伺服器建立了 tcp 連線之後,客戶端由於某種原因導致主機故障,則伺服器就不能收到來自客戶端的資料,而伺服器不可能一直處於等待狀態,保活定時器就是用來解決這個問題的。伺服器每收到一次客戶端的資料,就重新設定保活定時器,通常為 2 小時,如果 2 小時沒有收到客戶端的資料,服務端就傳送乙個探測報文,以後每隔75秒傳送一次,如果連續傳送10次探測報文段後仍沒有收到客戶端的響應,伺服器就認為客戶端出現了故障,就可以終止這個連線。

4、2msl 定時器

2msl 定時器主要是解決以下兩種情況:

1)、time_wait 確保有足夠的時間讓對端收到了ack,如果被動關閉的那方沒有收到 ack,就會觸發被動端重發 fin。因為最後一次確認應答 ack 報文段很有可能丟失,因而使被動關閉方處於在list_ack 狀態的,此時被動關閉方會重發這個 fin+ack 報文段,在這等待的 2msl 時間內主動關閉方重新收到這個被動關閉方重發的 fin+ack 報文段,因此,主動關閉方會重新傳送確認應答資訊,從而重新啟動 2msl 計時器,直到通訊雙方都進入 closed 狀態。如果主動關閉方在 time_wait 狀態不等待一段時間就直接釋放連線並進入 closed 狀態,那麼主動關閉方無法收到來自被動關閉方重發的 fin+ack 報文段,也就不會再傳送一次確認 ack 報文段,因此被動關閉方就無法正常進入closed 狀態。

有足夠的時間讓這個連線不會跟後面的連線混在一起。防止已失效的請求連線出現在本連線中。在連線處於 2msl 等待時,任何遲到的報文段將被丟棄,因為處於 2msl等待的、由該插口(插口是ip和埠對的意思,socket)定義的連線在這段時間內將不能被再用,這樣就可以使下乙個新的連線中不會出現這種舊的連線之前延遲的報文段。

TC課程筆記

需求管理 測試計畫 用例計畫 缺陷跟蹤 測試報告 不使用測試管理軟體遇到的問題 測試過程難以進行管理 測試用例缺乏規範性 缺陷管理力度不足 管理人員不能及時了解測試進度 自動測試無法實現 手工統計資料 製作報表 測試管理工具的好處 支援並規範軟體測試全過程 將測試需求分析 測試計畫 測試用例設計 測...

TC做題筆記

給出n個元素取值的max min,把這n個元素分割成兩個集合,求如何分割使兩個累和差的最大值最小 n le 50,min,max le 10000 把題意化歸成式子,就是 求 max a sum b sum,b sum a sum 有乙個矩陣,矩陣中有num個帽子,有k個硬幣塞在帽子下。小q有x次機...

TC(測試控制方法)

引言 tc 測試控制方法 是指以測試為核心控制軟體專案開發過程的方法,它包括完整的規範tc 系統及其相關管理理論tc 理論。主要完成軟體開發中開發流程的管控 軟體測試 開發績效評價 持續改進管控質量等功能。我們先來看一看軟體專案開發中經常遇到的問題。各模組一拖再拖,整個專案無休止延期,開發進度無法得...