導航:首頁 > 網路連接 > 計算機網路中psh是什麼

計算機網路中psh是什麼

發布時間:2024-07-11 16:05:02

⑴ 網路攻擊器的原理是什麼怎麼向固定的ip地址發起進攻的

常見網路攻擊原理
1.1 TCP SYN拒絕服務攻擊
一般情況下,一個TCP連接的建立需要經過三次握手的過程,即:
1、 建立發起者向目標計算機發送一個TCP SYN報文;
2、 目標計算機收到這個SYN報文後,在內存中創建TCP連接控制塊(TCB),然後向發起者回送一個TCP ACK報文,等待發起者的回應;
3、 發起者收到TCP ACK報文後,再回應一個ACK報文,這樣TCP連接就建立起來了。
利用這個過程,一些惡意的攻擊者可以進行所謂的TCP SYN拒絕服務攻擊:
1、 攻擊者向目標計算機發送一個TCP SYN報文;
2、 目標計算機收到這個報文後,建立TCP連接控制結構(TCB),並回應一個ACK,等待發起者的回應;
3、 而發起者則不向目標計算機回應ACK報文,這樣導致目標計算機一致處於等待狀態。
可以看出,目標計算機如果接收到大量的TCP SYN報文,而沒有收到發起者的第三次ACK回應,會一直等待,處於這樣尷尬狀態的半連接如果很多,則會把目標計算機的資源(TCB控制結構,TCB,一般情況下是有限的)耗盡,而不能響應正常的TCP連接請求。

1.2 ICMP洪水

正常情況下,為了對網路進行診斷,一些診斷程序,比如PING等,會發出ICMP響應請求報文(ICMP ECHO),接收計算機接收到ICMP ECHO後,會回應一個ICMP ECHO Reply報文。而這個過程是需要CPU處理的,有的情況下還可能消耗掉大量的資源,比如處理分片的時候。這樣如果攻擊者向目標計算機發送大量的ICMP ECHO報文(產生ICMP洪水),則目標計算機會忙於處理這些ECHO報文,而無法繼續處理其它的網路數據報文,這也是一種拒絕服務攻擊(DOS)。

1.3 UDP洪水

原理與ICMP洪水類似,攻擊者通過發送大量的UDP報文給目標計算機,導致目標計算機忙於處理這些UDP報文而無法繼續處理正常的報文。

1.4 埠掃描

根據TCP協議規范,當一台計算機收到一個TCP連接建立請求報文(TCP SYN)的時候,做這樣的處理:

1、 如果請求的TCP埠是開放的,則回應一個TCP ACK報文,並建立TCP連接控制結構(TCB);
2、 如果請求的TCP埠沒有開放,則回應一個TCP RST(TCP頭部中的RST標志設為1)報文,告訴發起計算機,該埠沒有開放。

相應地,如果IP協議棧收到一個UDP報文,做如下處理:

1、 如果該報文的目標埠開放,則把該UDP報文送上層協議(UDP)處理,不回應任何報文(上層協議根據處理結果而回應的報文例外);
2、 如果該報文的目標埠沒有開放,則向發起者回應一個ICMP不可達報文,告訴發起者計算機該UDP報文的埠不可達。

利用這個原理,攻擊者計算機便可以通過發送合適的報文,判斷目標計算機哪些TCP或UDP埠是開放的,過程如下:

1、 發出埠號從0開始依次遞增的TCP SYN或UDP報文(埠號是一個16比特的數字,這樣最大為65535,數量很有限);
2、 如果收到了針對這個TCP報文的RST報文,或針對這個UDP報文的ICMP不可達報文,則說明這個埠沒有開放;
3、 相反,如果收到了針對這個TCP SYN報文的ACK報文,或者沒有接收到任何針對該UDP報文的ICMP報文,則說明該TCP埠是開放的,UDP埠可能開放(因為有的實現中可能不回應ICMP不可達報文,即使該UDP埠沒有開放)。

這樣繼續下去,便可以很容易的判斷出目標計算機開放了哪些TCP或UDP埠,然後針對埠的具體數字,進行下一步攻擊,這就是所謂的埠掃描攻擊。

1.5 分片IP報文攻擊

為了傳送一個大的IP報文,IP協議棧需要根據鏈路介面的MTU對該IP報文進行分片,通過填充適當的IP頭中的分片指示欄位,接收計算機可以很容易的把這些IP分片報文組裝起來。
目標計算機在處理這些分片報文的時候,會把先到的分片報文緩存起來,然後一直等待後續的分片報文,這個過程會消耗掉一部分內存,以及一些IP協議棧的數據結構。如果攻擊者給目標計算機只發送一片分片報文,而不發送所有的分片報文,這樣攻擊者計算機便會一直等待(直到一個內部計時器到時),如果攻擊者發送了大量的分片報文,就會消耗掉目標計算機的資源,而導致不能相應正常的IP報文,這也是一種DOS攻擊。

1.6 SYN比特和FIN比特同時設置

在TCP報文的報頭中,有幾個標志欄位:
1、 SYN:連接建立標志,TCP SYN報文就是把這個標志設置為1,來請求建立連接;
2、 ACK:回應標志,在一個TCP連接中,除了第一個報文(TCP SYN)外,所有報文都設置該欄位,作為對上一個報文的相應;
3、 FIN:結束標志,當一台計算機接收到一個設置了FIN標志的TCP報文後,會拆除這個TCP連接;
4、 RST:復位標志,當IP協議棧接收到一個目標埠不存在的TCP報文的時候,會回應一個RST標志設置的報文;
5、 PSH:通知協議棧盡快把TCP數據提交給上層程序處理。

正常情況下,SYN標志(連接請求標志)和FIN標志(連接拆除標志)是不能同時出現在一個TCP報文中的。而且RFC也沒有規定IP協議棧如何處理這樣的畸形報文,因此,各個操作系統的協議棧在收到這樣的報文後的處理方式也不同,攻擊者就可以利用這個特徵,通過發送SYN和FIN同時設置的報文,來判斷操作系統的類型,然後針對該操作系統,進行進一步的攻擊。

1.7 沒有設置任何標志的TCP報文攻擊

正常情況下,任何TCP報文都會設置SYN,FIN,ACK,RST,PSH五個標志中的至少一個標志,第一個TCP報文(TCP連接請求報文)設置SYN標志,後續報文都設置ACK標志。有的協議棧基於這樣的假設,沒有針對不設置任何標志的TCP報文的處理過程,因此,這樣的協議棧如果收到了這樣的報文,可能會崩潰。攻擊者利用了這個特點,對目標計算機進行攻擊。

1.8 設置了FIN標志卻沒有設置ACK標志的TCP報文攻擊

正常情況下,ACK標志在除了第一個報文(SYN報文)外,所有的報文都設置,包括TCP連接拆除報文(FIN標志設置的報文)。但有的攻擊者卻可能向目標計算機發送設置了FIN標志卻沒有設置ACK標志的TCP報文,這樣可能導致目標計算機崩潰。

1.9 死亡之PING

TCP/IP規范要求IP報文的長度在一定范圍內(比如,0-64K),但有的攻擊計算機可能向目標計算機發出大於64K長度的PING報文,導致目標計算機IP協議棧崩潰。

1.10 地址猜測攻擊

跟埠掃描攻擊類似,攻擊者通過發送目標地址變化的大量的ICMP ECHO報文,來判斷目標計算機是否存在。如果收到了對應的ECMP ECHO REPLY報文,則說明目標計算機是存在的,便可以針對該計算機進行下一步的攻擊。

1.11 淚滴攻擊

