天天看點

Linux 網絡程式設計 之 TCP狀态轉換

                                               linux 網絡程式設計 之 tcp狀态裝換

Linux 網絡程式設計 之 TCP狀态轉換
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

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

繼續閱讀