摘要:協(xié)議地址解析協(xié)議,根據(jù)地址獲取地址。確認(rèn)表示確認(rèn)號(hào)字段有效,確認(rèn)號(hào)無(wú)效。終止表示發(fā)送數(shù)據(jù)已發(fā)送完畢,要求釋放連接。
TCP/IP協(xié)議蔟分為4層結(jié)構(gòu),分別是應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層,每一層都由特定的協(xié)議與對(duì)方進(jìn)行通信,在進(jìn)行數(shù)據(jù)通信時(shí),發(fā)送端的數(shù)據(jù)從應(yīng)用層往數(shù)據(jù)鏈路層方向流動(dòng),接收端的數(shù)據(jù)從數(shù)據(jù)鏈路層往應(yīng)用層流動(dòng)。
數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層的主要工作是對(duì)電信號(hào)進(jìn)行分組并形成具有特定意義的數(shù)據(jù)幀,然后以廣播的形式通過(guò)物流介質(zhì)發(fā)送給接受方,數(shù)據(jù)鏈路層處理數(shù)據(jù)的協(xié)議是以太網(wǎng)協(xié)議,它將傳輸?shù)臄?shù)據(jù)分組封裝成數(shù)據(jù)幀,每個(gè)數(shù)據(jù)幀由首部、數(shù)據(jù)和尾部三部分組成,首部包含目標(biāo)MAC地址、源MAC地址和類型,尾部為數(shù)據(jù)幀校驗(yàn)序列,用于確定數(shù)據(jù)包在傳輸過(guò)程中是否損壞。數(shù)據(jù)傳輸采用廣播形式,把數(shù)據(jù)包發(fā)送給該子網(wǎng)內(nèi)的所有主機(jī),子網(wǎng)內(nèi)每臺(tái)主機(jī)接收到這個(gè)包以后,都會(huì)讀取首部里的目標(biāo)MAC地址,然后和自己的MAC地址進(jìn)行比對(duì),如果相同則進(jìn)行下一步處理,如果不同,則丟棄這個(gè)包。
網(wǎng)絡(luò)層對(duì)于上面的過(guò)程,有幾個(gè)細(xì)節(jié)值得我們思考:
發(fā)送者如何知道接受者的MAC地址?
發(fā)送者如何知道接受者和自己同屬一個(gè)子網(wǎng)?
如果接受者和自己不在同一個(gè)子網(wǎng),數(shù)據(jù)包如何發(fā)送給對(duì)方?
網(wǎng)絡(luò)層有如下幾個(gè)協(xié)議:
IP協(xié)議:MAC地址只與廠商有關(guān),與所處的網(wǎng)絡(luò)無(wú)關(guān),所以無(wú)法通過(guò)MAC地址來(lái)判斷兩臺(tái)主機(jī)是否屬于同一個(gè)子網(wǎng),因此,網(wǎng)絡(luò)層引入IP協(xié)議,制定了一套新地址,用于區(qū)分兩臺(tái)主機(jī)是否同屬于一個(gè)網(wǎng)絡(luò),這套地址就是網(wǎng)絡(luò)地址-IP地址。
ARP協(xié)議:地址解析協(xié)議,根據(jù)IP地址獲取MAC地址。ARP首先發(fā)起一個(gè)請(qǐng)求數(shù)據(jù)包,數(shù)據(jù)包的首部包含了目標(biāo)主機(jī)的IP地址,數(shù)據(jù)包在鏈路層被封裝成數(shù)據(jù)幀并在子網(wǎng)內(nèi)廣播,每一臺(tái)主機(jī)都會(huì)接受到這個(gè)數(shù)據(jù)包,并取出目標(biāo)IP地址,并與自己的IP地址進(jìn)行比較,如果相同就返回自己的MAC地址,ARP接收返回消息,以此確定目標(biāo)機(jī)的MAC地址,與此同時(shí),ARP還會(huì)將返回的MAC地址與對(duì)應(yīng)的IP地址存入本機(jī)ARP緩存并保留一段時(shí)間。
路由協(xié)議:通過(guò)ARP協(xié)議的工作原理可以發(fā)現(xiàn),ARP的MAC尋址還是局限在同一個(gè)子網(wǎng)中,因此網(wǎng)絡(luò)層引入路由協(xié)議,首先通過(guò)IP協(xié)議判斷兩臺(tái)主機(jī)是否在同一個(gè)子網(wǎng)中,如果在,通過(guò)ARP協(xié)議查詢對(duì)應(yīng)的MAC地址,然后以廣播形式向該子網(wǎng)內(nèi)的主機(jī)發(fā)送數(shù)據(jù)包,如果不在,以太網(wǎng)會(huì)將數(shù)據(jù)包轉(zhuǎn)發(fā)給本子網(wǎng)的網(wǎng)關(guān)進(jìn)行路由,網(wǎng)關(guān)是子網(wǎng)與子網(wǎng)間的橋梁,經(jīng)過(guò)網(wǎng)關(guān)的多次轉(zhuǎn)發(fā),最終將數(shù)據(jù)包轉(zhuǎn)發(fā)到目標(biāo)IP所在的子網(wǎng),然后再通過(guò)ARP協(xié)議獲取MAC地址。完成這個(gè)路由協(xié)議的設(shè)備就是路由器。
在網(wǎng)絡(luò)層被包裝的數(shù)據(jù)包就叫IP數(shù)據(jù)包,IP數(shù)據(jù)包由首部和數(shù)據(jù)兩部分組成,首部包含目標(biāo)IP地址和源IP地址,網(wǎng)絡(luò)層的主要工作是定義網(wǎng)絡(luò)地址,區(qū)分網(wǎng)段,子網(wǎng)內(nèi)MAC尋址,對(duì)不同子網(wǎng)的數(shù)據(jù)進(jìn)行路由。
傳輸層鏈路層定義了MAC地址,網(wǎng)絡(luò)層定義了IP地址,有了這兩個(gè)地址,數(shù)據(jù)就能從一個(gè)主機(jī)發(fā)送到另一個(gè)主機(jī),但是數(shù)據(jù)實(shí)際上是從一個(gè)主機(jī)上的某個(gè)應(yīng)用程序發(fā)出,當(dāng)數(shù)據(jù)包被接收后,也無(wú)法確定哪個(gè)應(yīng)用程序要接收這個(gè)數(shù)據(jù)包。
因此傳輸層引入U(xiǎn)DP協(xié)議來(lái)解決這個(gè)問(wèn)題,UDP定義了端口號(hào),同一個(gè)主機(jī)的每一個(gè)應(yīng)用程序都需要指定唯一的端口號(hào),并且在傳輸數(shù)據(jù)時(shí)在數(shù)據(jù)上加上端口信息,UDP定義的數(shù)據(jù)包叫做UDP數(shù)據(jù)包。UDP數(shù)據(jù)包由首部和數(shù)據(jù)兩部分組成,首部包括源端口和目標(biāo)端口。
UDP協(xié)議比較簡(jiǎn)單,實(shí)現(xiàn)容易,但是沒(méi)有確認(rèn)機(jī)制,可靠性較差,為了解決這個(gè)問(wèn)題,TCP協(xié)議就被引入,TCP協(xié)議是一種面向連接的、可靠地、基于字節(jié)流的通信協(xié)議。TCP協(xié)議每發(fā)出一個(gè)數(shù)據(jù)包都要求確認(rèn),如果數(shù)據(jù)包丟失,收不到確認(rèn)信息,發(fā)送發(fā)就必須重發(fā)這個(gè)數(shù)據(jù)包。
TCP協(xié)議TCP為了保證傳輸?shù)目煽啃?,在正式收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接。由此才有TCP的三次握手機(jī)制。下面是TCP三次握手過(guò)程中使用到的幾個(gè)名詞:
序列號(hào)seq:是TCP報(bào)文段的第一個(gè)字節(jié)的數(shù)據(jù)編號(hào),其中第一個(gè)TCP報(bào)文段的第一個(gè)字節(jié)編號(hào)由本地隨機(jī)產(chǎn)生。
確認(rèn)號(hào)ack:期待收到對(duì)方下一個(gè)報(bào)文段的序列號(hào),因此確認(rèn)號(hào)為序列號(hào)+1。
確認(rèn)ACK:ACK=1表示確認(rèn)號(hào)字段有效,ACK=0確認(rèn)號(hào)無(wú)效。
同步SYN:SYN這個(gè)標(biāo)志在TCP建立連接時(shí)才會(huì)被置為1,握手完成被置為0。
終止FIN:FIN=1表示發(fā)送數(shù)據(jù)已發(fā)送完畢,要求釋放連接。
主機(jī)A向主機(jī)B請(qǐng)求建立TCP連接,其TCP的三次握手過(guò)程如下:
主機(jī)A向主機(jī)B發(fā)送TCP連接請(qǐng)求數(shù)據(jù)包,SYN=1,seq=x。
主機(jī)B向主機(jī)A發(fā)送連接確認(rèn)數(shù)據(jù)包,SYN=1,ACK=1,seq=y,ack=x+1。
主機(jī)A向主機(jī)B發(fā)送再次確認(rèn)數(shù)據(jù)包,ACK=1,seq=x+1,ack=y+1。
主機(jī)A主機(jī)B的TCP鏈接斷開(kāi),其TCP的四次揮手過(guò)程如下:
由于TCP連接時(shí)雙全工的(即數(shù)據(jù)可以在兩個(gè)方向上同時(shí)傳遞),所以進(jìn)行關(guān)閉時(shí)每個(gè)方向都要多帶帶進(jìn)行關(guān)閉,這個(gè)單方向的關(guān)閉就叫半關(guān)閉,當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù),就發(fā)送一個(gè)FIN來(lái)向另一方通告將要終止這個(gè)方向的連接。
A確認(rèn)發(fā)送完數(shù)據(jù)后,想要關(guān)閉連接,發(fā)送FIN給B。
B收到A發(fā)送的FIN,發(fā)送ACK回復(fù)。
但這時(shí)B可能還在發(fā)送數(shù)據(jù),所以沒(méi)有想要關(guān)閉連接的意思,所以FIN和ACK不是同時(shí)發(fā)送的,等B數(shù)據(jù)發(fā)送完畢后,才會(huì)發(fā)送ACK=1,F(xiàn)IN=1。
A收到B發(fā)來(lái)的FIN,回復(fù)ACK=1,A等待2MSL以后,沒(méi)有收到B傳來(lái)的任何消息,知道B已經(jīng)收到自己的確認(rèn)消息ACK,A就關(guān)閉鏈接。
在A發(fā)送最后的ACK回復(fù)時(shí),該ACK可能丟失,B如果沒(méi)有收到ACK,將不斷重復(fù)發(fā)送FIN片段,所以A不能立即關(guān)閉,它必須確認(rèn)B接收到該ACK并關(guān)閉后,在2MSL內(nèi)沒(méi)有收到FIN,才會(huì)進(jìn)行關(guān)閉。MSL指一個(gè)報(bào)文段在網(wǎng)絡(luò)中的最大存活時(shí)間。
傳輸層的主要工作內(nèi)容是定義端口,標(biāo)識(shí)應(yīng)用程序身份,實(shí)現(xiàn)端口到端口的通信,TCP協(xié)議保證數(shù)據(jù)傳輸?shù)目煽啃浴?/p> 應(yīng)用層
理論上來(lái)講,有了以上三層協(xié)議的支持,數(shù)據(jù)已經(jīng)可以從一個(gè)主機(jī)的應(yīng)用程序傳輸?shù)搅硪慌_(tái)主機(jī)的應(yīng)用程序上了,但是傳輸過(guò)來(lái)的數(shù)據(jù)是字節(jié)流,不能被程序識(shí)別,因此應(yīng)用層定義了各種各樣的協(xié)議來(lái)規(guī)范數(shù)據(jù)格式,常見(jiàn)的有http、ftp等。應(yīng)用層的主要工作就是定義數(shù)據(jù)格式并按照對(duì)應(yīng)的格式解讀數(shù)據(jù)。
TCP/IP協(xié)議蔟鏈路層:對(duì)數(shù)據(jù)進(jìn)行分組,定義數(shù)據(jù)幀,確認(rèn)主機(jī)的物理地址,傳輸數(shù)據(jù)。
網(wǎng)絡(luò)層:定義IP地址,確認(rèn)主機(jī)所在的網(wǎng)絡(luò)位置,并通過(guò)IP進(jìn)行MAC尋址,對(duì)外網(wǎng)數(shù)據(jù)包進(jìn)行路由轉(zhuǎn)發(fā)。
傳輸層:定義端口號(hào),確認(rèn)主機(jī)上應(yīng)用程序的身份,并將數(shù)據(jù)包交給對(duì)應(yīng)的應(yīng)用程序。
應(yīng)用層:定義數(shù)據(jù)格式,并按照對(duì)應(yīng)的格式解讀數(shù)據(jù)。
當(dāng)輸入一個(gè)網(wǎng)址并按下回車鍵的時(shí)候,首先,應(yīng)用層協(xié)議對(duì)該請(qǐng)求包做了格式定義,緊接著傳輸層協(xié)議加上了雙發(fā)的端口號(hào),確認(rèn)雙發(fā)通信的應(yīng)用程序,然后網(wǎng)絡(luò)層的IP協(xié)議加上了雙方的IP地址,確認(rèn)雙發(fā)的網(wǎng)絡(luò)位置,最后鏈路層協(xié)議加上雙發(fā)的MAC地址,確認(rèn)雙發(fā)的物理位置,同時(shí)將數(shù)據(jù)進(jìn)行分組,形成數(shù)據(jù)幀,采用廣播方式,通過(guò)傳輸介質(zhì)發(fā)送給對(duì)方主機(jī),而對(duì)于不同子網(wǎng),該數(shù)據(jù)包首先會(huì)轉(zhuǎn)發(fā)給網(wǎng)關(guān)路由器,經(jīng)過(guò)多次轉(zhuǎn)發(fā)后,最終被發(fā)送到目標(biāo)主機(jī),目標(biāo)主機(jī)接收到數(shù)據(jù)包后,采用對(duì)應(yīng)的協(xié)議,對(duì)幀數(shù)據(jù)進(jìn)行組裝,然后一層一層的協(xié)議進(jìn)行解析,最終被應(yīng)用層的協(xié)議解析。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/61938.html
摘要:如地址端口號(hào)組成了所謂的,是網(wǎng)絡(luò)上運(yùn)行的程序之間雙向通信鏈路的終結(jié)點(diǎn),是和的基礎(chǔ)套接字網(wǎng)絡(luò)上具有唯一標(biāo)識(shí)的地址和端口組合在一起才能構(gòu)成唯一能識(shí)別的標(biāo)識(shí)符套接字。 更多物聯(lián)網(wǎng)高并發(fā)編程知識(shí)請(qǐng)移步:https://www.yuque.com/shizhiy... Java Socket編程之常識(shí)網(wǎng)絡(luò)基礎(chǔ)知識(shí) 網(wǎng)絡(luò)基礎(chǔ)知識(shí)(參考計(jì)算機(jī)網(wǎng)絡(luò))? 《TCP/IP協(xié)議棧及OSI參考模型詳解》? ...
摘要:面試網(wǎng)絡(luò)了解及網(wǎng)絡(luò)基礎(chǔ)對(duì)端傳輸詳解與攻防實(shí)戰(zhàn)本文從屬于筆者的信息安全實(shí)戰(zhàn)中滲透測(cè)試實(shí)戰(zhàn)系列文章。建議先閱讀下的網(wǎng)絡(luò)安全基礎(chǔ)。然而,該攻擊方式并不為大家所熟知,很多網(wǎng)站都有的安全漏洞。 面試 -- 網(wǎng)絡(luò) HTTP 現(xiàn)在面試門檻越來(lái)越高,很多開(kāi)發(fā)者對(duì)于網(wǎng)絡(luò)知識(shí)這塊了解的不是很多,遇到這些面試題會(huì)手足無(wú)措。本篇文章知識(shí)主要集中在 HTTP 這塊。文中知識(shí)來(lái)自 《圖解 HTTP》與維基百科,若...
摘要:該狀態(tài)會(huì)持續(xù)最大段生存期,指報(bào)文段在網(wǎng)絡(luò)中生存的時(shí)間,超時(shí)會(huì)被拋棄時(shí)間,若該時(shí)間段內(nèi)沒(méi)有的重發(fā)請(qǐng)求的話,就進(jìn)入狀態(tài)。 引言 網(wǎng)絡(luò)協(xié)議是每個(gè)前端工程師都必須要掌握的知識(shí),TCP/IP 中有兩個(gè)具有代表性的傳輸層協(xié)議,分別是 TCP 和 UDP,本文將介紹下這兩者以及它們之間的區(qū)別。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客 一、TCP/IP網(wǎng)絡(luò)模型 計(jì)算機(jī)與網(wǎng)絡(luò)設(shè)備要相互通信,雙方就必須...
閱讀 1414·2021-11-25 09:43
閱讀 2271·2021-09-27 13:36
閱讀 1123·2021-09-04 16:40
閱讀 1964·2019-08-30 11:12
閱讀 3319·2019-08-29 14:14
閱讀 574·2019-08-28 17:56
閱讀 1335·2019-08-26 13:50
閱讀 1256·2019-08-26 13:29