TCP連接是什么意思?TCP/IP協(xié)議?協(xié)議分層?

計(jì)算機(jī)與網(wǎng)絡(luò)設(shè)備要相互通信,雙方就必須基于相同的方法。比如,如何探測(cè)到通信目標(biāo)、由哪一邊先發(fā)起通信、使用哪種語(yǔ)言進(jìn)行通信、怎樣結(jié)束通信等規(guī)則都需要事先確定。

不同的硬件、操作系統(tǒng)之間的通信,所有的這一切都需要一種規(guī)則。而我們就把這種規(guī)則稱為協(xié)議(protocol)。

協(xié)議中存在各式各樣的內(nèi)容。從電纜的規(guī)格到 IP 地址的選定方法、尋找異地用戶的方法、雙方建立通信的順序,以及 Web 頁(yè)面顯示需要處理的步驟,等等。

像這樣把與互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集合起來(lái)總稱為 TCP/IP

也有說(shuō)法認(rèn)為,TCP/IP 是指 TCP 和 IP 這兩種協(xié)議。還有一種說(shuō)法認(rèn)為,TCP/IP 是在 IP 協(xié)議的通信過(guò)程中,使用到的協(xié)議族的統(tǒng)稱



目錄:

o? 協(xié)議分層

o? 數(shù)據(jù)的封裝與分用

o? 端口號(hào)和DNS

o??TCP/IP 通信傳輸流

o? TCP協(xié)議

o??SYN 攻擊

o??TCP和UDP比較

o? IP協(xié)議

o? ARP協(xié)議



協(xié)議分層

ISO/OSI模型,即開(kāi)放式通信系統(tǒng)互聯(lián)參考模型(Open System Interconnection Reference Model),是國(guó)際標(biāo)準(zhǔn)化組織(ISO)提出的一個(gè)試圖使各種計(jì)算機(jī)在世界范圍內(nèi)互連為網(wǎng)絡(luò)的標(biāo)準(zhǔn)框架,簡(jiǎn)稱OSI。

TCP/IP協(xié)議模型(Transmission Control Protocol/Internet Protocol),包含了一系列構(gòu)成互聯(lián)網(wǎng)基礎(chǔ)的網(wǎng)絡(luò)協(xié)議,是Internet的核心協(xié)議,通過(guò)20多年的發(fā)展已日漸成熟,并被廣泛應(yīng)用于局域網(wǎng)和廣域網(wǎng)中,目前已成為事實(shí)上的國(guó)際標(biāo)準(zhǔn)。TCP/IP協(xié)議簇是一組不同層次上的多個(gè)協(xié)議的組合,通常被認(rèn)為是一個(gè)四層協(xié)議系統(tǒng),與OSI的七層模型相對(duì)應(yīng)。

TCP/IP 和 ISO/OSI


TCP/IP協(xié)議族按照層次由上到下。最上面的是應(yīng)用層,第二層則是傳輸層, 第三層是網(wǎng)絡(luò)層,IP協(xié)議就在這里,它負(fù)責(zé)對(duì)數(shù)據(jù)加上IP地址和其他的數(shù)據(jù)以確定傳輸?shù)哪繕?biāo)。第四層是數(shù)據(jù)鏈路層,這個(gè)層次為待傳送的數(shù)據(jù)加入一個(gè)以太網(wǎng)協(xié)議頭,并進(jìn)行CRC編碼,為最后的數(shù)據(jù)傳輸做準(zhǔn)備。再下一層則是硬件層次了,負(fù)責(zé)網(wǎng)絡(luò)的傳輸,這個(gè)層次的定義包括網(wǎng)線的制式(有些并不將其放在tcp/ip協(xié)議族中)。發(fā)送協(xié)議的主機(jī)從上自下將數(shù)據(jù)按照協(xié)議封裝,而接收數(shù)據(jù)的主機(jī)則按照協(xié)議從得到的數(shù)據(jù)包解開(kāi),最后拿到需要的數(shù)據(jù)。

應(yīng)用層

應(yīng)用層決定了向用戶提供應(yīng)用服務(wù)時(shí)通信的活動(dòng)。應(yīng)用層負(fù)責(zé)處理特定的應(yīng)用程序細(xì)節(jié)。?

