2012-09-08 37 views
0

微秒計時器初始序列號生成下面是從RFC6528. S34在Linux中

建議初始序列號生成算法採取幾行。

TCP應當產生它的初始序列號用所述表達:

ISN = M + F(localip, localport, remoteip, remoteport, secretkey) 

其中,M是4微秒計時器

恰好由4微秒計時器的意思?

(請不要誤會從下面的東西,問題的主要焦點偏離。這只是爲了澄清我的意見之一)

這其中我感到困惑的圖像。

MD5 has replaced half MD4 from kernels 3.1, but I'm not sure whether the re-keying is avoided!

(MD5已經取代MD4從內核3.1.But我不知道更換鑰匙是否是可以避免的。 重新鑰匙計數器設置爲零的引導,如果仍然用它)

+0

每4ms增加一個計時器? – rekire

+0

@rekire:如果是這樣,生成的第一個序列號應該被添加到一個全爲0的32位值,因爲定時器在開始時被初始化爲0。情況並非如此,因爲初始序列號在開始時只有24位(在密鑰計數器和計時器均爲零的情況下),即ISN的前8位將爲零。 如果我錯了,那麼定時器必須有一些其他的初始值。 – sjsam

+0

爲什麼24位?我認爲'F'的輸出是32位。 – ninjalj

回答

1

爲了避免從TCP連接的早期版本接收過時的段的麻煩,相關的RFC建議採取一系列措施。

其中一個措施是以比帶寬在實時連接上允許的速度更快的速率單調增加ISN,因此下次使用相同的方式打開連接時(源IP,目標IP,源端口,目標端口)元組,所使用的序列號與先前連接中的TCP段中使用的序列號不一致。

這個和其他機制在RFC1185附錄中討論。

顯然,4μs定時器對於2Mb/s網絡是有利的。 Linux使用64 ns定時器。

+0

乾杯朋友!答案是非常有用的.. – sjsam