計算機網路 5 10 TCP運輸連線管理

2022-09-20 13:51:08 字數 2617 閱讀 6323

tcp是面向連線的通訊,運輸連線是用來傳送tcp報文的,tcp運輸連線的建立和釋放是每一次面向連線的通訊中必不可少的過程。因此,運輸連線有三個階段,即:建立連線,資料傳送,連線釋放,運輸連線的管理就是使運輸連線和釋放都能正常的進行。在tcp連線中主要解決以下問題:

tcp連線的建立採用客戶伺服器方式。主動發起連線建立的應用程序叫做客戶(client),而被動等待連線的應用程序叫做伺服器(server)

tcp建立連線的過程叫握手,握手需要客戶和伺服器之間交換三個tcp報文段。如下圖5-28。

假定主機a執行的是tcp客戶程式,而b執行的是tcp服務程式,最初兩端的連線處於close(關閉)狀態,在本例中a主動開啟連線,b被動開啟連線

tcp握手過程描述:

一開始,b的tcp伺服器程序先建立傳輸控制塊tcb(transmission control block),準備接受客戶程序的連線請求,然後伺服器就處於listen(監聽)狀態,等待客戶的連線請求,如果有,就做出響應。

a的tcp客戶程序也是首先創立傳輸控制模組tcb,然後在建立連線的時候,向伺服器b傳送連線請求報文段,這時候首部中的同步位syn=1,同時選擇乙個初始序號seq=x。tcp規定:syn報文段(syn=1的報文段)不能攜帶資料,但是要消耗掉乙個序列號,這時候,tcp客戶端程序進入syn-sent同步已傳送狀態。

b收到連線請求的報文段,如果同意建立連線,則向a傳送確認,在確認報文段syn位=1,ack位為1,確認號是ack=x+1,同時也為自己選擇乙個初始序號seq=y,注意,這個報文段也不能攜帶資料,但是同樣要消耗乙個序列號。這時候tcp伺服器程序處於syn-rcvd(同步收到)狀態。

tcp客戶程序收到b的確認後,還要給b給出確認,確認報文段的ack=1確認號ack=y+1,而自己的序號seq=x+1。tcp的標準規定,ack報文段可以攜帶資料,但如果不攜帶資料則不消耗序號,這種情況下,下乙個資料報文段的序號仍然是seq=x+1,這時候,tcp連線已經建立連線,客戶端a進入established(已建立連線狀態),

b收到a的確認報文後,也進入established狀態。

上面給出的連線過程叫做三次報文握手,注意,在圖中,當b傳送給a的報文段,也可以拆分成兩個報文段,可以先傳送確認報文段(ack=1,ack=x+1),然後再傳送乙個同步報文段(syn=1,seq=y),這樣的過程就變成了四報文握手,但效果是一樣的。

為什麼a最後還要傳送一次確認呢?這主要是為了防止已失效的連線請求報文突然又傳送到b,因而產生錯誤。

所謂「已失效的連線請求報文段」是這樣產生的。考慮一種正常情況,a 發出連線請求,但因連線請求報文丟失而未收到確認。於是 a 再重傳一次連線請求。後來收到了確認,建立了連線。資料傳輸完畢後,就釋放了連線。a 共傳送了兩個連線請求報文段,其中第乙個丟失,第二個到達了 b,沒有「已失效的連線請求報文段」。

現假定出現一種異常情況,即 a 發出的第乙個連線請求報文段並沒有丟失,而是在某些網路結點長時間滯留了,以致延誤到連線釋放以後的某個時間才到達 b。本來這是乙個早已失效的報文段。但 b 收到此失效的連線請求報文段後,就誤認為是a又發出一次新的連線請求。於是就向 a 發出確認報文段,同意建立連線。假定不採用報文握手,那麼只要 b發出確認,新的連線就建立了。

由於現在 a 並沒有發出建立連線的請求,因此不會理睬 b 的確認,也不會向 b 傳送資料。但 b 卻以為新的運輸連線已經建立了,並一直等待 a 發來資料。b 的許多資源就這樣白白浪費了。

採用三報文握手的辦法,可以防止上述現象的發生。例如在剛才的異常情況下,a 不會

向b的確認發出確認。b 由於收不到確認,就知道a並沒有要求建立連線。

tcp連線釋放比較複雜,我們仍然結合雙方狀態的改變來闡明連線釋放的過程。

資料傳輸結束後,通訊的雙方都可釋放連線。現在 a 和 b 都處於 established 狀態(圖5-29)。a 的應用程序先向其tcp發出連線釋放報文段,並停止再傳送資料,主動關閉tcp 連線。a 把連線釋放報文段首部的終止控制位 fin 置 1,其序號 seq = u,它等於前面已傳送過的資料的最後乙個位元組的序號加 1。這時 a 進入 fin-wait-1(終止等待 1)狀態,等待 b 的確認。請注意,tcp 規定,fin 報文段即使不攜帶資料,它也消耗掉乙個序號。

為了更清晰地看出 tcp 連線的各種狀態之間的關係,圖 5-30 給出了 tcp 的有限狀態機。圖中每乙個方框即 tcp 可能具有的狀態。每個方框中的大寫英文本串是 tcp 標準所使用的 tcp 連線狀態名。狀態之間的箭頭表示可能發生的狀態變遷。箭頭旁邊的字,表明引起這種變遷的原因,或表明發生狀態變遷後又出現什麼動作。請注意圖中有三種不同的箭頭。粗實線箭頭表示對客戶程序的正常變遷。粗虛線箭頭表示對伺服器程序的正常變遷。另一種細線箭頭表示異常變遷。

計算機網路(5 10)運輸層 選擇確認SACK

問題 若收到的報文段無差錯,只是未按序號,中間還缺少一些序號的資料,那麼能否設法只傳送缺少的資料而不重傳已經正確到達接收方的資料?答案是可以的。選擇確認sack selective ack 就是一種可行的處理方法。tcp的接收方在接收對方傳送過來的資料字節流的序號不連續,結果就形成了一些不連續的位元...

計算機網路 二 TCP連線

客戶端傳送乙個syn給服務端,syn是由乙個演算法計算出來的,同時把syn標誌位置為1 服務端接收之後 傳送ack,ack為客戶端傳送的syn 1,並且傳送自己的syn,並把syn和ack標誌位置為1。跟上面的一樣,ack也是用syn 1表示 這個要從初始化socket和確定序列號和視窗大小 避免歷...

計算機網路 運輸層

問題 一 運輸層為相互通訊的的應用程序提供邏輯通訊 問題二 埠和套接字的意義 問題三 理解udp和tcp協議 問題四 在不可靠的網路上實現可靠傳輸的工作原理 問題五 tcp的滑動視窗 流量控制 擁塞控制和連線管理 1 埠 應用層所有的應用程序都可以通過運輸層傳送到ip層,這就是復用 運輸層從ip層收...