TCP/IP 協(xié)議族內(nèi)預(yù)存了各類通用的應(yīng)用服務(wù)。比如,F(xiàn)TP(File Transfer Protocol,文件傳輸協(xié)議)和 DNS(Domain Name System,域 名系統(tǒng))服務(wù)就是其中兩類。 HTTP 協(xié)議也處于該層。

傳輸層

傳輸層對(duì)上層應(yīng)用層,提供處于網(wǎng)絡(luò)連接中的兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)傳輸。

在傳輸層有兩個(gè)性質(zhì)不同的協(xié)議:TCP協(xié)議和UDP協(xié)議。主要為兩臺(tái)主機(jī)上的應(yīng)用程序提供端到端的通信。

TCP(Transmission Control Protocol,傳輸控制協(xié)議)為兩臺(tái)主機(jī)提供高可靠性的數(shù)據(jù)通信。它所做的工作包括把應(yīng)用程序交給它的數(shù)據(jù)分成合適的小塊交給下面的網(wǎng)絡(luò)層,確認(rèn)接收到的分組,設(shè)置發(fā)送最后確認(rèn)分組的超時(shí)時(shí)鐘等。由于運(yùn)輸層提供了高可靠性的端到端的通信,因此應(yīng)用層可以忽略所有這些細(xì)節(jié)。為了提供可靠的服務(wù),TCP采用了超時(shí)重傳、發(fā)送和接收端到端的確認(rèn)分組等機(jī)制。

UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)則為應(yīng)用層提供一種非常簡(jiǎn)單的服務(wù)。它只是把稱作數(shù)據(jù)報(bào)的分組從一臺(tái)主機(jī)發(fā)送到另一臺(tái)主機(jī),但并不保證該數(shù)據(jù)報(bào)能到達(dá)另一端。一個(gè)數(shù)據(jù)報(bào)是指從發(fā)送方傳輸?shù)浇邮辗降囊粋€(gè)信息單元(例如,發(fā)送方指定的一定字節(jié)數(shù)的信息)。UDP協(xié)議任何必需的可靠性必須由應(yīng)用層來(lái)提供。

網(wǎng)絡(luò)層 / 互聯(lián)網(wǎng)層 / 網(wǎng)際層(在圖中為網(wǎng)際層)

網(wǎng)絡(luò)層用來(lái)處理在網(wǎng)絡(luò)上流動(dòng)的數(shù)據(jù)包。數(shù)據(jù)包是網(wǎng)絡(luò)傳輸?shù)淖钚?shù)據(jù)單位。該層規(guī)定了通過(guò)怎樣的路徑(所謂的傳輸路線)到達(dá)對(duì)方計(jì)算機(jī),并把數(shù)據(jù)包傳送給對(duì)方。

與對(duì)方計(jì)算機(jī)之間通過(guò)多臺(tái)計(jì)算機(jī)或網(wǎng)絡(luò)設(shè)備進(jìn)行傳輸時(shí),網(wǎng)絡(luò)層所起的作用就是在眾多的選項(xiàng)內(nèi)選擇一條傳輸路線。

也稱作互聯(lián)網(wǎng)層,處理分組在網(wǎng)絡(luò)中的活動(dòng),例如分組的選路。在TCP/IP協(xié)議族中,網(wǎng)絡(luò)層協(xié)議包括IP協(xié)議,ICMP協(xié)議,以及IGMP協(xié)議。

IP(Internet Protocol,網(wǎng)際協(xié)議)是一種網(wǎng)絡(luò)層協(xié)議,提供的是一種不可靠的服務(wù),它只是盡可能快地把分組從源結(jié)點(diǎn)送到目的結(jié)點(diǎn),但是并不提供任何可靠性保證。同時(shí)被TCP和UDP使用。TCP和UDP的每組數(shù)據(jù)都通過(guò)端系統(tǒng)和每個(gè)中間路由器中的IP層在互聯(lián)網(wǎng)中進(jìn)行傳輸。

ICMP(Internet Control Message Protocol,Internet互聯(lián)網(wǎng)控制報(bào)文協(xié)議)是IP協(xié)議的附屬協(xié)議。IP層用它來(lái)與其他主機(jī)或路由器交換錯(cuò)誤報(bào)文和其他重要信息。

IGMP(Internet Group Management Protocol,Internet組管理協(xié)議)是Internet組管理協(xié)議。它用來(lái)把一個(gè)UDP數(shù)據(jù)報(bào)多播到多個(gè)主機(jī)。

