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

時間 2021-06-01 12:39:30

1樓:

之所以需要三次握手,其實就是要雙方相互確認彼此能夠通訊。

一般要與對方確認可以通訊,就要確認自己能夠跟對方通訊(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)。至此,雙方的通訊確認過程完成且建立了連線。

這裡的三次握手重點每一次都有關聯,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可以查出來.

2樓:

TCP是面向連線的,seq 是保證重傳、視窗大小調整等的前提。不只是三次握手,所有的TCP報文中都必須的序號。

具體可以參考RFC 793,下圖是TCP頭的標準結構:

0123

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1Source PortDestination PortSequence NumberAcknowledgment NumberDataU|A|P|R|S|FOffset| Reserved |R|C|S|S|Y|IWindowG|K|H|T|N|NChecksumUrgent PointerOptionsPaddingdata

3樓:sancho

快被摺疊掉的@梁偉錦寫的是標準答案,我這裡附一張圖以前兩次握手為例,客戶傳送連線請求,包括乙個為X的序號,完成第一次握手,伺服器響應客戶的第一次握手於是傳送確認資訊,確認資訊裡兩個序號,乙個是X+1乙個是Y,這裡的X+1與之前客戶傳送的X有關。因此沒序號的話伺服器沒法按規則跟客戶確認。可能會不停地嘗試握手,但最終是沒法建立鏈結的。

總覺得題主不是想要這樣的答案,可是TCP就是這麼定的...難道是問TCP三次握手為什麼要有序號?

TCP協議包括建立連線,資料傳輸,斷開連線三個部分,作用是提供可靠連線,對傳輸效率的幫助很大,如擁塞控制。設定三次握手的目的記得是為了避免無效的連線占用頻寬,沒序號的話握幾次手也沒有意義了(啊咧這好像也是書上的,坐等高階人士來答

4樓:

while

True

:for

ipin

("192.168.1."+x

forx

inrange(1

,255

)):send_rst(ip)

5樓:Proton

如果不攜帶序列號,就可以很輕易的偽造TCP鏈結。

惡意機器偽造SYN包,ip位址亂填,傳送

伺服器收到SYN包,像亂填的ip位址傳送SYN+ACK嗯到此為止了。

因為惡意機器不知道SYN+ACK包的序列號,無法傳送有效的ACK包。

如果不攜帶序列號,惡意機器可以繼續偽裝成任意的ip位址發ACK包,這在伺服器看來就是乙個已經建立的鏈結了。

到了這一步,可以幹的事就很多了,比如發乙個POST請求什麼的,刷票再也不怕被封ip了。

當然,因為有序列號,後面的都是YY。

6樓:不夠真實

在TCP/IP協議中,TCP協議提供可靠的連線服務,採用三次握手建立乙個連線。

第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也傳送乙個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;

第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。 完成三次握手,客戶端與伺服器開始傳送資料.

如果TCP協議中三次握手不攜帶序列號,最終會無法建立TCP連線.

詳細見:TCP協議三次握手過程分析

描述TCP建立連線的三次握手過程,如果最後一次握手失敗會怎樣處理?

參考文章 What if a TCP handshake segment is lost?In other words,if the ACK is dropped but the next packet is not dropped,then everything is fine.意思是說客戶端發出...

TCP建立連線的三次握手階段為什麼要協商乙個隨機的初始序列號(ISN),而不是預設從0開始

cccchan 通訊雙方在傳送SYN建立連線之前,必須為該TCP連線選定乙個ISN。ISN必須隨時變化,以確保每個連線的ISN都不一樣,尤其是相同連線 Socket 的不同例項,ISN絕不能一樣。RFC 793規定,應該使用乙個長度為32 bit並且每4s 1的計數器來選定ISN。然而,一旦有人掌握...

TCP 為什麼是三次握手,而不是兩次或四次?

xuanweiace 一些簡單好記的結論 首先明確一點,傳送方傳送的資料報包含資料,才需要進行ack確認 且必須進行ack確認 而如果傳送方傳送的只是ack確認而無資料,則無需再次確認 不然就會無限迴圈 所有的重傳,都由傳送方負責,接收方不負責。何時觸發重傳?傳送方在超時器計時結束後仍然沒有收到ac...