Tcp協議簡讀

2021-08-07 10:06:51 字數 2623 閱讀 7582

tcp提供一種面向連線的,可靠的位元組流服務。面向連線意味著兩個使用tcp的應用(通常是乙個客戶和乙個伺服器)在彼此交換資料之前必須先建立乙個tcp連線。這個過程跟打**相似,先撥號振鈴,等待對方摘機應答,然後才說是誰。在乙個tcp連線中,僅有兩方進行彼此通訊。

1. 應用資料被分割成tcp認為最適合傳送的資料塊。這和udp完全不同,應用程式產生的資料報長度保持不變。

由tcp傳遞給ip的資訊單位稱為報文段或段

(segment)。

2. 當tcp發出乙個段後,它啟動乙個

定時器,等待目的端確認收到這個報文段。如果不能及時收到乙個確認,將重發這個報文段(超時及重傳策略)

3. 當tcp收到發自tcp連線另一端的資料,它將

傳送乙個確認

。這個確認不是立即傳送,通常將推遲幾分之一秒。

4. tcp將保持它首部和資料的檢驗和。這是乙個

端到端的檢驗和

,目的是檢測資料在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,tcp將丟棄這個報文段和不確認收到此報文段(

希望發端超時並重發)

5. 既然

tcp報文段作為ip資料報來傳輸

,而ip資料報的到達可能會失序,因此tcp報文段的到達也可能會失序。如果必要,tcp將收到的資料進行重新排序,將收到的資料以正確的順序交給應用層。

6. 既然ip資料報會重複,tcp的接收端必須

丟棄重複

的資料。

7. tcp還能提供

流量控制

。tcp連線的每一方都有固定大小的緩衝空間。tcp的接收端只允許另一端傳送接收端緩衝區所能接納的資料。這將防止較快主機致使較慢主機的緩衝區溢位。tcp的流量控制由連線的每一端通過宣告的視窗大小來提供,

視窗大小為位元組數

,起始於確認序號字段指明的值,這個值時接收端正期望接收的位元組。視窗大小是乙個16bit欄位,因而視窗大小最大為65535位元組。

兩個應用程式通過tcp連線交換8bit位元組構成的位元組流,tcp不在位元組流中插入記錄識別符號。另外,tcp對位元組流的內容不作任何解釋,tcp不知道傳輸的資料字節流是二進位制資料,haishi ascll字元,ebcdic字元或者其他型別資料,

對位元組流的解釋由tcp連線雙方的

應用層解釋

。 tcp將使用者資料打包成報文段;它傳送資料後啟動乙個定時器;另一端對收到的資料進行確認,對失序的資料重新排序,丟棄重複資料;tcp提供端到端的流量控制,並計算和驗證乙個強制性的端到端檢驗和。

源埠和目的埠:各佔 2 位元組.埠是傳輸層與應用層的服務介面.傳輸層的復用和分用功能都要通過埠才能實現。

序號:佔 4 位元組.用來標識從tcp發端向tcp收端傳送的資料字節流,它表示在這個報文段中的第乙個資料位元組。如果將位元組流看作在兩個應用程式的單向流動,則tcp用序號對每個位元組進行計數。tcp 連線中傳送的資料流中的每乙個位元組都編上乙個序號.序號欄位的值則指的是本報文段所傳送的資料的第乙個位元組的序號。

確認號:佔 4 位元組,是期望收到對方的下乙個報文段的資料的第乙個位元組的序號。

資料偏移/首部長度:佔 4 位,它指出 tcp 報文段的資料起始處距離 tcp 報文段的起始處有多遠.「資料偏移」的單位是 32 位字(以 4 位元組為計算單位)。

保留:佔 6 位,保留為今後使用,但目前應置為 0。

緊急urg:當 urg=1 時,表明緊急指標字段有效.它告訴系統此報文段中有緊急資料,應盡快傳送(相當於高優先順序的資料)。

確認ack:只有當 ack=1 時確認號字段才有效.當 ack=0 時,確認號無效。

psh(push):接收 tcp 收到 psh = 1 的報文段,就盡快地交付接收應用程序,而不再等到整個快取都填滿了後再向上交付。

rst (reset):  當 rst=1 時,表明 tcp 連線中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連線,然後再重新建立運輸連線。

同步 syn:同步 syn = 1 表示這是乙個連線請求或連線接受報文。

終止 fin:用來釋放乙個連線.fin=1 表明此報文段的傳送端的資料已傳送完畢,並要求釋放運輸連線。

檢驗和:佔 2 位元組.檢驗和字段檢驗的範圍包括首部和資料這兩部分.在計算檢驗和時,要在 tcp 報文段的前面加上 12 位元組的偽首部。

緊急指標:佔 16 位,指出在本報文段中緊急資料共有多少個位元組(緊急資料放在本報文段資料的最前面)。

選項:長度可變.tcp 最初只規定了一種選項,即最大報文段長度 mss.mss 告訴對方 tcp:「我的快取所能接收的報文段的資料字段的最大長度是 mss 個位元組.」 [mss(maximum segment size)是 tcp 報文段中的資料字段的最大長度.資料字段加上 tcp 首部才等於整個的 tcp 報文段]。

填充:這是為了使整個首部長度是 4 位元組的整數倍。

其他選項:

視窗擴大:佔 3 位元組,其中有乙個位元組表示移位值 s.新的視窗值等於tcp 首部中的視窗位數增大到(16 + s),相當於把視窗值向左移動 s 位後獲得實際的視窗大小

時間戳:佔10 位元組,其中最主要的字段時間戳值字段(4位元組)和時間戳回送回答字段(4位元組)

選擇確認:接收方收到了和前面的位元組流不連續的兩2位元組.如果這些位元組的序號都在接收視窗之內,那麼接收方就先收下這些資料,但要把這些資訊準確地告訴傳送方,使傳送方不要再重**送這些已收到的資料。

tcp 傳送的資料單位協議是 tcp 報文段(segment)

傳輸層

DNS使用的是TCP協議還是UDP協議簡析

dns使用的是tcp協議還是udp協議簡析 dns同時占用udp和tcp埠53是公認的,這種單個應用協議同時使用兩種傳輸協議的情況在tcp ip棧也算是個另類。但很少有人知道dns分別在什麼情況下使用這兩種協議。先簡單介紹下tcp與udp。tcp是一種面向連線的協議,提供可靠的資料傳輸,一般服務質量...

Autosar SPI規範簡讀

1.spi configtype結構體 void spi init const spi configtype configptr 1.初始化所有configptr相關暫存器 2.定義configptr相關的預設值 3.設定spi狀態為 idle job sequence的狀態設為 ok 4.對於le...

opencv examples簡讀介紹

具體的example如下 cpp資料夾中 3calibration.cpp 同時標定三颱水平放置的相機。bagofwords classification.cpp 使用影象檢測實現簡易的影象搜尋功能。bgfg gmg.cpp 演示gmg 背景檢測演算法的使用方式。bgfg segm.cpp 演示高斯...