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

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

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

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

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

也有說法認(rèn)為污尉,TCP/IP 是指 TCP 和 IP 這兩種協(xié)議。還有一種說法認(rèn)為,TCP/IP 是在 IP 協(xié)議的通信過程中十厢,使用到的協(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模型,即開放式通信系統(tǒng)互聯(lián)參考模型(Open System Interconnection Reference Model)蛮放,是國際標(biāo)準(zhǔn)化組織(ISO)提出的一個(gè)試圖使各種計(jì)算機(jī)在世界范圍內(nèi)互連為網(wǎng)絡(luò)的標(biāo)準(zhǔn)框架缩抡,簡稱OSI。

TCP/IP協(xié)議模型(Transmission Control Protocol/Internet Protocol)包颁,包含了一系列構(gòu)成互聯(lián)網(wǎng)基礎(chǔ)的網(wǎng)絡(luò)協(xié)議瞻想,是Internet的核心協(xié)議,通過20多年的發(fā)展已日漸成熟娩嚼,并被廣泛應(yīng)用于局域網(wǎng)和廣域網(wǎng)中蘑险,目前已成為事實(shí)上的國際標(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ù)包解開,最后拿到需要的數(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)用層提供一種非常簡單的服務(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)用層來提供定拟。

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

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

與對(duì)方計(jì)算機(jī)之間通過多臺(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ù)都通過端系統(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層用它來與其他主機(jī)或路由器交換錯(cuò)誤報(bào)文和其他重要信息贱案。

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

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

用來處理連接網(wǎng)絡(luò)的硬件部分铸董。包括控制操作系統(tǒng)、硬件的設(shè)備驅(qū) 動(dòng)肴沫、NIC(Network Interface Card粟害,網(wǎng)絡(luò)適配器,即網(wǎng)卡)颤芬,及光纖等 物理可見部分(還包括連接器等一切傳輸媒介)悲幅。硬件上的范疇均在鏈路層的作用范圍之內(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é)議,用來轉(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è)通過每一層直到被當(dāng)作一串比特流送入網(wǎng)絡(luò)藻治。其中每一層對(duì)收到的數(shù)據(jù)都要增加一些首部信息(有時(shí)還要增加尾部信息)碘勉,該過程如下圖所示。

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


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



端口號(hào)和DNS

端口號(hào)

服務(wù)器一般都是通過知名端口號(hào)來識(shí)別的亚情。例如,對(duì)于每個(gè)TCP/IP實(shí)現(xiàn)來說哈雏,F(xiàn)TP服務(wù)器的TCP端口號(hào)都是21楞件,每個(gè)Telnet服務(wù)器的TCP端口號(hào)都是23,每個(gè)TFTP (簡單文件傳送協(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)來管理。知名端口號(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ì)通過分層順序與對(duì)方進(jìn)行通信扶叉。發(fā)送端從應(yīng)用層往下走,接收端則往應(yīng)用層往上走帕膜。

我們用 HTTP 舉例來說明枣氧,首先作為發(fā)送端的客戶端在應(yīng)用層 (HTTP 協(xié)議)發(fā)出一個(gè)想看某個(gè)Web頁面的 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ā)給鏈路層乌庶。這樣一來种蝶,發(fā)往網(wǎng)絡(luò)的通信請(qǐng)求就準(zhǔn)備齊全了。

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

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

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



TCP協(xié)議

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

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

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

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

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

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


【TCP KeepAlive】

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

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

TCP-Keepalive-HOWTO 有對(duì) TCP KeepAlive 特性的詳細(xì)介紹,有興趣的同學(xué)可以參考。這里主要說一下错邦,TCP KeepAlive 的局限。首先 TCP KeepAlive 監(jiān)測的方式是發(fā)送一個(gè) probe 包厦画,會(huì)給網(wǎng)絡(luò)帶來額外的流量,另外 TCP KeepAlive 只能在內(nèi)核層級(jí)監(jiān)測連接的存活與否滥朱,而連接的存活不一定代表服務(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ā)來 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)沒有數(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)求意鲸,但還沒有準(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)擎值,等待來自客戶端的最后一個(gè)ACK蚂且。

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

客戶端接收到來自服務(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)之后肉瓦,沒有收到服務(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))

