售前電話
135-3656-7657
售前電話 : 135-3656-7657
一、連接建立
TCP連接建立的三次握手過程如圖2.34所示。A、B分別為客戶和服務器,B執(zhí)行LISTEN和ACCEPf原語后,等待連接請求的到來。
A執(zhí)行CONNECT原語后,發(fā)出TCP段,其中SYN=I.ACK=0,初始序號設為X,段中可帶用戶數據(如口令)。該段到達B后,B的TCP實體查驗是否有進程在該段指明的日的端口守聽,如沒有,就返回一個段,置RST=1;如有就將該段送交守聽進程,該進程可決定接受還是拒絕該連接請求。如接受,則回送確認段,置序號=Y確,認號=X+1A收到此段后,也返回一個確認段,置序號=X+1,確認號=Y+1義至此,連接建立成功。
圖2.34TCP連接建立過程
上述三次握手過程可以有效地處理各種異常情況?,F以上圖2.35為例進行說明。圖(a)為A、B雙方同時發(fā)起連接請求的碰撞情況。雙方都按照正常過程發(fā)送確認段,對于任}方來說都已完成三次握手過秷。表面上看來建立了兩條連接,但由圖2.34TCP連接建立過和于它們的端點對相同,因此在插口表項中只占有-個表項,也就是說只建立起一條連接。
圖(b)為一條連接建立、通信并釋放后,延遲重復的連接請求又到達B,B雖然回送確認段,但A發(fā)現它并未發(fā)送關于該連接的請求,于是就回送拒絕段(RST=l),不可能錯誤地再次建立此連接。
圖(c)為延遲重復的連接請求和數據段相繼到達B。B收到重復的數據段時,因連接尚未建立,因此不會接受此數據。其后收到A發(fā)回的拒絕段,就終止連接的建立c另外需要注意飛點,連接請求中的初始序號不能取為0。其原因是當主機崩潰后重新恢復時,如果以同樣的初始序號重新進行連接建立,對方就會認為原有的連接依然存在,而不理會此次連接請求。一般采用基于時鐘的方法隨機選擇初始序號。
二、連接釋放
連接釋放也采用三次握手過程,如圖2.36所示:
連接釋放可由任一方發(fā)起,釋放過程將連接視作兩條獨立的單工連接。如A方發(fā)出釋放請求(FIN=l),并收到B方對該釋放段的確認以后,則A->B的連接關閉,即A---->B停止發(fā)送數據,但8>A仍可發(fā)送數據。要關閉B---->A的連接需反向執(zhí)行同樣的操作。在圖2.36中,B收到A發(fā)來的釋放請求后,要經過一定時間才能發(fā)出至A的釋放請求,因為B需通知應用進程并獲得關閉連接的命令,其間可能涉及人機交互操作。為了防止超時重傳,B應立即向A返回釋放確認,以先行關閉A.-B的連接。
如果發(fā)出釋放請求的一方在2倍分組最大生存時間內未收到確認,則自行釋放該連接。其后,對端將檢測到對方進程已不在通信狀態(tài),于是也將超時釋放連接。
三、連接管理狀態(tài)轉移圖
上述兀P連接管理過程可由圖2.37所示的狀態(tài)轉移圖完整地描述:
圖中,粗實線表示服務器的正常轉移路徑,細實線表示客戶機的正常轉移路徑,虛線表示異常路徑。每條狀態(tài)轉移線旁標有E/A標記,E表示轉移觸發(fā)事件,A表示轉移時執(zhí)行的動作。
現以一條正常路徑予以簡要說明。服務器調用LISTEN原語后從“關閉"狀態(tài)進入“守聽”狀態(tài)。此時客戶機調用CONNECT原語后,發(fā)出連接請求(SYN=l),進入“同步已發(fā)送”狀態(tài),服務器收到此請求后,返送確認(SYN+ACK)段后進入“同步已接收”狀態(tài)。客戶機收到此確認后向服務器回送確認,進入“連接已建“狀態(tài),服務器收到客戶機發(fā)來的確認后也進入“連接已建“狀態(tài)。
隨后,客戶機調用CWSE原語,發(fā)出釋放請求(FIN),主動關閉連接,進入“關閉等待1"狀態(tài)。服務器收到此釋放請求立即返回確認(ACK),進入“關閉等待”狀態(tài)Q客戶機收到確認后進入“關閉等待2"狀態(tài)其后,服務器調用CLOSE原語,發(fā)出釋放請求,進入“最終確認"狀態(tài)。客戶機收到此請求后,立即發(fā)回確認,進入“定時等待"狀態(tài),以作資源釋放等善后工作,定時器時間到就回到“關閉"狀態(tài)。服務器收到客戶機發(fā)回的確認后,也回到“關閉"狀態(tài)。