1.概述
tcp提供了一種可靠的面向連線的位元組流運輸層服務。
tcp將使用者資料打包成報文段,它傳送後啟動乙個定時器,另一端收到的資料進行確認,對失序的資料重新排序,丟棄重複資料,tcp提供端到端的流量控制,並計算和驗證乙個強制性的端到端的檢驗和。
許多流行的應用程式如:telnet, rlogin, ftp,smtp 都使用tcp。
tcp面向流的概念
2.tcp首部
tcp報文段的首部格式如圖所示:
各自段的含義:
首部長度:最大60位元組
保留:6bit, 均為0.
緊急urg:當urg=1時,表示報文段中有緊急資料,應盡快傳送,而不要按照原來的排隊順序傳送,與「緊急指標」字段配合使用。
確認位元ack:只有當ack = 1時確認號才有效。
推送位元psh:當傳送端psh=1時,並立即建立乙個報文段傳送出去,接收tcp收到psh為1的報文段後,不在等到整個快取都填滿後在向上交付,而是盡快的交付給應用程序。
復位位元(rst):復位位元也稱重建位元或重置位元。當rst=1時,表明tcp連線中出現嚴重差錯,必須釋放連線,然後在重新建立連線。
同步位元syn:在建立連線是用來同步序號。syn=1, ack=0表示乙個連線請求報文段。syn=1,ack=1表示同意建立連線。
終止位元fin:用來釋放乙個連線。fin=1時,表明此報文段的傳送端的資料已經傳送完畢,並要求釋放運輸連線。
視窗:用來控制對方傳送的資料量。單位為位元組。tcp連線的一端根據設定的快取空間大小確定自己的接收視窗大小。然後通知發放已確定的傳送視窗上限。
檢驗和:檢驗和字段檢驗的範圍包括首部和資料這兩部分
緊急指標:緊急指標在urg=1時才有效,它指出本報文段中的緊急資料的位元組數。
選項:長度可變,最長可達40位元組
3.最大報文長度mss
mss預設值為536位元組。注:mss=tcp報文段長度-tcp首部長度
4.tcp連線的建立
設主機b執行乙個伺服器程序,它先發出乙個被動開啟命令,告訴它的tcp要準備接收客戶程序的連續請求,然後服務程序就處於聽的狀態。不斷檢測是否有客戶程序發起連續請求,如有,作出響應。設客戶程序執行在主機a中,他先向自己的tcp發出主動開啟的命令,表明要向某個ip位址的某個埠建立運輸連線,過程如下:
1)主機a的tcp向主機b的tcp發出連線請求報文段,其首部中的同步位元syn應置1,同時選擇乙個序號x,表明在後面傳送資料時的第乙個資料位元組的序號是x。
2)主機b的tcp收到連線請求報文段後,如同意,則發揮確認。在確認報文段中應將syn置為1,確認號應為x+1,同時也為自己選擇乙個序號y
3)主機a的tcp收到此報文段後,還要向b給出確認,其確認號為y+1
4)主機a的tcp通知上層應用程序,連線已經建立,當主機b的tcp收到主機a的確認後,也通知上層應用程序,連線建立。
closed : 程序處於關閉狀態。
syn-sent : 客戶程序進入同步已傳送狀態。
estab-lishend : 程序已經入已建立連線狀態,之後可以傳送資料了。
listen : 伺服器程序處於收聽狀態。
syn-rcvd : 伺服器程序進入同步收到狀態。
5.tcp連線的釋放
在資料傳輸完畢之後,通訊雙方都可以發出釋放連線的請求。釋放連線的過程為如上圖所示:
1)資料傳輸結束後,主機a的應用程序先向其tcp發出釋放連線請求,不在傳送資料。tcp通知對方要釋放從a到b的連線,將發往主機b的tcp報文段首部的終止位元fin置為1,序號u等於已傳送資料的最後乙個位元組的序號加1。
2)主機b的tcp收到釋放連線通知後發出確認,其序號為u+1,同時通知應用程序,這樣a到b的連線就釋放了,連線處於半關閉狀態。主機b不在接受主機a發來的資料;但主機b還向a傳送資料,主機a若正確接收資料仍需要傳送確認。
3)在主機b向主機a的資料傳送結束後,其應用程序就通知tcp釋放連線。主機b發出的連線釋放報文段必須將終止位元置為1,並使其序號w等於前面已經傳送過的資料的最後乙個位元組的序號加 1,還必須重複上次已傳送過的ack=u+1。
4)主機a對主機b的連線釋放報文段發出確認,將ack置為1,ack=w+1, seq=u+1。這樣才把從b到a的反方向連線釋放掉,主機a的tcp再向其應用程序報告,整個連線已經全部釋放。
estab-lishend : 程序已經入已建立連線狀態,可以傳送資料。
fin-wait1 : 客戶端程序進入終止等待1的狀態。
fin-wait2 : 客戶端程序進入終止等待2的狀態。
time-wait: 客戶端程序進入時間等待(伺服器的重傳)的狀態。
closed : 程序處於關閉狀態。
closed-wait: 伺服器程序進入關閉等待狀態。
last-ack: 伺服器進行最後一次關閉確認。
注意兩個狀態:
<1> closed-wait: 伺服器程序進入關閉等待狀態。
伺服器等待關閉狀態:伺服器接收到客戶端關閉連線的請求,而自身還未想客戶端傳送關閉連線請求的這段時間。
通常情況下,close_wait狀態的持續時間應該很短,但是如果伺服器有很多資料需要傳輸或讀寫時,就不能關閉連線,此時就會出現連線長時間處於close_wait狀態的情況。
<2> time-wait: 客戶端程序進入時間等待(伺服器的重傳)的狀態。
《客戶端完全關閉狀態》:客戶端收到伺服器斷開連線的請求後,會向伺服器確認收到分組,表示自己已經收到,你可以關閉連線了。但是該確認分組可能由於網路問題收不到,而出現重傳的情況。所以客戶端必須要等待一會。此時客戶端等待完全關閉的時間就為time-wait時期。
6.注意的問題
需要三次握手(
還要再傳送一次確認)的原因:
連線的建立和釋放所要求的步驟可以用乙個有限狀態機來表達,該狀態機有11種狀態。每一種狀態中都存在一些合法的事件,當合法事件發生的時候,可能需要採取某個動作。當其他事件發生的時候,則報告乙個錯誤。
狀 態描 述
closed
關閉狀態,沒有連線活動或正在進行
listen
監聽狀態,伺服器正在等待連線進入
syn rcvd
收到乙個連線請求,尚未確認
syn sent
已經發出連線請求,等待確認
established
連線建立,正常資料傳輸狀態
fin wait 1
(主動關閉)已經傳送關閉請求,等待確認
fin wait 2
(主動關閉)收到對方關閉確認,等待對方關閉請求
timed wait
完成雙向關閉,等待所有分組死掉
closing
雙方同時嘗試關閉,等待對方確認
close wait
(被動關閉)收到對方關閉請求,已經確認
last ack
(被動關閉)等待最後乙個關閉確認,並等待所有分組死掉
tcp建立與釋放的變遷如圖所示:
伺服器程序變遷的過程(粗虛線)
tcp ip詳解學習 tcp
1。tcp連線的建立與終止 建立過程 1 客戶端請求建立連線。ack 0 syn 1 sequence number isn client acknowledgement number null options mss 2 服務段確認連線。ack 1 syn 1 sequence number is...
TCP IP學習筆記 TCP
tcp協議提供可靠的資料流服務,有以下5個特徵 1.面向資料流 2.虛電路連線 3.有緩衝的傳輸 4.無結構的資料流 5.全雙工連線 tcp使用確認 重傳來保障可靠性,採用滑動視窗機制來保障傳輸效率和進行流量控制 tcp報文段格式 6位code bit 其中視窗是16bit的捎帶視窗通告 tcp報文...
TCP IP詳解學習筆記
ospf 開房最短路徑優先 ospf是一種鏈路狀態協議,在鏈路狀態協議中,路由器並不與其相鄰的路由交換距離資訊。而採用的是每個路由器主動地測試與相鄰路由器鏈路的狀態,並將這些資訊傳送給它的相鄰路由器,而鄰居路由器將這些資訊在自治系統中傳播出去。每個路由器接收到這些鏈路狀態資訊後,並建立起完整的路由表...