b2c網(wǎng)站建設(shè) 模板搜索引擎關(guān)鍵詞優(yōu)化方案
摘抄于大學(xué)期間記錄在QQ空間的一篇自學(xué)筆記,當(dāng)前清理空間,本來(lái)想直接刪除掉的,但是感覺(jué)有些舍不得,因此先搬移過(guò)來(lái)。
曾經(jīng),我只知道socket函數(shù)能進(jìn)行網(wǎng)絡(luò)間數(shù)據(jù)的通信,知道tcp/ip協(xié)議也是用來(lái)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)之間通信的協(xié)議。而后開(kāi)始接觸了http,ftp,udp,ip,還遇上了路由器,我開(kāi)始模糊了,他們到底誰(shuí)是網(wǎng)絡(luò)的真正領(lǐng)導(dǎo)者,他們又有何關(guān)系?現(xiàn)在通過(guò)一本51cto技術(shù)論壇的文檔,我才算真正明白了什么是網(wǎng)絡(luò)通信。
一、TCP/IP的層次結(jié)構(gòu)
? ? ? ? TCP/IP分為五成,從上到下分別是應(yīng)用層、傳輸層、internet層、網(wǎng)絡(luò)接口層,分別對(duì)應(yīng)OSI結(jié)構(gòu)中的應(yīng)用層、表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層。
???????? 其中應(yīng)用層包括的協(xié)議有Tclnet(遠(yuǎn)程登錄協(xié)議)、ftp(文件傳輸協(xié)議)、http協(xié)議,smtp(郵件傳輸協(xié)議)、DNS協(xié)議
??????????????? 傳輸層包括的協(xié)議有TCP和UDP協(xié)議
????????????????網(wǎng)絡(luò)層包括的協(xié)議有IP協(xié)議,以及ARP、RARP、IGMP?、ICMP
????????????????數(shù)據(jù)鏈路層的由邏輯鏈路子層和介質(zhì)訪問(wèn)子層
?????????????? 物理層有SONET、SDH、PDH?
? ? ? ? ? ? ? ? ?
?原來(lái)這些協(xié)議相輔相成,各施其職,共同完成了網(wǎng)絡(luò)間數(shù)據(jù)的傳輸,他們誰(shuí)也離不開(kāi)誰(shuí),就像我們?nèi)梭w的心臟大腦等,工作在不同層次上,共同組成了internet協(xié)議大家族。
二、IP協(xié)議(TCP/IP協(xié)議族心臟)
????????? IP協(xié)議是internet協(xié)議族最重要的協(xié)議,位于物理鏈路層之上的網(wǎng)絡(luò)層,向上層協(xié)議屏蔽了各種不同的物理鏈路的差別,因此能將各種不同介質(zhì)的網(wǎng)絡(luò)互聯(lián)起來(lái)。所有在internet上傳輸?shù)臄?shù)據(jù)以ip數(shù)據(jù)包格式傳輸,ip提供不可靠、無(wú)連接的數(shù)據(jù)包傳送服務(wù),即它不能保證ip數(shù)據(jù)包能否成功到達(dá)目的地。ip僅提供最好的傳輸服務(wù)。
????????? ip協(xié)議的工作對(duì)象是數(shù)據(jù)包。ip協(xié)議在處理數(shù)據(jù)包時(shí),只會(huì)根據(jù)數(shù)據(jù)包本身的情況處理數(shù)據(jù)包,不會(huì)考慮不同數(shù)據(jù)包之間的關(guān)系。因此對(duì)兩個(gè)目的地相同的數(shù)據(jù)包的處理可能是不同的。其次,ip協(xié)議的責(zé)任是將數(shù)據(jù)正確傳遞到目的地,ip協(xié)議用能夠表示和識(shí)別數(shù)據(jù)包的地址,并能根據(jù)地址選擇數(shù)據(jù)包傳遞的路徑。?????
??????????ip協(xié)議工作的對(duì)象是數(shù)據(jù)包,對(duì)上層傳遞來(lái)的數(shù)據(jù)包進(jìn)行封裝ip地址,結(jié)構(gòu)如下:
三、ARP協(xié)議(IP地址與物理地址間的映射)
??????? 由上可知要將一個(gè)ip數(shù)據(jù)包傳送到目的地,必須要有一只標(biāo)識(shí)目的地的機(jī)制,這種機(jī)制就是ip地址,ip地址是一種結(jié)構(gòu)化的二進(jìn)制地址,ip協(xié)議能夠給通過(guò)該地址找到與該地址相關(guān)聯(lián)的主機(jī)或網(wǎng)絡(luò)設(shè)備。ip協(xié)議將上層數(shù)據(jù)包封裝成ip數(shù)據(jù)包,而ip數(shù)據(jù)包的實(shí)際傳輸是通過(guò)將其封裝在屋里網(wǎng)絡(luò)的數(shù)據(jù)幀中并讓底層物理網(wǎng)絡(luò)來(lái)傳輸改幀實(shí)現(xiàn)的。物理網(wǎng)絡(luò)也有一個(gè)地址機(jī)制,稱為物理地址。物理網(wǎng)絡(luò)就是通過(guò)這種物理地址來(lái)進(jìn)行數(shù)據(jù)幀的發(fā)送和接收。這時(shí)出現(xiàn)了一個(gè)問(wèn)題,因?yàn)槲锢砭W(wǎng)絡(luò)是無(wú)法識(shí)別ip地址的,而ARP和RARP協(xié)議解決IP地址和物理地址間的映射問(wèn)題。
???????? 在以太網(wǎng)絡(luò)(一種廣播網(wǎng)絡(luò))中,即連接在同一個(gè)以太網(wǎng)中的任何主機(jī)都能接收到網(wǎng)絡(luò)上發(fā)送的所有數(shù)據(jù)幀,但主機(jī)會(huì)檢查數(shù)據(jù)幀中的目的地址是否是自己,否則將其丟棄。因此連接到網(wǎng)絡(luò)的接口都有一對(duì)地址:IP地址和物理地址,以太網(wǎng)的物理地址也稱MAC地址,每塊以太網(wǎng)卡出廠時(shí)都會(huì)有一個(gè)固定的全球唯一的MAC地址。
?????????ARP協(xié)議使用一種詢問(wèn)/回答機(jī)制。主機(jī)H1要發(fā)送一個(gè)ip數(shù)據(jù)包給主機(jī)H4過(guò)程如下:這時(shí)H1先構(gòu)造一個(gè)ARP請(qǐng)求數(shù)據(jù)包,該數(shù)據(jù)包中包含了ip地址P4,并留下一個(gè)空位表示P4的MAC地址。H1的ARP協(xié)議將ARP數(shù)據(jù)包交給網(wǎng)卡,讓他將該ARP數(shù)據(jù)包作為廣播幀發(fā)送出去。這樣H1所在以太網(wǎng)中的所有網(wǎng)卡將會(huì)受到該數(shù)據(jù)幀并對(duì)其進(jìn)行處理,因?yàn)樗麄兲幱谕粋€(gè)廣播幀。處于該廣播幀的主機(jī)收到這個(gè)請(qǐng)求數(shù)據(jù)包后就將自己的IP地址與數(shù)據(jù)包中中包含的ip地址進(jìn)行比較,如果相同就表示對(duì)方在詢問(wèn)自己的MAC地址,如果不是,ARP協(xié)議會(huì)簡(jiǎn)單丟棄該數(shù)據(jù)包。因此,只有H4會(huì)處理這個(gè)ARP請(qǐng)求數(shù)據(jù)包,這時(shí),H4會(huì)將自己的MAC地址填在MAC地址空位上,并將該數(shù)據(jù)包該數(shù)據(jù)包改為ARP響應(yīng)數(shù)據(jù)包,然后讓網(wǎng)卡將其發(fā)送給主機(jī)H1。
????????對(duì)于不在同一廣播幀中,該過(guò)程略有不同,需經(jīng)過(guò)路由器才能將數(shù)據(jù)進(jìn)行傳輸。ARP數(shù)據(jù)包格式:
????????硬件類型字段:對(duì)于以太網(wǎng)該字段為1;
????????協(xié)議類型字段:指明上層協(xié)議地址的類型,對(duì)于IP協(xié)議該字段為0X0800;
????????操作字段:指明ARP數(shù)據(jù)包的類型,ARP請(qǐng)求數(shù)據(jù)包類型為1,ARP響應(yīng)數(shù)據(jù)包的類型是2,RARP請(qǐng)求數(shù)據(jù)包為3,RARP響應(yīng)數(shù)據(jù)包為4。
四、RARP協(xié)議(反向地址解析-為物理地址分配IP地址作用)
??????? TCP/IP進(jìn)行網(wǎng)絡(luò)通信必須要有一個(gè)IP地址,我們知道網(wǎng)卡的物理地址是固定在網(wǎng)卡上的,而IP地址通常是保存在二級(jí)存儲(chǔ)器中并在系統(tǒng)啟動(dòng)后載入系統(tǒng)的。因此啟動(dòng)之前是沒(méi)有IP地址的,RARP協(xié)議的出現(xiàn)解決了這個(gè)矛盾。RARP協(xié)議的實(shí)現(xiàn)分為客戶端和服務(wù)端兩部分,需要遠(yuǎn)程啟動(dòng)的系統(tǒng)必須將RARP協(xié)議的客戶端固化在硬件中(如ROM),而服務(wù)器端并不是所有的TCP/IP的實(shí)現(xiàn)都包含了RARP協(xié)議。
??????? RARP協(xié)議的原理如下,需要知道自己IP地址的計(jì)算機(jī)發(fā)送一個(gè)RARP請(qǐng)求數(shù)據(jù)包給RARP服務(wù)器,服務(wù)器向該計(jì)算機(jī)發(fā)送一個(gè)RARP響應(yīng)數(shù)據(jù)包,響應(yīng)數(shù)據(jù)包中包含了請(qǐng)求計(jì)算機(jī)的IP地址,請(qǐng)求計(jì)算機(jī)在獲得了自己IP地址之后就可以用它來(lái)與文件服務(wù)器通信獲取自己的啟動(dòng)映像文件了。
??????? RARP數(shù)據(jù)包格式與ARP數(shù)據(jù)包的格式相同,RARP協(xié)議的工作過(guò)程如下,請(qǐng)求計(jì)算機(jī)構(gòu)造一個(gè)RARP請(qǐng)求數(shù)據(jù)包,在該數(shù)據(jù)包中,計(jì)算機(jī)將發(fā)送者硬件地址和目標(biāo)硬件地址都設(shè)為自己的物理地址,然后將該數(shù)據(jù)包廣播到網(wǎng)絡(luò)中,網(wǎng)絡(luò)中所有的計(jì)算機(jī)都能接收到該數(shù)據(jù)包,但只有RARP服務(wù)器會(huì)處理,RARP服務(wù)器將請(qǐng)求計(jì)算機(jī)的IP地址放入數(shù)據(jù)包的目標(biāo)協(xié)議地址字段中,并將數(shù)據(jù)包類型該位4(響應(yīng)),然后將響應(yīng)數(shù)據(jù)包發(fā)送給請(qǐng)求計(jì)算機(jī)。如果出現(xiàn)網(wǎng)絡(luò)故障或RARP服務(wù)器失效時(shí),RARP請(qǐng)求將會(huì)失敗。通常請(qǐng)求計(jì)算機(jī)對(duì)這種情況的處理是使用超時(shí)重發(fā)機(jī)制,如果經(jīng)過(guò)多次重發(fā),系統(tǒng)機(jī)會(huì)向用戶報(bào)告一個(gè)錯(cuò)誤。因此,為保證服務(wù)器失效時(shí)計(jì)算機(jī)能正常啟動(dòng),通常在一個(gè)網(wǎng)絡(luò)中放置多個(gè)RARP服務(wù)器,但這樣將造成網(wǎng)絡(luò)流量的增多。
五、ICMP協(xié)議(互聯(lián)網(wǎng)控制消息協(xié)議)
????????ICMP協(xié)議就是一種能讓我們對(duì)網(wǎng)絡(luò)進(jìn)行調(diào)試的報(bào)錯(cuò)機(jī)制,它能夠讓發(fā)現(xiàn)錯(cuò)誤的路由器向數(shù)據(jù)包的源站發(fā)送一個(gè)出錯(cuò)消息來(lái)報(bào)告出錯(cuò)原因。ICMP的錯(cuò)誤報(bào)告只能通知出錯(cuò)數(shù)據(jù)包的源主機(jī),而無(wú)法通知從源主機(jī)到出錯(cuò)路由途中的所有路由器。例如,主機(jī)H1向H2發(fā)送一個(gè)IP數(shù)據(jù)包,經(jīng)過(guò)了RA和RB路由器,到達(dá)RC路由器的時(shí)候RC發(fā)現(xiàn)無(wú)法將該數(shù)據(jù)包轉(zhuǎn)發(fā)到H2。此時(shí)RC能知道數(shù)據(jù)包的源地址和目標(biāo)地址但它無(wú)法知道該數(shù)據(jù)包途中經(jīng)過(guò)了那些其他的路由器,因此RC只能將出粗消息發(fā)送給數(shù)據(jù)包的源地址H1。
????????因?yàn)镮CMP數(shù)據(jù)包封裝在IP數(shù)據(jù)包中,因此ICMP數(shù)據(jù)包即出錯(cuò)消息的傳輸也有可能出錯(cuò),這時(shí)就需要ICMP數(shù)據(jù)包產(chǎn)生另一個(gè)ICMP數(shù)據(jù)包,因?yàn)檫@樣加重了網(wǎng)絡(luò)繁忙,因此ICMP協(xié)議規(guī)定,如果傳輸ICMP數(shù)據(jù)包的IP數(shù)據(jù)包出錯(cuò),不能為該數(shù)據(jù)包產(chǎn)生新的ICMP數(shù)據(jù)包。
六、路由器工作原理
????????路由器收到一個(gè)數(shù)據(jù)包時(shí),必須要能確定應(yīng)該從哪個(gè)端口將該數(shù)據(jù)包轉(zhuǎn)發(fā)出去。例如一個(gè)202.119.12.1網(wǎng)段的路由器接收到來(lái)自202.119.12.24的數(shù)據(jù)包(假設(shè)路由器接入了一臺(tái)主機(jī)IP地址為202.119.12.24),者路由器必須知道將此數(shù)據(jù)包從連接到此主機(jī)的端口發(fā)送出去。如果接收到非12網(wǎng)段的數(shù)據(jù)包,通常路由器是通過(guò)查找一張路由表來(lái)確定轉(zhuǎn)發(fā)端口的,在路由表中,每一項(xiàng)都說(shuō)明了通往一個(gè)目標(biāo)地址應(yīng)該通過(guò)哪個(gè)端口進(jìn)行轉(zhuǎn)發(fā),是直接轉(zhuǎn)發(fā)給目的地還是需要通過(guò)下一個(gè)路由器再進(jìn)行轉(zhuǎn)發(fā)。因此一個(gè)基本的路由表的表項(xiàng)包含以下幾個(gè)字段:目的地址、下一站的地址、轉(zhuǎn)發(fā)端口。
????路由器的內(nèi)部通過(guò)使用路由表進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)的機(jī)制,因此路由表是如何建立的呢?第一種手段是路由器根據(jù)路由器各端口直接連接的網(wǎng)絡(luò)自動(dòng)產(chǎn)生一些路由表項(xiàng)(即直接轉(zhuǎn)發(fā));另一種就是通過(guò)路由協(xié)議的幫助,如路由器RA必須要知道通往某個(gè)網(wǎng)絡(luò)(202.119.12..0/24)必須經(jīng)過(guò)路由器RB,那么RA如何知道這一點(diǎn)呢?方法只有一個(gè),就是RB告訴RA這一點(diǎn),RB就是通過(guò)路由協(xié)議將這條信息告訴了RA,RA知道后更新了路由表。