1. 程式人生 > >TCP三次握手(通俗易懂)

TCP三次握手(通俗易懂)

一--導讀

  前不久中國和外國RPEC協議的簽訂,標誌著東亞自貿區的建立成功。現在韓國和日本要做貿易。日本一直監聽著韓國總統的一舉一動,但他又不會主動。(伺服器的監聽狀態)只是被動的等著韓國總統先開口。首先韓國總統傳送資訊給日本。資訊內容為“安倍兄,我想和你做點小生意,我發500臺三星手機給你”。安倍收到之後回覆:“我是安倍,小文啊,收到你的訊息了,我要500+1臺三星,並且我以50輛汽車作為對等交換”。韓國總統收到安倍會話,並回復:“安倍兄,你的訊息我已收到,我給你發500+1臺手機,但你也得給我發50+1輛汽車”。由於韓國小,船也小,只能分批次去運這些手機,並且安排相應的人員去管理當前傳送兩個國家都有自己的接收人員和傳送人員去管理這些貨物 。並且如果這些手機在路上不小心被搶了或者丟了。韓國都得重新讓專門的人去傳送手機臺數和接收汽車輛數。

TCP伺服器的傳輸控制塊:

 

指向傳送和接收快取的指標(管發和收的人)
指向重傳佇列的指標(重新發送的人)
當前的傳送和接收序號(管現在發多少和收多少的人)

 

 

二---TCP連線要解決的三個問題

TCP的連線建立主要解決以下三個問題:
1--使TCP雙方能夠知道對方的存在
2--使TCP雙方能夠協商一些引數(如最大視窗值,是否使用視窗擴大選項和時間戳選項以及服務質量)
3--使TCP雙方能夠對運輸實體資源(如快取大小,連線表中的專案等)進行分配。

 

三---圖解TCP三次握手

 

 

圖中

SYN:同步序列編號(Synchronize Sequence Numbers)。是TCP/IP建立連線時使用的握手訊號
同步位SYN=1,表明這是一個TCP連線請求報文段(相當於導讀中的“安倍”)。

seq=x(相當於導讀中的“500臺三星”),作為TCP客戶程序選擇的初始字號,(

注意:TCP規定的SYN被設定為1的報文段不能攜帶資料,但要消耗一個序號)。(也就是韓國總統沒有說到500,但是他說了一句話)

第一個ACK=1(相當於導讀中的“小文啊,收到你的訊息了”)。

seq=y (相當於導讀中的50輛汽車)

ack=x+1(相當於導讀中的500+1)。

第二個ACK=1(相當於導讀中的“安倍兄,你的訊息我已收到”)

seq=x+1(我給你發500+1臺三星)

ack=y+1(但你得給我發50+1臺汽車)

 

四--能否只有兩次握手?

答案肯定是不能。看下圖

紅線部分為一個遲到的連線請求,並且重傳計時器結束了他還沒有到達,於是發生重傳(黑線)。

若只有兩次握手,當遲到的到達後,接收方收到了,然後就按規矩建立連線,安排專人(資源)去等待發送方傳送資料。但是傳送方已經重傳過了,他並不知道這個遲到的請求到達了(他也以為重傳過了就不會再有重複請求到達),於是接收方就這樣傻傻的等待。

三次握手能防止已失效的連線請求報文段突然又傳到TCP伺服器,導致錯誤,浪費資源。

&n