鏈路層 / 數(shù)據(jù)鏈路層 / 網(wǎng)絡(luò)接口層(在圖中為網(wǎng)絡(luò)接口層和硬件層)

用來(lái)處理連接網(wǎng)絡(luò)的硬件部分。包括控制操作系統(tǒng)、硬件的設(shè)備驅(qū) 動(dòng)、NIC(Network Interface Card,網(wǎng)絡(luò)適配器,即網(wǎng)卡),及光纖等 物理可見(jiàn)部分(還包括連接器等一切傳輸媒介)。硬件上的范疇均在鏈路層的作用范圍之內(nèi)。

也稱作數(shù)據(jù)鏈路層或網(wǎng)絡(luò)接口層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序和計(jì)算機(jī)中對(duì)應(yīng)的網(wǎng)絡(luò)接口卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理接口細(xì)節(jié)。ARP(Address Resolution Protocol,地址解析協(xié)議)和RARP(Reverse Address Resolution Protocol,逆地址解析協(xié)議)是某些網(wǎng)絡(luò)接口(如以太網(wǎng)和令牌環(huán)網(wǎng))使用的特殊協(xié)議,用來(lái)轉(zhuǎn)換IP層和網(wǎng)絡(luò)接口層使用的地址。

TCP/IP分層模型



數(shù)據(jù)的封裝與分用

當(dāng)應(yīng)用程序用TCP傳送數(shù)據(jù)時(shí),數(shù)據(jù)被送入?yún)f(xié)議棧中,然后逐個(gè)通過(guò)每一層直到被當(dāng)作一串比特流送入網(wǎng)絡(luò)。其中每一層對(duì)收到的數(shù)據(jù)都要增加一些首部信息(有時(shí)還要增加尾部信息),該過(guò)程如下圖所示。

TCP傳給IP的數(shù)據(jù)單元稱作TCP報(bào)文段或簡(jiǎn)稱為TCP段(TCP segment);UDP數(shù)據(jù)與TCP數(shù)據(jù)基本一致。唯一的不同是UDP傳給IP的信息單元稱作U D P數(shù)據(jù)報(bào)(UDP datagram),而且UDP的首部長(zhǎng)為8字節(jié)。IP傳給網(wǎng)絡(luò)接口層的數(shù)據(jù)單元稱作IP數(shù)據(jù)報(bào)(IP datagram)。通過(guò)以太網(wǎng)傳輸?shù)谋忍亓鞣Q作幀(Frame )。?


當(dāng)目的主機(jī)收到一個(gè)以太網(wǎng)數(shù)據(jù)幀時(shí),數(shù)據(jù)就開(kāi)始從協(xié)議棧中由底向上升,同時(shí)去掉各層協(xié)議加上的報(bào)文首部。每層協(xié)議盒都要去檢查報(bào)文首部中的協(xié)議標(biāo)識(shí),以確定接收數(shù)據(jù)的上層協(xié)議。這個(gè)過(guò)程稱作分用(Demultiplexing)。協(xié)議是通過(guò)目的端口號(hào)、源I P地址和源端口號(hào)進(jìn)行解包的。



端口號(hào)和DNS

端口號(hào)

服務(wù)器一般都是通過(guò)知名端口號(hào)來(lái)識(shí)別的。例如,對(duì)于每個(gè)TCP/IP實(shí)現(xiàn)來(lái)說(shuō),F(xiàn)TP服務(wù)器的TCP端口號(hào)都是21,每個(gè)Telnet服務(wù)器的TCP端口號(hào)都是23,每個(gè)TFTP (簡(jiǎn)單文件傳送協(xié)議)服務(wù)器的UDP端口號(hào)都是69。任何TCP/IP實(shí)現(xiàn)所提供的服務(wù)都用知名的1~1023之間的端口號(hào)。這些知名端口號(hào)由Internet號(hào)分配機(jī)構(gòu)(Internet Assigned Numbers Authority, IANA)來(lái)管理。知名端口號(hào)介于1~255之間;256~1023之間的端口號(hào)通常都是由Unix系統(tǒng)占用,以提供一些特定的Unix服務(wù);1024~5000端口號(hào)用于客戶端分配臨時(shí)端口號(hào);大于5000的端口號(hào)是為其他服務(wù)器預(yù)留的。

