計算機網路 TCP協議

2022-06-27 16:33:11 字數 4048 閱讀 6956

tcp協議是面向連線的協議,把連線作為最基本的抽象。每一條tcp連線唯一的被通訊兩端的兩個端點所確定。tcp協議是點對點,而不是點對多點。端點又被稱為套接字,tcp協議規定,ip位址拼接埠號就構成套接字。

1 可靠資料運輸原理:

1、tcp協議傳送兩種資料報,一種資料報用來傳輸資料,一種資料報用來傳送控制資訊。tcp資料都會有乙個包頭包頭中有相應標誌位,標誌位的設定用於表明資料報是用於資料傳送還是用於傳輸控制資訊

2 tcp建立乙個連線需要三個報文段

情況1:防止已失效的請求報文段突然又傳送到了服務端而產生連線的誤判。

客戶端傳送了乙個連線請求報文段a到服務端,但是在某些網路節點上長時間滯留了,而後客戶端又超時重發了乙個連線請求報文段b該服務端,而後 正常建立連線,資料傳輸完畢,並釋放了連線。但是請求報文段a延遲了一段時間後,又到了服務端,這本是乙個早已失效的報文段,但是服務端收到後會誤以為客戶端又發出了一次連線請求,於是向客戶端發出確認報文段,並同意建立連線。那麼問題來了,假如這裡沒有三次握手,這時服務端只要傳送了確認,新的連線就建立了,但由於客戶端沒有發出建立連線的請求,因此不會理會服務端的確認,也不會向服務端傳送資料,而服務端卻認為新的連線已經建立了,並在 一直等待客戶端傳送資料,這樣服務端就會一直等待下去,直到超出保活計數器的設定值,而將客戶端判定為出了問題,才會關閉這個連線。這樣就浪費了很多服務 器的資源。而如果採用三次握手,客戶端就不會向服務端發出確認,服務端由於收不到確認,就知道客戶端沒有要求建立連線,從而不建立該連線。

情況2:防止形成死鎖。

伺服器的syn和ack報文段沒有傳送到客戶端,伺服器認為連線已經建立,但是客戶端不知道伺服器是否已準備好,不知道伺服器建立什麼樣的序列號。客戶端認為連線還未建立成功,將忽略伺服器發來的任何資料分組,只等待連線確認應答分組。而伺服器在發出的分組超時後,重**送同樣的分組。這樣就形成了死鎖。

3tcp釋放乙個連線卻需要四個報文段

第乙個報文段,客戶端向伺服器傳送釋放連線報文段,釋放連線報文段fin置1,此時客戶端序列號為w

第二個報文段,伺服器回覆確認收到客戶端釋放連線報文段的報文段,確認號u+1,之後客戶端不會像伺服器傳送報文段,但是伺服器可以向客戶端傳送報文段,全部傳送完成伺服器的序列號為v,客戶端的確認號為v,但是客戶端序列號為w+1

第三個報文段,伺服器向客戶端傳送釋放連線報文段,伺服器序列號v+1,確認號還是w+1

第四個報文段,客戶端回覆確認收到伺服器的釋放連線報文段的報文段,,客戶端的確認號+1,序列號+1。

伺服器收到第四個報文段,就進入closed狀態;客戶端要等待最長報文段壽命(2msl),才進入到closed狀態。

注:

1、msl是任何ip資料報能夠在網路中存活的最長時間,每個資料報含有乙個稱為跳限(hop limit)的8位欄位,它的最大值是255,即最大為255跳。具有最大跳限的資料報在網路中存在的時間不可能超過msl秒。

2、客戶端在time-wait狀態必須2msl的時間的兩個理由:

可靠地實現tcp全雙工連線的終止:第四個報文段如果丟失,在2msl時間內伺服器會重新傳送第三報文段客戶端接收到之後重新傳送第四報文段。

防止「已失效的連線請求報文段」出現在本連線中,在2msl時間之後,本連線持續的時間內所產生的所有報文段都會網路中消失。因為乙個tcp埠不能同時被開啟多次,如果沒有time-wait狀態,tcp埠關閉之後在time-wait時間內重新開啟,可能會接受原來還沒有消失的報文段,這是不能發生的!!!

4 tcp首段內容:

