網絡中典型協議--(DNS,輸入url后, 發生的事情. ,ICMP,NAT)

DNS(Domain Name System)

DNS是一整套從域名映射到IP的系統

域名服務器發展背景

TCP/IP中使用IP地址和端口號來確定網絡上的一臺主機的一個程序. 但是IP地址不方便記憶. 于是人們發明了一種叫主機名的東西, 是一個字符串, 并且使用hosts文件來描述主機名和IP地址的關系.

最初, 通過互連網信息中心(SRI-NIC)來管理這個hosts文件的.

  1. 如果一個新計算機要接入網絡, 或者某個計算機IP變更, 都需要到信息中心申請變更hosts文件.
  2. 其他計算機也需要定期下載更新新版本的hosts文件才能正確上網.

DNS系統

  1. 一個組織的系統管理機構, 維護系統內的每個主機的IP和主機名的對應關系.
  2. 如果新計算機接入網絡, 將這個信息注冊到數據庫中;
  3. 用戶輸入域名的時候, 會自動查詢DNS服務器, 由DNS服務器檢索數據庫, 得到對應的IP地址.

域名服務器:

根域名服務器->頂級域名服務器->二級域名->三級域名

域名的劃分:

頂級域名(.com/.org/.gov/.cn/.jp/.us)
二級域名(.baidu.com .qq.com…)
三級域名: .image.baidu.com…

域名解析流程

例如:http://image.baidu.com/search/index
在這里插入圖片描述

瀏覽器中輸入url后, 發生的事情.

1)瀏覽器解析

(2)查詢緩存

(3)DNS查詢

順序如下,若其中一步成功則直接進去建立鏈接部分:

  • 瀏覽器自身DNS
  • 操作系統DNS
  • 本地hosts文件
  • 像域名服務器發送請求

(4)建立鏈接

  • TCP三次握手(three-way handshaking)

(5)發送HTTP請求
(6)服務器發送響應
(7)客戶端收到頁面
(8)解析HTML
(9)構建渲染樹
(10)瀏覽器布局渲染

在這里插入圖片描述

ICMP

ICMP協議是一個 網絡層協議 ,主要用于網絡探測
一個新搭建好的網絡, 往往需要先進行一個簡單的測試, 來驗證網絡是否暢通; 但是IP協議并不提供可靠傳輸. 如果丟 包了, IP協議并不能通知傳輸層是否丟包以及丟包的原因.
發送ICMP請求應答報文,要求對方進行應答,收到應答表示網路通暢

ICMP功能

  • 確認IP包是否成功到達目標地址.
  • 通知在發送過程中IP包被丟棄的原因.
  • ICMP也是基于IP協議工作的. 但是它并不是傳輸層的功能, 因此人們仍然把它歸結為網絡層協議;
  • ICMP只能搭配IPv4使用. 如果是IPv6的情況下, 需要是用ICMPv6

問題來了

telnet是23端口, ssh是22端口, 那么ping是什么端口?
ping命令基于ICMP, 是在網絡層. 而端口號, 是傳輸層的內容. 在ICMP中根本就不關注端口號這樣的信息.

NAT服務

網絡中地址轉化技術
對數據中的源端地址進行修改,修改為自己主機的地址信息;目的是為了保證數據發送出去后響應能夠原路返回
通常部署在網關設備上,工作在網絡層

  • NAT能夠將私有IP對外通信時轉為全局IP. 也就是就是一種將私有IP和全局IP相互轉化的技術方法:
  • 很多學校, 家庭, 公司內部采用每個終端設置私有IP, 而在路由器或必要的服務器上設置全局IP;
  • 全局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 發送數據時就會生成表中的映射關系;

NAT和代理服務器

  1. 路由器往往都具備NAT設備的功能, 通過NAT設備進行中轉, 完成子網設備和其他子網設備的通信過程.
  2. 代理服務器看起來和NAT設備有一點像. 客戶端像代理服務器發送請求, 代理服務器將請求轉發給真正要請求的服務 器; 服務器返回結果后, 代理服務器又把結果回傳給客戶端