DNS

DNS 是計(jì)算機(jī)域名系統(tǒng) (Domain Name System 或Domain Name Service) 的縮寫,它是由解析器以及域名服務(wù)器組成的。域名服務(wù)器是指保存有該網(wǎng)絡(luò)中所有主機(jī)的域名和對(duì)應(yīng)IP地址,并具有將域名轉(zhuǎn)換為IP地址功能的服務(wù)器。



TCP/IP 通信傳輸流

利用 TCP/IP 協(xié)議族進(jìn)行網(wǎng)絡(luò)通信時(shí),會(huì)通過(guò)分層順序與對(duì)方進(jìn)行通信。發(fā)送端從應(yīng)用層往下走,接收端則往應(yīng)用層往上走。

我們用 HTTP 舉例來(lái)說(shuō)明,首先作為發(fā)送端的客戶端在應(yīng)用層 (HTTP 協(xié)議)發(fā)出一個(gè)想看某個(gè)Web頁(yè)面的 HTTP請(qǐng)求。

接著,為了傳輸方便,在傳輸層(TCP 協(xié)議)把從應(yīng)用層處收到的數(shù)據(jù)(HTTP 請(qǐng)求報(bào)文)進(jìn)行分割,并在各個(gè)報(bào)文上打上標(biāo)記序號(hào)及端口號(hào)后轉(zhuǎn)發(fā)給網(wǎng)絡(luò)層。

在網(wǎng)絡(luò)層(IP 協(xié)議),增加作為通信目的地的 MAC 地址后轉(zhuǎn)發(fā)給鏈路層。這樣一來(lái),發(fā)往網(wǎng)絡(luò)的通信請(qǐng)求就準(zhǔn)備齊全了。

接收端的服務(wù)器在鏈路層接收到數(shù)據(jù),按序往上層發(fā)送,一直到應(yīng)用層。當(dāng)傳輸?shù)綉?yīng)用層,才能算真正接收到由客戶端發(fā)送過(guò)來(lái)的 HTTP請(qǐng)求。

發(fā)送端在層與層之間傳輸數(shù)據(jù)時(shí),每經(jīng)過(guò)一層時(shí)必定會(huì)被打上一個(gè)該層所屬的首部信息。反之,接收端在層與層傳輸數(shù)據(jù)時(shí),每經(jīng)過(guò)一層時(shí)會(huì)把對(duì)應(yīng)的首部消去。

這種把數(shù)據(jù)信息包裝起來(lái)的做法稱為封裝(encapsulate)。



TCP協(xié)議

TCP 提供一種面向連接的、可靠的字節(jié)流服務(wù)

在一個(gè) TCP 連接中,僅有兩方進(jìn)行彼此通信。廣播和多播不能用于 TCP

TCP 使用校驗(yàn),確認(rèn)和重傳機(jī)制來(lái)保證可靠傳輸

TCP 給數(shù)據(jù)分節(jié)進(jìn)行排序,并使用累積確認(rèn)保證數(shù)據(jù)的順序不變和非重復(fù)

TCP 使用滑動(dòng)窗口機(jī)制來(lái)實(shí)現(xiàn)流量控制,通過(guò)動(dòng)態(tài)改變窗口的大小進(jìn)行擁塞控制

注意:TCP 并不能保證數(shù)據(jù)一定會(huì)被對(duì)方接收到,因?yàn)檫@是不可能的。TCP 能夠做到的是,如果有可能,就把數(shù)據(jù)遞送到接收方,否則就(通過(guò)放棄重傳并且中斷連接這一手段)通知用戶。因此準(zhǔn)確說(shuō) TCP 也不是 100% 可靠的協(xié)議,它所能提供的是數(shù)據(jù)的可靠遞送或故障的可靠通知。


【TCP KeepAlive】

