天天看點

Tcp三次握手和四次揮手狀态圖

三次握手

四次揮手

  • 正常情況下
  • 同時揮手

SYN攻擊:

在三次握手過程中,Server發送SYN-ACK之後,收到Client的ACK之前的TCP連接配接稱為半連接配接(half-open connect),此時Server處于SYN_RCVD狀态,當收到ACK後,Server轉入ESTABLISHED狀态。SYN攻擊就是Client在短時間内僞造大量不存在的IP位址,并向Server不斷地發送SYN包,Server回複确認包,并等待Client的确認,由于源位址是不存在的,是以,Server需要不斷重發直至逾時,這些僞造的SYN包将産時間占用未連接配接隊列,導緻正常的SYN請求因為隊列滿而被丢棄,進而引起網絡堵塞甚至系統癱瘓。SYN攻擊時一種典型的DDOS攻擊,檢測SYN攻擊的方式非常簡單,即當Server上有大量半連接配接狀态且源IP位址是随機的,則可以斷定遭到SYN攻擊了,使用如下指令可以讓之現行: #netstat -nap | grep SYN_RECV

TIME_WAIT狀态是什麼?

下文轉載自 TIME_WAIT是什麼?

在TCP斷開的過程中會有四個狀态變化過程,如下圖所示:

在連接配接撤銷過程中,有如下過程:

  • HOST1上的應用程式關閉己方的連接配接導緻TCP發送一個FIN消息給HOST2。
  • HOST2發送一個确認消息給HOST1,并且HOST2把FIN作為EOF遞交給HOST2上的應用程式。
  • 一段時間過後,HOST2上的應用程式關閉它那邊的連接配接,引發一個FIN消息給HOST1。
  • HOST1給HOST2發送一個确認消息,然後HOST2關閉連接配接并釋放資源,然而,HOST1卻沒有關閉連接配接,而是進入了TIME_WAIT狀态,并為兩個最大段生存時間(2MSL)保留在此狀态.
為什麼需要TIME_WAIT?
  • 因為在第四步的時候,HOST1發送的ACK可能丢失并導緻HOST2重新發送FIN消息,TIME_WAIT維護連接配接狀态.

    如果執行主動關閉的一方HOST1 不進入到TIME_WAIT狀态就關閉連接配接那會發生什麼呢?當重傳的FIN消息到達時,因為TCP已經不再有連接配接的資訊了,是以就用RST(重新啟動)消息應答,導緻HOST2進入錯誤的狀态而不是有序終止狀态,如果發送最後ACK消息的一方處于TIME_WAIT狀态并仍然記錄着連接配接的資訊,它就可以正确的響應對等方HOST2的FIN消息了.

  • TIME_WAIT為連接配接中”離群的段”提供從網絡中消失的時間。

    考慮一下,如果延遲或者重傳段在連接配接關閉後到達時會發生什麼呢?通常情況下,因為TCP僅僅丢棄該資料并響應RST消息,是以這不會造成任何問題。當RST消息到達發出延時段的主機時,因為該主機也沒有記錄連接配接的任何資訊,是以它也丢棄該段。然而,如果兩個相同主機之間又建立了一個具有相同端口号的新連接配接,那麼離群的段就可能被看成是新連接配接的,如果離群的段中資料的任何序列号恰恰在新連接配接的目前接收視窗中,資料就會被重新接收,其結果就是破壞新連接配接。

繼續閱讀