tcp協議握手為什要各隨機乙個數字並加一

時間 2021-06-01 06:10:58

1樓:

答案已經有了,補充乙個,如果你想要抓包驗的話,用wireshark 抓包看 seq都是從0開始實際上是相對的順序號 ,預設是相對的,可以改配置改成絕對序列號 , 實際上是隨機的。

tcpdump -S選項是絕對序列號

2樓:嚮往美

上面都回答得很好了。

我就說說為什麼要是3次協商,而不是更多或更少

因為這涉及到「兩軍問題」

兩軍問題的實質是,如何在不可靠的通道上進行可靠的傳輸,這可能嗎?不可能。

但我們這世界並不是完美的世界,在很多情況下找不到完美的通訊通道。

所以我們就要「將就」一下了,通過不可靠的通道進行不可靠的通訊---起碼還可以通訊吧。

TCP就是為了解決如果在不可靠的通訊通道上「盡可能地」、「盡力地」進行通訊,「盡我之所能」地建立起一條「看似可靠」的鏈結。

為什麼是3次握手,而不是反覆地4、5、6次握手呢?3次握手以後,我對這條通道的「信心」就建立起來了:起碼就目前而言,這條通道是暢通的。

當然更多次的握手,會讓我對這條通道可靠性的信心越來越強,但3次是建立信心的最低次數。

3樓:徐方鑫

TCP的握手,其模型就是紅藍軍問題,該問題在於,要確保資料被傳輸到對方時,還不能被第三方篡改,所以隨機的序列號是解決這個問題的乙個最簡單的方式。

4樓:郭子淳

為什麼加1?

表明SYN確認收到了。FIN同理

Why does a SYN or FIN bit in a TCP segment consume a byte in the sequence number space?

為什麼隨機?

圖來自Stanford CS144 2.1 TCP Service Model

推薦公開課Stanford CS144 Networking-SP Course Info | Stanford Lagunita

5樓:

補充一下這個隨機序號吧

RFC1948中提出了乙個較好的初始化序列號ISN隨機生成演算法,簡單描述就是:

ISN = C +H(sourceIP, sourcePort, destIP, destPort)

H中的4個引數分別是:源IP,源埠號,目的IP,目的埠號。

6樓:

專業答案可以看:車小胖,簡單粗暴答案可以看:tombkeeper。下面我以自己語言盡量通俗易懂的回答一下。

TCP是可靠傳輸的協議。那麼是什麼機制使它可靠呢?其中兩點是:

確認應答(ACK)序列號(當然不止這兩點)。ACK很好理解,TCP客戶端傳送資料後,服務端就會返回乙個ACK,表示已經收到了該資料。

為什麼加1

序列號是這樣的:序列號是按順序給傳送資料的每乙個位元組都標上編號。即是說,每個位元組對應乙個序列號。

如果傳送資料報序列號為1,資料長度為1位元組,則對方ACK返回為2。表示可以接收下乙個資料報

如果傳送資料報序列號為1,資料長度為節,則對方ACK會返回1001。則告訴傳送方可以傳送序列號為1001的資料報了。

總之,接收端是查詢了傳送端序列號和資料長度,然後把下一步應該接收的序列號(即加1)作為ACK返回。

為什麼隨機

然後說說為什麼要隨機?從0或1開始不好嗎?作死哦。

這樣讓黑客作案很方便了。反正大家都知道序列號是從1開始,我只要偽造乙個TCP資料報,修改下目的位址和埠,就可以對接收端進行攻擊。

7樓:車小胖

TCP是乙個有狀態協議,A與B之間有乙個TCP連線,C想搞破壞,於是想偽造A的IP給B發乙個Reset,要分兩種情景:

情景一:C處於A與B之間流量的路徑上

C可以捕獲到A、B的IP包,偽造是小菜一碟,比如大防火牆reset使用者連線

情景二:C不在A與B之間流量的路徑上

C可以在世界的任何角落,偽造乙個合法TCP報文,最關鍵是TCP欄位裡的sequence number 、acknowledged number,只要這兩項位於接收者滑動視窗內,就是合法的,對方可以接收並Reset A、B之間的TCP連線。

而TCP握手採用隨機序列號(不完全隨機,而是隨著時間流逝而線性增長,到了2^32盡頭再回滾),為的就是讓攻擊者更難以猜測sequence number,因為偽造的sequence number不在合法範圍內,而被接收方丟棄,增加安全性。

至於加一,不知道你說的是SYN標誌位佔據sequence的乙個序號,還是對方確認加一?

如果是前者,那是因為SYN是建立連線的關鍵字段,而為了確保對方接收到,使用超時重傳機制,TCP規定,只為有資料的TCP報文重傳,SYN佔據乙個序號(可以認為只有乙個位元組資料的報文),所以TCP會重傳SYN報文。

如果是後者,對方接收到資料,比如sequence number = 1000,TCP Payload = 1000,

資料第乙個位元組編號為1000,最後乙個為1999

對方會回應乙個確認報文,確認號為2000,意味著編號2000前的位元組接收完成,準備接收編號為2000及更多的資料。

這裡的加一表現為1999 + 1 = 2000

tcp 協議中 為什麼syn會消耗乙個序號?

肖巨集輝 因為TCP的RFC規定了,SYN和FIN要占用segment的長度,所以在SYN和FIN包裡面,有你看不見,但是卻邏輯存在的乙個byte。既然有這麼乙個byte,那麼ACK 1也很正常。SEG.LEN the number of octets occupied by the data in...

乙個程式取50000個隨機數和十個程式各取5000個隨機數效果一樣嗎?

先來解答一下你的困惑,包括為什麼 openMP 多執行緒 srand rand 出來的結果一樣。因為 rand 一般使用的是偽隨機演算法。大多數的偽隨機演算法的工作原理都是根據乙個種子值 由 srand 設定 根據一定規則初始化出乙個初始狀態。在每次獲取隨機值時,根據另一組規則更新狀態,並計算出返回...

Java中如何隨機選取乙個長度為10的陣列中的5個不重複的數?

luoxn28 初始化N 陣列長度 10 每次 Random nextInt N 結果為m,然後將下標為m的資料和陣列最後乙個元素交換位置,然後N 繼續 Random nextInt N 直到找到5個資料即可,也就是陣列中最後5個元素。 Aetherus HashMap Boolean duplic...