TCP 的連接,實(shí)際上是一種純軟件層面的概念,在物理層面并沒(méi)有“連接”這種概念。TCP 通信雙方建立交互的連接,但是并不是一直存在數(shù)據(jù)交互,有些連接會(huì)在數(shù)據(jù)交互完畢后,主動(dòng)釋放連接,而有些不會(huì)。在長(zhǎng)時(shí)間無(wú)數(shù)據(jù)交互的時(shí)間段內(nèi),交互雙方都有可能出現(xiàn)掉電、死機(jī)、異常重啟等各種意外,當(dāng)這些意外發(fā)生之后,這些 TCP 連接并未來(lái)得及正常釋放,在軟件層面上,連接的另一方并不知道對(duì)端的情況,它會(huì)一直維護(hù)這個(gè)連接,長(zhǎng)時(shí)間的積累會(huì)導(dǎo)致非常多的半打開(kāi)連接,造成端系統(tǒng)資源的消耗和浪費(fèi),為了解決這個(gè)問(wèn)題,在傳輸層可以利用 TCP 的 KeepAlive 機(jī)制實(shí)現(xiàn)來(lái)實(shí)現(xiàn)。主流的操作系統(tǒng)基本都在內(nèi)核里支持了這個(gè)特性。

TCP KeepAlive 的基本原理是,隔一段時(shí)間給連接對(duì)端發(fā)送一個(gè)探測(cè)包,如果收到對(duì)方回應(yīng)的 ACK,則認(rèn)為連接還是存活的,在超過(guò)一定重試次數(shù)之后還是沒(méi)有收到對(duì)方的回應(yīng),則丟棄該 TCP 連接。

TCP-Keepalive-HOWTO 有對(duì) TCP KeepAlive 特性的詳細(xì)介紹,有興趣的同學(xué)可以參考。這里主要說(shuō)一下,TCP KeepAlive 的局限。首先 TCP KeepAlive 監(jiān)測(cè)的方式是發(fā)送一個(gè) probe 包,會(huì)給網(wǎng)絡(luò)帶來(lái)額外的流量,另外 TCP KeepAlive 只能在內(nèi)核層級(jí)監(jiān)測(cè)連接的存活與否,而連接的存活不一定代表服務(wù)的可用。例如當(dāng)一個(gè)服務(wù)器 CPU 進(jìn)程服務(wù)器占用達(dá)到 100%,已經(jīng)卡死不能響應(yīng)請(qǐng)求了,此時(shí) TCP KeepAlive 依然會(huì)認(rèn)為連接是存活的。因此 TCP KeepAlive 對(duì)于應(yīng)用層程序的價(jià)值是相對(duì)較小的。需要做連接?;畹膽?yīng)用層程序,例如 QQ,往往會(huì)在應(yīng)用層實(shí)現(xiàn)自己的心跳功能。


【TCP三次握手】(Three-way Handshake)

所謂三次握手,是指建立一個(gè) TCP 連接時(shí),需要客戶端和服務(wù)器總共發(fā)送3個(gè)包。

三次握手的目的是連接服務(wù)器指定端口,建立 TCP 連接,并同步連接雙方的序列號(hào)和確認(rèn)號(hào),交換 TCP 窗口大小信息。在 socket 編程中,客戶端執(zhí)行 connect() 時(shí)。將觸發(fā)三次握手。

第一次握手(SYN=1, seq=x):

客戶端發(fā)送一個(gè) TCP 的 SYN 標(biāo)志位置1的包,指明客戶端打算連接的服務(wù)器的端口,以及初始序號(hào) X,保存在包頭的序列號(hào)(Sequence Number)字段里。

發(fā)送完畢后,客戶端進(jìn)入 SYN_SEND 狀態(tài)。

第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):

服務(wù)器發(fā)回確認(rèn)包(ACK)應(yīng)答。即 SYN 標(biāo)志位和 ACK 標(biāo)志位均為1。服務(wù)器端選擇自己 ISN 序列號(hào),放到 Seq 域里,同時(shí)將確認(rèn)序號(hào)(Acknowledgement Number)設(shè)置為客戶的 ISN 加1,即X+1。 發(fā)送完畢后,服務(wù)器端進(jìn)入 SYN_RCVD 狀態(tài)。

第三次握手(ACK=1,ACKnum=y+1):

客戶端再次發(fā)送確認(rèn)包(ACK),SYN 標(biāo)志位為0,ACK 標(biāo)志位為1,并且把服務(wù)器發(fā)來(lái) ACK 的序號(hào)字段+1,放在確定字段中發(fā)送給對(duì)方,并且在數(shù)據(jù)段放寫ISN的+1

發(fā)送完畢后,客戶端進(jìn)入 ESTABLISHED 狀態(tài),當(dāng)服務(wù)器端接收到這個(gè)包時(shí),也進(jìn)入 ESTABLISHED 狀態(tài),TCP 握手結(jié)束。


