鄭州專業(yè)網(wǎng)站制作服務(wù)報(bào)價(jià)濟(jì)南網(wǎng)絡(luò)推廣公司電話
DNS協(xié)議、ICMP協(xié)議、NAT技術(shù)
- 一、DNS協(xié)議
- 1、產(chǎn)生背景
- 2、域名簡(jiǎn)介
- 3、域名解析的工作流程
- 4、使用dig工具分析DNS過(guò)程
- 二、ICMP協(xié)議
- 1、ICMP介紹
- 2、ICMP協(xié)議格式
- 3、ping命令
- 4、traceroute命令
- 三、NAT技術(shù)
- 1、NAT技術(shù)背景
- 2、NAT IP轉(zhuǎn)換過(guò)程
- 3、地址轉(zhuǎn)換表
- 4、NAPT技術(shù)
- 5、重新理解路由器
- 6、NAT技術(shù)的缺陷
- 四、NAT和代理服務(wù)器
- 1、正向代理
- 2、反向代理
一、DNS協(xié)議
DNS(Domain Name System,域名系統(tǒng))協(xié)議,是一個(gè)的應(yīng)用層協(xié)議,其傳輸依賴于UDP。
1、產(chǎn)生背景
TCP/IP中通過(guò)IP地址和端口號(hào)的方式,來(lái)確定網(wǎng)絡(luò)中一個(gè)主機(jī)上的一個(gè)程序。但I(xiàn)P地址是一長(zhǎng)串?dāng)?shù)字,并不便于人們記憶,于是人們發(fā)明了一種叫做主機(jī)名的東西,并用hosts
文件夾來(lái)描述主機(jī)名和IP地址之間的對(duì)應(yīng)關(guān)系。
最初,通過(guò)互連網(wǎng)信息中心(SRI-NIC)來(lái)管理這個(gè)hosts文件的。
- 如果一個(gè)新計(jì)算機(jī)要接入網(wǎng)絡(luò),或者某個(gè)計(jì)算機(jī)IP變更,都需要到信息中心申請(qǐng)變更hosts文件。
- 其他計(jì)算機(jī)也需要定期下載更新新版本的hosts文件才能正確上網(wǎng)。
這樣就太麻煩了,于是產(chǎn)生了DNS系統(tǒng)。
-
一個(gè)組織的系統(tǒng)管理機(jī)構(gòu),維護(hù)系統(tǒng)內(nèi)的每個(gè)主機(jī)的IP和主機(jī)名的對(duì)應(yīng)關(guān)系。
-
如果新計(jì)算機(jī)接入網(wǎng)絡(luò),將這個(gè)信息注冊(cè)到數(shù)據(jù)庫(kù)中。
-
用戶輸入域名的時(shí)候,會(huì)自動(dòng)查詢DNS服務(wù)器,由DNS服務(wù)器檢索數(shù)據(jù)庫(kù),得到對(duì)應(yīng)的IP地址。
至今,我們的計(jì)算機(jī)上仍然保留了hosts文件。在域名解析的過(guò)程中仍然會(huì)優(yōu)先查找hosts文件的內(nèi)容。
cat /etc/hosts
2、域名簡(jiǎn)介
DNS 中的域名都是用句點(diǎn)來(lái)分隔的,比如 www.baidu.com
,這里的句點(diǎn)代表了不同層次之間的界限。
在域名中,越靠右的位置表示其層級(jí)越高。
- com:一級(jí)域名,表示這是一個(gè)工商企業(yè)域名。同級(jí)的還有.net(網(wǎng)絡(luò)提供商)和.org(開(kāi)源組織或非盈利組織)等。
- baidu:二級(jí)域名,一般對(duì)應(yīng)的就是公司名。
- www:只是一種習(xí)慣用法,之前人們?cè)谑褂糜蛎麜r(shí),往往命名成類似于ftp.xxx.xxx/www.xxx.xxx這樣的格式,來(lái)表示主機(jī)支持的協(xié)議。
根域是在最頂層,它的下一層就是頂級(jí)域,再下面是二級(jí)域名,所以域名的層級(jí)關(guān)系類似一個(gè)樹(shù)狀結(jié)構(gòu):
- 根 DNS 服務(wù)器
- 頂級(jí)域 DNS 服務(wù)器(類似com)
- 權(quán)威 DNS 服務(wù)器(類似server.com)
根域的 DNS 服務(wù)器信息保存在互聯(lián)網(wǎng)中所有的 DNS 服務(wù)器中。這樣一來(lái),任何 DNS 服務(wù)器就都可以找到并訪問(wèn)根域 DNS 服務(wù)器了。
因此,客戶端只要能夠找到任意一臺(tái) DNS 服務(wù)器,就可以通過(guò)它找到根域 DNS 服務(wù)器,然后再一路順藤摸瓜找到位于下層的某臺(tái)目標(biāo) DNS 服務(wù)器。
3、域名解析的工作流程
瀏覽器首先看一下自己的緩存里有沒(méi)有,如果沒(méi)有就向操作系統(tǒng)的緩存要,還沒(méi)有就檢查本機(jī)域名解析文件hosts
,如果還是沒(méi)有,就會(huì)向本地DNS 服務(wù)器進(jìn)行查詢,查詢的過(guò)程如下:
-
本地DNS服務(wù)器IP地址一般由本地網(wǎng)絡(luò)服務(wù)商提供,如電信、移動(dòng)等公司,一般通過(guò)DHCP自動(dòng)分配。目前使用的比較多的是谷歌提供的公用NDS 8.8.8.8和國(guó)內(nèi)公用DNS 114.114.114.114。如果在本地DNS服務(wù)器中有對(duì)應(yīng)域名的緩存,則直接返回對(duì)應(yīng)的IP地址,完成解析。
-
如果本地DNS服務(wù)器中仍然沒(méi)有找到,那么本地DNS服務(wù)器就會(huì)拿著域名去根DNS服務(wù)器中詢問(wèn),根 DNS 收到來(lái)自本地 DNS 的請(qǐng)求后,會(huì)檢查請(qǐng)求的一級(jí)域名,然后根DNS服務(wù)器會(huì)告訴本地DNS服務(wù)器其對(duì)應(yīng)一級(jí)域名的的頂級(jí)域 DNS 服務(wù)器的地址。
-
本地DNS服務(wù)器拿到頂級(jí)域 DNS 服務(wù)器的地址后,就會(huì)拿著域名去找頂級(jí)DNS服務(wù)器,頂級(jí)域名服務(wù)器會(huì)告訴本地DNS服務(wù)器其對(duì)應(yīng)的權(quán)威DNS服務(wù)器的IP地址。
-
本地DNS服務(wù)器拿著域名去權(quán)威DNS服務(wù)器中,查詢域名對(duì)應(yīng)的IP地址,最終將該域名對(duì)應(yīng)的IP地址返回給瀏覽器,此時(shí)整個(gè)域名解析過(guò)程就完成了。
總結(jié)一下其過(guò)程:
4、使用dig工具分析DNS過(guò)程
安裝 dig
工具
yum install bind-utils
之后就可以使用 dig 指令查看域名解析過(guò)程了。
結(jié)果說(shuō)明:
- 開(kāi)頭位置是dig工具的版本號(hào)。
- 第二部分是服務(wù)器返回的詳情,其中status參數(shù)為NOERROR表示查詢成功。
- QUESTION SECTION表示待查詢的域名。
- ANSWER SECTION表示查詢的結(jié)果,首先www.baidu.com被查詢成了www.a.shifen.com,而最終www.a.shifen.com被查詢成了兩個(gè)具體的IP地址。
- 最下面是一些結(jié)果統(tǒng)計(jì),包含查詢時(shí)間和DNS服務(wù)器的地址等。
二、ICMP協(xié)議
1、ICMP介紹
ICMP(Internet Control Message Protoco)Internet控制報(bào)文協(xié)議,是一個(gè)網(wǎng)絡(luò)層協(xié)議,用于在IP主機(jī)、路由器之間傳遞控制信息。
一個(gè)新搭建好的網(wǎng)絡(luò), 往往需要先進(jìn)行一個(gè)簡(jiǎn)單的測(cè)試, 來(lái)驗(yàn)證網(wǎng)絡(luò)是否暢通,但是IP協(xié)議并不提供可靠傳輸, 如果丟包了, IP協(xié)議并不能通知傳輸層是否丟包以及丟包的原因,因此這種情況下就要使用ICMP協(xié)議來(lái)保證進(jìn)行能夠進(jìn)行網(wǎng)絡(luò)相關(guān)功能的測(cè)試。
ICMP和IP協(xié)議雖然都屬于網(wǎng)絡(luò)層的協(xié)議,但I(xiàn)CMP協(xié)議屬于IP的上層協(xié)議。
ICMP 主要的功能包括:確認(rèn) IP 包是否成功送達(dá)目標(biāo)地址、報(bào)告發(fā)送過(guò)程中 IP 包被廢棄的原因和改善網(wǎng)絡(luò)設(shè)置等。
在 IP 通信中如果某個(gè) IP 包因?yàn)槟撤N原因未能達(dá)到目標(biāo)地址,那么這個(gè)具體的原因?qū)?font color="blue">由 ICMP 負(fù)責(zé)通知。
ICMP可以讓?xiě)?yīng)用層繞過(guò)傳輸層,直接使用ICMP進(jìn)行通信,利用這個(gè)特性就可以在應(yīng)用層編寫(xiě)一些網(wǎng)絡(luò)測(cè)試工具來(lái)調(diào)試網(wǎng)絡(luò)的相關(guān)問(wèn)題,ping
命令就是基于ICMP的。
需要注意的一點(diǎn)是:ICMP只能搭配IPv4使用,如果是IPv6的情況下,需要使用ICMPv6。
進(jìn)行網(wǎng)絡(luò)連通性測(cè)試時(shí),當(dāng)發(fā)送的數(shù)據(jù)包到達(dá)主機(jī)B所在局域網(wǎng)的入口路由器時(shí),入口路由器為了獲得主機(jī)B的MAC地址,于是會(huì)向主機(jī)B發(fā)送ARP請(qǐng)求包,但由于主機(jī)B已經(jīng)離線了,因此路由器在多次發(fā)送ARP請(qǐng)求包而得不到響應(yīng)后,就會(huì)返回一個(gè)ICMP Destination Unreachable的包給主機(jī)A,此時(shí)主機(jī)A就知道自己發(fā)送的數(shù)據(jù)無(wú)法到達(dá)主機(jī)B。
2、ICMP協(xié)議格式
ICMP協(xié)議格式如下:
ICMP大概分為兩類報(bào)文:
- 一類是通知出錯(cuò)原因
- 一類是用于診斷查詢
ICMP包常見(jiàn)類型如下:
類型 | 內(nèi)容 |
---|---|
0 | 回送應(yīng)答(Echo Reply) |
3 | 目標(biāo)不可達(dá)(Destination Unreachable) |
4 | 原點(diǎn)抑制(Source Quench) |
5 | 重定向或改變路由(Redirect) |
8 | 回送請(qǐng)求(Echo Request) |
9 | 路由器公告(Router Advertisement) |
10 | 路由器請(qǐng)求(Router Solicitation) |
11 | 超時(shí)(Time Exceeded) |
17 | 地址子網(wǎng)請(qǐng)求(Address Mask Request) |
18 | 地址子網(wǎng)應(yīng)答(Address Mask Reply) |
3、ping命令
ping
命令的功能是用于測(cè)試主機(jī)間網(wǎng)絡(luò)連通性,發(fā)送出基于ICMP傳輸協(xié)議的數(shù)據(jù)包,要求對(duì)方主機(jī)予以回復(fù),若對(duì)方主機(jī)的網(wǎng)絡(luò)功能沒(méi)有問(wèn)題且防火墻放行流量,則就會(huì)回復(fù)該信息,我們也就可得知對(duì)方主機(jī)系統(tǒng)在線并運(yùn)行正常了。
- 注意, 此處
ping
的是域名, 而不是url, 一個(gè)域名可以通過(guò)DNS解析成IP地址。 ping
命令不光能驗(yàn)證網(wǎng)絡(luò)的連通性, 同時(shí)也會(huì)統(tǒng)計(jì)響應(yīng)時(shí)間和TTL(IP包中的Time To Live, 生存周期)。ping
命令會(huì)先發(fā)送一個(gè) ICMP Echo Request給對(duì)端;- 對(duì)端接收到之后, 會(huì)返回一個(gè)ICMP Echo Reply;
一個(gè)值得注意的坑
telnet
對(duì)應(yīng)的端口號(hào)是23,ssh
對(duì)應(yīng)的端口號(hào)是22,那ping
對(duì)應(yīng)的端口號(hào)是多少?
相信你一定回答不上啦,因?yàn)?code>ping命令基于ICMP, 是在網(wǎng)絡(luò)層, 而端口號(hào)是傳輸層的內(nèi)容, 在ICMP中根本就不關(guān)注端口號(hào)這樣的信息,所以ping
命令沒(méi)有的端口號(hào)!
4、traceroute命令
traceroute
命令也是基于ICMP協(xié)議實(shí)現(xiàn)的,traceroute
命令可以打印出數(shù)據(jù)包傳送到目標(biāo)主機(jī)所經(jīng)過(guò)的所有路由器。
原理簡(jiǎn)述:
traceroute
命令底層實(shí)際是通過(guò)增加存活時(shí)間(TTL)值來(lái)實(shí)現(xiàn)的。- 因?yàn)槊慨?dāng)數(shù)據(jù)包經(jīng)過(guò)一個(gè)路由器,其TTL值就會(huì)減1,當(dāng)TTL值減為0時(shí)對(duì)應(yīng)路由設(shè)備就會(huì)將該數(shù)據(jù)包丟棄,并傳送一個(gè)ICMP TTL數(shù)據(jù)包給發(fā)送主機(jī)。
- 因此
traceroute
命令底層可以發(fā)出多個(gè)數(shù)據(jù)包,并給這些數(shù)據(jù)包設(shè)置不同的TTL值,最后該主機(jī)就能夠得到一連串的數(shù)據(jù)包路徑。
三、NAT技術(shù)
NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)技術(shù),是解決IP地址不足的主要手段,并且能夠有效地避免來(lái)自網(wǎng)絡(luò)外部的攻擊,隱藏并保護(hù)網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)。
1、NAT技術(shù)背景
在IPv4協(xié)議中,IP地址數(shù)量不足是一個(gè)大問(wèn)題,而NAT技術(shù)就是當(dāng)前解決IP地址不夠用的主要手段,是路由器的一個(gè)重要功能。
- 在進(jìn)行對(duì)外通信時(shí),NAT能夠?qū)⑺接蠭P經(jīng)過(guò)一系列替換操作最終轉(zhuǎn)為全局IP,也就是說(shuō),NAT是一種將私有IP和全局IP相互轉(zhuǎn)化的技術(shù)方法。
- 裝有NAT軟件的路由器叫做NAT路由器,所有使用私有IP的主機(jī)在和外界通信時(shí),都要在NAT路由器上將其私有IP轉(zhuǎn)換成全局IP。
很多學(xué)校、家庭、公司內(nèi)部每個(gè)終端設(shè)置的IP都是私有IP,而只在路由器或必要的服務(wù)器上設(shè)置全局IP。
全局IP要求唯一,但是私有IP不需要,在不同的局域網(wǎng)中出現(xiàn)相同的私有IP是完全不影響的。
2、NAT IP轉(zhuǎn)換過(guò)程
-
首先路由器是是至少有兩個(gè)IP的,一個(gè)LAN口IP對(duì)內(nèi)網(wǎng)進(jìn)行連接,是私有IP,另外一個(gè)是WAN口IP,也可以是內(nèi)網(wǎng)IP,但這里我們先假設(shè)是公網(wǎng)IP。
-
當(dāng)內(nèi)網(wǎng)的主機(jī)經(jīng)過(guò)路由器向外發(fā)送數(shù)據(jù)時(shí),會(huì)由路由器將其源IP替換為WAN口IP。
假設(shè)某個(gè)局域網(wǎng)當(dāng)中有A、B、C三臺(tái)主機(jī),在公網(wǎng)當(dāng)中有一臺(tái)服務(wù)器,以主機(jī)A訪問(wèn)公網(wǎng)中的這臺(tái)服務(wù)器為例,我們來(lái)看看數(shù)據(jù)包在傳輸過(guò)程中IP地址的轉(zhuǎn)換過(guò)程。
-
NAT路由器將報(bào)文的源地址從
10.0.0.10
替換成公網(wǎng)的IP202.244.174.37
,然后就可以以公網(wǎng)IP的形式對(duì)外訪問(wèn)公網(wǎng)當(dāng)中的服務(wù)器了,相當(dāng)于是該路由器代替主機(jī)A向服務(wù)器發(fā)起了數(shù)據(jù)請(qǐng)求。 -
當(dāng)服務(wù)器進(jìn)行響應(yīng)時(shí),由于請(qǐng)求報(bào)文中是路由器的公網(wǎng)IP,自然是響應(yīng)給路由器,當(dāng)路由器收到外部的數(shù)據(jù)時(shí), 又會(huì)把響應(yīng)報(bào)文的目標(biāo)IP從
202.244.174.37
替換回10.0.0.10
,然后發(fā)送給內(nèi)網(wǎng)中對(duì)應(yīng)的主機(jī)。
可以看出我們只需要在WAN口處配置一個(gè)公網(wǎng)IP,就能夠讓一個(gè)大的局域網(wǎng)內(nèi)的所有內(nèi)網(wǎng)IP的主機(jī)都能夠進(jìn)行訪問(wèn)公網(wǎng),這極大的解決了IP地址不足的問(wèn)題。
3、地址轉(zhuǎn)換表
- 當(dāng)局域網(wǎng)當(dāng)中的主機(jī)要訪問(wèn)外網(wǎng)時(shí),NAT路由器會(huì)將這些數(shù)據(jù)包的源IP地址替換成自己的WAN口IP地址。
- 當(dāng)外網(wǎng)發(fā)來(lái)響應(yīng)數(shù)據(jù)時(shí),NAT路由器又會(huì)將響應(yīng)數(shù)據(jù)包的目的IP地址替換成局域網(wǎng)中對(duì)應(yīng)主機(jī)的IP地址。
為了維護(hù)好上面的關(guān)系,路由器內(nèi)部自動(dòng)維護(hù)了一個(gè)地址轉(zhuǎn)換表。
- 局域網(wǎng)中的主機(jī)第一次向外網(wǎng)發(fā)起數(shù)據(jù)請(qǐng)求時(shí),就會(huì)生成表中的映射關(guān)系。
- 比如在TCP建立連接時(shí),會(huì)建立對(duì)應(yīng)的映射關(guān)系,在TCP斷開(kāi)連接后,就會(huì)刪除對(duì)應(yīng)的映射關(guān)系。
在剛才的例子中,主機(jī)A第一次向服務(wù)器發(fā)起數(shù)據(jù)請(qǐng)求時(shí),路由器中就會(huì)建立以下映射關(guān)系。
但如果轉(zhuǎn)換表中維護(hù)的只是局域網(wǎng)中主機(jī)的私有IP,與其對(duì)應(yīng)訪問(wèn)的外網(wǎng)當(dāng)中的某個(gè)公網(wǎng)IP之間的映射關(guān)系,那么就會(huì)出現(xiàn)某些問(wèn)題。
比如:局域網(wǎng)中的主機(jī)A和主機(jī)B同時(shí)都在訪問(wèn)該服務(wù)器,那么此時(shí)轉(zhuǎn)換表中就會(huì)建立如下兩對(duì)映射關(guān)系:
此時(shí)這張轉(zhuǎn)換表只能保證從左到右的唯一性,而不能保證從右到左的唯一性,當(dāng)服務(wù)器發(fā)來(lái)響應(yīng)數(shù)據(jù)時(shí),該數(shù)據(jù)包中的目的IP地址都是路由器的WAN口IP,此時(shí)NAT路由器就無(wú)法判斷該數(shù)據(jù)包應(yīng)該轉(zhuǎn)發(fā)給主機(jī)A還是主機(jī)B,此時(shí)就需要用到NAPT技術(shù)。
4、NAPT技術(shù)
NAPT(Network Address Port Translation,網(wǎng)絡(luò)地址端口轉(zhuǎn)換),可以將多個(gè)內(nèi)部地址映射為一個(gè)合法公網(wǎng)地址。
因?yàn)槿绻钟蚓W(wǎng)中的多臺(tái)主機(jī)同時(shí)訪問(wèn)同一個(gè)外網(wǎng)服務(wù),當(dāng)路由器收到外網(wǎng)發(fā)來(lái)的響應(yīng)數(shù)據(jù)時(shí),路由器無(wú)法判斷該響應(yīng)數(shù)據(jù)應(yīng)該轉(zhuǎn)發(fā)給局域網(wǎng)中的哪臺(tái)主機(jī),因?yàn)樵摼钟蚓W(wǎng)中所有主機(jī)的數(shù)據(jù)包都由路由器代替發(fā)送了,因此發(fā)來(lái)的響應(yīng)數(shù)據(jù)包的目的IP地址都是路由器的WAN口IP地址。
-
于是NAPT在建立轉(zhuǎn)換表的映射關(guān)系時(shí),除了建立局域網(wǎng)中私有IP與其對(duì)應(yīng)訪問(wèn)的公網(wǎng)IP之間的映射關(guān)系外,還會(huì)加上一個(gè)由NAT路由器選定的端口號(hào)。
-
此時(shí)當(dāng)局域網(wǎng)中的多臺(tái)主機(jī)同時(shí)訪問(wèn)同一個(gè)外網(wǎng)服務(wù)時(shí),雖然外網(wǎng)發(fā)來(lái)的響應(yīng)數(shù)據(jù)的目的IP地址都是路由器的WAN口IP,但發(fā)給局域網(wǎng)中不同主機(jī)的響應(yīng)數(shù)據(jù)對(duì)應(yīng)的目的端口號(hào)是不同的,此時(shí)路由器就能通過(guò)IP+Port的方式來(lái)區(qū)分發(fā)給不同主機(jī)的數(shù)據(jù)包。
例如局域網(wǎng)中的主機(jī)A和主機(jī)B都在訪問(wèn)同一個(gè)服務(wù)器,并且它們?cè)L問(wèn)服務(wù)器時(shí)采用的端口號(hào)都是1025。
-
假設(shè)主機(jī)A發(fā)送的數(shù)據(jù)包先到達(dá)路由器,此時(shí)路由器將數(shù)據(jù)包的源IP地址替換成自己的WAN口IP地址,由于路由器用于訪問(wèn)該服務(wù)器的1025號(hào)端口沒(méi)有被使用,因此該數(shù)據(jù)包的源端口號(hào)可以不變。
-
當(dāng)主機(jī)B發(fā)來(lái)的數(shù)據(jù)包到達(dá)路由器時(shí),路由器同樣將數(shù)據(jù)包的源IP地址替換成自己的WAN口IP地址,但此時(shí)路由器用于訪問(wèn)該服務(wù)器的1025號(hào)端口已經(jīng)被主機(jī)A使用了,因此路由器會(huì)重新選定一個(gè)端口號(hào)對(duì)數(shù)據(jù)包的源端口號(hào)進(jìn)行替換。
此時(shí)轉(zhuǎn)換表中就會(huì)建立如下兩對(duì)映射關(guān)系:
此時(shí)這張轉(zhuǎn)換表既能保證從左到右的唯一性,也能保證從右到左的唯一性。
-
當(dāng)服務(wù)器發(fā)來(lái)的響應(yīng)數(shù)據(jù)到達(dá)路由器時(shí),雖然服務(wù)器發(fā)給主機(jī)A和主機(jī)B的數(shù)據(jù)包對(duì)應(yīng)的目的IP地址是一樣的。
-
但路由器是用自己的1025號(hào)端口代替主機(jī)A進(jìn)行數(shù)據(jù)請(qǐng)求的,而用的是1026號(hào)端口代替主機(jī)B進(jìn)行數(shù)據(jù)請(qǐng)求的。
-
因此現(xiàn)在路由器可以繼續(xù)根據(jù)數(shù)據(jù)包的源端口號(hào),來(lái)判斷應(yīng)該將該數(shù)據(jù)包轉(zhuǎn)發(fā)給主機(jī)A還是主機(jī)B,進(jìn)行對(duì)數(shù)據(jù)包中的目的IP地址和目的端口號(hào)進(jìn)行替換,然后轉(zhuǎn)發(fā)給局域網(wǎng)內(nèi)對(duì)應(yīng)的主機(jī)。
問(wèn):對(duì)于NAPT的轉(zhuǎn)換表維護(hù)目的IP和端口是否是多余的?
對(duì)與NAPT轉(zhuǎn)換表,如果我們將目的IP+port去掉,我們發(fā)現(xiàn)從內(nèi)網(wǎng)到外網(wǎng),從外網(wǎng)到內(nèi)網(wǎng)也是可以正常轉(zhuǎn)換的,但是我們的路由器還是維護(hù)了目的IP+port,這是因?yàn)?strong>維護(hù)目標(biāo)IP+port字段能夠保證我們內(nèi)網(wǎng)的安全性!
例如我們的主機(jī)A向服務(wù)器B發(fā)起了一個(gè)請(qǐng)求,構(gòu)建了上圖中的10.0.0.10:1025
與202.244.174.37.1025
映射關(guān)系,以后主機(jī)A與服務(wù)器就可以通過(guò)路由器進(jìn)行通信了。
但是此時(shí)有一個(gè)黑客知道了NATP轉(zhuǎn)換表中的信息,于是就可以用任意一臺(tái)主機(jī)向主機(jī)A所在的內(nèi)網(wǎng)的路由器的1025號(hào)端口發(fā)送數(shù)據(jù),于是路由器就會(huì)無(wú)腦的將數(shù)據(jù)轉(zhuǎn)給主機(jī)A,于是主機(jī)A就會(huì)收到奇怪的數(shù)據(jù),而有了目的IP + port,路由器就能夠判斷這個(gè)主機(jī)是不是已經(jīng)正常建立通信的主機(jī)。
5、重新理解路由器
路由器是工作在網(wǎng)絡(luò)層的一個(gè)設(shè)備,負(fù)載將數(shù)據(jù)包從一個(gè)網(wǎng)絡(luò)轉(zhuǎn)發(fā)到另一個(gè)網(wǎng)絡(luò),但不能狹義的認(rèn)為路由器只能工作在網(wǎng)絡(luò)層。
-
NAT路由器在進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)時(shí),不僅有能力替換數(shù)據(jù)包的源IP和目的IP地址,而且在必要的情況下還可能會(huì)替換數(shù)據(jù)包的源端口和目的端口號(hào),而端口號(hào)實(shí)際是傳輸層的概念。
-
為了對(duì)IP地址進(jìn)行動(dòng)態(tài)管理,大部分路由器都帶有DHCP功能,而DHCP實(shí)際是應(yīng)用層的一個(gè)協(xié)議。
因此現(xiàn)在的路由器其實(shí)并不僅僅提供網(wǎng)絡(luò)層相關(guān)的服務(wù),網(wǎng)絡(luò)協(xié)議棧中的各層路由器可能都有涉及。
6、NAT技術(shù)的缺陷
NAT技術(shù)進(jìn)行私有IP和公網(wǎng)之間的替換,主要就是依賴NAT路由器當(dāng)中維護(hù)的網(wǎng)絡(luò)地址轉(zhuǎn)換表,但這張轉(zhuǎn)換表也體現(xiàn)出了NAT的一些缺陷:
-
無(wú)法從NAT外部向內(nèi)部服務(wù)器建立連接,因?yàn)?NAPT 轉(zhuǎn)換表沒(méi)有轉(zhuǎn)換記錄。
-
轉(zhuǎn)換表的生成和銷毀都需要額外開(kāi)銷。
-
通信過(guò)程中一旦NAT設(shè)備異常,即使存在熱備,所有的TCP連接也都會(huì)斷開(kāi)。
NAT 穿透技術(shù)(了解)
NAT 穿越技術(shù)擁有這樣的功能,它能夠讓網(wǎng)絡(luò)應(yīng)用程序主動(dòng)發(fā)現(xiàn)自己位于 NAT 設(shè)備之后,并且會(huì)主動(dòng)獲得 NAT 設(shè)備的公有 IP,并為自己建立端口映射條目,注意這些都是 NAT設(shè)備后的應(yīng)用程序自動(dòng)完成的。
也就是說(shuō),在 NAT 穿透技術(shù)中,NAT設(shè)備后的應(yīng)用程序處于主動(dòng)地位,它已經(jīng)明確地知道 NAT 設(shè)備要修改它外發(fā)的數(shù)據(jù)包,于是它主動(dòng)配合 NAT 設(shè)備的操作,主動(dòng)地建立好映射,這樣就不像以前由 NAT 設(shè)備來(lái)建立映射了。
說(shuō)人話,就是客戶端主動(dòng)從 NAT 設(shè)備獲取公有 IP 地址,然后自己建立端口映射條目,然后用這個(gè)條目對(duì)外通信,就不需要 NAT 設(shè)備來(lái)進(jìn)行轉(zhuǎn)換了。
四、NAT和代理服務(wù)器
路由器往往都具備NAT設(shè)備的功能, 通過(guò)NAT設(shè)備進(jìn)行中轉(zhuǎn), 完成子網(wǎng)設(shè)備和其他子網(wǎng)設(shè)備的通信過(guò)程。
代理服務(wù)器看起來(lái)和NAT設(shè)備有一點(diǎn)像. 客戶端像代理服務(wù)器發(fā)送請(qǐng)求, 代理服務(wù)器將請(qǐng)求轉(zhuǎn)發(fā)給真正要請(qǐng)求的服務(wù)器; 服務(wù)器返回結(jié)果后, 代理服務(wù)器又把結(jié)果回傳給客戶端。
那么NAT和代理服務(wù)器的區(qū)別有哪些呢?
-
從應(yīng)用上講, NAT設(shè)備是網(wǎng)絡(luò)基礎(chǔ)設(shè)備之一, 解決的是IP不足的問(wèn)題. 代理服務(wù)器則是更貼近具體應(yīng)用, 比如通過(guò)代理服務(wù)器進(jìn)行翻墻, 另外像迅游這樣的加速器, 也是使用代理服務(wù)器。
-
從底層實(shí)現(xiàn)上講, NAT是工作在網(wǎng)絡(luò)層, 直接對(duì)IP地址進(jìn)行替換,代理服務(wù)器往往工作在應(yīng)用層。
-
從使用范圍上講, NAT一般在局域網(wǎng)的出口部署, 代理服務(wù)器可以在局域網(wǎng)做, 也可以在廣域網(wǎng)做, 也可以跨網(wǎng)。
-
從部署位置上看, NAT一般集成在防火墻, 路由器等硬件設(shè)備上, 代理服務(wù)器則是一個(gè)軟件程序, 需要部署在服務(wù)器上.
代理服務(wù)器是一種應(yīng)用比較廣的技術(shù):
- 翻墻: 廣域網(wǎng)中的代理.
- 負(fù)載均衡: 局域網(wǎng)中的代理.
代理服務(wù)器又分為正向代理和反向代理:
- 正向代理用于隱藏真實(shí)客戶端。
- 反向代理用于隱藏真實(shí)服務(wù)端。
- 兩者的區(qū)別在于代理的對(duì)象不一樣:正向代理代理的對(duì)象是客戶端,反向代理代理的對(duì)象是服務(wù)端。
1、正向代理
正向代理,是一個(gè)位于客戶端和目標(biāo)服務(wù)器之間的服務(wù)器,客戶端并不直接訪問(wèn)目標(biāo)服務(wù)器,而是先訪問(wèn)代理服務(wù)器,由代理服務(wù)器代替客戶端去訪問(wèn)對(duì)應(yīng)的目標(biāo)服務(wù)器,并將目標(biāo)服務(wù)器的響應(yīng)結(jié)果返回給客戶端。
比如公司內(nèi)部一般都會(huì)有自己的服務(wù)器,當(dāng)我們使用公司內(nèi)網(wǎng)上網(wǎng)時(shí):
- 我們對(duì)外網(wǎng)發(fā)起的數(shù)據(jù)請(qǐng)求,首先會(huì)轉(zhuǎn)發(fā)到公司的這臺(tái)服務(wù)器上,然后由公司的這臺(tái)服務(wù)器代替你對(duì)外網(wǎng)進(jìn)行訪問(wèn)。
- 當(dāng)公司的服務(wù)器收到對(duì)應(yīng)外網(wǎng)的響應(yīng)數(shù)據(jù)后,再由公司的這臺(tái)服務(wù)器將數(shù)據(jù)轉(zhuǎn)發(fā)給你。
正向代理的好處:
- 正向代理最大的一個(gè)好處就是可以加速資源訪問(wèn),比如公司中大量員工都要訪問(wèn)外網(wǎng)的同一個(gè)資源,那么正向代理服務(wù)器就可以將對(duì)應(yīng)的資源緩存到本地,此時(shí)當(dāng)其他人要訪問(wèn)該資源時(shí),直接在正向代理服務(wù)器就可以獲取,而不需要再次進(jìn)行外網(wǎng)訪問(wèn)。
2、反向代理
反向代理,也是一個(gè)位于客戶端和目標(biāo)服務(wù)器之間的服務(wù)器,客戶端直接向反向代理服務(wù)器發(fā)起數(shù)據(jù)請(qǐng)求,然后再由反向代理服務(wù)器將客戶端的數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)給真正的目標(biāo)服務(wù)器進(jìn)行處理,數(shù)據(jù)處理完畢后反向代理服務(wù)器再將數(shù)據(jù)結(jié)果返回給客戶端,對(duì)于用戶而言反向代理服務(wù)器就相當(dāng)于目標(biāo)服務(wù)器。
比如域名www.baidu.com
對(duì)應(yīng)的服務(wù)器實(shí)際就是一個(gè)反向代理服務(wù)器。
百度內(nèi)部實(shí)際并不是只有一臺(tái)服務(wù)器,但不同地區(qū)的人們都可以通過(guò)訪問(wèn)www.baidu.com
享受到百度提供的服務(wù),實(shí)際我們?cè)L問(wèn)的就是百度的反向代理服務(wù)器。
當(dāng)這臺(tái)反向代理服務(wù)器收到客戶端的數(shù)據(jù)請(qǐng)求后,就會(huì)將我們的數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)給百度內(nèi)部的某臺(tái)服務(wù)器進(jìn)行數(shù)據(jù)處理,然后再將數(shù)據(jù)處理的結(jié)果返回給客戶端。
反向代理的好處:
-
反向代理可以起到負(fù)載均衡的作用。
比如不設(shè)置反向代理服務(wù)器,只使用一臺(tái)服務(wù)器,那么當(dāng)用戶量很大時(shí),單個(gè)百度服務(wù)器的扛不住這么大的流量的,有了反向代理以后,那么用戶在訪問(wèn)百度時(shí),我們就能夠通過(guò)某些方法讓用戶的數(shù)據(jù)請(qǐng)求較為平均的落到每臺(tái)服務(wù)器上,緩解服務(wù)器的壓力。 -
反向代理還能起到安全防護(hù)的作用。有了反向代理服務(wù)器后,我們不需要直接將提供服務(wù)的服務(wù)器對(duì)應(yīng)的信息暴露出去,此外當(dāng)由非法請(qǐng)求發(fā)送到反向代理服務(wù)器時(shí),反向代理服務(wù)器就相當(dāng)于一層軟件屏障,可以在反向代理服務(wù)器當(dāng)中部署一些防護(hù)措施,讓這些非法請(qǐng)求在反向代理服務(wù)器這里就被過(guò)濾掉,而不會(huì)影響內(nèi)部實(shí)際提供服務(wù)的服務(wù)器。
需要注意的是,代理服務(wù)器的主要工作只是對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā),因此代理服務(wù)器處理數(shù)據(jù)的壓力不會(huì)特別大,并且代理服務(wù)器也可以有多個(gè),因此不必?fù)?dān)心代理服務(wù)器過(guò)載的情況。
關(guān)于負(fù)載均衡的一個(gè)現(xiàn)象:
不知你是否注意過(guò):當(dāng)我們我們每次使用ping
命令訪問(wèn)百度時(shí)可能會(huì)得到不同的IP,這是為什么?
答案就是負(fù)載均衡,我們的請(qǐng)求被分配到了同一個(gè)服務(wù)的不同的服務(wù)器上面。