對於一些大的IP包,需要對其進行分片傳送,這是為了迎合鏈路層的MTU(最大傳輸單元)的要求。比如,一個4500位元組的IP包,在MTU為1500的鏈路上傳輸的時候,就需要分成三個IP包。
在IP報頭中有一個偏移欄位和一個分片標志(MF),如果MF標志設置為1,則表面這個IP包是一個大IP包的片斷,其中偏移欄位指出了這個片斷在整個IP包中的位置。例如,對一個4500位元組的IP包進行分片(MTU為1500),則三個片斷中偏移欄位的值依次為:0,1500,3000。這樣接收端就可以根據這些信息成功的組裝該IP包。

如果一個攻擊者打破這種正常情況,把偏移欄位設置成不正確的值,即可能出現重合或斷開的情況,就可能導致目標操作系統崩潰。比如,把上述偏移設置為0,1300,3000。這就是所謂的淚滴攻擊。

1.12 帶源路由選項的IP報文

為了實現一些附加功能,IP協議規范在IP報頭中增加了選項欄位,這個欄位可以有選擇的攜帶一些數據,以指明中間設備(路由器)或最終目標計算機對這些IP報文進行額外的處理。

源路由選項便是其中一個,從名字中就可以看出,源路由選項的目的,是指導中間設備(路由器)如何轉發該數據報文的,即明確指明了報文的傳輸路徑。比如,讓一個IP報文明確的經過三台路由器R1,R2,R3,則可以在源路由選項中明確指明這三個路由器的介面地址,這樣不論三台路由器上的路由表如何,這個IP報文就會依次經過R1,R2,R3。而且這些帶源路由選項的IP報文在傳輸的過程中,其源地址不斷改變,目標地址也不斷改變,因此,通過合適的設置源路由選項,攻擊者便可以偽造一些合法的IP地址,而矇混進入網路。

1.13 帶記錄路由選項的IP報文

記錄路由選項也是一個IP選項,攜帶了該選項的IP報文,每經過一台路由器,該路由器便把自己的介面地址填在選項欄位裡面。這樣這些報文在到達目的地的時候,選項數據裡面便記錄了該報文經過的整個路徑。
通過這樣的報文可以很容易的判斷該報文經過的路徑,從而使攻擊者可以很容易的尋找其中的攻擊弱點。

1.14 未知協議欄位的IP報文

在IP報文頭中,有一個協議欄位,這個欄位指明了該IP報文承載了何種協議 ,比如,如果該欄位值為1,則表明該IP報文承載了ICMP報文,如果為6,則是TCP,等等。目前情況下,已經分配的該欄位的值都是小於100的,因此,一個帶大於100的協議欄位的IP報文,可能就是不合法的,這樣的報文可能對一些計算機操作系統的協議棧進行破壞。

1.15 IP地址欺騙

一般情況下,路由器在轉發報文的時候,只根據報文的目的地址查路由表,而不管報文的源地址是什麼,因此,這樣就 可能面臨一種危險:如果一個攻擊者向一台目標計算機發出一個報文,而把報文的源地址填寫為第三方的一個IP地址,這樣這個報文在到達目標計算機後,目標計算機便可能向毫無知覺的第三方計算機回應。這便是所謂的IP地址欺騙攻擊。

比較著名的SQL Server蠕蟲病毒,就是採用了這種原理。該病毒(可以理解為一個攻擊者)向一台運行SQL Server解析服務的伺服器發送一個解析服務的UDP報文,該報文的源地址填寫為另外一台運行SQL Server解析程序(SQL Server 2000以後版本)的伺服器,這樣由於SQL Server 解析服務的一個漏洞,就可能使得該UDP報文在這兩台伺服器之間往復,最終導致伺服器或網路癱瘓。

1.16 WinNuke攻擊

NetBIOS作為一種基本的網路資源訪問介面,廣泛的應用於文件共享,列印共享,進程間通信(IPC),以及不同操作系統之間的數據交換。一般情況下,NetBIOS是運行在LLC2鏈路協議之上的,是一種基於組播的網路訪問介面。為了在TCP/IP協議棧上實現NetBIOS,RFC規定了一系列交互標准,以及幾個常用的TCP/UDP埠:

139:NetBIOS會話服務的TCP埠;
137:NetBIOS名字服務的UDP埠;
136:NetBIOS數據報服務的UDP埠。

WINDOWS操作系統的早期版本(WIN95/98/NT)的網路服務(文件共享等)都是建立在NetBIOS之上的,因此,這些操作系統都開放了139埠(最新版本的WINDOWS 2000/XP/2003等,為了兼容,也實現了NetBIOS over TCP/IP功能,開放了139埠)。

WinNuke攻擊就是利用了WINDOWS操作系統的一個漏洞,向這個139埠發送一些攜帶TCP帶外(OOB)數據報文,但這些攻擊報文與正常攜帶OOB數據報文不同的是,其指針欄位與數據的實際位置不符,即存在重合,這樣WINDOWS操作系統在處理這些數據的時候,就會崩潰。

1.17 Land攻擊

LAND攻擊利用了TCP連接建立的三次握手過程,通過向一個目標計算機發送一個TCP SYN報文(連接建立請求報文)而完成對目標計算機的攻擊。與正常的TCP SYN報文不同的是,LAND攻擊報文的源IP地址和目的IP地址是相同的,都是目標計算機的IP地址。這樣目標計算機接收到這個SYN報文後,就會向該報文的源地址發送一個ACK報文,並建立一個TCP連接控制結構(TCB),而該報文的源地址就是自己,因此,這個ACK報文就發給了自己。這樣如果攻擊者發送了足夠多的SYN報文,則目標計算機的TCB可能會耗盡,最終不能正常服務。這也是一種DOS攻擊。

⑵ TCP協議詳解及實戰解析【精心整理收藏】

TCP協議是在TCP/IP協議模型中的運輸層中很重要的一個協議、負責處理主機埠層面之間的數據傳輸。主要有以下特點:

1.TCP是面向鏈接的協議,在數據傳輸之前需要通過三次握手建立TCP鏈接,當數據傳遞完成之後,需要通過四次揮手進行連接釋放。

2.每一條TCP通信都是兩台主機和主機之間的,是點對點傳輸的協議。

3.TCP提供可靠的、無差錯、不丟失、不重復,按序到達的服務。

4.TCP的通信雙方在連接建立的任何時候都可以發送數據。TCP連接的兩端都設有發送緩存和接收緩存,用來臨時存放雙向通信的數據。

5.面向位元組流。在數據傳輸的過程中如果報文比較長的話TCP會進行數據分段傳輸,每一條分段的TCP傳輸信息都帶有分段的序號,每一段都包含一部分位元組流。接收方根據每段攜帶的的序號信息進行數據拼接,最終拼接出來初始的傳輸數據。但是在整個傳輸的過程中每一段TCP攜帶的都是被切割的位元組流數據。所以說TCP是面向位元組流的。

a.TCP和UDP在發送報文時所採用的方式完全不同。TCP並不關心應用程序一次把多長的報文發送到TCP緩存中,而是根據對方給出的窗口值和當前網路擁塞的程度來決定一個報文段應包含多少個位元組(UDP發送的報文長度是應用程序給出的)。
b.如果應用程序傳送到TCP緩存的數據塊太大,TCP就可以把它劃分短一些再傳。TCP也可以等待積累有足夠多的位元組後再構建成報文段發送出去。

各欄位含義:

源埠:發送端的埠號

目的埠:接收端的埠號

序號:TCP將發送報文分段傳輸的時候會給每一段加上序號,接收端也可以根據這個序號來判斷數據拼接的順序,主要用來解決網路報亂序的問題

確認號:確認號為接收端收到數據之後進行排序確認以及發送下一次期待接收到的序號,數值 = 接收到的發送號 + 1

數據偏移:佔4比特,表示數據開始的地方離TCP段的起始處有多遠。實際上就是TCP段首部的長度。由於首部長度不固定,因此數據偏移欄位是必要的。數據偏移以32位為長度單位,因此TCP首部的最大長度是60(15*4)個位元組。

控制位:

URG:此標志表示TCP包的緊急指針域有效,用來保證TCP連接不被中斷,並且督促 中間層設備要盡快處理這些數據;

ACK:此標志表示應答域有效,就是說前面所說的TCP應答號將會包含在TCP數據包中;有兩個取值:0和1, 為1的時候表示應答域有效,反之為0;

PSH:這個標志位表示Push操作。所謂Push操作就是指在數據包到達接收端以後,立即傳送給應用程序, 而不是在緩沖區中排隊;

RST:這個標志表示連接復位請求。用來復位那些產生錯誤的連接,也被用來拒絕錯誤和非法的數據包;

SYN:表示同步序號,用來建立連接。SYN標志位和ACK標志位搭配使用,當連接請求的時候,SYN=1, ACK=0;連接被響應的時候,SYN=1,ACK=1;這個標志的數據包經常被用來進行埠掃描。掃描者發送 一個只有SYN的數據包,如果對方主機響應了一個數據包回來 ,就表明這台主機存在這個埠;但是由於這 種掃描方式只是進行TCP三次握手的第一次握手,因此這種掃描的成功表示被掃描的機器不很安全,一台安全 的主機將會強制要求一個連接嚴格的進行TCP的三次握手;

FIN: 表示發送端已經達到數據末尾,也就是說雙方的數據傳送完成,沒有數據可以傳送了,發送FIN標志 位的TCP數據包後,連接將被斷開。這個標志的數據包也經常被用於進行埠掃描。

窗口:TCP里很重要的一個機制,佔2位元組,表示報文段發送方期望接收的位元組數,可接收的序號范圍是從接收方的確認號開始到確認號加上窗口大小之間的數據。後面會有實例講解。

校驗和:校驗和包含了偽首部、TCP首部和數據,校驗和是TCP強制要求的,由發送方計算,接收方驗證

緊急指針:URG標志為1時,緊急指針有效,表示數據需要優先處理。緊急指針指出在TCP段中的緊急數據的最後一個位元組的序號,使接收方可以知道緊急數據共有多長。

選項:最常用的選項是最大段大小(Maximum Segment Size,MSS),向對方通知本機可以接收的最大TCP段長度。MSS選項只在建立連接的請求中發送。

放在乙太網幀里看TCP的位置

TCP 數據包在 IP 數據包的負載裡面。它的頭信息最少也需要20位元組,因此 TCP 數據包的最大負載是 1480 - 20 = 1460 位元組。由於 IP 和 TCP 協議往往有額外的頭信息,所以 TCP 負載實際為1400位元組左右。

因此,一條1500位元組的信息需要兩個 TCP 數據包。HTTP/2 協議的一大改進, 就是壓縮 HTTP 協議的頭信息,使得一個 HTTP 請求可以放在一個 TCP 數據包裡面,而不是分成多個,這樣就提高了速度。

乙太網數據包的負載是1500位元組,TCP 數據包的負載在1400位元組左右

一個包1400位元組,那麼一次性發送大量數據,就必須分成多個包。比如,一個 10MB 的文件,需要發送7100多個包。

發送的時候,TCP 協議為每個包編號(sequence number,簡稱 SEQ),以便接收的一方按照順序還原。萬一發生丟包,也可以知道丟失的是哪一個包。

第一個包的編號是一個隨機數。為了便於理解,這里就把它稱為1號包。假定這個包的負載長度是100位元組,那麼可以推算出下一個包的編號應該是101。這就是說,每個數據包都可以得到兩個編號:自身的編號,以及下一個包的編號。接收方由此知道,應該按照什麼順序將它們還原成原始文件。

收到 TCP 數據包以後,組裝還原是操作系統完成的。應用程序不會直接處理 TCP 數據包。

對於應用程序來說,不用關心數據通信的細節。除非線路異常,否則收到的總是完整的數據。應用程序需要的數據放在 TCP 數據包裡面,有自己的格式(比如 HTTP 協議)。

TCP 並沒有提供任何機制,表示原始文件的大小,這由應用層的協議來規定。比如,HTTP 協議就有一個頭信息Content-Length,表示信息體的大小。對於操作系統來說,就是持續地接收 TCP 數據包,將它們按照順序組裝好,一個包都不少。

操作系統不會去處理 TCP 數據包裡面的數據。一旦組裝好 TCP 數據包,就把它們轉交給應用程序。TCP 數據包裡面有一個埠(port)參數,就是用來指定轉交給監聽該埠的應用程序。

應用程序收到組裝好的原始數據,以瀏覽器為例,就會根據 HTTP 協議的Content-Length欄位正確讀出一段段的數據。這也意味著,一次 TCP 通信可以包括多個 HTTP 通信。

伺服器發送數據包,當然越快越好,最好一次性全發出去。但是,發得太快,就有可能丟包。帶寬小、路由器過熱、緩存溢出等許多因素都會導致丟包。線路不好的話,發得越快,丟得越多。

最理想的狀態是,在線路允許的情況下,達到最高速率。但是我們怎麼知道,對方線路的理想速率是多少呢?答案就是慢慢試。

TCP 協議為了做到效率與可靠性的統一,設計了一個慢啟動(slow start)機制。開始的時候,發送得較慢,然後根據丟包的情況,調整速率:如果不丟包,就加快發送速度;如果丟包,就降低發送速度。

Linux 內核裡面 設定 了(常量TCP_INIT_CWND),剛開始通信的時候,發送方一次性發送10個數據包,即"發送窗口"的大小為10。然後停下來,等待接收方的確認,再繼續發送。

默認情況下,接收方每收到 兩個 TCP 數據包,就要 發送 一個確認消息。"確認"的英語是 acknowledgement,所以這個確認消息就簡稱 ACK。

ACK 攜帶兩個信息。

發送方有了這兩個信息,再加上自己已經發出的數據包的最新編號,就會推測出接收方大概的接收速度,從而降低或增加發送速率。這被稱為"發送窗口",這個窗口的大小是可變的。

注意,由於 TCP 通信是雙向的,所以雙方都需要發送 ACK。兩方的窗口大小,很可能是不一樣的。而且 ACK 只是很簡單的幾個欄位,通常與數據合並在一個數據包裡面發送。

即使對於帶寬很大、線路很好的連接,TCP 也總是從10個數據包開始慢慢試,過了一段時間以後,才達到最高的傳輸速率。這就是 TCP 的慢啟動。

TCP 協議可以保證數據通信的完整性,這是怎麼做到的?

前面說過,每一個數據包都帶有下一個數據包的編號。如果下一個數據包沒有收到,那麼 ACK 的編號就不會發生變化。

舉例來說,現在收到了4號包,但是沒有收到5號包。ACK 就會記錄,期待收到5號包。過了一段時間,5號包收到了,那麼下一輪 ACK 會更新編號。如果5號包還是沒收到,但是收到了6號包或7號包,那麼 ACK 裡面的編號不會變化,總是顯示5號包。這會導致大量重復內容的 ACK。

如果發送方發現收到 三個 連續的重復 ACK,或者超時了還沒有收到任何 ACK,就會確認丟包,即5號包遺失了,從而再次發送這個包。通過這種機制,TCP 保證了不會有數據包丟失。

