TCP在開始傳輸數據前,客戶端和服務器需要隨機生成自己的初始序列號(initial sequence number-ISN),然后通過三次握手進行交換確認。
問題:為什么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隨機是必須的。