什麼是RST包,什麼是三次握手,什麼是四次握手

2021-08-16 06:20:21 字數 3849 閱讀 5463

一、rst包、

本人學習後總結:rst

包用於強制關閉tcp鏈結。

tcp連線關閉的正常方法是四次握手。但四次握手不是關閉tcp連線的唯一方法. 有時,如果主機需要盡快關閉連線(或連線超時,埠或主機不可達),rst (reset)包將被傳送. 注意,由於rst包不是tcp連線中的必須部分, 可以只傳送rst包(即不帶ack標記). 但在正常的tcp連線中rst包可以帶ack確認標記。
二、

三次握手

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) <-- [syn/ack] <--(a)

接著,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) <-- ack <-- (a)

3. (b) <-- ack/fin <-- (a)

4. (b) --> ack --> (a)

注意: 由於tcp連線是雙向連線, 因此關閉連線需要在兩個方向上做。ack/fin 包(ack 和fin

標記設為1)通常被認為是fin(終結)包.然而, 由於連線還沒有關閉, fin包總是打上ack標記.

沒有ack標記而僅有fin標記的包不是合法的包,並且通常被認為是惡意的

連線復位resetting a connection

四次握手不是關閉tcp連線的唯一方法. 有時,如果主機需要盡快關閉連線(或連線超時,埠或主機不可達),rst

(reset)包將被傳送. 注意在,由於rst包不是tcp連線中的必須部分, 可以只傳送rst包(即不帶ack標記).

但在正常的tcp連線中rst包可以帶ack確認標記

請注意rst包是可以不要收到方確認的?

無效的tcp標記invalid tcp flags

到目前為止,你已經看到了 syn, ack, fin, 和rst 標記. 另外,還有psh (push) 和urg (urgent)標記.

最常見的非法組合是syn/fin 包. 注意:由於 syn包是用來初始化連線的, 它不可能和 fin和rst標記一起出現. 這也是乙個惡意攻擊.

由於現在大多數防火牆已知 syn/fin 包, 別的一些組合,例如syn/fin/psh, syn/fin/rst, syn/fin/rst/psh。很明顯,當網路中出現這種包時,很你的網路肯定受到攻擊了。

別的已知的非法包有fin

(無ack標記)和"null"包。如同早先討論的,由於ack/fin包的出現是為了關閉乙個tcp連線,那麼正常的fin包總是帶有 ack

標記。"null"包就是沒有任何tcp標記的包(urg,ack,psh,rst,syn,fin都為0)。

到目前為止,正常的網路活動下,tcp協議棧不可能產生帶有上面提到的任何一種標記組合的tcp包。當你發現這些不正常的包時,肯定有人對你的網路不懷好意。

udp (使用者資料報協議user datagram protocol)

tcp是面向連線的,而udp是非連線的協議。udp沒有對接受進行確認的標記和確認機制。對丟包的處理是在應用層來完成的。(or accidental arrival).

此處需要重點注意的事情是:在正常情況下,當udp包到達乙個關閉的埠時,會返回乙個udp復位包。由於udp是非面向連線的, 因此沒有任何確認資訊來確認包是否正確到達目的地。因此如果你的防火牆丟棄udp包,它會開放所有的udp埠(?)。

由於internet上正常情況下一些包將被丟棄,甚至某些發往已關閉埠(非防火牆的)的udp包將不會到達目的,它們將返回乙個復位udp包。

因為這個原因,udp埠掃瞄總是不精確、不可靠的。

看起來大udp包的碎片是常見的dos (denial of service)攻擊的常見形式 (這裡有個dos攻擊的例子, ).

icmp (網間控制訊息協議internet control message protocol)

如同名字一樣, icmp用來在主機/路由器之間傳遞控制資訊的協議。 icmp包可以包含診斷資訊(ping, traceroute -

注意目前unix系統中的traceroute用udp包而不是icmp),錯誤資訊(網路/主機/埠 不可達 network/host/port

unreachable), 資訊(時間戳timestamp, 位址掩碼address mask request, etc.),或控制資訊

(source quench, redirect, etc.) 。

你可以在中找到icmp包的型別。

儘管icmp通常是無害的,還是有些型別的icmp資訊需要丟棄。

redirect (5), alternate host address (6), router advertisement (9) 能用來**通訊。

echo (8), timestamp (13) and address mask request (17)

能用來分別判斷主機是否起來,本地時間 和位址掩碼。注意它們是和返回的資訊類別有關的。

它們自己本身是不能被利用的,但它們洩露出的資訊對攻擊者是有用的。

icmp訊息有時也被用來作為dos攻擊的一部分(例如:洪水ping flood ping,死 ping ?呵呵,有趣 ping of death)?/p>

包碎片注意a note about packet fragmentation

如果乙個包的大小超過了tcp的最大段長度mss (maximum segment size) 或mtu (maximum transmission unit),能夠把此包發往目的的唯一方法是把此包分片。由於包分片是正常的,它可以被利用來做惡意的攻擊。

因為分片的包的第乙個分片包含乙個包頭,若沒有包分片的重組功能,包過濾器不可能檢測附加的包分片。典型的攻擊typical attacks

packet header isnormal until is it overwritten with different

destination ip (or port) thereby bypassing firewall rules。包分片能作為 dos

攻擊的一部分,它可以crash older ip stacks 或漲死cpu連線能力。

netfilter/iptables中的連線跟蹤**能自動做分片重組。它仍有弱點,可能受到飽和連線攻擊,可以把cpu資源耗光。

什麼是RST包,什麼是三次握手,什麼是四次握手

一 rst包 tcp連線關閉的正常方法是四次握手。但四次握手不是關閉tcp連線的唯一方法.有時,如果主機需要盡快關閉連線 或連線超時,埠或主機不可達 rst reset 包將被傳送.注意,由於rst包不是tcp連線中的必須部分,可以只傳送rst包 即不帶ack標記 但在正常的tcp連線中rst包可以...

什麼是TCP 三次握手及為什麼進行三次握手?

tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個 syn置位的 tcp報文,其中包含連線的初始序列號 x和乙個視窗大小 表示客戶端上用來儲存從伺服器...

為什麼TCP是三次握手

tcp 三次握手 首先簡單介紹一下tcp三次握手 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack ...