回覆列表
  • 1 # 使用者5299230923514

    TCP的三次握手是怎麼進行的了:傳送端傳送一個SYN=1,ACK=0標誌的資料包給接收端,請求進行連線,這是第一次握手;接收端收到請求並且允許連線的話,就會發送一個SYN=1,ACK=1標誌的資料包給傳送端,告訴它,可以通訊了,並且讓傳送端傳送一個確認資料包,這是第二次握手;最後,傳送端傳送一個SYN=0,ACK=1的資料包給接收端,告訴它連線已被確認,這就是第三次握手。之後,一個TCP連線建立,開始通訊。

    *SYN:同步標誌

    同步序列編號(Synchronize Sequence Numbers)欄有效。該標誌僅在三次握手建立TCP連線時有效。它提示TCP連線的服務端檢查序列編號,該序列編號為TCP連線初始端(一般是客戶端)的初始序列編號。在這裡,可以把TCP序列編號看作是一個範圍從0到4,294,967,295的32位計數器。透過TCP連線交換的資料中每一個位元組都經過序列編號。在TCP報頭中的序列編號欄包括了TCP分段中第一個位元組的序列編號。

    *ACK:確認標誌

    確認編號(Acknowledgement Number)欄有效。大多數情況下該標誌位是置位的。TCP報頭內的確認編號欄內包含的確認編號(w+1,Figure-1)為下一個預期的序列編號,同時提示遠端系統已經成功接收所有資料。

    *RST:復位標誌

    復位標誌有效。用於復位相應的TCP連線。

    *URG:緊急標誌

    緊急(The urgent pointer) 標誌有效。緊急標誌置位,

    *PSH:推標誌

    該標誌置位時,接收端不將該資料進行佇列處理,而是儘可能快將資料轉由應用處理。在處理 telnet 或 rlogin 等互動模式的連線時,該標誌總是置位的。

    *FIN:結束標誌

    帶有該標誌置位的資料包用來結束一個TCP回話,但對應埠仍處於開放狀態,準備接收後續資料

    三次握手Three-way Handshake

    一個虛擬連線的建立是透過三次握手來實現的

    1. (B) --> [SYN] --> (A)

    假如伺服器A和客戶機B通訊. 當A要和B通訊時,B首先向A發一個SYN (Synchronize) 標記的包,告訴A請求建立連線.

    注意: 一個 SYN包就是僅SYN標記設為1的TCP包(參見TCP包頭Resources). 認識到這點很重要,只有當A受到B發來的SYN包,才可建立連線,除此之外別無他法。因此,如果你的防火牆丟棄所有的發往網路介面的SYN包,那麼你將不能讓外部任何主機主動建立連線。

    2. (B)

    接著,A收到後會發一個對SYN包的確認包(SYN/ACK)回去,表示對第一個SYN包的確認,並繼續握手操作.

    注意: SYN/ACK包是僅SYN 和 ACK 標記為1的包.

    3. (B) --> [ACK] --> (A)

    B收到SYN/ACK 包,B發一個確認包(ACK),通知A連線已建立。至此,三次握手完成,一個TCP連線完成

    Note: ACK包就是僅ACK 標記設為1的TCP包. 需要注意的是當三此握手完成、連線建立以後,TCP連線的每個包都會設定ACK位

    這就是為何連線跟蹤很重要的原因了. 沒有連線跟蹤,防火牆將無法判斷收到的ACK包是否屬於一個已經建立的連線.一般的包過濾(Ipchains)收到ACK包時,會讓它透過(這絕對不是個好主意). 而當狀態型防火牆收到此種包時,它會先在連線表中查詢是否屬於哪個已建連線,否則丟棄該包

    四次握手Four-way Handshake

    四次握手用來關閉已建立的TCP連線

    1. (B) --> ACK/FIN --> (A)

    2. (B)

    3. (B)

    4. (B) --> ACK --> (A)

    注意: 由於TCP連線是雙向連線, 因此關閉連線需要在兩個方向上做。ACK/FIN 包(ACK 和FIN 標記設為1)通常被認為是FIN(終結)包.然而, 由於連線還沒有關閉, FIN包總是打上ACK標記. 沒有ACK標記而僅有FIN標記的包不是合法的包,並且通常被認為是惡意的

  • 中秋節和大豐收的關聯?
  • 懷孕幾周去做NT最好?