TCP是一個滑動窗口協議,即一個TCP連接的發送端在某個時刻能發多少數據是由滑動窗口控制的,而滑動窗口的大小實際上是由兩個窗口共同決定的,一個是接收端的通告窗口,這個窗口值在TCP協議頭部信息中有,會隨著數據的ACK包發送給發送端,這個值表示的是在接收端的TCP協議緩存中還有多少剩餘空間,發送端必須保證發送的數據不超過這個剩餘空間以免造成緩沖區溢出,這個窗口是接收端用來進行流量限制的,在傳輸過程中,通告窗口大小與接收端的進程取出數據的快慢有關。另一個窗口是發送端的擁塞窗口(Congestion window),由發送端維護這個值,在協議頭部信息中沒有,滑動窗口的大小就是通告窗口和擁塞窗口的較小值,所以擁塞窗口也看做是發送端用來進行流量控制的窗口。滑動窗口的左邊沿向右移動稱為窗口合攏,發生在發送的數據被確認時(此時,表明數據已被接收端收到,不會再被需要重傳,可以從發送端的發送緩存中清除了),滑動窗口的右邊沿向右移動稱為窗口張開,發生在接收進程從接收端協議緩存中取出數據時。隨著發送端不斷收到的被發送數據的ACK包,根據ACK包中的確認序號和通告窗口大小使滑動窗口得以不斷的合攏和張開,形成滑動窗口的向前滑動。如果接收進程一直不取數據,則會出現0窗口現象,即滑動窗口左邊沿與右邊沿重合,此時窗口大小為0,就無法再發送數據。

在TCP里,接收端(B)會給發送端(A)報一個窗口的大小,叫Advertised window。

1.在沒有收到B的確認情況下,A可以連續把窗口內的數據都發送出去。凡是已經發送過的數據,在

未收到確認之前都必須暫時保留,以便在超時重傳時使用。

2.發送窗口裡面的序號表示允許發送的序號。顯然,窗口越大,發送方就可以在收到對方確認之前連續

發送更多數據,因而可能獲得更高的傳輸效率。但接收方必須來得及處理這些收到的數據。

3.發送窗口後沿的後面部分表示已發送且已收到確認。這些數據顯然不需要再保留了。

4.發送窗口前沿的前面部分表示不允許發送的,應為接收方都沒有為這部分數據保留臨時存放的緩存空間。

5.發送窗口後沿的變化情況有兩種:不動(沒有收到新的確認)和前移(收到了新的確認)

6.發送窗口前沿的變化情況有兩種:不斷向前移或可能不動(沒收到新的確認)

TCP的發送方在規定時間內沒有收到確認就要重傳已發送的報文段。這種重傳的概念很簡單,但重傳時間的選擇確是TCP最復雜的問題之一。TCP採用了一種自適應演算法,它記錄一個報文段發出的時間,以及收到響應的確認的時間

這兩個時間之差就是報文段的往返時間RTT。TCP保留了RTT的一個加權平均往返時間。超時重傳時間RTO略大於加權平均往返時間

RTT:
即Round Trip Time,表示從發送端到接收端的一去一回需要的時間,tcp在數據傳輸過程中會對RTT進行采樣(即對發送的數據包及其ACK的時間差進行測量,並根據測量值更新RTT值,具體的演算法TCPIP詳解裡面有),TCP根據得到的RTT值更新RTO值,即Retransmission TimeOut,就是重傳間隔,發送端對每個發出的數據包進行計時,如果在RTO時間內沒有收到所發出的數據包的對應ACK,則任務數據包丟失,將重傳數據。一般RTO值都比采樣得到的RTT值要大。

如果收到的報文段無差錯,只是未按序號,中間還缺少一些序號的數據,那麼能否設法只傳送缺少的數據而不重傳已經正確到達接收方的數據?

答案是可以的,選擇確認就是一種可行的處理方法。

如果要使用選項確認SACK,那麼在建立TCP連接時,就要在TCP首部的選項中加上「允許SACK」的選項,而雙方必須都事先商定好。如果使用選擇確認,

那麼原來首部中的「確認號欄位」的用法仍然不變。SACK文檔並沒有明確發送方應當怎麼響應SACK.因此大多數的實現還是重傳所有未被確認的數據塊。

一般說來,我們總是希望數據傳輸的更快一些,但如果發送方把數據發送的過快,接收方就可能來不及接收,這會造成數據的丟失。所謂流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。

計算機網路中的鏈路容量,交換節點中的緩存和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的性能就要變壞。這種情況就叫做擁塞。

擁塞控制方法:

1.慢開始和擁塞避免

2.快重傳和快恢復

3.隨機早期檢測

1.一開始,客戶端和服務端都處於CLOSED狀態

2.先是服務端主動監聽某個埠,處於LISTEN狀態(比如服務端啟動,開始監聽)。

3.客戶端主動發起連接SYN,之後處於SYN-SENT狀態(第一次握手,發送 SYN = 1 ACK = 0 seq = x ack = 0)。

4.服務端收到發起的連接,返回SYN,並且ACK客戶端的SYN,之後處於SYN-RCVD狀態(第二次握手,發送 SYN = 1 ACK = 1 seq = y ack = x + 1)。

5.客戶端收到服務端發送的SYN和ACK之後,發送ACK的ACK,之後處於ESTABLISHED狀態(第三次握手,發送 SYN = 0 ACK = 1 seq = x + 1 ack = y + 1)。

6.服務端收到客戶端的ACK之後,處於ESTABLISHED狀態。

(需要注意的是,有可能X和Y是相等的,可能都是0,因為他們代表了各自發送報文段的序號。)

TCP連接釋放四次揮手

1.當前A和B都處於ESTAB-LISHED狀態。

2.A的應用進程先向其TCP發出連接釋放報文段,並停止再發送數據,主動關閉TCP連接。

3.B收到連接釋放報文段後即發出確認,然後B進入CLOSE-WAIT(關閉等待)狀態。TCP伺服器進程這時應通知高層應用進程,因而從A到B這個方向的連接就釋放了,這時TCP連接處於半關閉狀態,即A已經沒有數據發送了。

從B到A這個方向的連接並未關閉,這個狀態可能會持續一些時間。

4.A收到來自B的確認後,就進入FIN-WAIT-2(終止等待2)狀態,等待B發出的連接釋放報文端。

5.若B已經沒有向A發送的數據,B發出連接釋放信號,這時B進入LAST-ACK(最後確認)狀態等待A的確認。

6.A再收到B的連接釋放消息後,必須對此發出確認,然後進入TIME-WAIT(時間等待)狀態。請注意,現在TCP連接還沒有釋放掉,必須經過時間等待計時器(TIME-WAIT timer)設置的時間2MSL後,A才進入CLOSED狀態。

7。B收到A發出的確認消息後,進入CLOSED狀態。

以請求網路為例,看一下三次握手真實數據的TCP連接建立過程

我們再來看四次揮手。TCP斷開連接時,會有四次揮手過程,標志位是FIN,我們在封包列表中找到對應位置,理論上應該找到4個數據包,但我試了好幾次,實際只抓到3個數據包。查了相關資料,說是因為伺服器端在給客戶端傳回的過程中,將兩個連續發送的包進行了合並。因此下面會按照合並後的三次揮手解釋,若有錯誤之處請指出。

第一步,當主機A的應用程序通知TCP數據已經發送完畢時,TCP向主機B發送一個帶有FIN附加標記的報文段(FIN表示英文finish)。

