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(sequence number  表示的是我方(發送方)這邊,這個packet的數據部分的第一位應該在整個data stream中所在的位置相當於導讀中的“500台三星”),作為TCP客戶進程選擇的初始字號,(

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

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

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

ack=x+1(acknowledge number 表示的是期望的對方(接收方)的下一次sequence number是多少 相當於導讀中的500+1)。

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

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

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

 

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

答案肯定是不能。看下圖

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

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

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

 

練習題:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM