運輸層 TCP的連線管理

2021-07-09 06:26:30 字數 1869 閱讀 2485

我們通過下面的圖來理解tcp的連線:

首先,最初兩端的tcp程序都處於一種closd的狀態,a作為客戶,b作為伺服器,這時候a主動開啟連線,b是被動開啟連線的,b的tcp伺服器先建立傳輸控制塊tcb(transmission control block),準備接受連線的請求,進入到listen狀態,a的tcp程序也建立tcb,然後向b傳送連線請求,首部中的同步位syn=1,同時選擇乙個初始序號seq = x(syn報文段不能攜帶資料,但是要消耗乙個序號),這時候,a就進入到syn-sent。b收到了a傳送的請求之後,需要進行確認,在確認報文段中,syn和ack都為1,確認號是ack = x + 1(下乙個希望收到的序號為x+1),同時也有乙個自己的初始序號y。這時候b就進入到了syn-rcvd狀態,接下來還有第三次的確認,這是很關鍵的,當a收到了b的確認報文之後,需要對b傳送乙個確認報文,ack為1,序號seq = x+1,ack為y+1。這之後,a和b就進入到了estab-lished狀態。通過這樣的三次握手(three - way handshake),連線就正式建立了。

可能有很多人會疑問為什麼需要第三次確認,主要是防止已經失效的連線請求報文段突然傳到了伺服器,產生不應該的連線。例如a發出了乙個連線請求,但是這個請求由於網路問題滯留在了網路中,由於超時計時器的時間到了,所以a進行重新傳送請求,進行了一次連線,然後這次連線結束之後。之前滯留在網路中的那個請求又到達了b,如果沒有第三次確認的話,那麼這次連線就直接建立了,但是實際上a這時候是沒有進行傳送請求建立連線的。

下面我們繼續通過一張圖來了解tcp連線的釋放:

連線建立成功之後,a和b都處於established狀態,a的應用程序先向tcp發出連線釋放報文段。並停止傳送資料,主動關閉tcp連線,a把連線釋放報文段的首部的fin設定為1(fin報文段即使不攜帶資料,它也要消耗乙個序號),然後序號seq = u(u等於前面已經傳送的資料的最後乙個位元組的序號加1),這時候a就進入到了fin-wait-1狀態。b收到了連線釋放請求之後需要做出確認,確認號是ack = u+1,報文段自己也序號有乙個序號,seq = v(v等於b前面傳送過的資料的最後乙個位元組的序號加上1),然後b就進入了close-wait狀態。這時候的tcp是一種半關閉狀態(half-close),a已經沒有資料要傳送給b了,但是如果b要傳送資料給a,a還是要接受資料的。a收到了b的確認,就進入了fin-wait-2狀態。如果b不需要再向a傳送資料了,b就要通知tcp釋放連線了,這時候b需要向a傳送報文段,fin和ack都為1,seq = w(在半關閉狀態可能又傳送了很多資料),ack = u+1。a在收到了b傳送的請求之後,就進去了time-wait狀態,接著還要給b也傳送乙個確認。

這裡可能大家又有乙個疑問了,為什麼a還要等待2msl(maximum segment lifetime)的時候,而不是直接就關閉。這裡有兩個原因:

1、保證最後對b的確認能到達b,如果這個確認丟失了,那麼b會超時重傳這個請求,這個等待時間就為這些操作提供了足夠的時間。如果不等待就直接釋放連線的話,發生丟失的話,就無法收到b通過超時重傳的請求,也就不能重新給b傳送確認。

2、和建立連線相同,為了防止已經失效的連線請求出現。

所以tcp的連線釋放是要進行四次握手。

除了最後a需要等待2msl的時間外,tcp還設定了乙個保活計時器(keepalive timer),主要用於這種情況:如果客戶已經主動建立tcp連線,但是這個時候突然主機出現了故障,不能進行後續操作了,作為伺服器,不能夠就一直等待客戶這邊進行響應。伺服器在每一次收到了客戶的資料之後,就重新設定保活計時器,如果超過了時間,那麼就傳送乙個探測報文段,如果連續傳送10個探測報文段都沒有反應,伺服器就直接關閉這個建立。

Tcp的運輸連線管理

一.基礎小知識 1.tcp的特點 1 tcp是面向連線的運輸層協議 這也就是說,應用程式在使用tcp協議之前,必須先建立tcp連線。在傳送資料完畢後,必須釋放已經建立的tcp連線。2 每一條tcp連線只能有兩個端點,每一條tcp連線只能是點對點的。3 tcp提供可交付的服務 通過tcp連線傳送的資料...

TCP連線管理

tcp是面向連線的協議,因此每個tcp連線都有三個階段 連線建立 資料傳送和連線釋放。tcp連線的管理就是使運輸連線的建立和釋放都能正常進行。在tcp連線建立的過程中,要解決以下三個問題 要使每一方都能確知對方的存在。要允許雙方協商一些引數 如最大視窗值 是否使用視窗擴 項 時間戳選項以及服務質量等...

TCP 連線管理

本節將介紹一條tcp連線是如何建立和拆除的。此處假設客戶機a上面的乙個程序想要和服務 器b上的乙個程序建立一條tcp連線。本文前面介紹的是比較正常的連線和拆除,特殊的會在後面介紹。第一步客戶機a的tcp會向伺服器的tcp傳送乙個不包含應用層資料的資料的tcp報文段。該報文段中首部標誌位s yn被置為...