1、seq:序號。tcp協議是面向位元組流的,在乙個tcp連線中的傳送的位元組流的每乙個位元組都是按照順序編號,seq需要占用4個位元組,所以範圍是[0 4294967296],序號可以重複使用。tcp規定,首部中序號字段值是本報文段所傳送資料的第乙個位元組的序號。序號用於跟蹤該端傳送的資料量。4294967296個位元組(2的32次方),如果不重複利用就是4g的資料量。序號為當前端成功傳送的資料位元組數,確認號為當前端成功接收的資料位元組數,syn標誌位和fin標誌位也各自要占用1個序號。tcp的標準規定,ack報文段可以攜帶資料,但如果不攜帶資料則不消耗序號。a(客戶端)把自己的初始化序列號放在syn資料報中傳送給b(伺服器),b收到後會回發乙個syn+ack資料報,該資料報中b會把收到的來自a的序列號加一后的值傳送回去(確認號),同時資料報中也包含b的初始化序列號,當a收到資料後傳送乙個ack資料報其中包含了b發過來的序列號加一后所得的數值(確認號)。

2、ack: 僅當ack=1時確認欄位才有效,當ack=0時確認字段無效,並且tcp規定,在連線建立後所有的傳送報文段必須要把ack置為1。

3、syn:同步序列號,用來發起乙個連線。當syn=1而ack=0時表明這是乙個請求報文段;若對方同意連線,則響應報文中syn=1,ack=1。

5、syn、ack、fin是標誌位,在屬性flag中,flag占用乙個位元組。含有syn或fin標誌位的並不攜帶有效資料。

注:syn位被啟動時,向對方告知自己(客戶端或者伺服器)的初始序列號以便對方知道如何接收自己傳送過來的資料報。如果是ack位元位被啟動,它表明資料報用於通知接收方我收到了你上次發來的資料。

5 syn flood攻擊

1、傳輸控制塊tcb

用於封裝傳輸資料的資料結構。乙個tcb資料塊包含了資料傳送雙方對應的socket資訊以及擁有裝載資料的緩衝區。

6 為什麼序列號要是隨機數:

初始序列號往往是乙個任意值而不是每次都以1開始,試想一次資料傳送中,一方想對方傳送了一個序列號為1的資料報,由於網路原因該資料報沒有抵達對方,並且因為網路沒有恢復,雙方只好中斷當前連線建立新連線。如果新連線同樣用1作為初始序列號,當連線建立後,如果上次因網路原因沒有抵達的資料報突然抵達了,那麼對方就以為上次傳送的資料報是這次新連線後傳送過來的資料報,為了防止這種異常情況,我們需要將初始序列號設定為隨機數

注:序列號應該不是隨機的,而是由雙方協商的,協商之前最開始的值由tcp運輸層生成。 它可能是上乙個該埠的序列號+1原因是為了避免上次已斷開的連線,還存在網路中延遲到達的tcp報文段的序號與當前連線中等待報文段的序號相同以至於認為是這一次連線的包,發生錯誤。

計算機網路 TCP協議

tcp 傳送的資料單元稱為報文段。乙個 tcp 報文段分為 tcp 首部和 tcp 資料兩部分,整個 tcp 報文段作為 ip 資料報的資料部分封裝在 ip 資料報中,如圖所示 各欄位意義如下 tcp 是面向連線的協議,因此每個 tcp 連線都有三個階段 建立連線 資料傳送和連線釋放。tcp 連線的...

計算機網路 協議

網路檔案服務 在nfs的應用中,本地nfs的客戶端應用可以透明地讀寫位於遠端nfs伺服器上的檔案,就像訪問本地檔案一樣。snmp network management protocol 簡單網路管理協議 能夠使網路管理員提高網路管理效能,及時發現並解決網路問題以及規劃網路的增長 smtp mail ...

計算機網路 計算機網路7層協議

人與人交流需要協議,例如使用同一語言,或者對方能明白的其他肢體語言 人與機器交流也需要協議,例如需要通過滑鼠或者鍵盤輸入,機器給予特定的輸出,例如列印執行某個程式 機器與機器交流更需要協議,計算機網路是由一系列的協議構成的,osi open system interconection 是開放型系統互...