我們電腦上的數(shù)據(jù),是如何“走”到遠(yuǎn)端的另一臺(tái)電腦的呢羡洁?這是個(gè)最基礎(chǔ)的問(wèn)題,可能很多人回答不上來(lái)爽丹,盡管我們每天都在使用網(wǎng)絡(luò)筑煮。這里我們以一個(gè)最簡(jiǎn)單的“ping”命令,來(lái)解釋一個(gè)數(shù)據(jù)包“旅程”粤蝎。
假設(shè):我的電腦A真仲,向遠(yuǎn)在外地的朋友電腦B傳輸數(shù)據(jù),最簡(jiǎn)單的就是“ping”一下初澎,看看這個(gè)家伙的那一端網(wǎng)絡(luò)通不通秸应。A與B之間只有一臺(tái)路由器。(路由器可能放在學(xué)校碑宴,社區(qū)或者電信機(jī)房软啼,無(wú)所謂,基本原理是一樣的)
具體過(guò)程如下------
1.“ping”命令所產(chǎn)生的數(shù)據(jù)包延柠,我們歸類為ICMP協(xié)議祸挪。說(shuō)白了就是向目的地發(fā)送一個(gè)數(shù)據(jù)包,然后等待回應(yīng)贞间,如果回應(yīng)正常則目的地的網(wǎng)絡(luò)就是通的匕积。當(dāng)我們輸入了“ping”命令之后,我們的機(jī)器(電腦A)就生成了一個(gè)包含ICMP協(xié)議域的數(shù)據(jù)包榜跌,姑且稱之為“小德”吧~~~~
2.“小德”已經(jīng)將ICMP協(xié)議打包到數(shù)據(jù)段里了闪唆,可是還不能發(fā)送,因?yàn)橐粋€(gè)數(shù)據(jù)要想向外面?zhèn)魉偷龊€得經(jīng)過(guò)“有關(guān)部門(mén)”的批準(zhǔn)------IP協(xié)議悄蕾。IP要將你的“寫(xiě)信人地址”和“收信人地址”寫(xiě)到數(shù)據(jù)段上面,即:將數(shù)據(jù)的源IP地址和目的IP地址分別打包在“小德”的頭部和尾部,這樣一來(lái)帆调,大家才知道你的數(shù)據(jù)是要送到哪里奠骄。
3.準(zhǔn)備工作還沒(méi)有完。接下來(lái)還有部門(mén)要審核------ARP番刊。ARP屬于數(shù)據(jù)鏈路層協(xié)議含鳞,主要負(fù)責(zé)把IP地址對(duì)應(yīng)到硬件地址。直接說(shuō)吧芹务,都怪交換機(jī)太“傻”蝉绷,不能根據(jù)IP地址直接找到相應(yīng)的計(jì)算機(jī),只能根據(jù)硬件地址來(lái)找枣抱。于是熔吗,交換機(jī)就經(jīng)常保留一張IP地址與硬件地址的對(duì)應(yīng)表以便其查找目的地。而ARP就是用來(lái)生成這張表的佳晶。比如:當(dāng)“小德”被送到ARP手里之后桅狠,ARP就要在表里面查找,看看“小德”的IP地址與交換機(jī)的哪個(gè)端口對(duì)應(yīng)轿秧,然后轉(zhuǎn)發(fā)過(guò)去中跌。如果沒(méi)找到,則發(fā)一個(gè)廣播給所有其他的交換機(jī)端口菇篡,問(wèn)這是誰(shuí)的IP地址晒他,如果有人回答,就轉(zhuǎn)發(fā)給它逸贾。
4.經(jīng)過(guò)一番折騰,“小德”終于要走出這個(gè)倒霉的局域網(wǎng)了津滞÷燎郑可在此之前,它們還沒(méi)忘給“小德”屁股后面蓋個(gè)“戳”触徐,說(shuō)是什么CRC校驗(yàn)值咪鲜,怕“小德”在旅行途中缺胳膊少腿,還得麻煩它們重新發(fā)送撞鹉。疟丙。。鸟雏。享郊。我靠~~~~注:很多人弄不清FCS和CRC。所謂的CRC是一種校驗(yàn)方法孝鹊,用來(lái)確保數(shù)據(jù)在傳輸過(guò)程中不會(huì)丟包炊琉,損壞等等,F(xiàn)CS是數(shù)據(jù)包(準(zhǔn)確的說(shuō)是frame)里的一個(gè)區(qū)域,用來(lái)存放CRC的計(jì)算結(jié)果的苔咪。到了目的地之后锰悼,目的計(jì)算機(jī)要檢查FCS里的CRC值,如果與原來(lái)的相同团赏,則說(shuō)明數(shù)據(jù)在途中沒(méi)有損壞箕般。
5.在走出去之前,那些家伙最后折磨了一次“小德”------把小德身上眾多的0和1舔清,弄成了什么“高電壓”“低電壓”丝里,在雙絞線上傳送了出去。暈~~出趟門(mén)就這么麻煩嗎鸠踪?
6.坐著雙絞線旅游丙者,爽!可當(dāng)看到很多人坐著同軸電纜营密,還有坐光纖的時(shí)候械媒,小德又感覺(jué)不是那么爽了。就在這時(shí)评汰,來(lái)到了旅途的中轉(zhuǎn)站------路由器纷捞。這地方可是高級(jí)場(chǎng)所,人家直接查看IP地址被去!剩下的一概不管主儡,交給下面的人去做。夠牛吧惨缆?路由器的內(nèi)部也有一張表糜值,叫做路由表,里面標(biāo)識(shí)著哪一個(gè)網(wǎng)絡(luò)的IP對(duì)應(yīng)著路由器的哪一個(gè)端口坯墨。這個(gè)表也不是天生就有的寂汇,而是靠路由器之間互相“學(xué)習(xí)”之后生成的,當(dāng)然也可以由管理員手工設(shè)定捣染。這個(gè)“學(xué)習(xí)”的過(guò)程是依靠路由協(xié)議來(lái)完成的骄瓣,比如RIP,EIGRP耍攘,OSPF等等榕栏。
7.當(dāng)路由器查看了“小德”的IP地址以后,根據(jù)路由表知道了小德要去的網(wǎng)絡(luò)蕾各,接著就把小德轉(zhuǎn)到了相應(yīng)的端口了扒磁。至此,路由器的主要工作完成式曲,下面又是打包渗磅,封裝成frame,轉(zhuǎn)換成電壓信號(hào)等一系列“折騰”的活,就由數(shù)據(jù)鏈路層和物理層的模塊去干吧始鱼。
8.小德從路由器的出口出來(lái)仔掸,便來(lái)到了目的地----電腦B----所屬的網(wǎng)絡(luò)的默認(rèn)網(wǎng)關(guān)。默認(rèn)網(wǎng)關(guān)可以是路由器的一個(gè)端口医清,也可以是局域網(wǎng)里的各種服務(wù)器起暮。不管怎樣,下面的過(guò)程還是一樣的:到交換機(jī)里的ARP表查詢“小德”的IP地址会烙,看看屬于哪個(gè)局域網(wǎng)段或端口负懦,然后就轉(zhuǎn)發(fā)到B了。
9.進(jìn)了B的網(wǎng)卡之后柏腻,還要層層“剝皮”纸厉,基本上和從A出來(lái)的程序是一樣的------電腦B先校驗(yàn)一下CRC值,看看數(shù)據(jù)是否完整五嫂;然后檢查一下frame的封裝颗品,看到是IP協(xié)議之后,就把“小德”交給IP“部門(mén)”了沃缘;IP協(xié)議一看目的地址躯枢,正確,再看看應(yīng)用協(xié)議槐臀,是ICMP锄蹂。于是知道了該怎么做了------產(chǎn)生一個(gè)回應(yīng)數(shù)據(jù)包,(可以命名為“回應(yīng)小德”)水慨,并準(zhǔn)備以同樣的順序向遠(yuǎn)端的A發(fā)送得糜。。至于剛剛收到的那個(gè)數(shù)據(jù)包就丟棄了晰洒。
10.“回應(yīng)小德”這個(gè)數(shù)據(jù)包又開(kāi)始了上述同樣的循環(huán)朝抖,只不過(guò)這次發(fā)送者是B而接收者是A了。
以上是一個(gè)最簡(jiǎn)單的路由過(guò)程欢顷,任何復(fù)雜的網(wǎng)絡(luò)都是在次基礎(chǔ)之上實(shí)現(xiàn)的。