计算机网络 | IP协议相关技术与网络总结 :DNS、ICMP、DHCP、NAT/NAPT、通信流程
IP協議相關技術與網絡總結
- DNS
- DNS與域名
- 域名服務器
- 域名的解析流程
- ICMP
- ping
- NAT/NAPT
- NAT
- NAPT
- NAT的缺陷
- 代理服務
- DHCP
- 通信流程
- 瀏覽器中輸入url后,發生的事情
- 通過QQ進行發送一條消息時,發生的事情
- 當內網設備與外網通信時,發生的事情
DNS
DNS與域名
在我們訪問某個網站的時候,使用的都不是IP地址,而是使用由符號和字母構成的一段字符串。例如www.csdn.net。并且我們在TCP/IP通信的時候,也是使用的是域名,而非繁瑣難記的點分十進制IP地址。但是按照前面的協議格式所描述的數據報中,并沒有域名這一說,使用的都是IP地址,那么是如何通過域名來獲取IP地址呢?這便是借助到了DNS技術。
DNS:域名系統,用于存儲IP地址與域名的映射關系,并且提供域名解析,通過域名來獲取服務器IP地址的服務。
域名:服務器地址的別名,便于我們記憶,最終通過域名訪問服務器的時候還是通過解析獲取IP地址來訪問服務器的。
這里我來畫圖來描述一下具體的轉換流程
- DNS是應用層協議
- DNS底層使用UDP進行解析
- 瀏覽器會緩存DNS結果
域名服務器
上面提到了有一個叫做hosts的文件記錄了域名以及ip地址的映射關系,而存儲這些映射關系的則是域名服務器。
首先產生的是根域名服務器,根域名服務器是最高級域名服務器,但是為了分攤訪問壓力進行容災處理全世界一共有13臺根域名服務器,分布在世界各地。
緊接著則是頂級域名服務器,這些服務器大多以所屬的國家和所屬組織的命名。例如代表中國的cn,代表政府的gov等。例如**.com/.org/.gov/.edu/.cn/.net等。
在緊接著,就是二級域名服務器,這類服務器往往是某一企業或者服務商所管理。例如.csdn.net/.qq.com/.baidu.com**等等
這些服務器還能再繼續往下授權,可以授權出三級域名服務器,如百度知道的域名:zhidao.baidu.com。
例如百度知道
通常情況下,當我們要訪問某個域名時,會按照域名服務器的等級一層一層向下查詢。
域名的解析流程
上面說了那么多,當我們具體輸入一個域名的時候,是如何解析的呢?
此時有兩種查詢方法,遞歸查詢和迭代查詢
遞歸查詢:逐層深入,從根域名服務器查找,如果沒有,則繼續從根域名服務器向頂級服務器開始一級一級向下查找
找到則返回,找不到則逐級向下查找。
迭代查找:逐個訪問各級域名服務器
首先查找根域名服務器,如果沒有則繼續由本地域名服務器服務器向頂級域名服務器發起查找,其此類推
ICMP
ICMP協議是一個 網絡層協議 。
一個新搭建好的網絡, 往往需要先進行一個簡單的測試, 來驗證網絡是否暢通; 但是IP協議并不提供可靠傳輸. 如果丟包了, IP協議并不能通知傳輸層是否丟包以及丟包的原因,所以此時就需要用到ICMP來進行網絡診斷。
ICMP的消息一般分為兩類:一類是通知出錯原因,一類是用于診斷查詢。
- 確認IP包是否成功到達目標地址.
- 通知在發送過程中IP包被丟棄的原因.
- ICMP也是基于IP協議工作的. 但是它并不是傳輸層的功能,因此人們仍然把它歸結為網絡層協議;
- ICMP只能搭配IPv4使用. 如果是IPv6的情況下, 需要是用ICMPv6;
ping
通常我們想測試網絡連通性時所使用的ping命令,就是基于ICMP協議。
- 注意, 此處 ping 的是域名, 而不是url! 一個域名可以通過DNS解析成IP地址.
- ping命令不光能驗證網絡的連通性, 同時也會統計響應時間和TTL(IP包中的Time To Live, 生存周期).
- ping命令會先發送一個 ICMP Echo Request給對端;
- 對端接收到之后, 會返回一個ICMP Echo Reply;
而網上常見的一個問題,ping命令屬于什么端口?這個問題其實就是一個陷阱,因為ping基于ICMP協議,而ICMP又處于網絡層,網絡層并不關注端口號這一信息,端口號是屬于傳輸層的內容。
NAT/NAPT
NAT
NAT即網絡地址轉換技術。在前面IP協議那一章節曾經說過,我們通常使用的192.168.x.x都是私網地址,這些地址只能讓我們私網中進行通信,無法與公網的IP地址進行通信。所以此時就需要用到NAT技術。
如果要與外部通信,就需要使用NAT技術,將私網IP轉換成一個統一的公網IP(防止與外部地址沖突,主要用于節省IP地址),與外界通信。
從下面的圖可以看到,NAT服務通常部署在網關設備上,工作在網絡層(進行替換IP首部中的地址),然后通過網關設備進行數據轉發。
- NAT路由器將源地址從10.0.0.10替換成全局的IP 202.244.174.37;
- NAT路由器收到外部的數據時, 又會把目標IP從202.244.174.37替換回10.0.0.10;
- 在NAT路由器內部, 有一張自動生成的, 用于地址轉換的表;
- 當 10.0.0.10 第一次向 163.221.120.9 發送數據時就會生成表中的映射關系;
NAPT
還有個問題,如果私網中有多個主機同時訪問同一個外網的服務器,并且服務器返回的數據中,目的的IP地址都是相同的,因為都是通過NAT映射的同一個公網IP。那么此時,NAT路由器如何判定要把數據轉發給哪一個數據呢?
這時就又引入了NAPT技術,使用IP地址加端口號來解決這個問題。
從下圖看,發送時,通過NAPT技術,將不同主機的發送端口號進行處理,使得發送的時候的時候雖然用的是同一個IP地址,但是端口號不同,并且將這些映射關系存于轉換表中,等數據發送回來時,在轉發給對應的主機。
這種關聯關系也是由NAT路由器自動維護的. 例如在TCP的情況下, 建立連接時, 就會生成這個表項; 在斷開連接后, 就會刪除這個表項
NAT的缺陷
因為NAT的轉換完全依賴這個轉換表,所以有著很多限制。
- 無法從NAT外部向內部服務器建立連接;
- 裝換表的生成和銷毀都需要額外開銷;
- 通信過程中一旦NAT設備異常, 即使存在熱備, 所有的TCP連接也都會斷開
代理服務
想必這個詞大家一定非常熟悉,在我們訪問一些網站,或者玩游戲的時候,通常都會使用加速器和代理服務,使網絡更加流暢,那么他是如何做到的呢?
其實代理服務器就是個人網絡與互聯網服務商之間的中間代理機構。
打個比方,比如我們直接訪問服務器,就相當于我們直接去生產廠家買東西,此時可能因為路途遙遠,或者手續繁瑣導致時間會很長。而通過代理服務器請求服務,就相當于我們在代銷商這里買東西,他把貨從遙遠的地方進過來,手續他也處理好了,我們只需要付錢拿貨就行。
例如我們訪問一些國外的網站時,直接訪問是不行的,而通過代理服務器請求服務,讓他來獲取數據,再講數據轉發給我們,此時我們就也能獲取到了這個網站的數據的數據。
當使用代理服務器訪問同一個目標服務器的人多了之后,為了提高效率,不用每次都去轉發來獲取數據,代理服務器可能會提前將目標服務器的內容緩存下來,有人訪問時直接將緩存的數據發送回去,這就是反向代理的技術,而前面所說的轉發的那種是正向代理。
需要注意的是,這里的代理服務與NAT服務是完全不同的東西,雖然看上去很像。
代理服務是一個應用層服務,可以部署在任意設備上,工作在應用層,我們個人向代理服務器發起請求,然后他再去訪問目標服務器。
而NAT服務是一個網絡層服務,部署在網關設備上,工作在網絡層,我們請求的是目標服務器
- 從應用上講, NAT設備是網絡基礎設備之一, 解決的是IP不足的問題. 代理服務器則是更貼近具體應用, 比 如通過代理服務器進行外網訪問, 另外像迅游這樣的加速器, 也是使用代理服務器.
- 從底層實現上講, NAT是工作在網絡層, 直接對IP地址進行替換. 代理服務器往往工作在應用層.
- 從使用范圍上講, NAT一般在局域網的出口部署, 代理服務器可以在局域網做, 也可以在廣域網做, 也可以 跨網
- 從部署位置上看, NAT一般集成在防火墻, 路由器等硬件設備上, 代理服務器則是一個軟件程序, 需要部署 在服務器上
DHCP
如果每到一個新地方,每連接一臺新設備,都需要設置一次IP地址,這無疑是一件非常麻煩的事情。
所以為了實現自動設置IP地址,統一管理IP地址分配,就產生了DHCP
當主機連接到網關設備時,就會廣播DHCP請求,獲取到網關的IP地址,以及DHCP服務自動分配給自己的IP地址,生成自己的路由表。
通信流程
瀏覽器中輸入url后,發生的事情
通過QQ進行發送一條消息時,發生的事情
當內網設備與外網通信時,發生的事情
總結
以上是生活随笔為你收集整理的计算机网络 | IP协议相关技术与网络总结 :DNS、ICMP、DHCP、NAT/NAPT、通信流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络 | 数据链路层 :ARP协议
- 下一篇: 高级数据结构与算法 | 红黑树(Red-