TCP IP協議詳解 二 建立和關閉連線

2021-07-13 13:37:15 字數 1798 閱讀 3597

看了酷殼**上的《tcp 的那些事兒》系列文章,有一點很受啟發:鍛鍊一下自己是否使用較少的篇幅將tcp協議講解清楚。一般的同學寫博文,可能像攤大餅一樣,篇幅較多並且羅嗦。我以前寫文章時也是這個習慣,所以希望在以後的博文寫作過程中,盡量使用比較短的篇幅來講完想要講的內容。

為了節約你的時間,本片文章主要講解一下內容:

tcp的不同狀態和狀態轉移構成了所謂的tcp狀態機,如下圖所示。我們先在介紹一下其中的幾個術語和狀態

sequence number(之後簡稱為seq)是用來標識從tcp發端到tcp收端傳送的資料字節流,它表示在這個報文段中的第乙個資料位元組的序號。第一條報文的seq為tcp協議自己計算出來的數值isn,以後的報文的seq為ins加上已經傳送資料的長度,比如第一條報文的seq為x,length為100,那麼下一條帶有資料的報文的seq為x+101。

而acknowledge number(之後簡稱為ack)是表示傳送確認的一端所期望收到的下乙個序號,因此ack是上次成功接收報文的seq數值加一。只有ack標誌為1時,ack才有效。需要注意的是,tcp有些報文是不包含資料字節流資訊的,那麼它就不會影響到下乙個報文的seqence number。在上一端的例子中,一端接受到這個seq為x,長度為100的報文之後,需要傳送乙個帶有ack標誌的報文,其ack值為x+101。

tcp建立連線和關閉連線是tcp協議中比較重要的一部分,也是面試經常會涉及的部分,我們在這裡就來詳細講解一下tcp建立連線和關閉連線過程中的每一步報文和其目的。

客戶端首先傳送乙個帶有syn標誌的報文給服務端,seq為isn,就是初始化的sequence number。如圖所示,client傳送的syn報文的seq為x。客戶端傳送這個報文的目的是通知服務端自己希望建立乙個tcp連線。

服務端接受到客戶端傳送的syn報文,需要返回乙個帶有syn和ack標誌的報文,它的seq為伺服器端計算獲得的isn,也就是y。它的ack數值是已經收到報文的seq數值+1,也就是x+1。伺服器端傳送這個報文來通知客戶端自己已經收到客戶端希望建立連線的報文,並且同意建立連線。

客戶端接受到服務端的報文,傳送乙個帶有ack標誌的報文,它的ack數值為y+1。客戶端傳送這個報文是為了通知服務端自己已經收到了它的報文,可以進行資料傳輸了。客戶端傳送完這個報文之後,預設tcp連線已經建立,就可以直接開始傳送資料報文了。

服務端接受到客戶端傳送的ack報文之後,就可以直接傳送資料啦。

由於tcp是全雙工的協議,也就是說兩端可以同時進行資料傳輸,所以,tcp連線的關閉在兩端都關閉之後才正式關閉。當一端已經沒有可以傳輸的資料時,就會傳送帶有fin標記的報文,向另一端表示自己不會在傳輸資料啦。接受到另一端的ack報文之後,這一端就不會在傳送資料報文(也就是tcp負載)了。但是ack等控制資訊報文還是會傳送的。也就是說,兩端的fin報文不一定是連在一起的,服務端可能很早就傳送fin報文了,但是客戶端可以在服務端傳送fin報文之後繼續傳送資料報文,然後在傳送fin報文。

如圖所示,client先傳送帶有fin標誌的報文給服務端,表面自己這端已經無資料可以傳送了,希望關閉tcp連線。報文的seq為x+2,ack為y+1。

服務端接受到這個報文之後傳送帶有ack標誌的報文,其ack為(x+2)+1,也就是x+3。

服務端無資料傳送之後,也向客戶端傳送帶有fin標誌的報文,seq為y+1。

客戶端接受到該報文之後,傳送乙個帶有ack標誌的報文,其ack為y+2。

TCP IP協議 連線建立和終止

tcp是乙個面向連線的協議,所以在連線雙方傳送資料之前,都需要首先建立一條連線。client連線server 當client端呼叫socket函式呼叫時,相當於client端產生了乙個處於closed狀態的套接字。1 第一次握手 client端又呼叫connect函式呼叫,系統為client隨機分配...

TCP IP協議以及建立和斷開

tcp ip transmission control protocol internet protocol 即傳輸控制協議 網間協議,定義了主機如何連入網際網路及資料如何再它們之間傳輸的標準 應用層 tftp,http,snmp,ftp,smtp,dns,telnet 等等 傳輸層 tcp,udp...

TCP IP協議詳解

tcp ip協議是乙個比較複雜的協議集,有很多專業書籍介紹。在此,我僅介紹其與程式設計密切相關的部分 乙太網上tcp ip協議的分層結構及其報文格式。我們知道tcp ip協議採用分層結構,其分層模型及協議如下表 傳 輸 層 transport tcp udp 網 間 網層 internet ip a...