cp是面向連線的運輸層協議,它提供可靠交付的、全雙工的、面向位元組流的點對點服務。http協議便是基於tcp協議實現的。
(雖然作為應用層協議,http協議並沒有明確要求必須使用tcp協議作為運輸層協議,但是因為http協議對可靠性的的要求,預設http是基於tcp協議的。若是使用udp這種不可靠的、盡最大努力交付的運輸層協議來實現http的話,那麼tcp協議的流量控制、可靠性保障機制等等功能就必須全部放到應用層來實現)而
(埠代表主機上的乙個應用程序、而套接字則是ip位址與埠號的合體,可以在網路範圍內唯一確定乙個應用程序)
tcp協議的可靠傳輸是通過滑動視窗的方法實現的;擁塞控制則有著慢開始和擁塞避免、快重傳和快恢復、red隨機早期檢測幾種辦法。
cp報文段的首部分為固定部分和選項部分,固定部分長20byte,而選項部分長度可變。(若整個首部長度不是4byte的整數倍的話,則需要用填充位來填充)在固定首部中,與本文密切相關的是以下幾項:
seq(序號):tcp連線位元組流中每乙個位元組都會有乙個編號,而本字段的值指的是本報文段所傳送資料部分第乙個位元組的序號。
ack(確認號):表示期望收到的下乙個報文段資料部分的第乙個位元組的編號,編號為ack-1及以前的位元組已經收到。
syn:當本字段為1時,表示這是乙個連線請求或者連線接受報文。
ack:僅當本字段為1時,確認號才有效。
fin:用來釋放乙個連線。當本字段為1時,表示此報文段的傳送端資料已傳送完畢,要求釋放運輸連線。
運輸連線具有三個階段:連線建立、資料傳送以及連線釋放。運輸連線管理就是對連線建立以及連線釋放過程的管控,使得其能正常執行,達到這些目的:使通訊雙方能夠確知對方的存在、可以允許通訊雙方協商一些引數(最大報文段長度、最大視窗大小等等)、能夠對運輸實體資源進行分配(快取大小等)。tcp連線的建立採用客戶-伺服器模式:主動發起連線建立的應用程序叫做客戶,被動等待連線建立的應用程序叫做伺服器。
連線建立階段:
第一次握手:客戶端的應用程序主動開啟,並向客戶端發出請求報文段。其首部中:syn=1,seq=x。
第二次握手:伺服器應用程序被動開啟。若同意客戶端的請求,則發回確認報文,其首部中:syn=1,ack=1,ack=x+1,seq=y。
第三次握手:客戶端收到確認報文之後,通知上層應用程序連線已建立,並向伺服器發出確認報文,其首部:ack=1,ack=y+1。當伺服器收到客戶端的確認報文之後,也通知其上層應用程序連線已建立。
在這個過程中,通訊雙方的狀態如下圖,其中closed:關閉狀態、listen:收聽狀態、syn-sent:同步已傳送、syn-rcvd:同步收到、estab-lished:連線已建立
連線釋放階段:
第一次揮手:資料傳輸結束以後,客戶端的應用程序發出連線釋放報文段,並停止傳送資料,其首部:fin=1,seq=u。
第二次揮手:伺服器端收到連線釋放報文段之後,發出確認報文,其首部:ack=u+1,seq=v。此時本次連線就進入了半關閉狀態,客戶端不再向伺服器傳送資料。而伺服器端仍會繼續傳送。
第三次揮手:若伺服器已經沒有要向客戶端傳送的資料,其應用程序就通知伺服器釋放tcp連線。這個階段伺服器所發出的最後乙個報文的首部應為:fin=1,ack=1,seq=w,ack=u+1。
第四次揮手:客戶端收到連線釋放報文段之後,必須發出確認:ack=1,seq=u+1,ack=w+1。 再經過2msl(最長報文端壽命)後,本次tcp連線真正結束,通訊雙方完成了他們的告別。
在這個過程中,通訊雙方的狀態如下圖,其中:estab-lished:連線建立狀態、fin-wait-1:終止等待1狀態、fin-wait-2:終止等待2狀態、close-wait:關閉等待狀態、last-ack:最後確認狀態、time-wait:時間等待狀態、closed:關閉狀態
TCP建立連線與釋放連線
tcp建立連線與釋放連線 tcp建立連線與釋放連線 最近複習準備 計算機網路 考試,感覺tcp協議建立連線與釋放連線這兩個過程比較重要,所以把自己理解的部分寫下來。1.建立連線 三次握手 1 客戶端傳送乙個syn包給伺服器,然後等待應答。2 伺服器端回應給客戶端乙個ack 1 syn 1的tcp資料...
TCP建立連線與釋放連線
tcp建立連線與釋放連線 最近複習準備 計算機網路 考試,感覺tcp協議建立連線與釋放連線這兩個過程比較重要,所以把自己理解的部分寫下來。1.建立連線 三次握手 1 客戶端傳送乙個syn包給伺服器,然後等待應答。2 伺服器端回應給客戶端乙個ack 1 syn 1的tcp資料段。3 客戶必須再次回應伺...
TCP建立連線與釋放連線
tcp建立連線與釋放連線 最近複習準備 計算機網路 考試,感覺tcp協議建立連線與釋放連線這兩個過程比較重要,所以把自己理解的部分寫下來。1.建立連線 三次握手 1 客戶端傳送乙個syn包給伺服器,然後等待應答。2 伺服器端回應給客戶端乙個ack 1 syn 1的tcp資料段。3 客戶必須再次回應伺...