【TCP四次揮手】(Four-way Handshake)

TCP 的連接的拆除需要發(fā)送四個(gè)包,因此稱為四次揮,也叫做改進(jìn)的三次握手??蛻舳嘶蚍?wù)器均可主動(dòng)發(fā)起揮手動(dòng)作,在 socket 編程中,任何一方執(zhí)行 close() 操作即可產(chǎn)生揮手操作。

第一次揮手(FIN=1,seq=x):

假設(shè)客戶端想要關(guān)閉連接,客戶端發(fā)送一個(gè) FIN 標(biāo)志位置為1的包,表示自己已經(jīng)沒(méi)有數(shù)據(jù)可以發(fā)送了,但是仍然可以接受數(shù)據(jù)。

發(fā)送完畢后,客戶端進(jìn)入 FIN_WAIT_1 狀態(tài)。

第二次揮手(ACK=1,ACKnum=x+1):

服務(wù)器端確認(rèn)客戶端的 FIN 包,發(fā)送一個(gè)確認(rèn)包,表明自己接受到了客戶端關(guān)閉連接的請(qǐng)求,但還沒(méi)有準(zhǔn)備好關(guān)閉連接。

發(fā)送完畢后,服務(wù)器端進(jìn)入 CLOSE_WAIT 狀態(tài),客戶端接收到這個(gè)確認(rèn)包之后,進(jìn)入 FIN_WAIT_2 狀態(tài),等待服務(wù)器端關(guān)閉連接。

第三次揮手(FIN=1,seq=y):

服務(wù)器端準(zhǔn)備好關(guān)閉連接時(shí),向客戶端發(fā)送結(jié)束連接請(qǐng)求,F(xiàn)IN 置為1。

發(fā)送完畢后,服務(wù)器端進(jìn)入 LAST_ACK 狀態(tài),等待來(lái)自客戶端的最后一個(gè)ACK。

第四次揮手(ACK=1,ACKnum=y+1):

客戶端接收到來(lái)自服務(wù)器端的關(guān)閉請(qǐng)求,發(fā)送一個(gè)確認(rèn)包,并進(jìn)入 TIME_WAIT狀態(tài),等待可能出現(xiàn)的要求重傳的 ACK 包。

服務(wù)器端接收到這個(gè)確認(rèn)包之后,關(guān)閉連接,進(jìn)入 CLOSED 狀態(tài)。