第二步,主機B收到這個FIN報文段之後,並不立即用FIN報文段回復主機A,而是先向主機A發送一個確認序號ACK,同時通知自己相應的應用程序:對方要求關閉連接(先發送ACK的目的是為了防止在這段時間內,對方重傳FIN報文段)。

第三步,主機B的應用程序告訴TCP:我要徹底的關閉連接,TCP向主機A送一個FIN報文段。

第四步,主機A收到這個FIN報文段後,向主機B發送一個ACK表示連接徹底釋放。

這是因為服務端在LISTEN狀態下,收到建立連接請求的SYN報文後,把ACK和SYN放在一個報文里發送給客戶端。而關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方也未必全部數據都發送給對方了,所以己方可以立即close,也可以發送一些數據給對方後,再發送FIN報文給對方來表示同意現在關閉連接,因此,己方ACK和FIN一般都會分開發送。

原因有二:
一、保證TCP協議的全雙工連接能夠可靠關閉
二、保證這次連接的重復數據段從網路中消失

先說第一點,如果Client直接CLOSED了,那麼由於IP協議的不可靠性或者是其它網路原因,導致Server沒有收到Client最後回復的ACK。那麼Server就會在超時之後繼續發送FIN,此時由於Client已經CLOSED了,就找不到與重發的FIN對應的連接,最後Server就會收到RST而不是ACK,Server就會以為是連接錯誤把問題報告給高層。這樣的情況雖然不會造成數據丟失,但是卻導致TCP協議不符合可靠連接的要求。所以,Client不是直接進入CLOSED,而是要保持TIME_WAIT,當再次收到FIN的時候,能夠保證對方收到ACK,最後正確的關閉連接。

再說第二點,如果Client直接CLOSED,然後又再向Server發起一個新連接,我們不能保證這個新連接與剛關閉的連接的埠號是不同的。也就是說有可能新連接和老連接的埠號是相同的。一般來說不會發生什麼問題,但是還是有特殊情況出現:假設新連接和已經關閉的老連接埠號是一樣的,如果前一次連接的某些數據仍然滯留在網路中,這些延遲數據在建立新連接之後才到達Server,由於新連接和老連接的埠號是一樣的,又因為TCP協議判斷不同連接的依據是socket pair,於是,TCP協議就認為那個延遲的數據是屬於新連接的,這樣就和真正的新連接的數據包發生混淆了。所以TCP連接還要在TIME_WAIT狀態等待2倍MSL,這樣可以保證本次連接的所有數據都從網路中消失。

硬體速度
網路和伺服器的負載
請求和響應報文的尺寸
客戶端和伺服器之間的距離
TCP 協議的技術復雜性

TCP 連接建立握手;
TCP 慢啟動擁塞控制;
數據聚集的 Nagle 演算法;
用於捎帶確認的 TCP 延遲確認演算法;
TIME_WAIT 時延和埠耗盡。

介紹完畢,就這?
是的,就這。

補充:

大部分內容為網路整理,方便自己學習回顧,參考文章:
TCP 協議簡介
TCP協議圖文詳解
什麼是TCP協議?
wireshark抓包分析——TCP/IP協議
TCP協議的三次握手和四次揮手
TCP協議詳解
TCP帶寬和時延的研究(1)

⑶ 網路攻擊的一般原理和方法是什麼

下載:http://download.csdn.net/source/274376
常見網路攻擊原理

1.1 TCP SYN拒絕服務攻擊

一般情況下,一個TCP連接的建立需要經過三次握手的過程,即:

1、 建立發起者向目標計算機發送一個TCP SYN報文;

2、 目標計算機收到這個SYN報文後,在內存中創建TCP連接控制塊(TCB),然後向發起者回送一個TCP ACK報文,等待發起者的回應;

3、 發起者收到TCP ACK報文後,再回應一個ACK報文,這樣TCP連接就建立起來了。
利用這個過程,一些惡意的攻擊者可以進行所謂的TCP SYN拒絕服務攻擊:

1、 攻擊者向目標計算機發送一個TCP SYN報文;

2、 目標計算機收到這個報文後,建立TCP連接控制結構(TCB),並回應一個ACK,等待發起者的回應;

3、 而發起者則不向目標計算機回應ACK報文,這樣導致目標計算機一致處於等待狀態。
可以看出,目標計算機如果接收到大量的TCP SYN報文,而沒有收到發起者的第三次ACK回應,會一直等待,處於這樣尷尬狀態的半連接如果很多,則會把目標計算機的資源(TCB控制結構,TCB,一般情況下是有限的)耗盡,而不能響應正常的TCP連接請求。

1.2 ICMP洪水

正常情況下,為了對網路進行診斷,一些診斷程序,比如PING等,會發出ICMP響應請求報文(ICMP ECHO),接收計算機接收到ICMP ECHO後,會回應一個ICMP ECHO Reply報文。而這個過程是需要CPU處理的,有的情況下還可能消耗掉大量的資源,比如處理分片的時候。這樣如果攻擊者向目標計算機發送大量的ICMP ECHO報文(產生ICMP洪水),則目標計算機會忙於處理這些ECHO報文,而無法繼續處理其它的網路數據報文,這也是一種拒絕服務攻擊(DOS)。

1.3 UDP洪水

原理與ICMP洪水類似,攻擊者通過發送大量的UDP報文給目標計算機,導致目標計算機忙於處理這些UDP報文而無法繼續處理正常的報文。

1.4 埠掃描

根據TCP協議規范,當一台計算機收到一個TCP連接建立請求報文(TCP SYN)的時候,做這樣的處理:

1、 如果請求的TCP埠是開放的,則回應一個TCP ACK報文,並建立TCP連接控制結構(TCB);
2、 如果請求的TCP埠沒有開放,則回應一個TCP RST(TCP頭部中的RST標志設為1)報文,告訴發起計算機,該埠沒有開放。

相應地,如果IP協議棧收到一個UDP報文,做如下處理:

1、 如果該報文的目標埠開放,則把該UDP報文送上層協議(UDP)處理,不回應任何報文(上層協議根據處理結果而回應的報文例外);
2、 如果該報文的目標埠沒有開放,則向發起者回應一個ICMP不可達報文,告訴發起者計算機該UDP報文的埠不可達。

利用這個原理,攻擊者計算機便可以通過發送合適的報文,判斷目標計算機哪些TCP或UDP埠是開放的,過程如下:

1、 發出埠號從0開始依次遞增的TCP SYN或UDP報文(埠號是一個16比特的數字,這樣最大為65535,數量很有限);
2、 如果收到了針對這個TCP報文的RST報文,或針對這個UDP報文的ICMP不可達報文,則說明這個埠沒有開放;
3、 相反,如果收到了針對這個TCP SYN報文的ACK報文,或者沒有接收到任何針對該UDP報文的ICMP報文,則說明該TCP埠是開放的,UDP埠可能開放(因為有的實現中可能不回應ICMP不可達報文,即使該UDP埠沒有開放)。

這樣繼續下去,便可以很容易的判斷出目標計算機開放了哪些TCP或UDP埠,然後針對埠的具體數字,進行下一步攻擊,這就是所謂的埠掃描攻擊。

1.5 分片IP報文攻擊

為了傳送一個大的IP報文,IP協議棧需要根據鏈路介面的MTU對該IP報文進行分片,通過填充適當的IP頭中的分片指示欄位,接收計算機可以很容易的把這些IP分片報文組裝起來。
目標計算機在處理這些分片報文的時候,會把先到的分片報文緩存起來,然後一直等待後續的分片報文,這個過程會消耗掉一部分內存,以及一些IP協議棧的數據結構。如果攻擊者給目標計算機只發送一片分片報文,而不發送所有的分片報文,這樣攻擊者計算機便會一直等待(直到一個內部計時器到時),如果攻擊者發送了大量的分片報文,就會消耗掉目標計算機的資源,而導致不能相應正常的IP報文,這也是一種DOS攻擊。

