天天看點

什麼是RST包,什麼是三次握手,什麼是四次握手 ---請進

一、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攻擊的例子,http://grc.com/dos/grcdos.htm ).      
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.) 。      
你可以在http://www.iana.org/assignments/icmp-parameters中找到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
involve in overlapping the packet data in which packet header is
典型的攻擊Typical attacks involve in overlapping the packet data in which
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資源耗光。      

繼續閱讀