TCP協議的了解

2021-10-08 22:20:22 字數 3090 閱讀 9652

tcp(傳輸控制協議):英文(transmisson control protocol),是一種面向鏈結的、可靠的、基於位元組流的傳輸層通訊協議。它處在osi七層模型中的第4層(傳輸層),然而在tcp/ip五層模型中處於第3層(傳輸層)。(osi七層模型和tcp/ip協議棧可以看這篇博文:osi七層模型和tcp/ip五層模型)

tcp協議支援多網路應用的分層協議層析結構,可以為不同但互聯的計算機通訊網路的成對程序之間依靠tcp提供可靠的通訊服務。

它是一種為了在不可靠的網際網路絡上提供可靠的端到端位元組流而專門設計的流機制傳輸協議,區別於ip協議,因為ip協議層提供的是不可靠的包交換。

tcp協議的設計目標是能夠動態地適應網際網路中不同的拓撲結構、寬頻、延遲、資料報大小和其他引數』具有面對各種故障時的健壯性。

應用層向tcp層傳送用於網間傳輸的、用8位位元組表示的資料流,然後tcp把資料流分割槽成適當長度的報文段(通常受該計算機連線的網路的資料鏈路層的最大傳輸單元(mtu)的限制)。之後tcp把結果包傳給ip層,由它來通過網路將包傳送給接收端實體的tcp層。tcp為了保證不發生丟包,就給每個包乙個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的包發回乙個相應的確認(ack);如果傳送端實體在合理的往返時延(rtt)內未收到確認,那麼對應的資料報就被假設為已丟失將會被進行重傳。tcp用乙個校驗和函式來檢驗資料是否有錯誤;在傳送和接收時都要計算校驗和。

在說tcp協議三次握手和四次揮手之前有必要了解下為什麼有三次握手和在三次握手之上要加四次揮手:

為什麼tcp協議需要三次握手:是讓通訊雙發達成自己,對方都可以進行正常全雙工通訊認知的最少「捂手」次數,為了能確保這樣的連線可以成功建立,至少需要保證通訊雙方至少可以可靠地傳送,接受一次資料,也為了防止已失效的連線請求報文突然又傳送到了服務端,因為產生錯誤。

為什麼要四次握手:簡單來說就是要返回給客戶端告知它結束成功與否。因為tcp連線的斷開時是半關閉的

tcp協議三次握手的過程

(1)客戶端傳送syn(seq=x)報文給伺服器端,進入syn_send狀態;

(2)伺服器端收到syn報文,回應乙個syn (seq=y)ack(ack=x+1)報文,進入syn_recv狀態。

(3)客戶端收到伺服器端的syn報文,回應乙個ack(ack=y+1)報文,進入established狀態。

tcp協議四次揮手的過程

(1)某個應用程序首先呼叫close,稱該端執行「主動關閉」(active close)。該端的tcp於是傳送乙個fin分節,表示資料傳送完畢。

(2)接收到這個fin的對端執行 「被動關閉」(passive close),這個fin由tcp確認。伺服器收到連線釋放報文,發出確認報文,ack=1,ack=u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了close-wait(關閉等待)狀態。這時候處於半關閉狀態,即客戶端已經沒有資料要傳送了,但是伺服器若傳送資料,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個close-wait狀態持續的時間。

(3)一段時間後,接收到這個檔案結束符的應用程序將呼叫close關閉它的套接字。這導致它的tcp也傳送乙個fin。向客戶端傳送連線釋放報文,fin=1,ack=u+1,由於在半關閉狀態,伺服器很可能又傳送了一些資料,假定此時的序列號為seq=w。客戶端收到伺服器的連線釋放報文後,必須發出確認,ack=1,ack=w+1,而自己的序列號是seq=u+1。

(4)接收這個最終fin的原傳送端tcp(即執行主動關閉的那一端)確認這個fin。

一、慢啟動:每當建立乙個tcp連線時或乙個tcp連線發生超時重傳後,該連線便進入慢啟動階段。進入慢啟動後,tcp實體將擁塞視窗的大小初始化為乙個報文段,即:cwnd=1。此後,每收到乙個報文段的確認(ack),cwnd值加1,即擁塞視窗按指數增加。當cwnd值超過慢啟動闡值(sshterhs)或發生報文段丟失重傳時,慢啟動階段結束。前者進入擁塞避免階段,後者重新進入慢啟動階段。

