有了 IP 地址,,為什么還要用 MAC 地址,?修改估計(jì)很多人都有這個(gè)疑問,但沒見哪本書上解釋清楚,,都只是描述IP是什么,,MAC是什么。當(dāng)數(shù)據(jù)包到達(dá)局域網(wǎng)后,,完全可以直接送到對應(yīng)的IP地址主機(jī),,為什么還要詢問一下對應(yīng)IP主機(jī)的MAC地址? 一個(gè)郵遞員拿著地址詳細(xì)到教室的一封信,,收件人是小明,,教室里沒有重名的,郵遞員問“小明的學(xué)號是多少,?”,,小明站起來回答“150807”,然后小明坐下,,然后郵遞員說“學(xué)號150807的過來拿信”,,小明站起拿信。哎,,好像重復(fù)了點(diǎn)什么。修改 71 個(gè)回答最新版本2.0 經(jīng)過20天的思考,換一種思路來考慮這個(gè)問題,,如果網(wǎng)卡的MAC地址沒有了,,需要做哪些改變才可以通信? 以太網(wǎng)幀頭沒有12字節(jié)的MAC地址了,,但是還要保留2字節(jié)的ether type 用來協(xié)議復(fù)用,。 三層的IP地址需要下發(fā)到網(wǎng)卡,讓網(wǎng)卡來匹配目的IP和自己的IP來決定接收還是拒絕,。 沒有傳統(tǒng)的ARP了,,但是如何讓二層交換機(jī)來預(yù)先學(xué)習(xí)IP和端口號的綁定關(guān)系? 可以把ARP進(jìn)行改造,,模仿目前的gratuitous ARP,,目的地址是廣播地址,源地址為自己的IP地址。 每臺設(shè)備一上線就周期性發(fā)gratuitous ARP,,讓交換機(jī)學(xué)習(xí) source IP <-----> Port number,,有包來了,直接查詢IP,,來進(jìn)行交換,,這怎么越來越像路由器了啊,? ^_^ 本故事純屬虛構(gòu),,如有雷同,純屬巧合,! --------------------------- 原始版本1.0 有一個(gè)問題先來面對一下,,串行鏈路上的PPP,HDLC協(xié)議需要配置數(shù)據(jù)鏈路層的地址嗎,?很顯然不需要,,因?yàn)榇墟溌肥屈c(diǎn)對點(diǎn)的通信,發(fā)送端的數(shù)據(jù)發(fā)送到鏈路上,,到達(dá)接收端無條件接受,,達(dá)成了默契,不需要二層地址,。 而以太網(wǎng)是多路訪問,,發(fā)送的包到達(dá)交換機(jī),交換機(jī)如何轉(zhuǎn)發(fā),?根據(jù)IP地址轉(zhuǎn)發(fā),?那是三層路由器或交換機(jī)了!如果采用廣播轉(zhuǎn)發(fā),,那就是最原始的HUB了,,除了發(fā)送者,這個(gè)廣播域里的所有主機(jī)網(wǎng)卡都會收到一份數(shù)據(jù)copy,,因?yàn)闆]有MAC地址,,網(wǎng)卡無從知道是否屬于自己主機(jī)的包,因?yàn)樗鼪]有權(quán)利來讀取IP信息,,于是這些包會通過中斷的方式來通知CPU來處理,,然后告訴IP層取走數(shù)據(jù),IP層再檢查IP地址是不是自己的,,是就接收,,不是的就丟棄。這合理嗎,?顯然不合理,,因?yàn)樗械陌紩绊懰械闹鳈C(jī),這種網(wǎng)絡(luò)幾乎不可用,資源都被浪費(fèi)了,。 而有了MAC地址,,交換機(jī)查詢Mac 轉(zhuǎn)發(fā)表,知道MAC地址和端口的映射關(guān)系,,只發(fā)給接收者,,到達(dá)目的地網(wǎng)卡,檢查來包的MAC和自己的MAC進(jìn)行對比,,對比一致才會提交給上層,,這個(gè)轉(zhuǎn)發(fā)過程彼此不會影響,顯然要合理的多,。 長話短說,,理由有三點(diǎn),。 一. 整體與局部 信息傳遞時(shí)候,需要知道的其實(shí)是兩個(gè)地址:
這就是為什么還要用MAC地址的原因之一,,它起到了記錄下一跳的信息的作用。 注:一般來說IP地址經(jīng)過路由器是不變的,,不過NAT(Network address translation)例外,,這也是有些人反對NAT而支持IPV6的原因之一。 二. 分層實(shí)現(xiàn) 如果在IP包頭(header)中增加了”下一跳IP地址“這個(gè)字段,,在邏輯上來說,,如果IP地址夠用,交換機(jī)也支持根據(jù)IP地址轉(zhuǎn)發(fā)(現(xiàn)在的二層交換機(jī)不支持這樣做),,其實(shí)MAC地址并不是必要的。 但用MAC地址和IP地址兩個(gè)地址,,用于分別表示物理地址和邏輯地址是有好處的,。這樣分層可以使網(wǎng)絡(luò)層與鏈路層的協(xié)議更靈活地替換,網(wǎng)絡(luò)層不一定非要用『IP』協(xié)議,,鏈路層也不一定非用『以太網(wǎng)』協(xié)議,。 這就像OSI七層模型,TCP/IP五層模型其實(shí)也不是必要的,,用雙層模型甚至單層模型實(shí)現(xiàn)網(wǎng)絡(luò)也不是不可以的,,只是那樣做很蛋疼罷了。 三. 早期的『以太網(wǎng)』實(shí)現(xiàn) 早期的以太網(wǎng)只有集線器(hub),沒有交換機(jī)(switch),,所以發(fā)出去的包能被以太網(wǎng)內(nèi)的所有機(jī)器監(jiān)聽到,,因此要附帶上MAC地址,每個(gè)機(jī)器只需要接受與自己MAC地址相匹配的包,。 這個(gè)問題很有趣,,但一部分朋友的回答是基于有了二層三層再進(jìn)行討論的,,我從另外個(gè)角度來理解下。 這個(gè)問題可以引申為網(wǎng)絡(luò)為什么要分這幾層,,基于TCP/IP來說,,傳輸介質(zhì)不同,物理層一定要存在的,。應(yīng)用程序需要大量端口,,上層的應(yīng)用層也是要存在的,這些都不難理解,。那為什么要分二三層呢,?換句話說,如果二三層合二為一會發(fā)生什么呢,?我腦洞大開了一下,,實(shí)現(xiàn)是完全沒有問題的,但引發(fā)的后果就是子網(wǎng)網(wǎng)段包含大量主機(jī),,接入層的設(shè)備就需要消耗大量cpu維護(hù)相關(guān)協(xié)議,,而且可以相到的就是設(shè)計(jì)困難,難以規(guī)范,。 所以,,我以為分為二三層的目的是為了簡化設(shè)計(jì),并且節(jié)省底層資源,。還是題中的例子,,我們確實(shí)可以給所有小明起一個(gè)唯一的編號,快遞直接發(fā)給這個(gè)編號是可實(shí)現(xiàn)的,,但這樣引發(fā)的后果就是郵局拿到編號后要滿世界的找正確編號的小明,,費(fèi)時(shí)費(fèi)力,不如先排個(gè)班級,,比如說192.168.1.0班1號小明,,他的唯一編號是aaaa.aaaa.aaaa,,郵局就可以快速定位班級再找到小明,雖有多余操作,,但效率更高更安全,,更易于設(shè)計(jì)。 問題的核心在于網(wǎng)絡(luò)上的分層概念,。IP地址是不區(qū)分傳播介質(zhì)的,,他的作用是在internet網(wǎng)中能夠投遞到邊界。在網(wǎng)絡(luò)邊界的局域網(wǎng),,有可能使用不同的層二網(wǎng)絡(luò),,以太、wifi,、ppp,、3g、wimax等等,。 在這個(gè)局域網(wǎng)中,,才出現(xiàn)了與介質(zhì)相關(guān)的終端標(biāo)識。mac地址用于以太網(wǎng),,imsi用于3g網(wǎng),,線路號用于撥號上網(wǎng)。internet邊界路由器可以在這個(gè)特定的介質(zhì)網(wǎng)中找到特定終端,。 如果沒有IP地址,,那么3g網(wǎng)絡(luò)用戶無法和以太網(wǎng)用戶通信,因?yàn)闆]辦法去做這么復(fù)雜的協(xié)議讓幾十種協(xié)議兩兩對通,。即使做了,,發(fā)起方也需要方法去知道對端用的是什么層二網(wǎng)。因此,,所有網(wǎng)絡(luò)協(xié)議都用IP,,只在兩頭網(wǎng)關(guān)上做轉(zhuǎn)換,就是一種設(shè)計(jì)很先進(jìn)的奇妙方法,。 反過來,,為什么全球只要mac地址不能用于全球通信?問題在于mac地址和IP地址的匯聚性,。mac地址是出廠就決定的,,不是上網(wǎng)的時(shí)候決定的。也就是說intel設(shè)備或使用intel芯片的mac地址前面多少位是相同的,,然后intel在給芯片分地址的時(shí)候保證所有的芯片沒有重號的,,這樣才能保證隨便哪個(gè)終端接入到同一個(gè)局域網(wǎng)中沒有重復(fù)的,。 這樣問題就來了:網(wǎng)絡(luò)上希望路由器的轉(zhuǎn)發(fā)規(guī)則盡量簡單,,所以一般要用ip地址前多少位而不是整個(gè)IP地址去做轉(zhuǎn)發(fā),。mac地址顯然沒法匯聚,前面已經(jīng)講過,,工廠決定的,。 給每個(gè)用戶分配一個(gè)只由路由器網(wǎng)關(guān)決定的地址,每個(gè)網(wǎng)關(guān)上附著一個(gè)段,,例如100.200.x.x,,也就是所有以100.200開頭的ip都送到這個(gè)網(wǎng)關(guān)上來,就可以保證internet轉(zhuǎn)發(fā)規(guī)則的簡單化,。而且,,一個(gè)用戶從一個(gè)局域網(wǎng)離開,換到另一個(gè)局域網(wǎng)中,,mac地址不需要變,,只需要換個(gè)ip地址就行。 我來說說我的理解吧,。 舉例說明: 我們知道,,出于歷史的原因,這個(gè)世界上出現(xiàn)了很多的國家和民族,,他們都使用不同的語言 比如,,我要和法國人通信,就要學(xué)會法語,,和日本人通信,,就要學(xué)會日語,同理,,要學(xué)會德語,、意大利語、西班牙語,。,。。 如果每和一個(gè)國家通信,,就要學(xué)會對方的語言,,那可要累死了。 所以,,最好的辦法,,就是大家都用1種語言通信。這樣只要學(xué)會一門外語就可以跟所有的國家通信了,。 這種“世界通用語言”可以通過2種途徑得到:現(xiàn)成的,,和新發(fā)明的 工業(yè)革命以后,日不落帝國是世界的中心,,其直接繼承者美國也是世界的中心,,它們都使用英語,,于是英語借助其強(qiáng)勢地位,成為世界的通用的語言,。 同時(shí),,“世界語”也是一種世界通用語言,與英語不同,,世界語是“新發(fā)明”的語言(當(dāng)然也借鑒了其它語言的規(guī)則),,也就是說,沒有哪個(gè)民族是”世界語民族“,,也不可能發(fā)現(xiàn)某個(gè)1000前的石碑,,上刻世界語。,。,。 因?yàn)闆]有一個(gè)國家的母語是世界語,所以在用世界語交流的時(shí)候必須要經(jīng)過一個(gè)“翻譯”的過程:把本國語言,,翻譯成世界語,。 所以我們可以說,世界語是一種“不完備”的語言,,它必須依賴于其它的語言才能使用,,或者說:運(yùn)行于其它語言之上。 出于歷史的原因,,“電腦網(wǎng)絡(luò)”是從無到有,、從小到大發(fā)展起來的。 有很多的網(wǎng)絡(luò)被發(fā)明出來,,這些網(wǎng)絡(luò)各自使用自己的協(xié)議(語言),,互不兼容(不同的語言相互不能理解), 有些網(wǎng)絡(luò)只應(yīng)用于小面積,,比如一個(gè)家庭,,一棟樓房,線路長度按米,、百米計(jì)算,。這類網(wǎng)絡(luò)叫做“局域網(wǎng)” 有些網(wǎng)絡(luò)應(yīng)用于很大的面積,比如我辦理了寬帶,,這樣我和電信公司之間就有一條長達(dá)N公里線路,,或者電信公司和電信公司之間有長達(dá)幾十公里的線路。這類網(wǎng)絡(luò)叫做“廣域網(wǎng)”,。 因特網(wǎng)就是“網(wǎng)絡(luò)世界語”,,各種網(wǎng)絡(luò)都用1種協(xié)議:因特網(wǎng)協(xié)議(TCP/IP協(xié)議族)交流,所以各種網(wǎng)絡(luò)都要有個(gè)“翻譯”的過程:把本網(wǎng)協(xié)議,,翻譯成因特網(wǎng)協(xié)議,。 正如上文所言,,世界語是“不完備”的語言,因?yàn)榇蠹沂褂檬澜缯Z需要一個(gè)翻譯的過程 所以,,因特網(wǎng)協(xié)議也是不完備的協(xié)議,其它網(wǎng)絡(luò)在運(yùn)行TCP/IP協(xié)議族的時(shí)候,,也需要一個(gè)翻譯的過程 這就是MAC地址之所以存在的核心要點(diǎn),,下面詳述。 在因特網(wǎng)出現(xiàn)之前就已經(jīng)有很多的網(wǎng)絡(luò)出現(xiàn)了,,而且因特網(wǎng)并不是第一個(gè)全球大網(wǎng)(很明顯,,歷史悠久的有線電話網(wǎng)絡(luò)就是全球大網(wǎng)) 然后,因特網(wǎng)出現(xiàn)了,。 需要注意的是,,因特網(wǎng)在誕生之初,并沒有想到自己會成為一個(gè)全球性的大網(wǎng),,所以沒有針對全球網(wǎng)絡(luò)的特點(diǎn)進(jìn)行設(shè)計(jì),,這就留下了一些短板(比如IP地址不夠,協(xié)議有漏洞,,想想大名鼎鼎的ARP協(xié)議漏洞 ),。因特網(wǎng)成功以后,這些漏洞被IPV6彌補(bǔ) 設(shè)計(jì)因特網(wǎng)的初衷,,是為了應(yīng)付對蘇聯(lián)的核戰(zhàn)爭(當(dāng)時(shí)還存在蘇聯(lián)),。 你可能聽說過“恐怖平衡”這個(gè)概念,說的是美蘇任何一方如果先發(fā)制人的向?qū)Ψ桨l(fā)動核戰(zhàn)爭,,對方的核報(bào)復(fù)也會讓自己身處火海,,所以誰也不敢首先使用核武器,從而避免了核大戰(zhàn),。 但很明顯,,大家追求的是“優(yōu)勢”而不是“平衡”,這種“平衡”也是不得已而為之,,如果我方技術(shù)高超,,有能力取得核戰(zhàn)爭的勝利,那就可以把這種可笑的“平衡”扔進(jìn)太平洋,。 美國國防部在思考: 我往蘇聯(lián)扔一顆核彈,,蘇聯(lián)的軍事指揮通信系統(tǒng)就垮掉了,沒有了指揮,,再強(qiáng)大的軍隊(duì)也成了無頭蒼蠅,,沒有了戰(zhàn)斗力。 可蘇聯(lián)往美國扔核彈,,美國也會有同樣的結(jié)局,。 可是,。。,。如果我設(shè)計(jì)一種通信網(wǎng)絡(luò)結(jié)構(gòu),,這種結(jié)構(gòu)”容災(zāi)性“很強(qiáng)、很”健壯“,、很”高可用“ ,,蘇聯(lián)的1顆核彈滅不了,2顆核彈滅不了,,3顆核彈才可以滅,。而我1顆核彈就可以滅了它。這樣我就有了喘息的余地,,我就可能成為核戰(zhàn)爭的勝利者,。 因特網(wǎng)就是在這種思考之下誕生了。 因特網(wǎng)能抵抗核爆炸,?真有這么神奇么,?看看圖就知道了。 先說說傳統(tǒng)的電話網(wǎng)拓?fù)洌?br> 電話網(wǎng)是一個(gè)典型的星形網(wǎng)絡(luò),,用戶A要給用戶F打電話,,其路徑就是A-K-F 同理,用戶C要給用戶G打電話,,路徑就是C-K-G 也就是說,,任何用戶之間要打電話,都必不可免的要經(jīng)過中央交換機(jī)K 所以你知道為何在打仗的時(shí)候,,電信局是首要被攻擊目標(biāo)了,,因?yàn)殡娦啪掷锩娣胖娫捊粨Q機(jī)。如果要破壞這個(gè)城市的電話網(wǎng)絡(luò),,我不用挨家挨戶砸電話,,只要破壞掉電信局的電話交換機(jī),就萬事OK了,! 那么該怎樣防止這種情況的發(fā)生呢,? 方案A,我隱藏交換機(jī)的位置所在,,讓敵方找不到交換機(jī)在哪 但現(xiàn)代戰(zhàn)場,,天上有衛(wèi)星,地下有監(jiān)聽,,在嚴(yán)密的監(jiān)視網(wǎng)絡(luò)面前,,想要將自己隱匿起來,已經(jīng)不容易了。 那就方案B,,我在交換機(jī)周圍布置重兵,,建設(shè)防御工事,就算你發(fā)現(xiàn)了也攻不進(jìn)來,。 但現(xiàn)代化的武器威力巨大,,再加上核武器,再多的人,、再堅(jiān)固的工事也難以抵擋,。 所以,思想家們另辟蹊徑,,在網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)上做文章,改“集中式”為”分布式“,,于是因特網(wǎng)出現(xiàn)了,。 因特網(wǎng)是怎么避免核心設(shè)備被攻擊,讓網(wǎng)絡(luò)能夠在戰(zhàn)爭中存活更長的時(shí)間呢,? 見下圖: 可以看到,,網(wǎng)絡(luò)拓?fù)溆尚切尉W(wǎng)絡(luò),變成了網(wǎng)狀網(wǎng)絡(luò),。 這里的每個(gè)用戶(或稱節(jié)點(diǎn))都是一個(gè)電話交換機(jī)(對于因特網(wǎng),,就是路由器) 此時(shí),如果A和H打電話,,那路徑可多了: 最短距離,,當(dāng)然是A-H,所以優(yōu)先走A-H,。 但如果A-H斷掉了,,還可以走A-D-H、A-E-H,、A-E-F-B-D-H,。。,。,。 所以,A-H斷了沒事,、B-C斷了沒事,,C-D斷了沒事、F-G斷了沒事,。,。。 由此可見,網(wǎng)狀網(wǎng)絡(luò)的是一種非?!案呖捎谩钡木W(wǎng)絡(luò),,容災(zāi)性很好。 這些節(jié)點(diǎn)的地位(功能)都是相同的,,不存在某個(gè)節(jié)點(diǎn)比另外的節(jié)點(diǎn)更重要的情況,。所以一個(gè)節(jié)點(diǎn)出了問題,另外的節(jié)點(diǎn)就可以取而代之,。 而星形網(wǎng)絡(luò)就不是這樣,,很明顯中央節(jié)點(diǎn)比其它節(jié)點(diǎn)更重要,中央節(jié)點(diǎn)失效,,其它節(jié)點(diǎn)無法替代,,整網(wǎng)就失效了。 隨著節(jié)點(diǎn)數(shù)的增加,,節(jié)點(diǎn)之間的可用線路的數(shù)量呈指數(shù)方式增加,,函數(shù)是N*(N-1)/2。 這個(gè)簡單的函數(shù)可是有很大的威力的,,請看下圖: 相比于上圖電話的星型網(wǎng)絡(luò),,如果要破壞這樣的一張網(wǎng)狀網(wǎng)絡(luò),又該如何下手呢,? 因特網(wǎng)最初是國防通信網(wǎng)絡(luò)(APRA-阿帕網(wǎng)),,后演變成連接各大學(xué)、政府部門和科研機(jī)構(gòu)的教學(xué)科研網(wǎng),,最后演變?yōu)闊X的商業(yè)化網(wǎng)絡(luò),。 以上所說的知識面叫做“因特網(wǎng)的體系結(jié)構(gòu)”。 再說說因特網(wǎng)協(xié)議:TCP/IP協(xié)議族 從一開始,,因特網(wǎng)就沒有想過成為世界性大網(wǎng),,所以,因特網(wǎng)的協(xié)議,,從制定之初就是”不完備“的 也就是說,,因特網(wǎng)必須要基于其它網(wǎng)絡(luò)之上,依靠其它的網(wǎng)絡(luò)才能完成自身的功能,。 就像是世界語是不完備的,,必須要基于其它語言之上,才能實(shí)現(xiàn)其自身的功能,。 如果世界語運(yùn)行于漢語之上,,那就是: 世界語 over 漢語 比如,已經(jīng)存在一種局域網(wǎng)技術(shù),,叫做”以太網(wǎng)“,,那么好,,因特網(wǎng)就運(yùn)行于以太網(wǎng)之上,英文寫作: TCP/IP over Ethernet 注:TCP/IP是專為因特網(wǎng)開發(fā)的一系列協(xié)議當(dāng)中的2個(gè)協(xié)議,,因這2個(gè)協(xié)議最重要(同時(shí)也最出名),,就用這2個(gè)協(xié)議代言因特網(wǎng)了。 還有一種城域網(wǎng)技術(shù)叫做“令牌環(huán)網(wǎng) ”,,那么好,,因特網(wǎng)就運(yùn)行在令牌環(huán)網(wǎng)之上 ,英文寫作: TCP/IP over Token-ring 還有一種廣域網(wǎng)技術(shù)叫做"ATM",,那么好,,因特網(wǎng)就運(yùn)行于ATM之上,英文寫作: TCP/IP over ATM 如果你想要因特網(wǎng)運(yùn)行于USB呢,?自然就是: TCP/IP over USB ,。。,。,。。,。,。,。,。。,。 你肯定知道OSI的7層協(xié)議,,因特網(wǎng)協(xié)議族(TCP/IP協(xié)議族)并沒有覆蓋完整的7層協(xié)議 (只定義了第3層和第4層),很明顯,,因特網(wǎng)沒有定義水晶頭的形狀,、網(wǎng)線里有幾根銅線、銅線里面?zhèn)鬏數(shù)碾妷菏嵌嗌俚鹊葏?shù),,這些參數(shù)是諸如以太網(wǎng)這樣的網(wǎng)絡(luò)定義的,。 那么,為什么因特網(wǎng)不定義這些參數(shù)呢,? 上面說了:“也許”從一開始,,因特網(wǎng)就沒有想到自己會成為一個(gè)世界大網(wǎng),,所以就沒有定義得這么復(fù)雜。 但也有另一種可能:其實(shí)一種網(wǎng)絡(luò)技術(shù),,不一定要“大而全”,從1層到7層全制定,,可以只制定其中幾層,。 比如以太網(wǎng)定義了1~2層(物理層,、數(shù)據(jù)鏈路層),因特網(wǎng)定義了3~4層(網(wǎng)絡(luò)層,、傳輸層),,其它公司定義了5~7層(SQL、JPEG,、HTTP) 這樣,,不同的網(wǎng)絡(luò)、不同的協(xié)議之間相互配合就可以了,。 就像是,,我是一家生產(chǎn)火車的廠家,我當(dāng)然可以生產(chǎn)鐵軌,,制定鐵軌的寬度,,生產(chǎn)火車車廂。 但既然已經(jīng)有大量的鐵軌鋪設(shè)完畢了,,那我就不用管鐵軌的事情了,。 火車運(yùn)行于現(xiàn)成的鐵軌之上就可以了 在這里,鐵軌就是以太網(wǎng)(局域網(wǎng)),、ATM(廣域網(wǎng))或者其它現(xiàn)存的2層網(wǎng),,火車就是因特網(wǎng)。 所以,,從來不存在“純粹的因特網(wǎng)”,,因?yàn)橐蛱鼐W(wǎng)沒有定義底層,只存在TCP/IP over XXX 經(jīng)過以上的解釋,,你就知道為何一定需要MAC地址了: 既然大家都是“網(wǎng)”,,那么,每種網(wǎng)都要給網(wǎng)上的節(jié)點(diǎn)(電腦)分配“地址”,。 以太網(wǎng)的MAC地址格式是12個(gè)16進(jìn)制數(shù),,比如0800200A8C6D 因特網(wǎng)IP地址格式是4個(gè)點(diǎn)分10進(jìn)制數(shù),比如192.168.201.160 剛才說了,,不存在“純粹的因特網(wǎng)”,,所以因特網(wǎng)必須要基于以太網(wǎng)之上才能工作,所以就是“同時(shí)運(yùn)行了2個(gè)網(wǎng)” 就像是世界語必須要基于中文之上才能工作,,所以就是“同時(shí)說了2種語言” 所以,,就必須要“翻譯” 也就是把以太網(wǎng)的MAC地址,翻譯成因特網(wǎng)的IP地址,,這就是ARP的作用 假如我的中文名字叫做“劉濤”,,如果要翻譯成世界語,就肯定要有個(gè)世界語的名字(假設(shè)叫LIUTAO) 同樣是名字: 劉濤→翻譯成→LIUTAO 同樣是地址: 21-35-6D-1F-83-9E→翻譯成→10.42.90.8 當(dāng)然了,,如果因特網(wǎng)從開始制定之初,,就定義了從物理層到傳輸層的協(xié)議,,那么因特網(wǎng)就不再依賴于其它任何的網(wǎng)絡(luò),這時(shí)就不用什么MAC地址了,。 講完了,。 我是不是太羅嗦了。,。,。。 MAC地址存在的一個(gè)意義在于網(wǎng)絡(luò)過濾,,就是允許哪些計(jì)算機(jī)或設(shè)備可以連入該局域網(wǎng),,增加網(wǎng)絡(luò)的安全性,一般公司都需要這要做的,。至于什么標(biāo)識機(jī)器唯一性,,人家換個(gè)網(wǎng)卡不就變了嗎?沒有多大意義,。還有上面說到NAT,,其實(shí)就是解決ip地址不夠用,和MAC地址真沒有關(guān)聯(lián),。 原題:「當(dāng)數(shù)據(jù)包到達(dá)局域網(wǎng)后,,完全可以直接送到對應(yīng)的IP地址主機(jī),為什么還要詢問一下對應(yīng)IP主機(jī)的MAC地址,?」 真的這樣了還需要費(fèi)心盡力地搞IPv6干嘛,。 題主:「你的前提是認(rèn)為交換機(jī)是這樣處理的,理所當(dāng)然認(rèn)為這樣處理是正確的,。交換機(jī)處理mac,,路由器處理ip,,為什么要這樣設(shè)計(jì),?交換機(jī)為什么不可以處理ip?為什么要分層,?」 交換機(jī)工作在二層,,只認(rèn)識MAC地址。如果交換機(jī)要處理IP,,把二層砍掉只剩三層,?呃,不覺得處理速度會很慢嗎,? 網(wǎng)絡(luò)是過去幾十年一步一步搭建的,,兼容性什么的都要考慮。你不能說現(xiàn)在都有微信了,,還要固定電話號碼干嘛~ --------------------------------------------------------------------------------------------------------------------------- 簡單地說兩句: 二層是這樣工作的:每個(gè)接入設(shè)備口分配一個(gè)地址,,一般的星形結(jié)構(gòu)的網(wǎng)絡(luò),,每臺設(shè)備發(fā)出的數(shù)據(jù)所有其他設(shè)備都能收到,然后根據(jù)目標(biāo)地址看是否是發(fā)給自己的,。這個(gè)地址是謂MAC地址,,因?yàn)樯碓谧畹讓樱瑳]有設(shè)置分配機(jī)制或者自動獲取機(jī)制,,每臺設(shè)備制作的時(shí)候固定寫在里面,,并且確保全球不重復(fù),這樣就不會有沖突,。 當(dāng)然后來也就有了交換機(jī),,也就是帶有存儲轉(zhuǎn)發(fā)功能的集線器,可以把包存一下,,看一看目標(biāo)地址,,然后選擇某一條線路發(fā)出去。怎么知道哪條線路是哪個(gè)MAC,?學(xué)咯,,每條線路發(fā)來的包看一下來源地址,然后記到表里面,。 二層還要解決多個(gè)設(shè)備同時(shí)發(fā)送沖突的問題,,要檢測,要處理,,要重發(fā)等等,。 三層是這樣工作的:每個(gè)設(shè)備有一個(gè)IP地址,也要保證唯一,。這個(gè)IP地址可以手工分配,,也可以通過DHCP獲取。手工分配的時(shí)候需要注意保證唯一,。局域網(wǎng)內(nèi)想聯(lián)系一個(gè)IP地址,,先要知道對應(yīng)的MAC地址,這時(shí)候走二層的ARP全網(wǎng)問一下就可以了,。反過來,,自己作為新設(shè)備想要一個(gè)IP地址,要么RARP要一個(gè),,要么走基于UDP的DHCP要一個(gè),,當(dāng)然都只限于局域網(wǎng)內(nèi)。 有了這些底層的東東,,每臺設(shè)備都有了自己的IP地址,,這樣就可以互相通信。三層的關(guān)鍵在于,,有了路由器,,路由器用于將不同的網(wǎng)段連接在一起,,并對兩個(gè)網(wǎng)段間的通信進(jìn)行存儲轉(zhuǎn)發(fā)。比如A網(wǎng)絡(luò)10.0.0.0/24,,B網(wǎng)絡(luò)10.0.1.0/24,,中間有一路由器隔著,兩邊的網(wǎng)關(guān)都是.1,。10.0.0.2要發(fā)信給10.0.1.2,,那么先看子網(wǎng)掩碼,發(fā)現(xiàn)不在自己網(wǎng)絡(luò)內(nèi),,然后交給10.0.0.1,,路由器看到在網(wǎng)絡(luò)B內(nèi),從10.0.1.1發(fā)出,,然后到達(dá)10.0.1.2,。 假如這倆網(wǎng)絡(luò)沒有路由器,直接走二層,,那么多電腦連在一起,,廣播包就會占掉大量的網(wǎng)絡(luò)帶寬。 路由器,,顧名思義就是要找路用的,。比如B網(wǎng)絡(luò)還用一個(gè)路由器連接著C網(wǎng)絡(luò)10.0.2.0/24,那么A網(wǎng)絡(luò)一臺機(jī)器要發(fā)包給C網(wǎng)絡(luò)的一臺機(jī)器,,路由器怎么知道怎么走法呢,,于是需要路由協(xié)議,路由器之間要說說話,,了解一下對方的狀態(tài),。 再往大了去,就是互聯(lián)網(wǎng)了,。中國的一臺電腦要連接美國微軟,,那么發(fā)出的包先到寬帶運(yùn)營商,然后到北京出口,,然后覺得現(xiàn)在走歐洲到美國慢,,于是轉(zhuǎn)到上海,,走海底光纜到了美國,,再走舊金山,到西雅圖,,再到雷德蒙,。如果只有MAC地址,是無法支撐起這么大的網(wǎng)絡(luò)的,,你覺得直接訪問到MAC地址就行了,,問題是你讓路由器怎么給你找到路線呢,? 所以,對于原題「都只是描述IP是什么,,MAC是什么,。當(dāng)數(shù)據(jù)包到達(dá)局域網(wǎng)后,完全可以直接送到對應(yīng)的IP地址主機(jī),,為什么還要詢問一下對應(yīng)IP主機(jī)的MAC地址,?」 你缺乏網(wǎng)絡(luò)知識,搞不清NAT的含義,,只以為公網(wǎng)就是用IP的,,局域網(wǎng)就是用MAC地址的。 如果你本身用的公網(wǎng)IP,,那么全部走IP訪問即可,。如果是局域網(wǎng)多臺電腦共用公網(wǎng)出口,那么首先要做的是NAT轉(zhuǎn)換,,這個(gè)是要在4層TCP和UDP上做的,。只在二層無法完成。 你說的東西更像IPv6,,這樣不需要再做NAT,,所有內(nèi)網(wǎng)設(shè)備都可以分配一個(gè)IPv6地址。 不知道題主想的明白不,,我猜肯定想不明白,,哼哼~ |
|