Linux 網路編程 之 TCP狀態轉換

來源:互聯網
上載者:User

                                               Linux 網路編程 之 TCP狀態裝換

 

 

 

                             

 

                             

 

從上面的圖中可以看出,TCP共有11狀態.由TCP發送和接收的資料有:ACK, FIN, SYN,RST.對於一個還未調用connect的client和未調用listen的server來說,它們都處於CLOSED狀態.ACK是應答資訊,任何一端(client或者server),在接收到資料(這裡的資料包括應用程式write或者TCP發出的資訊比如FIN)之後,都會發出的應答資訊.FIN是close一個socket後由TCP發出的資訊,SYN是握手資訊.RST資訊,則是client向server發送資料請求,但是server並沒有運行.則client會收到來自對方主機發送的RST資訊.

用戶端調用connect,會向server發送SYN資訊,此時client狀態有CLOSED轉變成SYN_SENT狀態.而server在調用listen之後,會由CLOSED狀態轉變成LISTEN狀態,此時,server就會一直監聽server的連接埠,接收來自client的資訊.在server接收到來自client的SYN訊號後,會向client發出一個SYN和ACK資訊,此時,server由LISTEN狀態轉變成SYN_RCVD狀態.client接收到server的SYN和ACK資訊之後,會向server回複一個ACK資訊,到此為止,client和server之間就建立起串連了.client和server的狀態都變成ESTABLISHED狀態.

在這11個狀態中,除了ESTABLISHED外,還有2個比較重要的狀態:CLOSED_WAIT和TIME_WAIT.CLOSE_WAIT狀態時有對方主動調用close,向本地(這裡本地,並不一定說的是client)發送FIN,本地接收到FIN,並向對方發送ACK之後,本地狀態會變成CLOSE_WAIT狀態.那麼,本地如果需要從CLOSE_WAIT狀態變成CLOSED狀態,需要本地向對方發送FIN,也就是需要本地主動調用close,本地進入LAST_ACK,在本地接收到ACK之後,就進入CLOSED狀態.

 

 

著作權申明:
轉載文章請註明原文出處http://blog.csdn.net/feiyinzilgd/archive/2010/09/19/5893995.aspx

並請聯絡譚海燕本人或者前往譚海燕個人首頁留言

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.