TCP的三次握手

     咱們知道tcp創建鏈接要進行「三次握手」,即交換三個分組。大體流程以下:服務器

一、客戶端向服務器發送一個SYN Jsocket

二、服務器向客戶端響應一個SYN K,並對SYN J進行確認ACK J+1tcp

三、客戶端再想服務器發一個確認ACK K+1函數

只有就完了三次握手,可是這個三次握手發生在socket的那幾個函數中呢?請看下圖:spa

       從圖中能夠看出,當客戶端調用connect時,觸發了鏈接請求,向服務器發送了SYN J包,這時connect進入阻塞狀態;服務器監聽到鏈接請求,即收到SYN J包,調用accept函數接收請求向客戶端發送SYN K ,ACK J+1,這時accept進入阻塞狀態;客戶端收到服務器的SYN K ,ACK J+1以後,這時connect返回,並對SYN K進行確認;服務器收到ACK K+1時,accept返回,至此三次握手完畢,鏈接創建。進程

總結:客戶端的connect在三次握手的第二個次返回,而服務器端的accept在三次握手的第三次返回。服務器端

        如今咱們介紹socket中的四次握手釋放鏈接的過程,請看下圖:請求

圖示過程以下:im

某個應用進程首先調用close主動關閉鏈接,這時TCP發送一個FIN M;總結

另外一端接收到FIN M以後,執行被動關閉,對這個FIN進行確認。它的接收也做爲文件結束符傳遞給應用進程,由於FIN的接收意味着應用進程在相應的鏈接上再也接收不到額外數據;

一段時間以後,接收到文件結束符的應用進程調用close關閉它的socket。這致使它的TCP也發送一個FIN N;

接收到這個FIN的源發送端TCP對它進行確認。

這樣每一個方向上都有一個FIN和ACK。

相關文章
相關標籤/搜索