客戶端等待了某個(gè)固定時(shí)間(兩個(gè)最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,沒(méi)有收到服務(wù)器端的 ACK ,認(rèn)為服務(wù)器端已經(jīng)正常關(guān)閉連接,于是自己也關(guān)閉連接,進(jìn)入 CLOSED 狀態(tài)。



SYN 攻擊(SYN Flood)

1. 什么是 SYN 攻擊?

SYN 攻擊是一種典型的 DoS/DDoS 攻擊。(SYN = Synchronize Sequence Numbers,同步序列編號(hào))

在三次握手過(guò)程中,服務(wù)器發(fā)送 SYN-ACK 之后,收到客戶端的 ACK 之前的 TCP 連接稱為半連接(half-open connect)。此時(shí)服務(wù)器處于 SYN_RCVD 狀態(tài)。當(dāng)收到 ACK 后,服務(wù)器才能轉(zhuǎn)入 ESTABLISHED 狀態(tài)。

SYN 攻擊指的是,攻擊客戶端在短時(shí)間內(nèi)偽造大量不存在的IP地址,向服務(wù)器不斷地發(fā)送SYN包,服務(wù)器回復(fù)確認(rèn)包,并等待客戶的確認(rèn)。由于源地址是不存在的,服務(wù)器需要不斷的重發(fā)直至超時(shí),這些偽造的SYN包將長(zhǎng)時(shí)間占用未連接隊(duì)列,正常的SYN請(qǐng)求被丟棄,導(dǎo)致目標(biāo)系統(tǒng)運(yùn)行緩慢,嚴(yán)重者會(huì)引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓。

2. 如何檢測(cè) SYN 攻擊?

檢測(cè) SYN 攻擊非常的方便,當(dāng)你在服務(wù)器上看到大量的半連接狀態(tài)時(shí),特別是源IP地址是隨機(jī)的,基本上可以斷定這是一次SYN攻擊。在 Linux/Unix 上可以使用系統(tǒng)自帶的 netstats 命令來(lái)檢測(cè) SYN 攻擊。

3. 如何防御 SYN 攻擊?

SYN攻擊不能完全被阻止,除非將TCP協(xié)議重新設(shè)計(jì)。我們所做的是盡可能的減輕SYN攻擊的危害,常見(jiàn)的防御 SYN 攻擊的方法有如下幾種:

-? 縮短超時(shí)(SYN Timeout)時(shí)間

-? 增加最大半連接數(shù)

-? 過(guò)濾網(wǎng)關(guān)防護(hù)

-? SYN cookies技術(shù)



TCP和UDP比較

UDP 缺乏可靠性。UDP 本身不提供確認(rèn),序列號(hào),超時(shí)重傳等機(jī)制。UDP 數(shù)據(jù)報(bào)可能在網(wǎng)絡(luò)中被復(fù)制,被重新排序。即 UDP 不保證數(shù)據(jù)報(bào)會(huì)到達(dá)其最終目的地,也不保證各個(gè)數(shù)據(jù)報(bào)的先后順序,也不保證每個(gè)數(shù)據(jù)報(bào)只到達(dá)一次

UDP 數(shù)據(jù)報(bào)是有長(zhǎng)度的。每個(gè) UDP 數(shù)據(jù)報(bào)都有長(zhǎng)度,如果一個(gè)數(shù)據(jù)報(bào)正確地到達(dá)目的地,那么該數(shù)據(jù)報(bào)的長(zhǎng)度將隨數(shù)據(jù)一起傳遞給接收方。而 TCP 是一個(gè)字節(jié)流協(xié)議,沒(méi)有任何(協(xié)議上的)記錄邊界。

UDP 是無(wú)連接的。UDP 客戶和服務(wù)器之前不必存在長(zhǎng)期的關(guān)系。UDP 發(fā)送數(shù)據(jù)報(bào)之前也不需要經(jīng)過(guò)握手創(chuàng)建連接的過(guò)程。

UDP 支持多播和廣播。

UDP信息包的標(biāo)題很短,只有8個(gè)字節(jié),相對(duì)于TCP的20個(gè)字節(jié)信息包的額外開(kāi)銷很小。

小結(jié)TCP與UDP的區(qū)別:

1. 基于連接與無(wú)連接;

2. 對(duì)系統(tǒng)資源的要求(TCP較多,UDP少);

3. UDP程序結(jié)構(gòu)較簡(jiǎn)單;

4. 流模式與數(shù)據(jù)報(bào)模式 ;

5. TCP保證數(shù)據(jù)正確性,UDP可能丟包,TCP保證數(shù)據(jù)順序,UDP不保證。



IP協(xié)議

按層次分,IP(Internet Protocol)網(wǎng)際協(xié)議位于網(wǎng)絡(luò)層。Internet Protocol 這個(gè)名稱可能聽(tīng)起來(lái)有點(diǎn)夸張,但事實(shí)正是如此,因?yàn)?b>幾乎所有使用網(wǎng)絡(luò)的系統(tǒng)都會(huì)用到 IP 協(xié)議。TCP/IP 協(xié)議族中的 IP 指的就是網(wǎng)際協(xié)議,協(xié)議名稱中占據(jù)了一半位置,其重要性可見(jiàn)一斑。

可能有人會(huì)把“IP”和“IP 地址”搞混,“IP”其實(shí)是一種協(xié)議的名稱。

IP 協(xié)議的作用是把各種數(shù)據(jù)包傳送給對(duì)方。而要保證確實(shí)傳送到對(duì)方那里,則需要滿足各類條件。其中兩個(gè)重要的條件是 IP 地址和 MAC 地址(Media Access Control Address)。

IP 地址指明了節(jié)點(diǎn)被分配到的地址,MAC 地址是指網(wǎng)卡所屬的固定地址。IP 地址可以和 MAC 地址進(jìn)行配對(duì)。IP 地址可變換,但 MAC 地址基本上不會(huì)更改。

使用 ARP 協(xié)議憑借 MAC 地址進(jìn)行通信

