初始建立TCP連接的時候的系列號(ISN)是隨機選擇的顺献,那么這個系列號為什么不采用一個固定的值呢?主要有兩方面的原因
- 防止同一個連接的不同實例(different instantiations/incarnations of the same connection)的數(shù)據(jù)包混淆域醇。
同一個連接的不同實例是怎么回事呢?之前我們說過(源IP蓉媳、源端口號譬挚、目的地址、目的端口號)這個四元組唯一標識一個TCP連接酪呻,當一個TCP連接在經(jīng)歷四次揮手關(guān)閉時减宣,假如有一個數(shù)據(jù)包延遲特別大彤枢,而這個連接在關(guān)閉后又馬上以相同的四元組建立起來袜腥,那么先前這個連接的TCP數(shù)據(jù)包到達的時候,如果系列號還落在接收窗內(nèi)抖甘,那么這個數(shù)據(jù)包就可能會被錯誤接收阶冈。因此RFC0793指出ISN應(yīng)該每4μs自增1闷尿,從而防止同一個連接的不同實例的數(shù)據(jù)包混淆。另外對數(shù)據(jù)完整性要求比較高的應(yīng)該同時在應(yīng)用層添加校驗女坑。 - 防止TCP系列號欺騙
假設(shè)A是服務(wù)器填具,B是擁有特殊權(quán)限的客戶端,C是攻擊者,第一條消息C冒充B來向服務(wù)器A請求建立連接劳景,此時C發(fā)出的數(shù)據(jù)包的IP地址會填寫成B的誉简;第二條消息假設(shè)A沒有其他手段來驗證B,而僅僅根據(jù)IP地址判斷C發(fā)過來的建立連接的請求是B發(fā)過來的盟广,因此向B發(fā)送SYN+ACK闷串,此時假設(shè)B被C進行了DOS攻擊或者處于其他異常狀態(tài)而不能響應(yīng)第二條消息(如果B處于正常狀態(tài)會響應(yīng)一個RST包來重啟TCP連接,后面我們講解RST數(shù)據(jù)包)筋量;第三條消息假如C能正確的猜測出A在第二條消息中的ISN烹吵,就可以冒充B和A完成三次握手的過程,讓A誤以為和B建立了連接桨武。接下來C就可以冒充B給A發(fā)送一些危險數(shù)據(jù)或者指令而實現(xiàn)攻擊年叮。