一、IP協議
1.1 背景
網絡層一般有兩種服務:
- 一種是面向連接的虛電路服務,能夠保證可靠通信,建立虛電路連接,然後通過這個連接發送分組,完了後釋放虛電路。
- 另一種是無連接的數據包服務,走什麼路經都隨便,但是為了到達目的地必須攜帶目的主機的地址,雖然如此,發送的分組還是可能誤碼、丟失、重複或者亂序。
因為第二種做法不用提供可靠傳輸服務,網絡中的路由器就比較價格低,而且易於維護,因特網採用的就是這種服務,它採用的就是IP協議。
這種服務的好處是節省成本,那麼複雜的網絡處理功能都交給了更上一層的運輸層,他們的位置在各個主機,是處於整個互聯網的邊緣,那麼中間的因特網核心就只用完成簡單的分組交換功能。IP協議之上,要保證傳輸可靠,就有了TCP協議。
1.2 IP協議
IP協議(Internet Protocol)直譯網際協議。對上是傳輸層,對下是數據鏈路層。IP協議就是給因特網上的每一個主機/路由器的接口分配全世界範圍內唯一的標識符,就是地址。
這裡需要區別MAC地址和IP地地址。關於MAC地址,也就是媒體介入控制地址,他也是唯一的,但是他是針對於設備-設備,而異構網絡很複雜,IP協議是解決網絡和網絡之間的通信,加上小的網絡內部劃分可能就沒必要更多的協議來通信,就更加方便。
目前IP協議的地址有IPv4和IPv6兩個版本,在2011年,IPv4地址已經分配完畢了。IPv4的地址編址方法經歷了三個階段,分類編址、劃分子網、無分類編址。
1.2.1 分類編址
分了ABCDE,只有ABC給網絡中的各設備接口用,D和E是保留不往外分配的。基本是都是前幾位網絡號、後面分配,然後就有很多的不同IP地址的組合可以用。
- A:8位網絡號+24主機號,網絡號首位固定為0
- B:16位網絡號+16位主機號,網絡號前兩位固定10
- C:24位網絡號+8位主機號,網絡號前兩位篤定110
A類指派範圍:1.0.0.0到126.0.0.0
B類指派範圍:128.0.0.0到191.255.0.0
C類指派範圍:192.0.0.0到223.255.255.0
1.2.2 劃分子網
引入子網掩碼,可以表明分類的IP地址有哪幾個作為了子網號,這樣本來後面全都是IP的號,就可以繼續利用子網掩碼再進行細分。子網掩碼用連續的1來對應網絡號和子網號,0對應主機號,然後子網掩碼和IP地址相與操作就可以得到這個IPv4的地址所在的子網的網絡地址。
1.2.3 無分類編址
C類空間太小,沒有得到充分利用,後來又提出了無分類編址(當然也提出了IPv6)來解決問題。無分類編址採用:
網絡地址 + ” / ” + 網絡前綴數量
的格式,比如”128.14.35.7 / 20“
就代表,這個IP地址,前面20位都是網絡號,剩下12位是主機號,這樣的話就能把整個IP地址分的更多,而不是分各種類別,各個塊里限制的比較死。
二、IP數據報首部格式
2.1 IP數據報首部字段

