網路程式設計(六)IP協議相關技術
highlight: a11y-dark theme: devui-blue
一、DNS
由於IP地址不便於記憶,所以TCP/IP世界中從一開始就已經有了一個叫做主機識別碼的東西。這種識別方式是指為每臺計算機賦以唯一的主機名,在進行網路通訊時可以直接使用主機名稱而無需輸入一大長串的IP地址。並且此時,系統必須自動將主機名轉換為具體的IP地址。為了實現這樣的功能,主機往往會利用一個叫做hosts的資料庫檔案。
DNS系統:可以有效管理主機名和IP地址之間對應關係的系統。
在這個系統中主機的管理機構可以對資料進行變更和設定。也就是說,它可以維護一個用來表示組織內部主機名和IP地址之間對應關係的資料庫。
域名
域名是指為了識別主機名稱和組織機構名稱的一種具有分層的名稱。
在使用域名時,可以在每個主機名後面追加上組織機構的域名,有域名的組織機構可以設定自己的子網,此時的子域名要介於主機名和域名之間。
舉例:倉敷藝術科學大學的域名如下:
text
kusa.ac.jp
有pepper、piyo、kinoko等主機時,它們完整的帶域名的主機名將呈如下形式:
text
pepper.kusa.ac.jp
piyo.kusa.ac.jp
kinoko.kusa.ac.jp
域名分層如下圖所示:
如上圖,是個樹形結構,頂點是根(root),頂點的下一層叫做第1層域名(頂級域名(TLD:Top Level Domain)) ,在jp的域名下,還可以有眾多種類的域名。
域名伺服器
域名伺服器是指管理域名的主機和相應的軟體,它可以管理所在分層的域的相關資訊,其所管理的分層叫做ZONE。
根部所設定的DNS叫做根域名伺服器。它對DNS的檢索資料功能起著至關重要的作用。根域名伺服器中註冊著根以下第1層域名伺服器的IP地址。類似地,在根域名伺服器的下一層域名伺服器中註冊了再往下一層域名伺服器的IP地址。
解析器
進行DNS查詢的主機和軟體叫做DNS解析器。使用者所使用的工作站或個人電腦都屬於解析器。一個解析器至少要註冊一個以上域名伺服器的IP地址。通常,它至少包括組織內部的域名伺服器的IP地址。
DNS查詢
二、ARP
只要確定了IP地址,就可以向這個目標地址傳送IP資料報。然而,在底層資料鏈路層,進行實際通訊時卻有必要了解每個IP地址所對應的MAC地址。
ARP(Address Resolution Protocol) 是一種解決地址問題的協議。以目標IP地址為線索,用來定位下一個應該接收資料分包的網路裝置對應的MAC地址。如果目標主機不在同一個鏈路上時,可以通過ARP查詢下一跳路由器的MAC地址。
不過ARP只適用於IPv4,不能用於IPv6。IPv6中可以用ICMPv6替代ARP傳送鄰居探索訊息。
原理
主機A為了獲得主機B的MAC地址,起初要通過廣播傳送一個ARP請求包。這個包中包含了想要了解其MAC地址的主機IP地址。由於廣播的包可以被同一個鏈路上所有的主機或路由器接收,因此ARP的請求包也就會被這同一個鏈路上所有的主機和路由器進行解析。如果ARP請求包中的目標IP地址與自己的IP地址一致,那麼這個節點就將自己的MAC地址塞入ARP響應包返回給主機A。
缺點:如果每傳送一個IP資料報都要進行一次ARP請求以此確定MAC地址,那將會造成不必要的網路流量。
解決方案 :通常的做法是把獲取到的MAC地址快取一段時間。
IP地址和MAC地址是否缺一不可?
答案是肯定的。
在乙太網上傳送IP包時,“下次要經由哪個路由器傳送資料報”這一資訊非常重要。而這裡的“下一個路由器”就是相應的MAC地址。沒有MAC地址,則需要進行對MAC地址廣播,會造成資料包重複傳送。
IP可以通過路由控制快速的篩選,如果沒有IP,則需要在全世界查詢MAC地址。
RARP
RARP(Reverse Address Resolution Protocol)是將ARP反過來,從MAC地址定位IP地址的一種協議。例如將印表機伺服器等小型嵌入式裝置接入到網路時就經常會用得到。
對於使用嵌入式裝置時,會遇到沒有任何輸入介面或無法通過DHCP動態獲取IP地址的情況。在類似情況下,就可以使用RARP。
代理ARP
通常ARP包會被路由器隔離,但是採用代理ARP(Proxy ARP)的路由器可以將ARP請求轉發給鄰近的網段。由此,兩個以上網段的節點之間可以像在同一個網段中一樣進行通訊。
在目前的TCP/IP網路當中,一般情況下用路由器連線多個網路時,會在每個網段上定義各自的子網,從而進行路由控制。然而,對於那些不支援設定子網掩碼的老裝置來說,不使用代理ARP,有時就無法更好地使用網路。
三、ICMP
架構IP網路時需要特別注意兩點:確認網路是否正常工作,以及遇到異常時進行問題診斷。
ICMP正是提供這類功能的一種協議。
ICMP的主要功能包括,確認IP包是否成功送達目標地址,通知在傳送過程當中IP包被廢棄的具體原因,改善網路設定等。
ICMP的訊息大致可以分為兩類:一類是通知出錯原因的錯誤訊息,另一類是用於診斷的查詢訊息。
四、DHCP
為了實現自動設定IP地址、統一管理IP地址分配,就產生了DHCP(Dynamic Host Configuration Protocol)協議。有了DHCP,計算機只要連線到網路,就可以進行TCP/IP通訊。也就是說,DHCP讓即插即用變得可能。而DHCP不僅在IPv4中,在IPv6中也可以使用。
五、NAT
NAT(Network Address Translator)是用於在本地網路中使用私有地址,在連線網際網路時轉而使用全域性IP地址的技術。除轉換IP地址外,還出現了可以轉換TCP、UDP埠號的NAPT(Network Address PortsTranslator)技術,由此可以實現用一個全域性IP地址與多個主機的通訊 (通常人們提到的NAT,多半是指NAPT。NAPT也叫做IP偽裝或MultiNAT。) 。
NAT(NAPT)實際上是為正在面臨地址枯竭的IPv4而開發的技術。不過,在IPv6中為了提高網路安全也在使用NAT,在IPv4和IPv6之間的相互通訊當中常常使用NAT-PT。
六、IP隧道
網路A、B使用IPv6,如果處於中間位置的網路C支援使用IPv4的話,網路A與網路B之間將無法直接進行通訊。為了讓它們之間正常通訊,這時必須得采用IP隧道的功能。
IP隧道中可以將那些從網路A發過來的IPv6的包統和為一個數據,再為之追加一個IPv4的首部以後轉發給網路C。
一般情況下,緊接著IP首部的是TCP或UDP的首部。然而,現在的應用當中“IP首部的後面還是IP首部”或者“IP首部的後面是IPv6的首部”等情況與日俱增。這種在網路層的首部後面繼續追加網路層首部的通訊方法就叫做“IP隧道”。
文章內容摘自:圖解TCP/IP(第五版)
- 【一鍵生成程式碼】從vue到java再到groovy
- 多年以後【PageHelper】又深深的給我上了一課!!
- 入職東北國企做程式設計師一個月,感受如何?
- 網路程式設計(六)IP協議相關技術
- java效能優化--四種常見垃圾收集器描述(提供詳細介紹文章)
- java效能優化--分代回收入門
- 網路程式設計(五)IP協議-下
- 一文探索【skywalking】如何通過agent實現啟動流程
- 一個人一雙手寫一個國產stackoverflow-【BSolver】
- Fastjson2你開始使用了嗎?來看看原始碼解析
- Java效能優化--編譯閾值優化
- 【Spring Cloud Tencent】開源了,倔強的我先去嚐嚐鮮!!
- java效能優化--編譯器優化進階(編譯執行緒、內聯、逃逸分析)
- java效能優化--jvm中哪些方法被編譯了?
- java效能優化--程式碼快取優化
- java效能優化--編譯器版本與平臺對應關係
- 【2022】努力生活,不負他人,不負自己
- 年輕人瘋狂逃離的東方小巴黎|出路在哪裡
- java效能分析--JDK自帶監控工具值jcmd
- 炎炎夏日去哪玩,自制天氣預報幫你選!