tcp中兩台裝置在同時建立連線時,為什麼需兩次傳送自己的SYN?

時間 2021-05-31 11:09:48

1樓:靈劍

這個應該不是重傳,而是一種特殊的狀態時序,一般建立連線時分主動被動兩種情況,這是第三種,即允許兩個埠同時發起連線,兩邊都是主動。從時間序列上說,兩邊發出SYN前都沒有收到對方的SYN,這種情況下兩邊都做三次握手,進入連線完成序列。實際情況下應該不太可能出現這種情況,因為一般會選擇自動分配的源埠。

同樣關閉連線也有兩邊同時發起的時序。

這種時序是一種「不約而同」,所以不會是故意設計成這樣,只是程式執行中有可能出現,為了協議完整而增加的。

至於為什麼都要再發SYN-ACK,還是三次握手的原理,你需要確認「對方在確認收到了我的SYN之後傳送了SYN表明同意建立連線」,僅僅收到SYN是不夠的,因為對方不一定收到了你的SYN。

2樓:小樓

個人認為是因為幾個原因

1、因為不能保證資料按序到達,3可以先於1到達,如果A在3不設定SYN(A的序列號對於B來說無意義),該ACK對於B來說到按照rfc來說是無意義的。假設該ACK有意義,B進入何種狀態,會出現和被動開啟不相容的情況。

2、如果能保證1先於3到達,那麼3不設定SYN在同時開啟的情況下是可行的,但是在A被動開啟的情況下會出現問題,因為B不知道A是否傳送了SYN報文。

3、如果把1,4隱藏掉,其實在SYN_RCVD和A在被動開啟的情況下傳送的報文是一致的,總是會傳送syn/ack報文,這樣就統一了。

4、總之,按照rfc的設計應該是都考慮到了被動開啟和主動開啟、同時開啟的情況。

5、自己的理解,肯定有不對的地方。

3樓:車小胖

TCP SYN是占用乙個序列號的,即乙個位元組的長度,記住一點:TCP中只要是資料,即使是乙個位元組,即使如SYN,也需要確認的!

當A發SYN(seq:C)給B,A期望收到B 的ACK:C+1可是恰恰B的SYN已經發出,沒有ACKed AB期望收到A的 ACK:K+1,

可是恰恰A的SYN已經發出,沒有ACKed B於是A又重傳了一次 SYN(seq:C,ACK:K+1),同時確認了對方B的SYN(seq:K)

B其實也是重傳了一次SYN ( seq:K, ACK: C+1),同時確認了對方A的SYN(seq:C)

即然各自的SYN已經被確認,TCP連線就建立起來了。

兩台主機和兩台顯示器,能否做到操作一套鍵鼠便能控制兩台主機,並使兩台顯示器達成單主機擴充套件分屏的效果?

克沐 mousr with borders 無界滑鼠 微軟官網有的軟體 id 35460功能 最多支援4機,使主機滑鼠可以移動到副機上,並且支援複製文字和文件 100M以內 的功能。 之前用過SANWA的KB USB LINK4,就是兩頭USB,然後一台電腦上的鍵鼠可以控制兩台電腦,可以設定無縫左滑...

大學生需要兩台手機嗎?

兩部手機?你拿來幹什麼啊.一部手機 一部電腦就OK了 平板有沒有都沒關係 電腦大二大三再買也沒事 首先能有個手機保持正常通話就OK 建議電腦買個輕薄本,尺寸小點 容易攜帶 易帶 我就是因為喜歡螢幕大買了個.啊.出去上課 自習都不想拿 重得我想吐.書包還塞不下. TobyTT 關鍵是看你自己的需求,一...

兩台tplink加一台h3c er5200如何作到互通?

先放結論 不改變網路拓撲的情況下,以你現有的裝置和軟體,很難。原因 你的兩台tplink分別對兩個網段進行了NAT。NAT的特點就是N 1的位址轉換。這個特點決定了從N方往1方訪問沒問題,但是從1方往N方訪問不可行,因為沒辦法把從1來的資料傳送到到N裡面具體某個內網位址 埠對映可破,解決部分問題 從...