和其他協議的報文首部格式一樣,IP協議的功能也在這裡體現。
- 版本:表示Ip協議的版本,通信雙方必須一致;
- 首部長度:表示這個數據報首部的長度,顯然範圍就是5-15(以8字節為單位,化成比特*8)
- 區分服務:一半不用;
- 總長度:IP數據報整體長度(最大2^16-1);
- 標識、標誌、片偏移:這三個就是用來將IP數據報分片用的,因為向下層的時候可能太長,下層的傳輸幀受到MTU最大傳輸單元限制,就是會把IP數據報分片,那麼就會查看這三個字段,表示分片的情況;標識:同一個IP數據報各分片的標識一樣;標誌:標誌允不允許分片、後面還有沒有分片;片偏移:分片數據報的數據載荷部分偏移了在原數據報位置有多少單位(8字節為單位,必須整數)
- 生存時間:TTL,以前表示多少秒、現在表示多少”跳“;
- 協議:常用值對應一個數字,比如ICMP對應1;
- 首部檢驗和:檢驗差錯的;
- 源IP地址;
- 目的IP地址;
- 可選字段:很少使用;
- 填充:因為要是8的整數倍,不夠就填。
2.2 ICMP協議
網際控制報文協議(Internet Control Message Protocol)
這個協議是為了更有效地轉發IP數據報,提高交付成功的機會。主機或者路由器使用ICMP協議發送差錯報文和詢問報文,ICMP報文被封裝在IP數據報里發送。
差錯報文分為五種:1.終點不可達;2.源點抑制;3.時間超過;4.參數問題;5.改變路由。(都是目的主機或路由器反饋給源主機或路由器的)
詢問報文有兩種:1.回送請求和回答;2.時間戳請求和回答。(都是源主機或者路由器向目的主機或路由器的)
2.3 ICMP協議應用
分組網間探測(Packet InterNet Groper)也就是,常說的PING命令。這個命令沒有經過運輸層的TCP或者UDP,直接使用了網際層的ICMP,來發送請求和回答報文。用來測試主機或者路由器的連通性。
跟蹤路由TraceRoute命令,比如windows的tracert命令。這個命令也是應用層直接使用了網際層的ICMP協議(Unix系統並是使用了UDP協議),發送請求和回答報文以及差錯報告報文,用來測試IP數據報從源主機到目的主機要經過哪些路由器。
2.4 其他
關於IP數據報的轉發,主要是設計到路由器的一些路由選擇協議、ARP(Address Resolution Protocol)地址解析協議,根據IP獲取MAC地址的過程。其中直接交付、間接交付的區別就是有沒有經過路由器轉發,路由器可以隔離衝突域、廣播域等等。
三、NAT網絡地址轉換
NAT英文全稱是“Network Address Translation”,中文意思是“網絡地址轉換”,是一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術。NAT 可以讓那些使用私有地址的內部網絡連接到Internet或其它IP網絡上。NAT路由器在將內部網絡的數據包發送到公用網絡時,在IP包的報頭把私有地址轉換成合法的IP地址。
ipv4本來都要用光了,但是有了NAT,讓ipv4又挺了20年。
3.1 原理
RFC1918規定了三個保留地址段落:10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255。這三個範圍分別處於A,B,C類的地址段,不向特定的用戶分配。
這些地址可以在任何組織或企業內部使用,和其他Internet地址的區別就是,僅能在內部使用,不能作為全球路由地址。對於一個封閉的組織,如果其網絡不連接到Internet,就可以使用這些地址,而不用申請。
對於有Internet訪問需求、內部又使用私有地址的網絡,就要在組織的出口位置部署NAT網關,在報文離開私網進入Internet時,將源IP替換為公網地址,通常是出口設備的接口地址。依據這種模型,NAT網關夾在中間做一個轉換,數量龐大的內網主機就不再需要公有IP地址了。
一般使用私網ip作為局域網內部的主機標識,使用公網ip作為互聯網上通信的標識,在整個NAT的轉換中,最關鍵的流程有以下幾點:
- 網絡被分為私網和公網兩個部分,NAT網關設置在私網到公網的路由出口位置,雙向流量必須都要經過NAT網關
- 網絡訪問只能先由私網側發起,公網無法主動訪問私網主機;
- NAT網關在兩個訪問方向上完成兩次地址的轉換或翻譯,出方向做源信息替換,入方向做目的信息替換;
- NAT網關的存在對通信雙方是保持透明的;
- NAT網關為了實現雙向翻譯的功能,需要維護一張關聯表,把會話的信息保存下來。
3.2 靜態NAT
如果一個內部主機唯一佔用一個公網IP,這種方式被稱為一對一模型。此種方式下,轉換上層協議就是不必要的,因為一個公網IP就能唯一對應一個內部主機。
顯然,這種方式對節約公網IP沒有太大意義,主要是為了實現一些特殊的組網需求。比如用戶希望隱藏內部主機的真實IP,或者實現兩個IP地址重疊網絡的通信。
3.3 動態NAT
它能夠將未註冊的IP地址映射到註冊IP地址池中的一個地址。
不像使用靜態NAT那樣,你無需靜態地配置路由器,使其將每個內部地址映射到一個外部地址,但必須有足夠的公有因特網IP地址,讓連接到因特網的主機都能夠同時發送和接收分組
3.4 NAT重載
這是最常用的NAT類型。NAT重載也是動態NAT,它利用源端口將多個私網ip地址映射到一個公網ip地址,它也被稱為網絡地址端口轉換NAPT(Network Address Port Translation)(Port-Level NAT)(多對一)。
通過使用PAT(NAT重載),只需使用一個公網ip地址,就可將數千名用戶連接到因特網。其核心之處就在於利用端口號實現公網和私網的轉換。
面對私網內部數量龐大的主機,如果NAT只進行IP地址的簡單替換,就會產生一個問題:當有多個內部主機去訪問同一個服務器時,從返回的信息不足以區分響應應該轉發到哪個內部主機。
此時,需要NAT設備根據傳輸層信息或其他上層協議去區分不同的會話,並且可能要對上層協議的標識進行轉換,比如TCP或UDP端口號。
這樣NAT網關就可以將不同的內部連接訪問映射到同一公網IP的不同傳輸層端口,通過這種方式實現公網IP的復用和解復用。
這種方式也被稱為端口轉換PAT、NAPT或IP偽裝,但更多時候直接被稱為NAT,因為它是最典型的一種應用模式。
也就是說,我們利用端口號的唯一性實現了公網ip轉換為私網ip的這一步。PAT(NAT重載)能夠使用傳輸層端口號來標識主機,因此,從理論上說,最多可讓大約65000台主機共用一個公有IP地址。
3.5 NAT優缺點
優點:
最大優點就是節省大量的IP資源
缺點:
NAT最大的弊端,破壞了IP端到端通信的能力,因此無法進行端到端的ip跟蹤。
同時,NAT實現了對UDP或TCP報文頭中的的IP地址及端口轉換功能,但有些應用層的協議比如FTP載荷中帶有地址或者端口信息,這些內容不能被NAT進行有效的轉換,就可能導致問題。
四、DNS
4.1 介紹
DNS(Domain Name System)域名系統
我們知道計算機之間的通信,其實都是基於IP地址的,可是我們訪問的時候往往使用的網址髕骨是ip地址,這是因為IP地址太難記了啊!
那麼輸入網址如何訪問IP,其實就是DNS服務器在幫助我們做地址解析。
因特網採用的是層次結構命名樹作為域名,各層分量用點隔開,總共組成一個域名。格式如下:
xxx . 三級域名 . 二級域名 . 頂級域名
各級的域名是由上一級管理機構管理,頂級域名則由一個機構:因特網名稱與數字地址分配機構ICANN管理。
- 國家頂級域名例如 cn 中國,us 美國,通用頂級域名例如com公司企業、net網絡服務機構、org非營利性組織;
- 二級域名例如edu教育機構,行政區劃分域名;
- 再往下都是自由發揮,因特網沒有做規定。
4.2 域名服務器解析域名的過程
用來解析域名的域名服務器也可以劃分為四種類型:
- 根域名服務器;
- 頂級域名服務器;
- 權限域名服務器;
- 本地域名服務器。
本來每次訪問一個域名,都需要依次查詢,但是為了效率,利用了緩存來解決這個問題, 瀏覽器、操作系統、本地DNS、根域名服務器,它們都會對DNS結果做一定程度的緩存。所以實際上的過程並不是直接那些服務器工作的。
比如:如果我現在要訪問 www.baidu.com ,那麼過程是這樣的:
- 瀏覽器從瀏覽器的DNS緩存中檢查是否有這個網址的映射關係,如果有,就返回IP,完成域名解析,沒有則轉向2;
- 操作系統會先檢查自己本地的hosts文件是否有這個網址的映射關係,如果有,就返回IP,完成域名解析,沒有則轉向3;
- 電腦就要向本地DNS服務器發起請求查詢www.baidu.com這個域名,如果緩存中有的話直接返回,沒有則轉向4;
- 本地DNS服務器,拿出一個根DNS服務器的地址,然後向其中一台發起請求;
- 根DNS服務器拿到請求,查出一個IP,也就是com對應的服務器的IP,返回給本地DNS服務器;
- 本地DNS服務器根據返回的IP向其發起請求;
- com的服務器拿到請求,查出一個IP,也就是baidu.com對應的服務器的IP,返回給本地DNS服務器;
- 本地DNS服務器根據返回的IP向其發起請求;
- baidu.com的服務器拿到請求,查出www.baidu.com的IP地址,返回給本地DNS服務器;
- 本地DNS服務器給客戶端,並進行緩存,客戶端就可以直接訪問了。
其中,顯然1、2、3,都是緩存直接優先查找,交給下一級操作,找到了就直接返回,主機到本地域名服務器的查詢過程,採用的是遞歸查詢;
4 5,6 7,8 9是三個來回過程,本地向不同級別的其他服務器查找的過程,都是本地服務器發出的請求,是迭代查詢。
Windows的命令:
ipconfig/displaydns -查看被緩存的域名解析
ipconfig/flushdns -清空DNS緩存
問題:根服務器在哪裡?
按照百度百科的說法是原有的13台加上為ipv6新建的25台,在世界各地選址的。
4.3 DNS 劫持
顯然,域名和IP的對應過程是一個DNS解析過程,那麼解析的服務器本人是可能被綁架的。
攻擊者劫持了DNS服務器,通過某些手段取得某域名的解析記錄控制權,進而修改此域名的解析結果,導致用戶對該域名地址進行訪問的時候,由原來的IP地址轉入到修改後的IP地址。結果就是讓正確的網址不能解析或者是被解析到另一個網址的IP,實現獲取用戶資料或者破壞原有網址正常服務的目的。
4.4 DNS 污染
又稱域名服務器緩存投毒,是指一些刻意製造或無意中製造出來的域名服務器數據包,把域名指往不正確的IP地址。它和DNS劫持的不同之處,在於污染針對的是DNS緩存,是在查詢信息到達目標DNS服務器前,經過的節點上做手腳,也就是說,這個假的數據包並不是在網絡數據包經過的路由器上,而是在其旁路產生的,因為是UDP協議,最快返回的會被認為是答案,那麼最後會先返回一個錯誤答案。
需要說明的是,傳統來理解,這個查詢過程需要快速,並且可能要訪問很多個服務器去查詢,所以是採用UDP協議進行傳輸的,比TCP快。
但也不一定,比如報文長度和DNS污染各種各樣的攻擊出現,UDP的不可靠因素太大,所以加上了TLS版本(像https一樣),所以其實是基於TCP協議了。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/229587.html