在三次握手過程中,服務(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包將長時(shí)間占用未連接隊(duì)列柒爵,正常的SYN請(qǐng)求被丟棄役电,導(dǎo)致目標(biāo)系統(tǒng)運(yùn)行緩慢,嚴(yán)重者會(huì)引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓棉胀。

2. 如何檢測 SYN 攻擊法瑟?

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

3. 如何防御 SYN 攻擊酥夭?

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

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

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

-? 過濾網(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)是有長度的炉峰。每個(gè) UDP 數(shù)據(jù)報(bào)都有長度,如果一個(gè)數(shù)據(jù)報(bào)正確地到達(dá)目的地脉执,那么該數(shù)據(jù)報(bào)的長度將隨數(shù)據(jù)一起傳遞給接收方讲冠。而 TCP 是一個(gè)字節(jié)流協(xié)議,沒有任何(協(xié)議上的)記錄邊界适瓦。

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

UDP 支持多播和廣播否彩。

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

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

1. 基于連接與無連接敬尺;

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

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

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è)名稱可能聽起來有點(diǎn)夸張囱修,但事實(shí)正是如此赎瑰,因?yàn)?b>幾乎所有使用網(wǎng)絡(luò)的系統(tǒng)都會(huì)用到 IP 協(xié)議。TCP/IP 協(xié)議族中的 IP 指的就是網(wǎng)際協(xié)議破镰,協(xié)議名稱中占據(jù)了一半位置餐曼,其重要性可見一斑。

可能有人會(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)過多臺(tái)計(jì)算機(jī)和網(wǎng)絡(luò)設(shè)備中轉(zhuǎn) 才能連接到對(duì)方。而在進(jìn)行中轉(zhuǎn)時(shí)孵滞,會(huì)利用下一站中轉(zhuǎn)設(shè)備的 MAC 地址來搜索下一個(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é)議面向無連接悲龟,IP網(wǎng)中的節(jié)點(diǎn)路由器根據(jù)每個(gè)IP包的包頭IP地址進(jìn)行尋址屋讶,這樣同一個(gè)主機(jī)發(fā)出的屬于同一報(bào)文的IP包可能會(huì)經(jīng)過不同的路徑到達(dá)目的主機(jī).

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

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



ARP協(xié)議

IP 間的通信依賴 MAC 地址琅轧。在網(wǎng)絡(luò)上伍绳,通信的雙方在同一局域網(wǎng)(LAN)內(nèi)的情況是很少的,通常是經(jīng)過多臺(tái)計(jì)算機(jī)和網(wǎng)絡(luò)設(shè)中轉(zhuǎn)才能連接到對(duì)方鹰晨。而在進(jìn)行中轉(zhuǎn)時(shí)墨叛,會(huì)利用下一站中轉(zhuǎn)設(shè)備的 MAC地址來搜索下一個(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)系作者
  • 序言:七十年代末闯传,一起剝皮案震驚了整個(gè)濱河市谨朝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甥绿,老刑警劉巖字币,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異共缕,居然都是意外死亡洗出,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門图谷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翩活,“玉大人,你說我怎么就攤上這事便贵〔ふ颍” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵承璃,是天一觀的道長利耍。 經(jīng)常有香客問我,道長盔粹,這世上最難降的妖魔是什么隘梨? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮玻佩,結(jié)果婚禮上出嘹,老公的妹妹穿的比我還像新娘。我一直安慰自己咬崔,他們只是感情好税稼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垮斯,像睡著了一般郎仆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兜蠕,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天扰肌,我揣著相機(jī)與錄音,去河邊找鬼熊杨。 笑死曙旭,一個(gè)胖子當(dāng)著我的面吹牛盗舰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桂躏,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼钻趋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剂习?” 一聲冷哼從身側(cè)響起蛮位,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鳞绕,沒想到半個(gè)月后失仁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡们何,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年萄焦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垂蜗。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡楷扬,死狀恐怖解幽,靈堂內(nèi)的尸體忽然破棺而出贴见,到底是詐尸還是另有隱情,我是刑警寧澤躲株,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布片部,位于F島的核電站,受9級(jí)特大地震影響霜定,放射性物質(zhì)發(fā)生泄漏档悠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一望浩、第九天 我趴在偏房一處隱蔽的房頂上張望辖所。 院中可真熱鬧,春花似錦磨德、人聲如沸缘回。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酥宴。三九已至,卻和暖如春您觉,著一層夾襖步出監(jiān)牢的瞬間拙寡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工琳水, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肆糕,地道東北人般堆。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像诚啃,于是被迫代替她去往敵國和親郁妈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容