一 前言
最近有用戶手機(jī)用流量無(wú)法登陸app儿子,最終發(fā)現(xiàn)原因是ip被防火墻拉黑了趟薄,本來(lái)想去了解ip的分配機(jī)制,隨著一個(gè)個(gè)知識(shí)點(diǎn)的了解典徊,發(fā)現(xiàn)還是系統(tǒng)記錄下來(lái)更能加深理解,特此記錄恩够。
二 知識(shí)點(diǎn)
1. 計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議: TCP/IP
以太網(wǎng)絡(luò)上面的傳輸使用網(wǎng)絡(luò)卡卡號(hào)為基準(zhǔn)的 MAC 訊框卒落,配合 CSMA/CD 的標(biāo)準(zhǔn)來(lái)傳送訊框,這就是硬件部分蜂桶。在軟件部分儡毕,我們知道 Internet 其實(shí)就是 TCP/IP 這個(gè)通訊協(xié)議的通稱,Internet 是由 InterNIC所統(tǒng)一管理的, 但其實(shí)他僅是負(fù)責(zé)分配 Internet 上面的 IP 以及提供相關(guān)的 TCP/IP 技術(shù)文件而已腰湾。
1.1 TCP
當(dāng)應(yīng)用程序用TCP傳送數(shù)據(jù)時(shí)雷恃,數(shù)據(jù)被送入?yún)f(xié)議棧中,然后逐個(gè)通過(guò)每一層直到被當(dāng)作一串比特流送入網(wǎng)絡(luò)费坊。其中每一層對(duì)收到的數(shù)據(jù)都要增加一些首部信息(有時(shí)還要增加尾部信息)倒槐,該過(guò)程如圖所示。
不論是服務(wù)器端還是客戶端附井,都必須要透過(guò)一次 SYN 與 ACK 來(lái)建立聯(lián)機(jī)讨越,所以總共會(huì)進(jìn)行三次的交談
封包發(fā)起時(shí),在 TCP 的表頭當(dāng)中永毅,必須要帶有 SYN 的主動(dòng)聯(lián)機(jī)(SYN=1)把跨,并且記下發(fā)送出聯(lián)機(jī)封包給服務(wù)器端的序號(hào) (Sequence number = 10001) 。
當(dāng)服務(wù)器接到這個(gè)封包沼死,并且確定要接收這個(gè)封包后着逐,就會(huì)開(kāi)始制作一個(gè)同時(shí)帶有 SYN=1, ACK=1 的封包, 其中那個(gè) acknowledge 的號(hào)碼是要給 client 端確認(rèn)用的意蛀,所以該數(shù)字會(huì)比(A 步驟)里面的 Sequence 號(hào)碼多一號(hào) (ack = 10001+1 = 10002)耸别, 那我們服務(wù)器也必須要確認(rèn)客戶端確實(shí)可以接收我們的封包才行,所以也會(huì)發(fā)送出一個(gè) Sequence (seq=20001) 給客戶端浸间,并且開(kāi)始等待客戶端給我們服務(wù)器端的回應(yīng)喔
1.2 IP
目前IP有兩個(gè)版本太雨。 IPv4 (Internet Protocol version 4, 因特網(wǎng)協(xié)定第四版)和IPV6,目前運(yùn)用最廣泛的還是IPV4魁蒜,所以下面講的是IPV4囊扳。
我們知道 IP (Internet Protocol) 其實(shí)是一種網(wǎng)絡(luò)封包,而這個(gè)封包的表頭最重要的就是那個(gè) 32 位的來(lái)源與目標(biāo)地址兜看! 為了方便記憶锥咸,所以我們也稱這個(gè) 32 bits 的數(shù)值為 IP 網(wǎng)絡(luò)地址就是了。
IP 最小可以由 0.0.0.0 一直到 255.255.255.255 细移,主要分為 Net_ID (網(wǎng)域號(hào)碼)與 Host_ID (主機(jī)號(hào)碼) 兩部份搏予。
11000000.10101000.00000000.11111111 192.168.0.255
|----------Net_ID---------|-host--|
第一組表示IP的等級(jí),第四組為主機(jī)號(hào)碼
在同一個(gè)網(wǎng)段內(nèi)弧轧,Net_ID 是不變的雪侥,而 Host_ID 則是不可重復(fù);Host_ID 在二進(jìn)制的表示法當(dāng)中精绎,不可同時(shí)為 0 也不可同時(shí)為 1 速缨,因?yàn)槿珵?0 表示整個(gè)網(wǎng)段的地址 (Network IP),而全為 1 則表示為廣播的地址 (Broadcast IP)代乃。
在同一網(wǎng)域內(nèi)旬牲,這些主機(jī)都可以透過(guò) CSMA/CD 的功能直接在區(qū)網(wǎng)內(nèi)用廣播進(jìn)行網(wǎng)絡(luò)的聯(lián)機(jī)。透過(guò)路由器 (router) 來(lái)進(jìn)行溝通才能將兩個(gè)網(wǎng)域連結(jié)在一起。
IP 的分級(jí)
以二進(jìn)制說(shuō)明 Network 第一個(gè)數(shù)字的定義:
Class A : 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的開(kāi)頭是 0
|--net--|---------host------------|
Class B : 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的開(kāi)頭是 10
|------net-------|------host------|
Class C : 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的開(kāi)頭是 110
|-----------net-----------|-host--|
Class D : 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的開(kāi)頭是 1110
Class E : 1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的開(kāi)頭是 1111
五種分級(jí)在十進(jìn)制的表示:
Class A : 0.xx.xx.xx ~ 127.xx.xx.xx
Class B : 128.xx.xx.xx ~ 191.xx.xx.xx
Class C : 192.xx.xx.xx ~ 223.xx.xx.xx
Class D : 224.xx.xx.xx ~ 239.xx.xx.xx
Class E : 240.xx.xx.xx ~ 255.xx.xx.xx
在 IPv4 里面就只有兩種 IP 的類(lèi)別原茅,分別是:
- Public IP : 公共 IP 吭历,經(jīng)由 INTERNIC 所統(tǒng)一規(guī)劃的 IP,有這種 IP 才可以連上 Internet 擂橘;
- Private IP : 私有 IP 或保留 IP晌区,不能直接連上 Internet 的 IP , 主要用于局域網(wǎng)絡(luò)內(nèi)的主機(jī)聯(lián)機(jī)規(guī)劃贝室。
私有 IP 也分別在 A, B, C 三個(gè) Class 當(dāng)中各保留一段作為私有 IP 網(wǎng)段契讲,那就是:
- Class A:10.0.0.0 - 10.255.255.255
- Class B:172.16.0.0 - 172.31.255.255
- Class C:192.168.0.0 - 192.168.255.255
Netmask (子網(wǎng)掩碼)
用來(lái)達(dá)成子網(wǎng)的切分
如果我們以 192.168.0.0 ~ 192.168.0.255 這個(gè)網(wǎng)段來(lái)說(shuō),要是給予 Net_ID 是 26 位時(shí)滑频,總共分為幾段呢捡偏? 因?yàn)?26-24=2 ,所以總共用掉兩個(gè)位峡迷,因此有 2 的 2 次方银伟,得到 4 個(gè)網(wǎng)段。再將 256 個(gè) IP 平均分配到 4 個(gè)網(wǎng)段去绘搞, 那我們就可以知道這四個(gè)網(wǎng)段分別是:
192.168.0.0~192.168.0.63
192.168.0.64~192.168.0.127
192.168.0.128~192.168.0.191
192.168.0.192~192.168.0.255
1.3 以太網(wǎng)絡(luò)的傳輸協(xié)議:CSMA/CD
局域網(wǎng)絡(luò)使用的設(shè)備-以太網(wǎng)絡(luò)彤避。
整個(gè)以太網(wǎng)絡(luò)的重心就是以太網(wǎng)絡(luò)卡。所以說(shuō)夯辖,以太網(wǎng)絡(luò)的傳輸主要就是網(wǎng)絡(luò)卡對(duì)網(wǎng)絡(luò)卡之間的數(shù)據(jù)傳遞而已琉预。 每張以太網(wǎng)絡(luò)卡出廠時(shí),就會(huì)賦予一個(gè)獨(dú)一無(wú)二的卡號(hào)蒿褂,那就是所謂的 MAC (Media Access Control) 圆米。
CSMA/CD 傳送出去的MAC幀數(shù)據(jù),其實(shí)就是 MAC 啄栓!我們又簡(jiǎn)稱網(wǎng)卡卡號(hào)為 MAC娄帖。
在發(fā)送端,數(shù)據(jù)鏈路層把網(wǎng)絡(luò)層傳下來(lái)得數(shù)據(jù)封裝成幀昙楚,然后發(fā)送到鏈路上去近速;在接收端,數(shù)據(jù)鏈路層把收到的幀中的數(shù)據(jù)取出并交給網(wǎng)絡(luò)層堪旧。不同的數(shù)據(jù)鏈路層協(xié)議對(duì)應(yīng)著不同的幀削葱,所以,幀有多種淳梦,比如PPP幀佩耳、MAC幀等,其具體格式也不盡相同谭跨。
上圖中的目的地址與來(lái)源地址指的就是網(wǎng)卡卡號(hào) (hardware address, 硬件地址).
硬件地址最小由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF (16 進(jìn)位法), 這 6 bytes 當(dāng)中,前 3bytes 為廠商的代碼螃宙,后 3bytes 則是該廠商自行設(shè)定的裝置碼了
2. ARP
地址解析協(xié)議(Address Resolution Protocol)蛮瞄,其基本功能為透過(guò)目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC地址谆扎,以保證通信的順利進(jìn)行挂捅。它是IPv4中網(wǎng)絡(luò)層必不可少的協(xié)議,不過(guò)在IPv6中已不再適用堂湖,并被鄰居發(fā)現(xiàn)協(xié)議(NDP)所替代
在發(fā)送數(shù)據(jù)包時(shí)闲先,首先要通過(guò)目的IP(主機(jī)或路由器)獲取局域網(wǎng)內(nèi)要發(fā)送對(duì)象的MAC地址,再將MAC地址封裝到數(shù)據(jù)包內(nèi)發(fā)送无蜂。而ARP的作用就在通過(guò)IP獲取MAC地址伺糠,通過(guò)廣播來(lái)發(fā)送ARP請(qǐng)求報(bào)文。
假設(shè)主機(jī)A和B在同一個(gè)網(wǎng)段斥季,主機(jī)A要向主機(jī)B發(fā)送信息训桶,具體的地址解析過(guò)程如下:
(1) 主機(jī)A首先查看自己的ARP表,確定其中是否包含有主機(jī)B對(duì)應(yīng)的ARP表項(xiàng)酣倾。如果找到了對(duì)應(yīng)的MAC地址舵揭,則主機(jī)A直接利用ARP表中的MAC地址,對(duì)IP數(shù)據(jù)包進(jìn)行幀封裝躁锡,并將數(shù)據(jù)包發(fā)送給主機(jī)B午绳。
(2) 如果主機(jī)A在ARP表中找不到對(duì)應(yīng)的MAC地址,則將緩存該數(shù)據(jù)報(bào)文映之,然后以廣播方式發(fā)送一個(gè)ARP請(qǐng)求報(bào)文拦焚。ARP請(qǐng)求報(bào)文中的發(fā)送端IP地址和發(fā)送端MAC地址為主機(jī)A的IP地址和MAC地址,目標(biāo)IP地址和目標(biāo)MAC地址為主機(jī)B的IP地址和全0的MAC地址惕医。由于ARP請(qǐng)求報(bào)文以廣播方式發(fā)送耕漱,該網(wǎng)段上的所有主機(jī)都可以接收到該請(qǐng)求,但只有被請(qǐng)求的主機(jī)(即主機(jī)B)會(huì)對(duì)該請(qǐng)求進(jìn)行處理抬伺。
(3) 主機(jī)B比較自己的IP地址和ARP請(qǐng)求報(bào)文中的目標(biāo)IP地址螟够,當(dāng)兩者相同時(shí)進(jìn)行如下處理:將ARP請(qǐng)求報(bào)文中的發(fā)送端(即主機(jī)A)的IP地址和MAC地址存入自己的ARP表中。之后以單播方式發(fā)送ARP響應(yīng)報(bào)文給主機(jī)A峡钓,其中包含了自己的MAC地址妓笙。
(4) 主機(jī)A收到ARP響應(yīng)報(bào)文后,將主機(jī)B的MAC地址加入到自己的ARP表中以用于后續(xù)報(bào)文的轉(zhuǎn)發(fā)能岩,同時(shí)將IP數(shù)據(jù)包進(jìn)行封裝后發(fā)送出去寞宫。
3. NAT
NAT名字很準(zhǔn)確伦忠,網(wǎng)絡(luò)地址轉(zhuǎn)換豺鼻,就是替換IP報(bào)文頭部的地址信息茶凳。NAT通常部署在一個(gè)組織的網(wǎng)絡(luò)出口位置,通過(guò)將內(nèi)部網(wǎng)絡(luò)IP地址替換為出口的IP地址提供公網(wǎng)可達(dá)性和上層協(xié)議的連接能力淘钟。
一個(gè)對(duì)外的訪問(wèn)請(qǐng)求在到達(dá)目標(biāo)以后,表現(xiàn)為由本組織出口設(shè)備發(fā)起涛贯,因此被請(qǐng)求的服務(wù)端可將響應(yīng)由Internet發(fā)回出口網(wǎng)關(guān)厕氨。出口網(wǎng)關(guān)再將目的地址替換為私網(wǎng)的源主機(jī)地址,發(fā)回內(nèi)部篷就。這樣一次由私網(wǎng)主機(jī)向公網(wǎng)服務(wù)端的請(qǐng)求和響應(yīng)就在通信兩端均無(wú)感知的情況下完成了射亏。依據(jù)這種模型,數(shù)量龐大的內(nèi)網(wǎng)主機(jī)就不再需要公有IP地址了竭业。
- 網(wǎng)絡(luò)被分為私網(wǎng)和公網(wǎng)兩個(gè)部分智润,NAT網(wǎng)關(guān)設(shè)置在私網(wǎng)到公網(wǎng)的路由出口位置,雙向流量必須都要經(jīng)過(guò)NAT網(wǎng)關(guān)
- 除靜態(tài)NAT未辆,網(wǎng)絡(luò)訪問(wèn)只能先由私網(wǎng)側(cè)發(fā)起窟绷,公網(wǎng)無(wú)法主動(dòng)訪問(wèn)私網(wǎng)主機(jī);
- NAT網(wǎng)關(guān)在兩個(gè)訪問(wèn)方向上完成兩次地址的轉(zhuǎn)換或翻譯鼎姐,出方向做源信息替換钾麸,入方向做目的信息替換;
- NAT網(wǎng)關(guān)的存在對(duì)通信雙方是保持透明的炕桨;
- NAT網(wǎng)關(guān)為了實(shí)現(xiàn)雙向翻譯的功能饭尝,需要維護(hù)一張關(guān)聯(lián)表,把會(huì)話的信息保存下來(lái)献宫。
- 靜態(tài)轉(zhuǎn)換是指將內(nèi)部網(wǎng)絡(luò)的私有IP地址轉(zhuǎn)換為公有IP地址钥平,IP地址對(duì)是一對(duì)一的,是一成不變的姊途,某個(gè)私有IP地址只轉(zhuǎn)換為某個(gè)公有IP地址涉瘾。借助于靜態(tài)轉(zhuǎn)換,可以實(shí)現(xiàn)外部網(wǎng)絡(luò)對(duì)內(nèi)部網(wǎng)絡(luò)中某些特定設(shè)備(如服務(wù)器)的訪問(wèn)捷兰。
- 動(dòng)態(tài)轉(zhuǎn)換是指將內(nèi)部網(wǎng)絡(luò)的私有IP地址轉(zhuǎn)換為公用IP地址時(shí)立叛,IP地址是不確定的,是隨機(jī)的贡茅,所有被授權(quán)訪問(wèn)上Internet的私有IP地址可隨機(jī)轉(zhuǎn)換為任何指定的合法IP地址秘蛇。當(dāng)ISP提供的合法IP地址略少于網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)數(shù)量時(shí)《タ迹可以采用動(dòng)態(tài)轉(zhuǎn)換的方式赁还。
- 端口多路復(fù)用(Port address Translation,PAT)是指改變外出數(shù)據(jù)包的源端口并進(jìn)行端口轉(zhuǎn)換,即端口地址轉(zhuǎn)換(PAT驹沿,Port Address Translation).采用端口多路復(fù)用方式艘策。可隱藏網(wǎng)絡(luò)內(nèi)部的所有主機(jī)渊季,有效避免來(lái)自internet的攻擊朋蔫。因此罚渐,目前網(wǎng)絡(luò)中應(yīng)用最多的就是端口多路復(fù)用方式。
- ALG(Application Level Gateway)斑举,即應(yīng)用程序級(jí)網(wǎng)關(guān)技術(shù):傳統(tǒng)的NAT技術(shù)只對(duì)IP層和傳輸層頭部進(jìn)行轉(zhuǎn)換處理搅轿,但是一些應(yīng)用層協(xié)議,在協(xié)議數(shù)據(jù)報(bào)文中包含了地址信息富玷。為了使得這些應(yīng)用也能透明地完成NAT轉(zhuǎn)換,NAT使用一種稱作ALG的技術(shù)既穆,它能對(duì)這些應(yīng)用程序在通信時(shí)所包含的地址信息也進(jìn)行相應(yīng)的NAT轉(zhuǎn)換赎懦。
4. 路由器
路由器根據(jù)收到數(shù)據(jù)包中的網(wǎng)絡(luò)層地址以及路由器內(nèi)部維護(hù)的路由表決定輸出端口以及下一跳地址,并且重寫(xiě)鏈路層數(shù)據(jù)包頭實(shí)現(xiàn)轉(zhuǎn)發(fā)數(shù)據(jù)包幻工。路由器通過(guò)動(dòng)態(tài)維護(hù)路由表來(lái)反映當(dāng)前的網(wǎng)絡(luò)拓?fù)淅剑⑼ㄟ^(guò)網(wǎng)絡(luò)上其他路由器交換路由和鏈路信息來(lái)維護(hù)路由表。
路由器的主要工作就是為經(jīng)過(guò)路由器的每個(gè)數(shù)據(jù)幀尋找一條最佳傳輸路徑囊颅,并將該數(shù)據(jù)有效地傳送到目的站點(diǎn)当悔。由此可見(jiàn),選擇最佳路徑的策略即路由算法是路由器的關(guān)鍵所在踢代。為了完成這項(xiàng)工作盲憎,在路由器中保存著各種傳輸路徑的相關(guān)數(shù)據(jù)――路由表(RoutingTable),供路由選擇時(shí)使用胳挎。
路由工作包含兩個(gè)基本的動(dòng)作:
1. 確定最佳路徑
為了幫助選路饼疙,路由算法初始化并維護(hù)包含路徑信息的路由表,路徑信息根據(jù)使用的路由算法不同而不同慕爬。路由算法根據(jù)許多信息來(lái)填充路由表窑眯。
分級(jí)路由廣泛應(yīng)用于互聯(lián)網(wǎng)路由中,并且使用了多種路由協(xié)議医窿。使用DV(距離向量)算法來(lái)查找節(jié)點(diǎn)間的最佳路由磅甩,在分級(jí)路由中,路由器被分成很多組姥卢,稱為區(qū)域卷要。每個(gè)路由器都只有自己所在區(qū)域路由器的信息,而沒(méi)有其他區(qū)域路由器的信息隔显。所以在其路由表中却妨,路由器只需要存儲(chǔ)其他每個(gè)區(qū)域的一條記錄。再使用路由表轉(zhuǎn)發(fā)最長(zhǎng)匹配原則進(jìn)行數(shù)據(jù)分發(fā)括眠。
當(dāng)路由器收到一個(gè)IP數(shù)據(jù)包時(shí)彪标,會(huì)將數(shù)據(jù)包的目的IP地址與自己本地路由表中的表項(xiàng)進(jìn)行bit by bit的逐位查找,直到找到匹配度最長(zhǎng)的條目掷豺,這叫最長(zhǎng)匹配原則捞烟。
關(guān)于路由查找的幾個(gè)重點(diǎn)內(nèi)容:
- 不同的前綴(網(wǎng)絡(luò)號(hào)+掩碼薄声,缺一不可),在路由表中屬于不同的路由
- 相同的前綴题画,通過(guò)不同的協(xié)議獲取默辨,先比AD,后比metric
- 這是一般情況苍息,當(dāng)然有二般情況缩幸,這就要看特定的環(huán)境和特定的路由協(xié)議了
- 默認(rèn)采用最長(zhǎng)匹配原則,匹配竞思,則轉(zhuǎn)發(fā)表谊;無(wú)匹配,則找默認(rèn)路由盖喷,默認(rèn)路由都沒(méi)有爆办,則丟棄
- 路由器的行為是逐跳的,到目標(biāo)網(wǎng)絡(luò)的沿路徑每個(gè)路由器都必須有關(guān)于目的地的路由
- 數(shù)據(jù)是雙向的课梳,考慮流量的時(shí)候距辆,要關(guān)注流量的往返
2. 通過(guò)網(wǎng)絡(luò)傳輸信息
多數(shù)情況下,某主機(jī)決定向另一個(gè)主機(jī)發(fā)送數(shù)據(jù)暮刃,通過(guò)某些方法(如ARP)獲得路由器的地址后跨算,源主機(jī)發(fā)送指向該路由器的物理(MAC)地址的數(shù)據(jù)包,其協(xié)議地址是指向目的主機(jī)的沾歪。
路由器查看了數(shù)據(jù)包的目的協(xié)議地址后漂彤,確定是否知道如何轉(zhuǎn)發(fā)該包,如果路由器不知道如何轉(zhuǎn)發(fā)灾搏,通常就將之丟棄挫望。如果路由器知道如何轉(zhuǎn)發(fā),就把目的物理地址變成下一跳的物理地址并向之發(fā)送狂窑。下一跳可能就是最終的目的主機(jī)媳板,如果不是,通常為另一個(gè)路由器泉哈,它將執(zhí)行同樣的步驟蛉幸。當(dāng)分組在網(wǎng)絡(luò)中流動(dòng)時(shí),它的物理地址在改變丛晦,但其協(xié)議地址始終不變奕纫。
工作原理
路由器是第三層網(wǎng)絡(luò)設(shè)備,這樣說(shuō)大家可能都不理解烫沙,就先說(shuō)一下集線器和交換機(jī)吧匹层。集線器工作在第一層(即物理層),它沒(méi)有智能處理能力锌蓄,對(duì)它來(lái)說(shuō)升筏,數(shù)據(jù)只是電流而已撑柔,當(dāng)一個(gè)端口的電流傳到集線器中時(shí),它只是簡(jiǎn)單地將電流傳送到其他端口您访,至于其他端口連接的計(jì)算機(jī)接收不接收這些數(shù)據(jù)铅忿,它就不管了。交換機(jī)工作在第二層(即數(shù)據(jù)鏈路層)灵汪,它要比集線器智能一些檀训,對(duì)它來(lái)說(shuō),網(wǎng)絡(luò)上的數(shù)據(jù)就是MAC地址的集合享言,它能分辨出幀中的源MAC地址和目的MAC地址肢扯,因此可以在任意兩個(gè)端口間建立聯(lián)系,但是交換機(jī)并不懂得IP地址担锤,它只知道MAC地址。路由器工作在第三層(即網(wǎng)絡(luò)層)乍钻,它比交換機(jī)還要“聰明”一些肛循,它能理解數(shù)據(jù)中的IP地址,如果它接收到一個(gè)數(shù)據(jù)包银择,就檢查其中的IP地址多糠,如果目標(biāo)地址是本地網(wǎng)絡(luò)的就不理會(huì),如果是其他網(wǎng)絡(luò)的浩考,就將數(shù)據(jù)包轉(zhuǎn)發(fā)出本地網(wǎng)絡(luò)夹孔。
NAT與路由器
上面介紹路由的轉(zhuǎn)發(fā),是說(shuō)只替換MAC地址來(lái)進(jìn)行轉(zhuǎn)發(fā)析孽,但I(xiàn)P卻不會(huì)改變搭伤,這種轉(zhuǎn)發(fā)在Internet內(nèi)傳播是沒(méi)有問(wèn)題的,因?yàn)镮P都是公共IP袜瞬。
但如果路由器是連接這局域網(wǎng)和外部網(wǎng)絡(luò)怜俐,這是IP就不能通用了,必須經(jīng)過(guò)NAT轉(zhuǎn)換成外部網(wǎng)絡(luò)IP邓尤。我們?nèi)粘<矣玫穆酚善鞫际荖AT模式拍鲤,先進(jìn)行NAT(如地址轉(zhuǎn)換、端口轉(zhuǎn)換等)汞扎,再根據(jù)路由表進(jìn)行轉(zhuǎn)發(fā)季稳。
三 一條信息的網(wǎng)絡(luò)請(qǐng)求過(guò)程
如果看完聯(lián)網(wǎng)上面介紹的知識(shí)點(diǎn),對(duì)于這個(gè)標(biāo)題其實(shí)就已經(jīng)有了大概的答案了澈魄。重點(diǎn)還是在路由器上景鼠,由它執(zhí)行數(shù)據(jù)發(fā)送。
- 源主機(jī)在發(fā)起通信之前一忱,將自己的IP與目標(biāo)主機(jī)的IP進(jìn)行比較莲蜘,如果兩者位于同一網(wǎng)段(用子網(wǎng)掩碼計(jì)算后具有相同的網(wǎng)絡(luò)號(hào))谭确,那么源主機(jī)直接向目的主機(jī)發(fā)送ARP請(qǐng)求,在接收到目的主機(jī)的ARP應(yīng)答后獲取對(duì)方MAC地址票渠,然后用對(duì)方的MAC地址作為目標(biāo)MAC地址進(jìn)行報(bào)文發(fā)送逐哈,位于同一VLAN(網(wǎng)段)的主機(jī)互訪時(shí)屬于這種情況,這是互聯(lián)的交換機(jī)做二層轉(zhuǎn)發(fā)问顷。
- 當(dāng)源主機(jī)判斷目的主機(jī)與自己位于不同網(wǎng)段時(shí)昂秃,它會(huì)通過(guò)網(wǎng)關(guān)來(lái)提交報(bào)文,即發(fā)送ARP請(qǐng)求來(lái)獲取網(wǎng)關(guān)IP地址對(duì)應(yīng)的MAC杜窄,在得到網(wǎng)關(guān)的ARP應(yīng)答后肠骆,用網(wǎng)關(guān)MAC作為報(bào)文目的MAC進(jìn)行報(bào)文發(fā)送……也就是路由器的某個(gè)端口。注意塞耕,報(bào)文的源IP是源主機(jī)IP蚀腿,目的IP依然是目的主機(jī)IP。
- 當(dāng)網(wǎng)關(guān)路由器接收到以太網(wǎng)數(shù)據(jù)幀時(shí)扫外,發(fā)現(xiàn)數(shù)據(jù)幀中的目標(biāo)MAC地址是自己的某一個(gè)端口的物理地址莉钙,這時(shí)路由器會(huì)把以太網(wǎng)數(shù)據(jù)幀的封裝去掉。路由器認(rèn)為這個(gè)IP數(shù)據(jù)包是要通過(guò)自己進(jìn)行轉(zhuǎn)發(fā)筛谚,如果路由器轉(zhuǎn)發(fā)IP在同一個(gè)網(wǎng)絡(luò)磁玉,接著它就在匹配路由表(包含目標(biāo)地址和指向目標(biāo)地址的指針)。匹配到路由項(xiàng)后驾讲,它就將包發(fā)往下一條地址蚊伞。路由器轉(zhuǎn)發(fā)數(shù)據(jù)包也是這樣,它始終是不會(huì)改IP地址的吮铭,只會(huì)改源/目標(biāo)MAC时迫。
- 如果目的地址經(jīng)路由表對(duì)比,發(fā)現(xiàn)轉(zhuǎn)發(fā)IP不是在本網(wǎng)中沐兵,有nat就將改變?cè)吹刂返腎P(原源地址的Ip地址改為了路由器的IP地址)别垮,路由器將數(shù)據(jù)包轉(zhuǎn)發(fā)到相應(yīng)的端口,進(jìn)行通信扎谎。
- 萬(wàn)一路由遇到目的MAC是廣播地址怎么辦碳想?IP的廣播有三種:
255.255.255.255叫本地廣播,也叫直播毁靶,direct broadcast胧奔,不跨路由器。
172.16.33.255叫子網(wǎng)廣播预吆,廣播給172.16.33.0這個(gè)子網(wǎng)龙填,可以跨路由器。
172.16.255.255叫全子網(wǎng)廣播,廣播給172.16.0.0這個(gè)主網(wǎng)岩遗,可以跨路由器扇商。
路由器是三層設(shè)備,可以隔離廣播宿礁,但并不是所有廣播都隔離案铺。事實(shí)上只有本地廣播路由器才不轉(zhuǎn)發(fā),對(duì)于子網(wǎng)廣播和全子網(wǎng)廣播梆靖,路由器是轉(zhuǎn)發(fā)的控汉。為什么呢?我們來(lái)看255.255.255.255的廣播返吻,在MAC的封裝中姑子,對(duì)應(yīng)的目的MAC是廣播,而子網(wǎng)廣播和全子網(wǎng)廣播测僵,對(duì)應(yīng)的目的MAC是單播街佑,所以路由器會(huì)轉(zhuǎn)發(fā)。所以路由器隔離的廣播是目的MAC為全1的廣播捍靠,對(duì)于目的MAC是單播的上層廣播舆乔,路由器是不能隔離的。 - IP數(shù)據(jù)包經(jīng)由路由轉(zhuǎn)發(fā)的時(shí)候 源/目的IP剂公,源/目的MAC是否發(fā)生改變,如何改變吊宋?
A—–(B1-B2)—–(C1-C2)——E
如上拓?fù)鋱D為例纲辽,B1和B2是路由器B上的兩個(gè)接口,C1和C2是路由器C上的兩個(gè)接口璃搜,A和E是PC拖吼,由主機(jī)A向主機(jī)E發(fā)送數(shù)據(jù)包,那么在主機(jī)A形成的數(shù)據(jù)包的目的IP就是E的IP这吻,源IP就是主機(jī)A的IP地址吊档,目標(biāo)MAC地址就是B1的MAC地址,源MAC地址就是A的MAC地址唾糯。
由A發(fā)給路由器B怠硼,B經(jīng)過(guò)重封裝后,源IP和目標(biāo)IP是不變的移怯,源MAC地址變成B2的MAC地址香璃,目標(biāo)MAC地址變成C1的MAC地址,封裝完成發(fā)送給路由器C舟误,路由器C接收到數(shù)據(jù)包后和B做的操作是一樣的葡秒,源IP和目標(biāo)IP的不變的,源MAC地址變成C2的MAC地址,目標(biāo)MAC地址變成主機(jī)E的MAC地址眯牧,然后發(fā)送給主機(jī)E蹋岩,這樣E就收到了這個(gè)數(shù)據(jù)包,當(dāng)恢復(fù)數(shù)據(jù)包的時(shí)候就是把收到的數(shù)據(jù)包的源IP地址(主機(jī)A的IP地址)和源MAC地址(接口C2的MAC地址)作為他的目標(biāo)IP和目標(biāo)MAC地址学少。