1. 程式人生 > >TCP三次握手與四次分手

TCP三次握手與四次分手

int 有效 tcp三次握手 osi height -1 rcv time 就會

三次握手

技術分享

解釋:客戶端A和服務器B剛開始處於CLOSED狀態,兩者之間沒有任何聯系,A主動打開,B被動打開由
CLOSED進入LISTEN狀態,這是A發送一個SYN=1的標誌位的數據包,並且數據的序列為seq=x,
A也由CLOSED進入SYN-SENT狀態,B接收到A的請求,也主動 發送SYN=1的建立連接的請求的
數據,在B這裏數據包的排序為seq=y並且發送一個確認號ack=x+1用來表示已經收到A發送的數據,
ACK用來確認ack是有效的,B也有LISTEN轉入SYN-RCVD狀態,A收到B的數據,發送一個序列號
為x+1,確認號為y+1的數據,同樣ACK用來表示ack的有效性,此時A由SYN-SENT狀態轉入
ESTAB-LISTEND狀態,B收到A的回復,狀態也轉入ESTAB-LISTEND狀態。 到此三次握手建立完成。

知識點:

URG :表示本報文段中發送的數據是否包含緊急數據。後面的緊急指針字段(urgent pointer )只有當
URG=1 時才有效。

ACK :表示是否前面的確認號字段是否有效。ACK=1 ,表示有效。只有當ACK=1時 時,前面的確認號
字段才有效。TCP 規定,連接建立後, ACK 必須為1, 帶ACK 標誌的TCP 報文段稱為確認報文段

PSH :提示接收端應用程序應該立即從TCP 接收緩沖區中讀走數據,為接收後續數據騰出空間。如果為1 ,
則表示對方應當立即把數據提交給上層應用,而不是緩存起來,如果應用程序不將接收到的數據讀走,
就會一直停留在TCP 接收緩沖區中。

RST :如果收到一個RST=1 的報文,說明與主機的連接出現了嚴重錯誤(如主機崩潰),必須釋放連接,
然後再重新建立連接。或者說明上次發送給主機的數據有問題,主機拒絕響應,帶RST 標誌的TCP
報文段稱為復位報文段

SYN :在建立連接時使用,用來同步序號。當SYN=1 ,ACK=0 時,表示這是一個請求建立連接的報文段;
當SYN=1 ,ACK=1 時,表示對方同意 建立連接。SYN=1,說明這是一個請求建立連接或同意建立
連接的報文。只有在前兩次握手中SYN才 才置為1 ,帶SYN 標誌的TCP 報文段 稱為同步報文段。

FIN :表示通知對方本端要關閉連接了,標記數據是否發送完畢。如果FIN=1 ,即告訴對方:“我的數據
已經發送完畢,你可以釋放連接了”,帶FIN 標誌的TCP報 報文段稱為結束報文段。

有限狀態機:

CLOSED 沒有任何連接狀態
LISTEN 偵聽狀態,等待來自遠方TCP 端口的連接請求
SYN-SENT 在發送連接請求後,等待對方確認

SYN-RECEIVED 在收到和發送一個連接請求後,等待對方確認

ESTABLISHED:建立連接

涉及攻擊:黑客制造出大量主機和服務器建立連接,在建立三次握手的時候,不給服務器發送第三次確認,
這樣就會增大服務器的緩存壓力,導致服務器無法對外提供服務。

四次揮手
技術分享

解釋:剛開始客戶端A和服務器B都處於ESTAB-LISHED狀態,是可以進行數據傳輸的,這是A主動關閉,
並發送一個FIN=1,seq=u的數據,A隨機進入FIN-WAIT-1狀態,B收到數據後,發送一個seq=v,
ack=u+1(表示接收到A發送的數據),ACK=1表示ack的有效性,B隨機進入CLOSE-WAIT狀態,
A也進入FIN-WAIT-2狀態,B此時再發送一個FIN=1,ACK=1,seq=w,ack=u+1的數據,隨機進入
LAST-ACK狀態,A收到後,發送一個seq=u+1,ack=w+1,ACK=1的數據,B收到後進入CLOSE
狀態,A進入TIME-WAIT狀態,2倍的MSL值後進入CLOSED狀態。

知識點:

有限狀態機

FIN-WAIT-1 主動關閉, 主機已發送關閉連接請求,等待對方確認

FIN-WAIT-2 主動關閉, 主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求

TIME-WAIT 完成雙向傳輸連接關閉,等待所有分組消失

CLOSE-WAIT 被動關閉, 收到對方發來的關閉連接請求,並已確認。

LAST-ACK 被動關閉, 等待最後一個關閉傳輸連接確認,並等待所。

CLOSING:雙方同時嘗試關閉傳輸連接,等待對方確認。

註意:

當客戶端執行主動關閉時,它將向服務器發送一個結束報文段,同時連接進入FIN_WAIT_1 狀態。
若此時客戶端收到服務器專門用於確認目的的確認報文段,則連接轉移至FIN_WAIT_2 狀態。
當客戶端處於FIN_WAIT_2 狀態時,服務器處於CLOSE_WAIT 狀態,這一對狀態是可能發生
半關閉的狀態。此時如果服務器也關閉連接(發送結束報文段)則客戶端將給予確認並進入
TIME_WAIT 狀態。

TCP三次握手與四次分手