TCP連接的建立3次握手?
服務(wù)器端通常處于監(jiān)聽(tīng)狀態(tài)即LISTEN,accept()處于阻塞狀態(tài)?
當(dāng)客戶(hù)端連接服務(wù)器端時(shí)此時(shí)客戶(hù)端的connect()剛剛調(diào)用并處于阻塞狀態(tài),?
將會(huì)觸發(fā)以下事件:?
首先客戶(hù)端的應(yīng)用程序?qū)?huì)使tcp進(jìn)程發(fā)送SYN,MSS祟牲,此時(shí)客戶(hù)端將會(huì)處于SYN_SENT?
網(wǎng)絡(luò)傳輸給服務(wù)器端后定欧,服務(wù)器端tcp接收到后服務(wù)器端將會(huì)由LISTEN狀態(tài)變?yōu)镾YN_RCVD?
然后服務(wù)器端也會(huì)發(fā)送一個(gè)SYN,MSS還有一個(gè)ACK,注意這個(gè)ACK是客戶(hù)端發(fā)送的SYN值加1?
客戶(hù)端在接收到服務(wù)器端的SYN,MSS,ACK核對(duì)無(wú)誤后將會(huì)由SYN_SENT狀態(tài)變?yōu)镋STABLILSHED?
此時(shí)客戶(hù)端的connect()函數(shù)將會(huì)返回不再處于阻塞狀態(tài)稽莉,同時(shí)客戶(hù)端發(fā)送ACK课舍,此ACK是服務(wù)器端?
發(fā)送的SYN值加1霹俺,服務(wù)器端在接收到客戶(hù)端的ACK核對(duì)無(wú)誤后敬特,accept()將從阻塞狀態(tài)返回掰邢,?
同時(shí)read()處于阻塞狀態(tài)牺陶。此時(shí)連接已經(jīng)建立
TCP斷開(kāi)連接4次揮手?
當(dāng)一端數(shù)據(jù)已經(jīng)發(fā)送完了,就會(huì)將本端的tcp斷開(kāi)掉通常是客戶(hù)端主動(dòng)斷開(kāi)?
這種情況同時(shí)是客戶(hù)端應(yīng)用程序調(diào)用close(fd)關(guān)閉套接字辣之,這將觸發(fā)tcp進(jìn)程發(fā)送?
FIN,此時(shí)客戶(hù)端將會(huì)處于FIN_WAIT_1,服務(wù)器端在接收到這個(gè)FIN后將會(huì)處于close_wait()狀態(tài)?
同時(shí)read()return 0掰伸,然后服務(wù)器端將會(huì)發(fā)送ACK 值為客戶(hù)端發(fā)送的FIN值加1,客戶(hù)端在接收到?
服務(wù)器端發(fā)送給它的ACK后將會(huì)處于FIN_WAIT_2然后服務(wù)器端將?
客戶(hù)端的文件描述符讀端關(guān)閉怀估,此時(shí)服務(wù)器端可能還會(huì)有未發(fā)送的數(shù)據(jù)狮鸭,通常會(huì)悄悄丟棄掉,然后?
關(guān)閉客戶(hù)端描述符close(),然后服務(wù)器端tcp進(jìn)程將會(huì)發(fā)送FIN此時(shí)服務(wù)器端將會(huì)處于LAST_ACK狀態(tài)?
客戶(hù)端在接收到服務(wù)器端發(fā)送的FIN后將會(huì)由FIN_WAIT_2狀態(tài)變?yōu)門(mén)IME_WAIT狀態(tài)多搀,同時(shí)發(fā)送ACK值為?
客戶(hù)端發(fā)送的FIN值加1歧蕉,服務(wù)器端在接收到客戶(hù)端發(fā)送的ACK后核對(duì)無(wú)誤后將由LAST_ACK狀態(tài)變?yōu)?
CLOSED狀態(tài)。注意客戶(hù)端在處于TIME_WAIT狀態(tài)時(shí)要經(jīng)歷2個(gè)MSL時(shí)間才會(huì)將狀態(tài)變?yōu)镃LOSED通常這個(gè)?
等待的時(shí)間為60秒
TCP報(bào)文首部中有標(biāo)識(shí)位康铭,共6個(gè):
URG:緊急指針(urgent pointer)有效惯退。
ACK:確認(rèn)序號(hào)有效。
PSH:接收方應(yīng)該盡快將這個(gè)報(bào)文交給應(yīng)用層麻削。
RST:重置連接蒸痹。
SYN:發(fā)起一個(gè)新連接。
FIN:釋放一個(gè)連接呛哟。
客戶(hù)端主動(dòng)建立連接并關(guān)閉叠荠,首先客戶(hù)端和服務(wù)器處于close狀態(tài)。然后客戶(hù)端發(fā)送SYN同步位扫责,此時(shí)客戶(hù)端處于SYN-SEND狀態(tài)榛鼎,服務(wù)器處于lISTEN狀態(tài),當(dāng)服務(wù)器收到SYN以后鳖孤,向客戶(hù)端發(fā)送同步位SYN和確認(rèn)碼ACK者娱,然后服務(wù)器變?yōu)镾YN-RCVD,客戶(hù)端收到服務(wù)器發(fā)來(lái)的SYN和ACK后苏揣,客戶(hù)端的狀態(tài)變成ESTABLISHED(已建立連接)黄鳍,客戶(hù)端再-向服務(wù)器發(fā)送ACK確認(rèn)碼,服務(wù)器接收到以后也變成ESTABLISHED,然后服務(wù)器客戶(hù)端開(kāi)始數(shù)據(jù)傳輸平匈。