我們專(zhuān)注於高端品牌網(wǎng)站創(chuàng)意設(shè)計(jì)與開(kāi)發(fā)
TCP/IP協(xié)議族
現(xiàn)在Internet(網(wǎng)際網(wǎng)路)使用的主流協(xié)議族是TCP/IP協(xié)議族,它是一個(gè)分層、多協(xié)議的通信體系。本章簡(jiǎn)要討論TCP/IP協(xié)議族各層包含的主要協(xié)議,以及它們之間是如何協(xié)作完成網(wǎng)絡(luò)通信的。
TCP/IP協(xié)議族包含眾多協(xié)議,我們無(wú)法一一討論。本書(shū)將在後續(xù)章節(jié)詳細(xì)討論IP協(xié)議和TCP協(xié)議,因為它們對(duì)編寫(xiě)網(wǎng)絡(luò)應(yīng)用程式具有最直接的影響。本章則簡(jiǎn)單介紹其中幾個(gè)相關(guān)協(xié)議:ICMP協(xié)議、ARP協(xié)議和DNS協(xié)議,學(xué)習(xí)它們對(duì)於理解網(wǎng)絡(luò)通信很有幫助。讀者如果想要系統(tǒng)地學(xué)習(xí)網(wǎng)絡(luò)協(xié)議,那麼RFC(Request For Comments,評(píng)論請求)文檔無(wú)疑是首選資料。
TCP/IP協(xié)議族體系結(jié)構(gòu)以及主要協(xié)議
TCP/IP協(xié)議族是一個(gè)四層協(xié)議系統(tǒng),自底而上分別是數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸(shū)層和應(yīng)用層。每一層完成不同的功能,且通過(guò)若干協(xié)議來(lái)實(shí)現(xiàn),上層協(xié)議使用下層協(xié)議提供的服務(wù),如下圖:
封裝
上層協(xié)議是如何使用下層協(xié)議提供的服務(wù)的呢?其實(shí)這是通過(guò)封裝(encapsulation)實(shí)現(xiàn)的。應(yīng)用程式數(shù)據(jù)在發(fā)送到物理網(wǎng)絡(luò)上之前,將沿著協(xié)議棧從上往下依次傳遞。每層協(xié)議都將在上層數(shù)據(jù)的基礎(chǔ)上加上自己的頭部信息(有時(shí)還包括尾部信息),以實(shí)現(xiàn)該層的功能,這個(gè)過(guò)程就稱(chēng)為封裝,如下圖:
經(jīng)過(guò)TCP封裝後的數(shù)據(jù)稱(chēng)為TCP報(bào)文段(TCP message segment),或者簡(jiǎn)稱(chēng)TCP段。前文提到,TCP協(xié)議為通信雙方維持一個(gè)連接,並且在內(nèi)核中存儲(chǔ)相關(guān)數(shù)據(jù)。這部分數(shù)據(jù)中的TCP頭部信息和TCP內(nèi)核緩衝區(qū)(發(fā)送緩衝區(qū)或接收緩衝區(qū))數(shù)據(jù)一起構(gòu)成了TCP報(bào)文段,如下圖:
當(dāng)發(fā)送端應(yīng)用程式使用send(或者write)函數(shù)向一個(gè)TCP連接寫(xiě)入數(shù)據(jù)時(shí),內(nèi)核中的TCP模塊首先把這些數(shù)據(jù)複製到與該連接對(duì)應(yīng)的TCP內(nèi)核發(fā)送緩衝區(qū)中,然後TCP模塊調(diào)用IP模塊提供的服務(wù),傳遞的參數(shù)包括TCP頭部信息和TCP發(fā)送緩衝區(qū)中的數(shù)據(jù),即TCP報(bào)文段。
經(jīng)過(guò)UDP封裝後的數(shù)據(jù)稱(chēng)為UDP數(shù)據(jù)報(bào)(UDP datagram)。UDP對(duì)應(yīng)用程式數(shù)據(jù)的封裝與TCP類(lèi)似。不同的是,UDP無(wú)須為應(yīng)用層數(shù)據(jù)保存副本,因為它提供的服務(wù)是不可靠的。當(dāng)一個(gè)UDP數(shù)據(jù)報(bào)被成功發(fā)送之後,UDP內(nèi)核緩衝區(qū)中的該數(shù)據(jù)報(bào)就被丟棄了。如果應(yīng)用程式檢測(cè)到該數(shù)據(jù)報(bào)未能被接收端正確接收,並打算重發(fā)這個(gè)數(shù)據(jù)報(bào),則應(yīng)用程式需要重新從用戶(hù)空間將該數(shù)據(jù)報(bào)拷貝到UDP內(nèi)核發(fā)送緩衝區(qū)中。
經(jīng)過(guò)IP封裝後的數(shù)據(jù)稱(chēng)為IP數(shù)據(jù)報(bào)(IP datagram)。IP數(shù)據(jù)報(bào)也包括頭部信息和數(shù)據(jù)部分,其中數(shù)據(jù)部分就是一個(gè)TCP報(bào)文段、UDP數(shù)據(jù)報(bào)或者ICMP報(bào)文。我們將在第2章詳細(xì)討論IP數(shù)據(jù)報(bào)的頭部信息。
經(jīng)過(guò)數(shù)據(jù)鏈路層封裝的數(shù)據(jù)稱(chēng)為幀(frame)。傳輸(shū)媒介不同,幀的類(lèi)型也不同。比如,乙太網(wǎng)上傳輸(shū)的是乙太網(wǎng)幀(ethernet frame),而令牌環(huán)網(wǎng)絡(luò)上傳輸(shū)的則是令牌環(huán)幀(token ring frame)。以乙太網(wǎng)幀為例,其封裝格式如下圖:
乙太網(wǎng)幀使用6位元組的目的物理地址和6位元組的源物理地址來(lái)表示通信的雙方。關(guān)於類(lèi)型(type)欄位,我們將在後面討論。4位元組CRC欄位對(duì)幀的其他部分提供循環(huán)冗餘校驗(yàn)。
幀的最大傳輸(shū)單元(Max Transmit Unit,MTU),即幀最多能攜帶多少上層協(xié)議數(shù)據(jù)(比如IP數(shù)據(jù)報(bào)),通常受到網(wǎng)絡(luò)類(lèi)型的限制。圖1-6所示的乙太網(wǎng)幀的MTU是1500位元組。正因為如此,過(guò)長(zhǎng)的IP數(shù)據(jù)報(bào)可能需要被分片(fragment)傳輸(shū)。
幀才是最終在物理網(wǎng)絡(luò)上傳送的字節(jié)序列。至此,封裝過(guò)程完成。
文章引用:http://www.szymweb.com/new/182.html
本站文章為深圳網(wǎng)站建設(shè)·源美網(wǎng)絡(luò)原創(chuàng)策劃(huà),如有版權(quán)糾紛或者違規(guī)問(wèn)題,請聯(lián)繫我們刪除,謝謝!
售後保障
承諾任何問(wèn)題1小時(shí)內(nèi)解決數(shù)據(jù)備份
更安全、更高效、更穩(wěn)定價(jià)格公道精準(zhǔn)
項(xiàng)目經(jīng)理精準(zhǔn)報(bào)價(jià)不弄虛作假合作無(wú)風(fēng)險(xiǎn)
重合同講信譽(yù),無(wú)效全額退款