TCP建立連線的三次握手階段為什麼要協商乙個隨機的初始序列號(ISN),而不是預設從0開始

時間 2021-06-19 17:57:27

1樓:cccchan

通訊雙方在傳送SYN建立連線之前,必須為該TCP連線選定乙個ISN。ISN必須隨時變化,以確保每個連線的ISN都不一樣,尤其是相同連線(Socket)的不同例項,ISN絕不能一樣。

RFC 793規定,應該使用乙個長度為32-bit並且每4s + 1的計數器來選定ISN。然而,一旦有人掌握了ISN的規律,就能輕易地「偽造」出乙個可以擾亂並注入TCP連線的TCP Segment(只要有正確的Socket和Seq Num)。因此,RFC 793這種選定ISN的做法並不可取。

當前,大部分作業系統都使用一種半隨機的方式去選擇ISN。例如Linux和Windows,使用「計時器 + 隨機偏移量」的方法來選定ISN。

2樓:Peny

@Adolph Sail "不是很理解為什麼這樣做能防止重傳,傳送端沒收到對方的回應是要重傳的,和這個初始序列號有什麼關係…" 我覺得是中文版翻譯導致誤解。英文原話是: The purpose in these sequence numbers is to prevent packets that get delayed in the network from being delivered later and then misinterpreted as part of an existing connection.

意思是為了阻止延遲的包被遞送到。

每次建立連線前重新初始化乙個序列號主要是為了通訊雙方能夠根據序號將不屬於本連線的報文段丟棄。

另可參考:TCP 的那些事兒(上) | | 酷殼 - CoolShell

關於ISN的初始化。ISN是不能hard code的,不然會出問題的——比如:如果連線建好後始終用1來做ISN,如果client發了30個segment過去,但是網路斷了,於是 client重連,又用了1做ISN,但是之前連線的那些包到了,於是就被當成了新連線的包,此時,client的Sequence Number 可能是3,而Server端認為client端的這個號是30了。

全亂了。RFC793

中說,ISN會和乙個假的時鐘綁在一起,這個時鐘會在每4微秒對ISN做加一操作,直到超過2^32,又從0開始。這樣,乙個ISN的週期大約是4.55個小時。

因為,我們假設我們的TCP Segment在網路上的存活時間不會超過Maximum Segment Lifetime(縮寫為MSL – Wikipedia語條

),所以,只要MSL的值小於4.55小時,那麼,我們就不會重用到ISN。

3樓:淚花

如果TCP在建立連線時每次都選擇相同的、固定的初始序號,那麼設想以下的情況: (1)假定主機A和B頻繁地建立連線,傳送一些TCP報文段後,再釋放連線,然後又不斷地建立新的連線、傳送報文段和釋放連線。 (2)假定每一次建立連線時,主機A都選擇相同的、固定的初始序號,例如,選擇1。

(3)假定主機A傳送出的某些TCP報文段在網路中會滯留較長的時間,以致造成主機A超時重傳這些TCP報文段。 (4)假定有一些在網路中滯留時間較長的TCP報文段最後終於到達了主機B,但這時傳送該報文段的那個連線早已釋放了.而在到達主機B時的TCP連線是一條新的TCP連線。 這樣,工作在新的TCP連線下的主機B就有可能會接受在舊的連線傳送的、已經沒有意義的、過時的TCP報文段(因為這個TCP報文段的序號有可能正好處在現在新的連線所使用的序號範圍之中)。

結果產生錯誤。 因此,必須使得遲到的TCP報文段的序號不處在新的連線中所使用的序號範圍之中。 這樣,TCP在建立新的連線時所選擇的初始序號一定要和前面的一些連線所使用過的序號不一樣。

因此,不同的TCP連線不能使用相同的初始序號。

4樓:Adolph Sail

tcp/ip詳解協議卷第18章18.2.3解釋初始序列號隨時間變化,每個連線有不同的初始序列號,每4ms加一,這樣做是為了防止網路中被延遲的分組在以後被重傳。

不是很理解為什麼這樣做能防止重傳,傳送端沒收到對方的回應是要重傳的,和這個初始序列號有什麼關係……

描述TCP建立連線的三次握手過程,如果最後一次握手失敗會怎樣處理?

參考文章 What if a TCP handshake segment is lost?In other words,if the ACK is dropped but the next packet is not dropped,then everything is fine.意思是說客戶端發出...

TCP 為什麼是三次握手,而不是兩次或四次?

xuanweiace 一些簡單好記的結論 首先明確一點,傳送方傳送的資料報包含資料,才需要進行ack確認 且必須進行ack確認 而如果傳送方傳送的只是ack確認而無資料,則無需再次確認 不然就會無限迴圈 所有的重傳,都由傳送方負責,接收方不負責。何時觸發重傳?傳送方在超時器計時結束後仍然沒有收到ac...

為什麼一次函式 二次函式 三次函式的影象都是對稱的,而四次函式則不一定?

這個題在實數上考慮其實有點無聊.如果要對稱那麼就要是這個形式 那只有當 階時才可以定解.在複數上考慮就有趣了 考慮多項式 它的對稱性體現在哪呢?什麼叫 很簡單,放到複數域上看 當然復函式的圖形是個二維復流形,這只是它穿過 空間時的截面.常數項不改變性狀 高次項的影響表現在交換分支 當然考察下函式是怎...