計(jì)算機(jī)與網(wǎng)絡(luò)裝備要相互通訊,雙方就必須基于相同的方法。比如:如何探測(cè)到通訊目標(biāo)、由哪1邊先發(fā)起通訊、使用哪一種語言進(jìn)行通訊、怎樣結(jié)束通訊等規(guī)則都需要事前肯定。不同的硬件、操作系統(tǒng)之間的通訊,所有的1切都需要1種規(guī)則。而我們就把這類規(guī)則稱之為協(xié)議(protocol)
協(xié)議中存在各式各樣的內(nèi)容。從電纜的規(guī)格到IP地址的選定方法、尋覓異地用戶的方法、雙方建立通訊的順序,和web頁面顯示需要的處理步驟,等等。
像這樣把與互聯(lián)網(wǎng)相干的協(xié)議集合起來總成為TCP/IP。
TCP/IP協(xié)議族里重要的1點(diǎn)就是分層。TCP/IP協(xié)議族按層次分別分為以下4層:利用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層。
把TCP/IP層次化是有好處的。加入互聯(lián)網(wǎng)只由1個(gè)協(xié)議兼顧,某個(gè)地方需要改變?cè)O(shè)計(jì)時(shí),就必須把所有部份整體替換掉。而分層以后只需要把變動(dòng)的層替換掉便可。把各層之間的接口部份計(jì)劃好以后,每一個(gè)層次內(nèi)部設(shè)計(jì)就可以夠自由改動(dòng)了。
值得1提的是,層次化以后,設(shè)計(jì)也變得相當(dāng)簡(jiǎn)單了。處于利用層上的利用可以只斟酌分派給自己的任務(wù),而不用弄清對(duì)方在地球上的哪一個(gè)地方、對(duì)方的傳輸線路是怎樣的、能否確保傳輸投遞等問題。
TCP/IP協(xié)議族各層的作用以下:
利用層
利用層決定了向用戶提供應(yīng)當(dāng)服務(wù)時(shí)通訊的活動(dòng)。
TCP/IP協(xié)議族內(nèi)預(yù)存了各類通用的利用服務(wù)。比如,F(xiàn)TP(File Transfer Protocol,文件傳輸協(xié)議)和DNS(Domain Name System,域名系統(tǒng))服務(wù)就是其中的兩類。HTTP協(xié)議也處于該層。
傳輸層
傳輸層對(duì)上層利用層,提供處于網(wǎng)絡(luò)連接中兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)傳輸。
在傳輸層有兩個(gè)性質(zhì)不同的協(xié)議:TCP(Transmission Control Protocol,傳輸控制協(xié)議)和UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)。
網(wǎng)絡(luò)層(又名網(wǎng)絡(luò)互連層)
網(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ò)裝備進(jìn)行傳輸時(shí),網(wǎng)絡(luò)層所起的所用就是在眾多的選項(xiàng)內(nèi)選擇1條傳輸線路。
鏈路層(又名數(shù)據(jù)鏈路層,網(wǎng)絡(luò)接口層)
用來處理連接網(wǎng)絡(luò)的硬件部份。包括控制操作系統(tǒng)、硬件的裝備驅(qū)動(dòng)、NIC(Network Interface Card,網(wǎng)絡(luò)適配器,即網(wǎng)卡),及光纖等物理可見部份(還包括連接器等1切傳輸媒介)。硬件上的范疇均在鏈路層的作用范圍以內(nèi)。
利用TCP/IP協(xié)議族進(jìn)行網(wǎng)絡(luò)通訊時(shí),會(huì)通過分層順序與對(duì)方進(jìn)行通訊。發(fā)送端從利用層往下走,接收端則往利用層上走。
我們利用HTTP舉例來講明,首先作為發(fā)送真?zhèn)€客戶端在利用層(HTTP協(xié)議)發(fā)出1個(gè)想看某個(gè)Web頁面要求的HTTP要求。
接著,為了傳輸方便,在傳輸層(TCP協(xié)議)把從利用層處接收到的數(shù)據(jù)(HTTP要求報(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ā)給鏈路層。這樣1來,發(fā)往網(wǎng)絡(luò)的通訊要求就準(zhǔn)備齊全了。
在接收真?zhèn)€服務(wù)器在鏈路層接收到數(shù)據(jù),按序往上層發(fā)送,1直到利用層。當(dāng)傳輸?shù)嚼脤樱潘阏嬲邮盏接煽蛻舳税l(fā)送過來的HTTP要求。
發(fā)送端在層與層之間傳輸數(shù)據(jù)時(shí),每經(jīng)過1層時(shí)一定會(huì)被打上1個(gè)該層所屬的首部信息。反之,接收端在層與層傳輸數(shù)據(jù)時(shí),每經(jīng)過1層時(shí)匯報(bào)對(duì)應(yīng)的首部消去。
這類把數(shù)據(jù)信息包裝起來的做法成為封裝。
先我們分別針對(duì)在TCP/IP協(xié)議族中與HTTP密不可分的3個(gè)洗衣(IP、TCP和DNS)進(jìn)行說明。
按層次分,IP(Internet Protocol)網(wǎng)際協(xié)議位于網(wǎng)絡(luò)層。Internet Protocol這個(gè)名詞可能聽起來有點(diǎn)夸大,但事實(shí)正是如此,由于幾近所有使用網(wǎng)絡(luò)的系統(tǒng)都會(huì)用到IP協(xié)議。TCP/IP協(xié)議族中的IP指的就是網(wǎng)際協(xié)議。可能會(huì)有人把“IP”和“IP地址”弄混,“IP”實(shí)際上是1種協(xié)議的名稱。
IP協(xié)議的作用是把各種數(shù)據(jù)包傳送給對(duì)方。而要保證確切傳送到對(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ò)上,通訊的雙發(fā)在同1局域網(wǎng)(LAN)內(nèi)的情況是很少的,通常是經(jīng)過臺(tái)計(jì)算機(jī)和網(wǎng)絡(luò)裝備中轉(zhuǎn)才能連接到對(duì)方。而在進(jìn)行中轉(zhuǎn)時(shí),會(huì)利用下1站中轉(zhuǎn)裝備的MAC地址來搜索下1個(gè)中轉(zhuǎn)目標(biāo)。這是,會(huì)采取ARP協(xié)議(Address Resolution Protocol)。ARP是1種用以解析地址的協(xié)議,根據(jù)通訊方的IP地址就能夠反查出對(duì)應(yīng)的MAC地址。
沒有人能全面掌握互聯(lián)網(wǎng)中的傳輸狀態(tài)
在到達(dá)通訊目標(biāo)前的中轉(zhuǎn)進(jìn)程中,那些計(jì)算機(jī)和路由器等網(wǎng)絡(luò)裝備只能得悉很粗略的傳輸線路。
這類機(jī)制成為路由選擇(routing),有點(diǎn)像快遞公司的送貨進(jìn)程。想要寄快遞的人,只要將自己的貨物送到集散中心,就能夠知道快遞公司是不是肯收件發(fā)貨,該快遞公司的集散中間檢查貨物的投遞地址,明確下閘該送往那個(gè)區(qū)域的集散中心。接著,那個(gè)區(qū)域的集散中心自然會(huì)判斷能否送到對(duì)方的家中。
我們想通過這個(gè)比喻說明,不管哪臺(tái)計(jì)算機(jī),哪臺(tái)網(wǎng)絡(luò)裝備,它們都沒法全面掌握互聯(lián)網(wǎng)中的細(xì)節(jié)。
按層次分,TCP位于傳輸層,提供可靠的字節(jié)流服務(wù)。
所謂的字節(jié)流服務(wù)(Byte Stream Service)是指,為了方便傳輸,將大塊數(shù)據(jù)分割成以報(bào)文段(segment)為單位的數(shù)據(jù)包進(jìn)行管理。而可靠的傳輸服務(wù)是指,能夠把數(shù)據(jù)準(zhǔn)確可靠的傳送給對(duì)方。1言以蔽之,TCP協(xié)議為了更容易傳輸大數(shù)據(jù)才把數(shù)據(jù)分割,而且TCP協(xié)議能夠確認(rèn)數(shù)據(jù)終究是不是投遞對(duì)方。
為確保能到達(dá)目標(biāo)
為了準(zhǔn)確無誤的將數(shù)據(jù)投遞目標(biāo)處,TCP協(xié)議采取了3次握手(three-way handshaking)策略。用TCP協(xié)議把數(shù)據(jù)包送出去后,TCP不會(huì)對(duì)傳送后的情況置之不理,它1定會(huì)向?qū)Ψ酱_認(rèn)是不是成功投遞。握手進(jìn)程中使用了TCP的標(biāo)志(flag)–SYN(synchronize)和ACK(acknowledgement).
發(fā)送端首先發(fā)送1個(gè)帶SYN標(biāo)志的數(shù)據(jù)包給對(duì)方。接收端收到后,回傳1個(gè)帶有SYN/ACK標(biāo)志的數(shù)據(jù)包以轉(zhuǎn)達(dá)確認(rèn)信息。最后,發(fā)送端再回傳1個(gè)帶ACK標(biāo)志的數(shù)據(jù)包,代表“握手”結(jié)束。
若在握手進(jìn)程中某個(gè)階段莫名中斷,TCP協(xié)議會(huì)再次以相同的順序發(fā)送相同的數(shù)據(jù)包。
DNS(Domain Name System)服務(wù)是和HTTP協(xié)議1樣位于利用層的協(xié)議。它提供域名到IP地址之間的解析服務(wù)。
計(jì)算機(jī)既可以被賦予IP地址,也能夠被賦予主機(jī)名和域名。比如www.baidu.com。
用戶通常使用主機(jī)名或域名來訪問對(duì)方的計(jì)算機(jī),而不是通過IP地址來訪問。由于與IP地址的1組純數(shù)字相比,用字母配合數(shù)字的表示情勢(shì)來指定計(jì)算機(jī)名更符合人類的記憶習(xí)慣。
但要讓計(jì)算機(jī)去理解名稱,相對(duì)而言就變得困難了。由于計(jì)算機(jī)更善于處理1長(zhǎng)串?dāng)?shù)字。
為了解決上述的問題,DNS服務(wù)應(yīng)運(yùn)而生。DNS協(xié)議通過提供域名查找IP地址,或逆向從IP地址反查域名的服務(wù)。
了解了HTTP協(xié)議密不可分的TCP/IP協(xié)議族中的各種協(xié)議后,我們?cè)偻ㄟ^下面這張圖來了解下IP協(xié)議、TCP協(xié)議和DNS服務(wù)在使用HTTP協(xié)議的通訊進(jìn)程中各自發(fā)揮了哪些作用。