(參考文獻)tcp/ip詳解,卷1:協議
tcp的服務
儘管tcp和udp都使用相同的網路層(ip層),tcp卻向應用層提供與udp完全不同的服務。tcp提供一種面向連線的、可靠的位元組流服務。
面向連線意味著,兩個使用tcp的應用(通常是乙個客戶和乙個伺服器)在彼此交換資料之前必須先建立乙個tcp連線。這一過程與打**很相似,先撥號振鈴,等待對方摘機說「喂」,然後才說明是誰。tcp通訊,本質上是兩個執行緒之間的通訊(客戶端與服務端);而tcp連線的建立,本質上是可以說是服務端和客戶端通過交換資訊,各端都建立了乙個程序擁有完整地理資訊的程序或者執行緒(即這個執行緒或程序知道目的端ip位址和目的端埠號)。
在乙個tcp連線中,僅有兩方進行彼此通訊。tcp通過以下方式來提供可靠性:
tcp對位元組流的內容不做任何解釋,他只管將報文段接收和排序然後交給應用層。tcp不知道傳輸的資料字節流是二進位制資料還是ascii字元,對位元組流的解釋有tcp連線雙方的應用層解釋。
tcp的首部
tcp資料被封裝在乙個ip資料報中,如下:
如下,是tcp首部的資料格式,如果筆記選項字段,他通常是20個位元組
tcp首部中有6個標誌位元。他們中的多個可同時被設定為1 。
urg 緊急指標有效
ack 確認序號有效
psh 接收方應該盡快將這個報文交給應用層
rst 重建連線
syn 同步序號用來發起乙個連線
fin 發端完成傳送任務
tcp建立連線的三次握手:
1)請求端(通常稱為客戶)傳送乙個syn段來指明客戶打算連線的伺服器的埠,以及初始序號(isn,在這裡假設為1415531521)。這個syn段為報文段1 。
2)伺服器發回包含伺服器的初始序號的syn報文段(報文段2)作為應答,同時將確認序號設定為客戶的isn加1以對客戶的syn報文段進行確認。乙個syn將占用乙個序號。
3)客戶必須將確認序號設定為伺服器的isn加1以對伺服器的syn報文段進行確認(報文段3)。
這三個報文段完成連線的建立。這個過程也稱為3次握手。
傳送第乙個syn的一端將執行手動開啟。接收到這個syn並發回下乙個syn的另一端執行被動開啟。
當一端為建立連線而傳送它的syn時,他為連線選擇乙個初始序號(isn)。isn的選擇隨時間變化,因此每個連線都具有不同的isn。rfc 793[postel 1981c]指出isn可看做是乙個32位元的計數器,每隔4ms加1.
tcp建立連線終止的四次握手:
建立乙個連線需要3次握手,而終止乙個連線則需要4次握手。這由於tcp的半關閉造成的。tcp連線是全雙工的(即兩個方向上可以同時傳輸資料),因此,每個方向必須單獨的進行關閉。原則就是:當一方完成它的資料傳送任務後,就會傳送乙個fin來終止這個方向的連線。傳送fin通常是應用層進行關閉的結果。
收到乙個fin只意味著在在這個方向上沒有資料的流動。乙個tcp連線收到乙個fin後任然能傳送資料。而這對於利用半關閉的應用來說是可能的儘管應用程式能夠利用這種半關閉特性,但在實際應用中只有很少的tcp應用程式這麼做。
首先進行關閉的一方(及傳送第乙個fin)將執行主動關閉,而另一方(收到這個fin)執行被動關閉。通常一方完成主動關閉而另一方完成被動關閉。
當伺服器收到這個fin,他發回乙個ack,確認序號為收到的序號加1 。和syn一樣,乙個fin將占用乙個序號。同時tcp伺服器還向應用程式(客戶)傳輸乙個結束符。接著這個客戶程式就關閉他的tcp連線,導致他的tcp端傳送乙個fin,客戶必須發回乙個確認,並將確認序號設定為收到序號加1 。
連線通常是由客戶端發起的,這樣第乙個syn從客戶傳到伺服器。每一段都能主動關閉這個連線(即首先傳送fin)。然而,一般有客戶端決定何時終止連線,因為客戶程序通常由使用者互動控制,使用者會鍵入如「quit」一樣的命令來終止程序。
tcp的半關閉
tcp提供了連線的一端在結束他的傳送後還能結束來自另一端資料的能力。這就是所謂的半關閉(只有很少的應用會使用到半關閉)。
tcp的半開啟連線
如果一方已經關閉或異常終止連線而另一方卻還不知道,我們將這種tcp連線成為半開啟的。任何一端的主機異常都可能產生這種情況。只要不在半開啟連線上傳輸資料任然處於連線狀態的一方就不會堅持到另一方已經出現異常。
半開啟連線的另乙個常見原因是當客戶主機突然掉電而不是正常的結束客戶應用程式後在關機。
TCP 傳輸控制協議
推薦 tcp ip 簡直是程式設計師的福音 tcp 協議是 面向連線的,可靠的,流傳輸,協議。流 是指 不間斷 的資料結構,可以想象成排水管道中的水流。當應用程式採用 tcp 傳送訊息的時候,雖然可以保證傳送的順序,但是還是猶如沒有任何間隔的資料流,傳送給接收端。可以這麼理解 在傳送端,應用程式傳送...
TCP傳輸控制協議
tcp是網際網路中的傳輸層協議,使用三次握手協議建立連線。當主動方發出syn連線請求後,等待對方回答syn ack 1 並最終對對方的 syn 執行 ack 確認。這種建立連線的方法可以防止產生錯誤的連線,tcp使用的流量控制協議是可變大小的滑動視窗協議 tcp三次握手的過程如下 客戶端傳送syn ...
tcp傳輸控制協議
tcp服務 tcp是面向連線的,提供可靠的服務,對資料有校驗機制。tcp的首部 其格式如下 如上tcp的報文是tcp的首部和tcp的資料。tcp的首部是有源埠和目的埠,這個值和ip首部的源ip和目的ip構成了tcp唯一確定的乙個連線。序號是用來標示從tcp發端向tcp收端傳送的資料位元組。當建立乙個...