1. 程式人生 > >TCP連接

TCP連接

最終 也不會 一個 lis 流量控制 得到 一段時間 log 真的

來源:TCP的三次握手和四次揮手 和 TIME_WAIT是什麽

三次握手

SYN_SENT

  我們能成為朋友嗎?【發送SYN】,不知道他會怎麽回復我呢?【我進入SYN_SENT狀態,等待對方確認】

SYN_RECV

  什麽?【收到請求,進入SYN_RECV】,當然可以啦【回復一個ACK確認】

ESTABLISHED

  收到回復【收到對方的ACK】,太好了,以後可以常聯系了【主動方進入ESTABLISH狀態】,你有事沒事也記得可以聯系我【發送ACK】,ok【被動方進入ESTABLISH狀態】

三次握手失敗:他問能不能成為朋友,我說當然可以,然後他居然不回我了(最後的ACK丟失),才剛成為朋友就這麽擺架子?那我也不想理他了(關閉連接),跟他說絕交(向對方發送RTS報文)】

數據傳輸

你覺得這本書x怎麽樣?【發送ACK,seq=x】

我覺得x不好【回復ACK x+1】

.....

超時重傳 :假如等了一段時間後,對方沒有回復對應的話題,我就再問一次】

快速重傳:我問他x這本書怎麽樣,他居然連續回復我三次x這本書不好,而沒有回復我x1這本書怎麽樣,看來他當時沒聽到,那我就不等了,趕緊再問一次,x1這本書怎麽樣】

流量控制:怕對方問我問題問太快了,我反應不過來,就跟他說你問慢一點吧,要不然我就無視你這些問題了】

四次揮手

FIN_WAIT_1

  A不想和B聊天了【主動方希望關閉連接】,但A希望B知道這件事【向被動方發送FIN】,接下來A只能和B說關於絕交的事【只能發送關於揮手斷開連接的數據包】,B也可以跟A說說B最近過得這麽樣【被動方可以向我發送普通數據】,但A對此不會有任何評論【主動關閉方再也不會發送普通數據了】,A希望得到B的回復看看B是怎麽想的【我進入FIN_WAIT_1狀態等待對方確認】

CLOSE_WAIT

  B知道A的想法了【收到主動方的FIN】,對於絕交的事情雖然希望不大,但B還想考慮一下【被動方進入CLOSE_WAIT狀態】,就通知A我收到你消息了,要不再等等?【向主動方發送一個ACK】

FIN_WAIT_2

  A說好吧【接收到ACK】,B你就考慮一下吧,我等你回復【主動方進入FIN_WAIT_2】

LAST_ACK

  B想通了,還是絕交吧【向主動方發送FIN】,等A回復B,B就知道A看到這條消息了【現在進入LAST_ACK,等待對方最後一次確認】,那B就撤了【關閉連接】

TIME_WAIT

  B考慮完終於回復A了【收到對方的FIN】,B怎麽可能這麽輕易就答應了?真的假的?A不信【進入TIME_WAIT】,A得再問問B看是不是真的【發送最後的ACK】,等1~4分鐘【等待2MLS】B還不回A的話,那就真的是絕交了,那A也走人【關閉連接】

問題:不要TIME_WAIT行不行?

答:等待的時間主要確保主動關閉方(A)最後的ACK能到達被關閉方(B),如果沒如果沒到達,B就會認為A沒有收到我的最終決定,B就會重發一次,為了能收到B重發的消息,A必須要等

TCP連接