NAT和代理服務器的區別

  • 代理程序工作在應用層,進行數據轉發,可以部署在任意設備上
  • NAT在網絡層進行地址替換,目標地址永遠不變
  • 代理服務,主機請求的地址就是代理服務器的地址,而不是直接目標
  • 從應用上講, NAT設備是網絡基礎設備之一, 解決的是IP不足的問題. 代理服務器則是更貼近具體應用, 比 如通過代理服務器進行翻墻, 另外像迅游這樣的加速器, 也是使用代理服務器.
  • 從底層實現上講, NAT是工作在網絡層, 直接對IP地址進行替換. 代理服務器往往工作在應用層.
  • 從使用范圍上講, NAT一般在局域網的出口部署, 代理服務器可以在局域網做, 也可以在廣域網做, 也可以 跨網.
  • 從部署位置上看, NAT一般集成在防火墻, 路由器等硬件設備上, 代理服務器則是一個軟件程序, 需要部署 在服務器上

代理服務器是一種應用比較廣的技術.

  • 翻墻: 廣域網中的代理.
  • 負載均衡: 局域網中的代理.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383184.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383184.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383184.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高級IO--1 ---(五種典型IO,阻塞IO,非阻塞IO,信號驅動IO,異步IO, IO多路轉接)

高級IO: 五種典型IO: 阻塞IO/非阻塞IO/信號驅動IO/異步IO/IO多路轉接 IO多路轉接模型:select/poll/epoll 五種典型IO 阻塞IO IO操作的流程:等待IO操作條件具備,然后進行數據拷貝 為了完成IO操作發起調用&#xff…

IO多路轉接模型----(select的模型,select的優缺點,poll的模型,poll的優缺點)

IO多路轉接模型:select/poll/epoll 對大量描述符進行事件監控(可讀/可寫/異常) select模型 用戶定義描述符的事件監控集合 fd_set(這是一個位圖,用于存儲要監控的描述符); 用戶將需要監控的描述符添加到集合中,這個描…

IO多路轉接模型-----epoll

epoll: Linux下性能最高的多路轉接模型 epoll 有3個相關的系統調用. epoll_create 功能:創建epoll,在內核中創建eventpoll結構體,size決定了epoll最多監控多少個描述符,在Linux2.6.8之后被忽略,但是必須…

再寫順序表(c語言實現,外加冒泡排序,二分查找)

概念 順序表是用一段物理地址連續的存儲單元依次存儲數據元素的線性結構,一般情況下采用數組存儲。在數組 上完成數據的增刪查改。 順序表一般可以分為: 靜態順序表:使用定長數組存儲。動態順序表:使用動態開辟的數組存儲。 頭…

再寫單鏈表(不帶頭單鏈表)

單鏈表 實際中鏈表的結構非常多樣,以下情況組合起來就有8種鏈表結構: 單向、雙向帶頭、不帶頭循環、非循環 雖然有這么多的鏈表的結構,但是我們實際中最常用還是兩種結構: 無頭單向非循環鏈表:結構簡單&#xff0…

再寫雙向循環鏈表

#pragma once #include<assert.h> #include<malloc.h> #include<stdio.h> typedef int DLDataType;//定義鏈表結點結構 typedef struct DListNode{DLDataType value;struct DListNode *prev; //指向前一個結點struct DListNode *next; //指向后一個結點 } DL…

鏈表題目--1 刪除鏈表中所有等于val的值