1.6 SYN比特和FIN比特同時設置

在TCP報文的報頭中,有幾個標志欄位:
1、 SYN:連接建立標志,TCP SYN報文就是把這個標志設置為1,來請求建立連接;
2、 ACK:回應標志,在一個TCP連接中,除了第一個報文(TCP SYN)外,所有報文都設置該欄位,作為對上一個報文的相應;
3、 FIN:結束標志,當一台計算機接收到一個設置了FIN標志的TCP報文後,會拆除這個TCP連接;
4、 RST:復位標志,當IP協議棧接收到一個目標埠不存在的TCP報文的時候,會回應一個RST標志設置的報文;
5、 PSH:通知協議棧盡快把TCP數據提交給上層程序處理。

正常情況下,SYN標志(連接請求標志)和FIN標志(連接拆除標志)是不能同時出現在一個TCP報文中的。而且RFC也沒有規定IP協議棧如何處理這樣的畸形報文,因此,各個操作系統的協議棧在收到這樣的報文後的處理方式也不同,攻擊者就可以利用這個特徵,通過發送SYN和FIN同時設置的報文,來判斷操作系統的類型,然後針對該操作系統,進行進一步的攻擊。

1.7 沒有設置任何標志的TCP報文攻擊

正常情況下,任何TCP報文都會設置SYN,FIN,ACK,RST,PSH五個標志中的至少一個標志,第一個TCP報文(TCP連接請求報文)設置SYN標志,後續報文都設置ACK標志。有的協議棧基於這樣的假設,沒有針對不設置任何標志的TCP報文的處理過程,因此,這樣的協議棧如果收到了這樣的報文,可能會崩潰。攻擊者利用了這個特點,對目標計算機進行攻擊。

1.8 設置了FIN標志卻沒有設置ACK標志的TCP報文攻擊

正常情況下,ACK標志在除了第一個報文(SYN報文)外,所有的報文都設置,包括TCP連接拆除報文(FIN標志設置的報文)。但有的攻擊者卻可能向目標計算機發送設置了FIN標志卻沒有設置ACK標志的TCP報文,這樣可能導致目標計算機崩潰。

1.9 死亡之PING

TCP/IP規范要求IP報文的長度在一定范圍內(比如,0-64K),但有的攻擊計算機可能向目標計算機發出大於64K長度的PING報文,導致目標計算機IP協議棧崩潰。

1.10 地址猜測攻擊

跟埠掃描攻擊類似,攻擊者通過發送目標地址變化的大量的ICMP ECHO報文,來判斷目標計算機是否存在。如果收到了對應的ECMP ECHO REPLY報文,則說明目標計算機是存在的,便可以針對該計算機進行下一步的攻擊。

1.11 淚滴攻擊

對於一些大的IP包,需要對其進行分片傳送,這是為了迎合鏈路層的MTU(最大傳輸單元)的要求。比如,一個4500位元組的IP包,在MTU為1500的鏈路上傳輸的時候,就需要分成三個IP包。
在IP報頭中有一個偏移欄位和一個分片標志(MF),如果MF標志設置為1,則表面這個IP包是一個大IP包的片斷,其中偏移欄位指出了這個片斷在整個IP包中的位置。例如,對一個4500位元組的IP包進行分片(MTU為1500),則三個片斷中偏移欄位的值依次為:0,1500,3000。這樣接收端就可以根據這些信息成功的組裝該IP包。

如果一個攻擊者打破這種正常情況,把偏移欄位設置成不正確的值,即可能出現重合或斷開的情況,就可能導致目標操作系統崩潰。比如,把上述偏移設置為0,1300,3000。這就是所謂的淚滴攻擊。

1.12 帶源路由選項的IP報文

為了實現一些附加功能,IP協議規范在IP報頭中增加了選項欄位,這個欄位可以有選擇的攜帶一些數據,以指明中間設備(路由器)或最終目標計算機對這些IP報文進行額外的處理。

源路由選項便是其中一個,從名字中就可以看出,源路由選項的目的,是指導中間設備(路由器)如何轉發該數據報文的,即明確指明了報文的傳輸路徑。比如,讓一個IP報文明確的經過三台路由器R1,R2,R3,則可以在源路由選項中明確指明這三個路由器的介面地址,這樣不論三台路由器上的路由表如何,這個IP報文就會依次經過R1,R2,R3。而且這些帶源路由選項的IP報文在傳輸的過程中,其源地址不斷改變,目標地址也不斷改變,因此,通過合適的設置源路由選項,攻擊者便可以偽造一些合法的IP地址,而矇混進入網路。

1.13 帶記錄路由選項的IP報文

記錄路由選項也是一個IP選項,攜帶了該選項的IP報文,每經過一台路由器,該路由器便把自己的介面地址填在選項欄位裡面。這樣這些報文在到達目的地的時候,選項數據裡面便記錄了該報文經過的整個路徑。
通過這樣的報文可以很容易的判斷該報文經過的路徑,從而使攻擊者可以很容易的尋找其中的攻擊弱點。

1.14 未知協議欄位的IP報文

在IP報文頭中,有一個協議欄位,這個欄位指明了該IP報文承載了何種協議 ,比如,如果該欄位值為1,則表明該IP報文承載了ICMP報文,如果為6,則是TCP,等等。目前情況下,已經分配的該欄位的值都是小於100的,因此,一個帶大於100的協議欄位的IP報文,可能就是不合法的,這樣的報文可能對一些計算機操作系統的協議棧進行破壞。

1.15 IP地址欺騙

一般情況下,路由器在轉發報文的時候,只根據報文的目的地址查路由表,而不管報文的源地址是什麼,因此,這樣就 可能面臨一種危險:如果一個攻擊者向一台目標計算機發出一個報文,而把報文的源地址填寫為第三方的一個IP地址,這樣這個報文在到達目標計算機後,目標計算機便可能向毫無知覺的第三方計算機回應。這便是所謂的IP地址欺騙攻擊。

比較著名的SQL Server蠕蟲病毒,就是採用了這種原理。該病毒(可以理解為一個攻擊者)向一台運行SQL Server解析服務的伺服器發送一個解析服務的UDP報文,該報文的源地址填寫為另外一台運行SQL Server解析程序(SQL Server 2000以後版本)的伺服器,這樣由於SQL Server 解析服務的一個漏洞,就可能使得該UDP報文在這兩台伺服器之間往復,最終導致伺服器或網路癱瘓。

1.16 WinNuke攻擊

NetBIOS作為一種基本的網路資源訪問介面,廣泛的應用於文件共享,列印共享,進程間通信(IPC),以及不同操作系統之間的數據交換。一般情況下,NetBIOS是運行在LLC2鏈路協議之上的,是一種基於組播的網路訪問介面。為了在TCP/IP協議棧上實現NetBIOS,RFC規定了一系列交互標准,以及幾個常用的TCP/UDP埠:

139:NetBIOS會話服務的TCP埠;
137:NetBIOS名字服務的UDP埠;
136:NetBIOS數據報服務的UDP埠。

WINDOWS操作系統的早期版本(WIN95/98/NT)的網路服務(文件共享等)都是建立在NetBIOS之上的,因此,這些操作系統都開放了139埠(最新版本的WINDOWS 2000/XP/2003等,為了兼容,也實現了NetBIOS over TCP/IP功能,開放了139埠)。

