關於tcp協議斷開連接以及在socket編程時候連接的一些理解

    要釋放一個TCP連接,需要通過四次握手過程,這是由TCP的半關閉特性造成的,因爲TCP連接時全雙工的,因此,需要TCP兩端要單獨執行關閉。值得注意的是,主動關閉的一端在發送FIN之後,依然還能正常接收對方的數據,只是通知對方它已經沒有數據需要發送了,同理,被動關閉的一端在收到FIN之後,仍然可以發送數據,直到它自身同樣發出FIN之後,才停止發送數據。

 TCP連接的超時問題:
         完成一個TCP連接,中間涉及到一個超時的問題,大多數伯克利系統的超時時限爲75s,Solaris9的超時時限爲240s,因此,一般認爲是在75-240之間。
【引申】在具體的實現中,如何由用戶自己去完成設置socket連接超時時間?
【解決方法】目前實現socket超時連接主要是通過select來完成的。具體步驟如下:
    ◆     建立socket
    ◆     將socket設置爲非阻塞模式(若是阻塞模式,那麼時間設置就毫無意義)
    ◆     調用connect去進行連接
    ◆     使用select檢查socket是否可寫,並同時判斷其結果(爲什麼是可寫?因爲需要檢測socket是否收到ACK。)
    ◆     將socket轉化爲阻塞模式
 
TCP的半關閉           所謂“半關閉”,是指連接的一端在結束它的發送之後還能接收到對方發過來的數據的能力。具體表現在,當完成三次握手的雙方,其中有一端發出FIN,此時它將進入半關
閉狀態,此時它關閉了自身的發送功能,但是它依然可以接收到對方的數據,如對方發過來的ACK消息


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章