注意事項 要刪除的結點相鄰第一個結點就是要刪除的結點 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* removeElements(struct ListNode* head, int val){if(headNULL){return NULL;}struct …

鏈表題目--2 求鏈表的中間結點 和 求鏈表中倒數第k個結點

求鏈表的中間結點 思路 一個走兩步&#xff0c;一個走一步。一個走到尾&#xff0c;另外一個就走到了中間 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* middleNode(struct ListNode* head…

鏈表題目---3 合并兩個有序單鏈表 和 分割鏈表

合并兩個有序單鏈表 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){if(l1 NULL){return l2;}else if(l2 NULL){return l1;}struc…

鏈表題目---4 刪除鏈表中重復的結點 和 判斷鏈表是否為回文鏈表

刪除鏈表中重復的結點 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {} }; */ class Solution { public:ListNode* deleteDuplication(ListNode* pHead){if(pHead NULL){return NULL;}ListNode *prev NULL; //用于刪除的結點, 是…

鏈表題目----5 相交鏈表 和 環形鏈表 和 返回鏈表開始入環的第一個節點

相交鏈表 思路 鏈表交叉不可能是x型因為有可能兩個鏈表不等長&#xff0c;所以我們必須讓他們從同一起跑位置去起跑從同一起跑位置出發&#xff0c;依次比較每個結點的地址是否相同 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct L…

鏈表題目---6 復制帶隨機指針的鏈表

思路 將新結點放在老結點的后面 復制random 將鏈表拆開 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node() {}Node(int _val, Node* _next, Node* _random) {val _val;next _next;random _random;} }; */ class Solution { publi…

括號匹配問題(c和c++版本實現)

括號匹配問題 思路 遇見左括號入棧&#xff0c;遇見一個右括號彈出棧頂元素右括號入棧前如果棧已經為空&#xff0c;則不匹配如果不為空則讀取并彈出&#xff0c;彈出來的元素與右括號做比較&#xff0c;必須匹配&#xff0c;不匹配返回false;如果最后棧里還有元素&#xff0c…

用隊列實現棧 AND 用棧實現隊列

用隊列實現棧 思路 入隊列就是入棧出隊列的時候&#xff0c;就是把前面size-1個隊列中的元素先出&#xff0c;這樣最后一個元素就成隊首元素了&#xff0c;再把出去的元素再次入隊列讀棧頂元素&#xff0c;過程和第二步是一樣的&#xff0c;就是彈出后&#xff0c;再把它入隊列…

最小棧的實現(設計一個支持 push,pop,top 操作,并能在常數時間內檢索到最小元素的棧。)

最小棧的實現 思路 兩個棧&#xff0c;左邊棧接受元素&#xff0c;右邊棧存最小的元素入棧時&#xff0c;先入左邊棧&#xff0c;隨后進行比較&#xff0c;左邊和右邊棧頂元素進行比較&#xff0c;如果新元素小&#xff0c;就把新元素放在右邊的棧頂位置&#xff0c;如果新元素…

再寫循環隊列----c++實現

再寫循環隊列 class MyCircularQueue { public:/** Initialize your data structure here. Set the size of the queue to be k. */MyCircularQueue(int k) {array (int *)malloc(sizeof(int)*k);capacity k;size 0;front 0;rear 0;}/** Insert an element into the circu…

再談二叉樹(二叉樹概念,二叉樹的性質,二叉樹的存儲結構)

樹的概念 樹的概念 樹是一種非線性的數據結構&#xff0c;它是由n&#xff08;n>0&#xff09;個有限結點組成一個具有層次關系的集合。把它叫做樹是因 為它看起來像一棵倒掛的樹&#xff0c;也就是說它是根朝上&#xff0c;而葉朝下的。它具有以下的特點&#xff1a;每個…

二叉樹題目----1 前序中序后序遍歷二叉樹并返回相應的遍歷(不是打印)

前序遍歷 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*//*** Note: The returned array must be malloced, assume caller calls free().*/ int *array; int size;void _preorde…

二叉樹題目----2 檢查兩顆樹是否相同 和 對稱二叉樹的判定

檢查兩顆樹是否相同 思路 根要相等 p->val q->val左子樹相等 isSameTree(p->left,q->left)右子樹也要相等 isSameTree(p->right,q->right) /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* …

二叉樹題目---3 另一個樹的子樹 AND 二叉樹最大深度

另一個樹的子樹 思路 兩個數都遍歷一遍&#xff0c;找到一個根結點相同時&#xff0c;判斷以這個根結點為首的二叉樹是否相等 前序遍歷判斷兩棵樹是否相同對于返回值的處理是難點 bool isSameTree(struct TreeNode *p, struct TreeNode *q) {if(p NULL && q NULL)…