WinNuke攻擊就是利用了WINDOWS操作系統的一個漏洞,向這個139埠發送一些攜帶TCP帶外(OOB)數據報文,但這些攻擊報文與正常攜帶OOB數據報文不同的是,其指針欄位與數據的實際位置不符,即存在重合,這樣WINDOWS操作系統在處理這些數據的時候,就會崩潰。

1.17 Land攻擊

LAND攻擊利用了TCP連接建立的三次握手過程,通過向一個目標計算機發送一個TCP SYN報文(連接建立請求報文)而完成對目標計算機的攻擊。與正常的TCP SYN報文不同的是,LAND攻擊報文的源IP地址和目的IP地址是相同的,都是目標計算機的IP地址。這樣目標計算機接收到這個SYN報文後,就會向該報文的源地址發送一個ACK報文,並建立一個TCP連接控制結構(TCB),而該報文的源地址就是自己,因此,這個ACK報文就發給了自己。這樣如果攻擊者發送了足夠多的SYN報文,則目標計算機的TCB可能會耗盡,最終不能正常服務。這也是一種DOS攻擊。

1.18 Script/ActiveX攻擊

Script是一種可執行的腳本,它一般由一些腳本語言寫成,比如常見的JAVA SCRIPT,VB SCRIPT等。這些腳本在執行的時候,需要一個專門的解釋器來翻譯,翻譯成計算機指令後,在本地計算機上運行。這種腳本的好處是,可以通過少量的程序寫作,而完成大量的功能。

這種SCRIPT的一個重要應用就是嵌入在WEB頁面裡面,執行一些靜態WEB頁面標記語言(HTML)無法完成的功能,比如本地計算,資料庫查詢和修改,以及系統信息的提取等。這些腳本在帶來方便和強大功能的同時,也為攻擊者提供了方便的攻擊途徑。如果攻擊者寫一些對系統有破壞的SCRIPT,然後嵌入在WEB頁面中,一旦這些頁面被下載到本地,計算機便以當前用戶的許可權執行這些腳本,這樣,當前用戶所具有的任何許可權,SCRIPT都可以使用,可以想像這些惡意的SCRIPT的破壞程度有多強。這就是所謂的SCRIPT攻擊。

ActiveX是一種控制項對象,它是建立在MICROSOFT的組件對象模型(COM)之上的,而COM則幾乎是Windows操作系統的基礎結構。可以簡單的理解,這些控制項對象是由方法和屬性構成的,方法即一些操作,而屬性則是一些特定的數據。這種控制項對象可以被應用程序載入,然後訪問其中的方法或屬性,以完成一些特定的功能。可以說,COM提供了一種二進制的兼容模型(所謂二進制兼容,指的是程序模塊與調用的編譯環境,甚至操作系統沒有關系)。但需要注意的是,這種對象控制項不能自己執行,因為它沒有自己的進程空間,而只能由其它進程載入,並調用其中的方法和屬性,這時候,這些控制項便在載入進程的進程空間運行,類似與操作系統的可載入模塊,比如DLL庫。

ActiveX控制項可以嵌入在WEB頁面裡面,當瀏覽器下載這些頁面到本地後,相應地也下載了嵌入在其中的ActiveX控制項,這樣這些控制項便可以在本地瀏覽器進程空間中運行(ActiveX空間沒有自己的進程空間,只能由其它進程載入並調用),因此,當前用戶的許可權有多大,ActiveX的破壞性便有多大。如果一個惡意的攻擊者編寫一個含有惡意代碼的ActiveX控制項,然後嵌入在WEB頁面中,被一個瀏覽用戶下載後執行,其破壞作用是非常大的。這便是所謂的ActiveX攻擊。

1.19 Smurf攻擊

ICMP ECHO請求包用來對網路進行診斷,當一台計算機接收到這樣一個報文後,會向報文的源地址回應一個ICMP ECHO REPLY。一般情況下,計算機是不檢查該ECHO請求的源地址的,因此,如果一個惡意的攻擊者把ECHO的源地址設置為一個廣播地址,這樣計算機在恢復REPLY的時候,就會以廣播地址為目的地址,這樣本地網路上所有的計算機都必須處理這些廣播報文。如果攻擊者發送的ECHO 請求報文足夠多,產生的REPLY廣播報文就可能把整個網路淹沒。這就是所謂的smurf攻擊。

除了把ECHO報文的源地址設置為廣播地址外,攻擊者還可能把源地址設置為一個子網廣播地址,這樣,該子網所在的計算機就可能受影響。

1.20 虛擬終端(VTY)耗盡攻擊

這是一種針對網路設備的攻擊,比如路由器,交換機等。這些網路設備為了便於遠程管理,一般設置了一些TELNET用戶界面,即用戶可以通過TELNET到該設備上,對這些設備進行管理。

一般情況下,這些設備的TELNET用戶界面個數是有限制的,比如,5個或10個等。這樣,如果一個攻擊者同時同一台網路設備建立了5個或10個TELNET連接,這些設備的遠程管理界面便被占盡,這樣合法用戶如果再對這些設備進行遠程管理,則會因為TELNET連接資源被佔用而失敗。

1.21 路由協議攻擊

網路設備之間為了交換路由信息,常常運行一些動態的路由協議,這些路由協議可以完成諸如路由表的建立,路由信息的分發等功能。常見的路由協議有RIP,OSPF,IS-IS,BGP等。這些路由協議在方便路由信息管理和傳遞的同時,也存在一些缺陷,如果攻擊者利用了路由協議的這些許可權,對網路進行攻擊,可能造成網路設備路由表紊亂(這足可以導致網路中斷),網路設備資源大量消耗,甚至導致網路設備癱瘓。

下面列舉一些常見路由協議的攻擊方式及原理:

1.21.1 針對RIP協議的攻擊

RIP,即路由信息協議,是通過周期性(一般情況下為30S)的路由更新報文來維護路由表的,一台運行RIP路由協議的路由器,如果從一個介面上接收到了一個路由更新報文,它就會分析其中包含的路由信息,並與自己的路由表作出比較,如果該路由器認為這些路由信息比自己所掌握的要有效,它便把這些路由信息引入自己的路由表中。

這樣如果一個攻擊者向一台運行RIP協議的路由器發送了人為構造的帶破壞性的路由更新報文,就很容易的把路由器的路由表搞紊亂,從而導致網路中斷。

如果運行RIP路由協議的路由器啟用了路由更新信息的HMAC驗證,則可從很大程度上避免這種攻擊。

1.21.2 針對OSPF路由協議的攻擊

OSPF,即開放最短路徑優先,是一種應用廣泛的鏈路狀態路由協議。該路由協議基於鏈路狀態演算法,具有收斂速度快,平穩,杜絕環路等優點,十分適合大型的計算機網路使用。OSPF路由協議通過建立鄰接關系,來交換路由器的本地鏈路信息,然後形成一個整網的鏈路狀態資料庫,針對該資料庫,路由器就可以很容易的計算出路由表。

可以看出,如果一個攻擊者冒充一台合法路由器與網路中的一台路由器建立鄰接關系,並向攻擊路由器輸入大量的鏈路狀態廣播(LSA,組成鏈路狀態資料庫的數據單元),就會引導路由器形成錯誤的網路拓撲結構,從而導致整個網路的路由表紊亂,導致整個網路癱瘓。

當前版本的WINDOWS 操作系統(WIN 2K/XP等)都實現了OSPF路由協議功能,因此一個攻擊者可以很容易的利用這些操作系統自帶的路由功能模塊進行攻擊。

