tcp在開始傳輸資料前,客戶端和伺服器需要隨機生成自己的初始序列號(initial sequence number-isn),然後通過三次握手進行交換確認。
考慮場景,b是伺服器,a是乙個合法的客戶端,c假冒a(比如模擬ip等)和b進行通訊。
由於isn是隨機的,最終c無法傳遞資料到b。
c假冒a,b接受後把ack會直接發給a
由於a沒有傳送過seq=isn _c的請求,當a收到isn_c的ack後直接傳送reset 給b,最終關閉了鏈結。
加入初始序列號不是隨機的,而是可以推測的,那麼c就可以拿到isn_b,然後模擬乙個ack過去,b最終會建立鏈結,
c開始傳遞資料,這就會產生非常嚴重的安全問題,所以isn隨機是必須的。
TCP初始化序列號ISN
tcp初始化序列號isn tcp初始化序列號不能設定為乙個固定值,因為這樣容易被攻擊者猜出後續序列號,從而遭到攻擊。rfc1948 中提出了乙個較好的初始化序列號isn隨機生成演算法。isn m f localhost,localport,remotehost,remoteport m是乙個計時器,...
TCP為什麼是面向連線的,為什麼是面向資料流的
tcp的核心是它要提供乙個可靠的傳輸協議。第乙個問題 tcp如果想要提供乙個可靠的傳輸協議,一定需要每次都建立連線嗎?三 次招手的意義在於讓通訊兩端確定,資訊剛才是可以從任意一端傳到另 一端的。如果傳送資料前我們沒有三次招手。那麼,由於tcp是乙個可靠 的傳輸協議,所以一定會提供超時重試的機制,而且...
為什麼TCP的序號是隨機的,而不是從0開始?
主要有兩個問題 假設客戶端a發給服務端b的乙個包在網路裡面停留太久 最後本次連線已經結束了,後面又重新建立了一次連線 恰巧這次連線的四元組和上次相同,其實就是源埠剛好相同 四元組 源ip位址 源埠號 目標ip位址 目標埠號 這時序號又是從0開始,而卡了很久的包在這時送到了服務端 因為連線時的序號都是...