如果 TCP 協議中三次握手不攜帶序列號,會造成什麼樣的後果

之所以需要三次握手,其實就是要雙方相互確認彼此能夠通信。
一般要與對方確認可以通信,就要確認自己能夠跟對方通信(1),且能夠收到對方的通信(2),反過來對方也能夠和自己通信(3),且能收到自己的通信(4)。基於這一點,流程就簡化爲3次握手通信。
首先,client發送一個SYN=1,seq=X(X隨機)到server,server收到這個消息,則確認了client能夠與server通信這件事(1),這時,server將SYN=1,ACK=1,ack=X+1,seq=Y(Y隨機)發送給client;client收到這個消息,則確認了client能夠收到對方的通信(2)和server能夠與client通信這件事(3),最後client發送ack=Y+1,ACK=1返回給server,server收到後,確認了server能夠收到client的通信這件事(4)。至此,雙方的通信確認過程完成且建立了連接。(總結上面的發送信息,簡單的說就是:SYN:表示一個想要連接對方的請求;ACK、ack表示一個答覆對方連接請求的響應;中間隨機數seq:請求連接的信物)
這裏的三次握手重點每一次都有關聯,seq隨機一個數發送給對方,對方收到後用ack=seq+1的方式表示針對上一個通信的準確回覆。如果不用序列號的話,client在最後一步的發送中可以發送任意數據給server,確認最後的連接過程且最終建立連接。由於client可以隨意僞造任意多的ip,那麼最終server建立了很多不存在且無用的TCP連接。
但是這個機制同樣存在一個問題,就是SYN攻擊。client僞造大量隨機ip,向server發送SYN=1,seq=X的第一步的連接請求,server給不存在的ip發送SYN=1,ACK=1,ack=X+1,seq=Y響應,由於client的ip不是實際存在的,所以server發出的消息不能到達,server不斷的重試直到超時,那麼server的連接隊列會被佔滿,正常的TCP握手請求就無法到達server,影響了正常的連接請求,導致網絡阻塞或者server系統癱瘓。
這種SYN攻擊通過命令netstat -nap | grep SYN_RECV可以查出來.
發佈了40 篇原創文章 · 獲贊 47 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章