二、擁塞避免:在慢啟階段,當cwnd值超過慢啟動闡值(ssthresh)後,慢啟動過程結束,tcp連線進入擁塞避免階段。在擁塞避免階段,每一次傳送的cwnd個報文段被完全確認後,才將cwnd值加1。在此階段,cwnd值線性增加。

三、快速重傳:快速重傳是對超時重傳的改進。當源端收到對同乙個報文的三個重複確認時,就確定乙個報文段已經丟失,因此立刻重傳丟失的報文段,而不必等到重傳定時器(rto)超時。以此減少不必要的等待時間。

四、快速恢復:快速恢復是對丟失恢復機制的改進。在快速重傳之後,不經過慢啟動過程而直接進入擁塞避免階段。每當快速重傳後,置sshtesrh=cwnd/2、ewnd=ssthresh+3。此後,每收到乙個重複確認,將cwnd值加1,直至收到對丟失報文段和其後若干報文段的累積確認後,置cwnd=ssthesrh,進入擁塞避免階段。

tcp是一種面向廣域網的通訊協議,目的是在跨越多個網路通訊時,為兩個通訊端點之間提供一條具有下列特點的通訊方式: [1]

(1)基於流的方式;

(2)面向連線;

(3)可靠通訊方式;

(4)在網路狀況不佳的時候盡量降低系統由於重傳帶來的頻寬開銷;

(5)通訊連線維護是面向通訊的兩個端點的,而不考慮中間網段和節點。

為滿足tcp協議的這些特點,tcp協議做了如下的規定: [10]

①資料分片:在傳送端對使用者資料進行分片,在接收端進行重組,由tcp確定分片的大小並控制分片和重組;

②到達確認:接收端接收到分片資料時,根據分片資料序號向傳送端傳送乙個確認;

③超時重發:傳送方在傳送分片時啟動超時定時器,如果在定時器超時之後沒有收到相應的確認,重發分片;

④滑動視窗:tcp連線每一方的接收緩衝空間大小都固定,接收端只允許另一端傳送接收端緩衝區所能接納的資料,tcp在滑動視窗的基礎上提供流量控制,防止較快主機致使較慢主機的緩衝區溢位;

⑤失序處理:作為ip資料報來傳輸的tcp分片到達時可能會失序,tcp將對收到的資料進行重新排序,將收到的資料以正確的順序交給應用層;

⑥重複處理:作為ip資料報來傳輸的tcp分片會發生重複,tcp的接收端必須丟棄重複的資料;

⑦資料校驗:tcp將保持它首部和資料的檢驗和,這是乙個端到端的檢驗和,目的是檢測資料在傳輸過程中的任何變化。如果收到分片的檢驗和有差錯,tcp將丟棄這個分片,並不確認收到此報文段導致對端超時並重發。

幾天了對tcp協議連外網的了解

自己乙個人摸索真的很難,一開始走錯的就是用外網ip來偵聽,結果總是報錯 在其上下文中無效 網上搜了一大堆,都沒有說到重點,其實真實的就是 用內網的ip偵聽,用控制台或路由器進行埠對映 第二個走錯的地方就是開了多餘的執行緒用來接收資訊,偵聽者第一次非同步偵聽到連線的時候就已經是第二條執行緒,完全不需要...

TCP IP協議 TCP協議

今天算是對了tcp協議有個膚淺的理解了 儘管tcp和udp都是一樣的網路層ip,但是tcp卻和udp實現著不一樣的服務,tcp是乙個面向連線的,可靠地位元組流服務!面向連線是指 兩個使用tcp的程式要建立乙個tcp連線才能交換資料。tcp以以下方式提供可靠性 1 應用程式被分為tcp認為合適傳送的資...

TCP協議 UDP協議

tcp是面向連線的傳輸層的協議,它在程序互動時,會建立乙個鏈結,然後在傳輸資料之後會取消連線,tcp的鏈結是虛連線。每一條tcp連線只能有兩個端點,只能是點對點的資料鏈結,不能進行廣播。tcp提供可靠的按時交付的 無差錯的 不重複的 按序到達的服務 可靠有序 不丟不重 tcp提供全雙工通訊 傳送快取...