IP 間的通信依賴 MAC 地址。在網(wǎng)絡(luò)上,通信的雙方在同一局域網(wǎng) (LAN)內(nèi)的情況是很少的,通常是經(jīng)過(guò)多臺(tái)計(jì)算機(jī)和網(wǎng)絡(luò)設(shè)備中轉(zhuǎn) 才能連接到對(duì)方。而在進(jìn)行中轉(zhuǎn)時(shí),會(huì)利用下一站中轉(zhuǎn)設(shè)備的 MAC 地址來(lái)搜索下一個(gè)中轉(zhuǎn)目標(biāo)。這時(shí),會(huì)采用 ARP 協(xié)議(Address Resolution Protocol)。ARP 是一種用以解析地址的協(xié)議,根據(jù)通信方的 IP 地址就可以反查出對(duì)應(yīng)的 MAC 地址。

IP 網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡(luò)層中最重要的協(xié)議。

各種物理網(wǎng)絡(luò)在鏈路層(二層)所傳輸?shù)幕締卧獮閹∕AC幀),其幀格式隨物理網(wǎng)絡(luò)而異,各物理網(wǎng)絡(luò)的物理地址(MAC地址)也隨物理網(wǎng)絡(luò)而異。IP協(xié)議的作用就是向傳輸層(TCP層)提供統(tǒng)一的IP包,即將各種不同類型的MAC幀轉(zhuǎn)換為統(tǒng)一的IP包,并將MAC幀的物理地址變換為全網(wǎng)統(tǒng)一的邏輯地址(IP地址)。這樣,這些不同物理網(wǎng)絡(luò)MAC幀的差異對(duì)上層而言就不復(fù)存在了。正因?yàn)檫@一轉(zhuǎn)換,才實(shí)現(xiàn)了不同類型物理網(wǎng)絡(luò)的互聯(lián)。

IP協(xié)議面向無(wú)連接,IP網(wǎng)中的節(jié)點(diǎn)路由器根據(jù)每個(gè)IP包的包頭IP地址進(jìn)行尋址,這樣同一個(gè)主機(jī)發(fā)出的屬于同一報(bào)文的IP包可能會(huì)經(jīng)過(guò)不同的路徑到達(dá)目的主機(jī).

IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動(dòng)程序)發(fā)來(lái)的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來(lái)的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因?yàn)镮P并沒(méi)有做任何事情來(lái)確認(rèn)數(shù)據(jù)包是按順序發(fā)送的或者沒(méi)有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。

高層的TCP和UDP服務(wù)在接收數(shù)據(jù)包時(shí),通常假設(shè)包中的源地址是有效的。也可以這樣說(shuō),IP地址形成了許多服務(wù)的認(rèn)證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個(gè)有效的主機(jī)發(fā)送來(lái)的。IP確認(rèn)包含一個(gè)選項(xiàng),叫作IP source routing,可以用來(lái)指定一條源地址和目的地址之間的直接路徑。對(duì)于一些TCP和UDP的服務(wù)來(lái)說(shuō),使用了該選項(xiàng)的IP包好像是從路徑上的最后一個(gè)系統(tǒng)傳遞過(guò)來(lái)的,而不是來(lái)自于它的真實(shí)地點(diǎn)。這個(gè)選項(xiàng)是為了測(cè)試而存在的,說(shuō)明了它可以被用來(lái)欺騙系統(tǒng)來(lái)進(jìn)行平常是被禁止的連接。那么,許多依靠IP源地址做確認(rèn)的服務(wù)將產(chǎn)生問(wèn)題并且會(huì)被非法入侵。



ARP協(xié)議

IP 間的通信依賴 MAC 地址。在網(wǎng)絡(luò)上,通信的雙方在同一局域網(wǎng)(LAN)內(nèi)的情況是很少的,通常是經(jīng)過(guò)多臺(tái)計(jì)算機(jī)和網(wǎng)絡(luò)設(shè)中轉(zhuǎn)才能連接到對(duì)方。而在進(jìn)行中轉(zhuǎn)時(shí),會(huì)利用下一站中轉(zhuǎn)設(shè)備的 MAC地址來(lái)搜索下一個(gè)中轉(zhuǎn)目標(biāo)。這時(shí),會(huì)采用 ARP 協(xié)議(Address Resolution Protocol)。ARP 是一種用以解析地址的協(xié)議,根據(jù)通信方的 IP 地址就可以反查出對(duì)應(yīng)的 MAC 地址。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容