跟RIP類似,如果OSPF啟用了報文驗證功能(HMAC驗證),則可以從很大程度上避免這種攻擊。

1.21.3 針對IS-IS路由協議的攻擊

IS-IS路由協議,即中間系統到中間系統,是ISO提出來對ISO的CLNS網路服務進行路由的一種協議,這種協議也是基於鏈路狀態的,原理與OSPF類似。IS-IS路由協議經過 擴展,可以運行在IP網路中,對IP報文進行選路。這種路由協議也是通過建立鄰居關系,收集路由器本地鏈路狀態的手段來完成鏈路狀態資料庫同步的。該協議的鄰居關系建立比OSPF簡單,而且也省略了OSPF特有的一些特性,使該協議簡單明了,伸縮性更強。

對該協議的攻擊與OSPF類似,通過一種模擬軟體與運行該協議的路由器建立鄰居關系,然後傳頌給攻擊路由器大量的鏈路狀態數據單元(LSP),可以導致整個網路路由器的鏈路狀態資料庫不一致(因為整個網路中所有路由器的鏈路狀態資料庫都需要同步到相同的狀態),從而導致路由表與實際情況不符,致使網路中斷。

與OSPF類似,如果運行該路由協議的路由器啟用了IS-IS協議單元(PDU)HMAC驗證功能,則可以從很大程度上避免這種攻擊。

1.22 針對設備轉發表的攻擊

為了合理有限的轉發數據,網路設備上一般都建立一些寄存器表項,比如MAC地址表,ARP表,路由表,快速轉發表,以及一些基於更多報文頭欄位的表格,比如多層交換表,流項目表等。這些表結構都存儲在設備本地的內存中,或者晶元的片上內存中,數量有限。如果一個攻擊者通過發送合適的數據報,促使設備建立大量的此類表格,就會使設備的存儲結構消耗盡,從而不能正常的轉發數據或崩潰。

下面針對幾種常見的表項,介紹其攻擊原理:

1.22.1 針對MAC地址表的攻擊

MAC地址表一般存在於乙太網交換機上,乙太網通過分析接收到的數據幀的目的MAC地址,來查本地的MAC地址表,然後作出合適的轉發決定。

這些MAC地址表一般是通過學習獲取的,交換機在接收到一個數據幀後,有一個學習的過程,該過程是這樣的:

a) 提取數據幀的源MAC地址和接收到該數據幀的埠號;
查MAC地址表,看該MAC地址是否存在,以及對應的埠是否符合;
c) 如果該MAC地址在本地MAC地址表中不存在,則創建一個MAC地址表項;
d) 如果存在,但對應的出埠跟接收到該數據幀的埠不符,則更新該表;
e) 如果存在,且埠符合,則進行下一步處理。

分析這個過程可以看出,如果一個攻擊者向一台交換機發送大量源MAC地址不同的數據幀,則該交換機就可能把自己本地的MAC地址表學滿。一旦MAC地址表溢出,則交換機就不能繼續學習正確的MAC表項,結果是可能產生大量的網路冗餘數據,甚至可能使交換機崩潰。

而構造一些源MAC地址不同的數據幀,是非常容易的事情。

1.22.2 針對ARP表的攻擊

ARP表是IP地址和MAC地址的映射關系表,任何實現了IP協議棧的設備,一般情況下都通過該表維護IP地址和MAC地址的對應關系,這是為了避免ARP解析而造成的廣播數據報文對網路造成沖擊。ARP表的建立一般情況下是通過二個途徑:

1、 主動解析,如果一台計算機想與另外一台不知道MAC地址的計算機通信,則該計算機主動發ARP請求,通過ARP協議建立(前提是這兩台計算機位於同一個IP子網上);

2、 被動請求,如果一台計算機接收到了一台計算機的ARP請求,則首先在本地建立請求計算機的IP地址和MAC地址的對應表。

因此,如果一個攻擊者通過變換不同的IP地址和MAC地址,向同一台設備,比如三層交換機發送大量的ARP請求,則被攻擊設備可能會因為ARP緩存溢出而崩潰。

針對ARP表項,還有一個可能的攻擊就是誤導計算機建立正確的ARP表。根據ARP協議,如果一台計算機接收到了一個ARP請求報文,在滿足下列兩個條件的情況下,該計算機會用ARP請求報文中的源IP地址和源MAC地址更新自己的ARP緩存:

1、 如果發起該ARP請求的IP地址在自己本地的ARP緩存中;
2、 請求的目標IP地址不是自己的。

可以舉一個例子說明這個過程,假設有三台計算機A,B,C,其中B已經正確建立了A和C計算機的ARP表項。假設A是攻擊者,此時,A發出一個ARP請求報文,該請求報文這樣構造:

1、 源IP地址是C的IP地址,源MAC地址是A的MAC地址;
2、 請求的目標IP地址是A的IP地址。

這樣計算機B在收到這個ARP請求報文後(ARP請求是廣播報文,網路上所有設備都能收到),發現B的ARP表項已經在自己的緩存中,但MAC地址與收到的請求的源MAC地址不符,於是根據ARP協議,使用ARP請求的源MAC地址(即A的MAC地址)更新自己的ARP表。

這樣B的ARP混存中就存在這樣的錯誤ARP表項:C的IP地址跟A的MAC地址對應。這樣的結果是,B發給C的數據都被計算機A接收到。

1.22.3 針對流項目表的攻擊

有的網路設備為了加快轉發效率,建立了所謂的流緩存。所謂流,可以理解為一台計算機的一個進程到另外一台計算機的一個進程之間的數據流。如果表現在TCP/IP協議上,則是由(源IP地址,目的IP地址,協議號,源埠號,目的埠號)五元組共同確定的所有數據報文。

一個流緩存表一般由該五元組為索引,每當設備接收到一個IP報文後,會首先分析IP報頭,把對應的五元組數據提取出來,進行一個HASH運算,然後根據運算結果查詢流緩存,如果查找成功,則根據查找的結果進行處理,如果查找失敗,則新建一個流緩存項,查路由表,根據路由表查詢結果填完整這個流緩存,然後對數據報文進行轉發(具體轉發是在流項目創建前還是創建後並不重要)。

可以看出,如果一個攻擊者發出大量的源IP地址或者目的IP地址變化的數據報文,就可能導致設備創建大量的流項目,因為不同的源IP地址和不同的目標IP地址對應不同的流。這樣可能導致流緩存溢出

閱讀全文

與計算機網路中psh是什麼相關的資料

熱點內容
車里的多媒體需要網路從哪裡來的 瀏覽:188
4g網路視頻一個小時多少流量 瀏覽:942
蘋果12晶元卡與5g網路沖突 瀏覽:210
蘋果無線網路個人熱點 瀏覽:816
組建的路由器網路延時 瀏覽:484
如何查看網路被蹭蘋果手機 瀏覽:826
天津網路呼叫轉移怎麼設置 瀏覽:312
網路電視一定要wifi嗎 瀏覽:503
網路伺服器機箱哪裡好 瀏覽:966
香腸派對心動網路郵箱密碼是什麼 瀏覽:455
5台電腦共享一台非網路列印機 瀏覽:733
國家網路安全基地對應大學 瀏覽:219
網路學歷如何存放學籍檔案 瀏覽:949
保險產品網路策略有哪些 瀏覽:955
路由器在閃沒網路怎麼回事 瀏覽:366
無人機wifi連接無網路 瀏覽:721
手機連不上醫院網路 瀏覽:421
公務員網路安全建議 瀏覽:503
新收銀系統怎麼設置網路 瀏覽:130
共享網路安全共建網路文明作文 瀏覽:48

友情鏈接