閱讀目錄 一.操作系統基礎操作系統:(Operating System,簡稱OS)是管理和控制計算機硬件與軟件資源的計算機程序,是直接運行在“裸機”上的最基本的系統軟件,任何其他軟件都必須在操作系統的支持下才能運行。 注:計算機(硬件)->os->應用軟件 二.網絡通信原理2.1 互聯網的本質就是一系列的網絡協議一臺硬設有了操作系統,然后裝上軟件你就可以正常使用了,然而你也只能自己使用 像這樣,每個人都擁有一臺自己的機器,然而彼此孤立 如何能大家一起玩耍 然而internet為何物? 其實兩臺計算機之間通信與兩個人打電話之間通信的原理是一樣的(中國有很多地區,不同的地區有不同的方言,為了全中國人都可以聽懂,大家統一講普通話) 普通話屬于中國國內人與人之間通信的標準,那如果是兩個國家的人交流呢? 問題是,你不可能要求一個人/計算機掌握全世界的語言/標準,于是有了世界統一的通信標準:英語 結論:英語成為世界上所有人通信的統一標準,如果把計算機看成分布于世界各地的人,那么連接兩臺計算機之間的internet實際上就是 一系列統一的標準,這些標準稱之為互聯網協議,互聯網的本質就是一系列的協議,總稱為'互聯網協議’(Internet Protocol Suite). 互聯網協議的功能:定義計算機如何接入internet,以及接入internet的計算機通信的標準。 2.2 osi七層協議互聯網協議按照功能不同分為osi七層或tcp/ip五層或tcp/ip四層 每層運行常見物理設備 OSI七層協議數據傳輸的封包與解包過程 2.3 tcp/ip五層模型講解我們將應用層,表示層,會話層并作應用層,從tcp/ip五層協議的角度來闡述每層的由來與功能,搞清楚了每層的主要協議 就理解了整個互聯網通信的原理。 首先,用戶感知到的只是最上面一層應用層,自上而下每層都依賴于下一層,所以我們從最下一層開始切入,比較好理解 每層都運行特定的協議,越往上越靠近用戶,越往下越靠近硬件 2.3.1 物理層物理層由來:上面提到,孤立的計算機之間要想一起玩,就必須接入internet,言外之意就是計算機之間必須完成組網 物理層功能:主要是基于電器特性發送高低電壓(電信號),高電壓對應數字1,低電壓對應數字0 2.3.2 數據鏈路層數據鏈路層由來:單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什么意思 數據鏈路層的功能:定義了電信號的分組方式 以太網協議: 早期的時候各個公司都有自己的分組方式,后來形成了統一的標準,即以太網協議ethernet ethernet規定
head包含:(固定18個字節)
data包含:(最短46字節,最長1500字節)
head長度+data長度=最短64字節,最長1518字節,超過最大限制就分片發送 mac地址: head中包含的源和目標地址由來:ethernet規定接入internet的設備都必須具備網卡,發送端和接收端的地址便是指網卡的地址,即mac地址 mac地址:每塊網卡出廠時都被燒制上一個世界唯一的mac地址,長度為48位2進制,通常由12位16進制數表示(前六位是廠商編號,后六位是流水線號) 廣播: 有了mac地址,同一網絡內的兩臺主機就可以通信了(一臺主機通過arp協議獲取另外一臺主機的mac地址) ethernet采用最原始的方式,廣播的方式進行通信,即計算機通信基本靠吼 2.3.3 網絡層網絡層由來:有了ethernet、mac地址、廣播的發送方式,世界上的計算機就可以彼此通信了,問題是世界范圍的互聯網是由 一個個彼此隔離的小的局域網組成的,那么如果所有的通信都采用以太網的廣播方式,那么一臺機器發送的包全世界都會收到, 這就不僅僅是效率低的問題了,這會是一種災難 上圖結論:必須找出一種方法來區分哪些計算機屬于同一廣播域,哪些不是,如果是就采用廣播的方式發送,如果不是, 就采用路由的方式(向不同廣播域/子網分發數據包),mac地址是無法區分的,它只跟廠商有關 網絡層功能:引入一套新的地址用來區分不同的廣播域/子網,這套地址即網絡地址 IP協議:
ip地址分成兩部分
注意:單純的ip地址段只是標識了ip地址的種類,從網絡部分或主機部分都無法辨識一個ip所處的子網 例:172.16.10.1與172.16.10.2并不能確定二者處于同一子網 子網掩碼 所謂”子網掩碼”,就是表示子網絡特征的一個參數。它在形式上等同于IP地址,也是一個32位二進制數字,它的網絡部分全部為1,主機部分全部為0。比如,IP地址172.16.10.1,如果已知網絡部分是前24位,主機部分是后8位,那么子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。 知道”子網掩碼”,我們就能判斷,任意兩個IP地址是否處在同一個子網絡。方法是將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都為1,運算結果為1,否則為0),然后比較結果是否相同,如果是的話,就表明它們在同一個子網絡中,否則就不是。 比如,已知IP地址172.16.10.1和172.16.10.2的子網掩碼都是255.255.255.0,請問它們是否在同一個子網絡?兩者與子網掩碼分別進行AND運算, 172.16.10.1:10101100.00010000.00001010.000000001 255255.255.255.0:11111111.11111111.11111111.00000000 AND運算得網絡地址結果:10101100.00010000.00001010.000000001->172.16.10.0 172.16.10.2:10101100.00010000.00001010.000000010 255255.255.255.0:11111111.11111111.11111111.00000000 AND運算得網絡地址結果:10101100.00010000.00001010.000000001->172.16.10.0 結果都是172.16.10.0,因此它們在同一個子網絡。 總結一下,IP協議的作用主要有兩個,一個是為每一臺計算機分配IP地址,另一個是確定哪些地址在同一個子網絡。 ip數據包 ip數據包也分為head和data部分,無須為ip包定義單獨的欄位,直接放入以太網包的data部分 head:長度為20到60字節 data:最長為65,515字節。 而以太網數據包的”數據”部分,最長只有1500字節。因此,如果IP數據包超過了1500字節,它就需要分割成幾個以太網數據包,分開發送了。
ARP協議 arp協議由來:計算機通信基本靠吼,即廣播的方式,所有上層的包到最后都要封裝上以太網頭,然后通過以太網協議發送,在談及以太網協議時候,我門了解到 通信是基于mac的廣播方式實現,計算機在發包時,獲取自身的mac是容易的,如何獲取目標主機的mac,就需要通過arp協議 arp協議功能:廣播的方式發送數據包,獲取目標主機的mac地址 協議工作方式:每臺主機ip都是已知的 例如:主機172.16.10.10/24訪問172.16.10.11/24 一:首先通過ip地址和子網掩碼區分出自己所處的子網
二:分析172.16.10.10/24與172.16.10.11/24處于同一網絡(如果不是同一網絡,那么下表中目標ip為172.16.10.1,通過arp獲取的是網關的mac)
三:這個包會以廣播的方式在發送端所處的自網內傳輸,所有主機接收后拆開包,發現目標ip為自己的,就響應,返回自己的mac 2.3.4 傳輸層傳輸層的由來:網絡層的ip幫我們區分子網,以太網層的mac幫我們找到主機,然后大家使用的都是應用程序,你的電腦上可能同時開啟qq,暴風影音,等多個應用程序, 那么我們通過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應用程序,答案就是端口,端口即應用程序與網卡關聯的編號。 傳輸層功能:建立端口到端口的通信 補充:端口范圍0-65535,0-1023為系統占用端口 tcp協議: 可靠傳輸,TCP數據包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包不必再分割。
udp協議: 不可靠傳輸,”報頭”部分一共只有8個字節,總長度不超過65,535字節,正好放進一個IP數據包。
tcp報文 tcp三次握手和四次揮手 2.3.5 應用層應用層由來:用戶使用的都是應用程序,均工作于應用層,互聯網是開發的,大家都可以開發自己的應用程序,數據多種多樣,必須規定好數據的組織形式 應用層功能:規定應用程序的數據格式。 例:TCP協議可以為各種各樣的程序傳遞數據,比如Email、WWW、FTP等等。那么,必須有不同協議規定電子郵件、網頁、FTP數據的格式,這些應用程序協議就構成了”應用層”。 2.3.6 socket我們知道兩個進程如果需要進行通訊最基本的一個前提能能夠唯一的標示一個進程,在本地進程通訊中我們可以使用PID來唯一標示一個進程,但PID只在本地唯一,網絡中的兩個進程PID沖突幾率很大,這時候我們需要另辟它徑了,我們知道IP層的ip地址可以唯一標示主機,而TCP層協議和端口號可以唯一標示主機的一個進程,這樣我們可以利用ip地址+協議+端口號唯一標示網絡中的一個進程。 能夠唯一標示網絡中的進程后,它們就可以利用socket進行通信了,什么是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。 socket起源于UNIX,在Unix一切皆文件哲學的思想下,socket是一種'打開—讀/寫—關閉'模式的實現,服務器和客戶端各自維護一個'文件',在建立連接打開后,可以向自己文件寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉文件。 2.3.7 小結總結圖如下: 數據傳輸動圖如下: 三.網絡通信實現想實現網絡通信,每臺主機需具備四要素
獲取這四要素分兩種方式 1.靜態獲取 即手動配置 2.動態獲取 通過dhcp獲取
(1)最前面的”以太網標頭”,設置發出方(本機)的MAC地址和接收方(DHCP服務器)的MAC地址。前者就是本機網卡的MAC地址,后者這時不知道,就填入一個廣播地址:FF-FF-FF-FF-FF-FF。 (2)后面的”IP標頭”,設置發出方的IP地址和接收方的IP地址。這時,對于這兩者,本機都不知道。于是,發出方的IP地址就設為0.0.0.0,接收方的IP地址設為255.255.255.255。 (3)最后的”UDP標頭”,設置發出方的端口和接收方的端口。這一部分是DHCP協議規定好的,發出方是68端口,接收方是67端口。 這個數據包構造完成后,就可以發出了。以太網是廣播發送,同一個子網絡的每臺計算機都收到了這個包。因為接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是發給誰的,所以每臺收到這個包的計算機,還必須分析這個包的IP地址,才能確定是不是發給自己的。當看到發出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服務器知道”這個包是發給我的”,而其他計算機就可以丟棄這個包。 接下來,DHCP服務器讀出這個包的數據內容,分配好IP地址,發送回去一個”DHCP響應”數據包。這個響應包的結構也是類似的,以太網標頭的MAC地址是雙方的網卡地址,IP標頭的IP地址是DHCP服務器的IP地址(發出方)和255.255.255.255(接收方),UDP標頭的端口是67(發出方)和68(接收方),分配給請求端的IP地址和本網絡的具體參數則包含在Data部分。 新加入的計算機收到這個響應包,于是就知道了自己的IP地址、子網掩碼、網關地址、DNS服務器等等參數 四.DNS域名解析4.1 dns的作用DNS的作用:在互聯網中,其實沒有類似于www.這種域名方式,而替代的是以IP地址,如222.222.222.222,那我們在IE地址欄中應當輸入222.222.222.222才能打開網站www.,但我們細想一下,互聯網上的網站成千上萬,如果每個網站登陸都需要記住一大串數字,那是不是特別不方便,對于記憶力不強的人,根本無法記住這么煩瑣的數字。這個時候DNS就出現了,它的作用就是將222.222.222.222解析為www.,那么我們登陸的時候就直接輸入域名就可以了。 為什么一定要設置DNS才能上網?有些朋友可能會發現,為什么我可能登陸QQ、MSN,但卻打不開網頁呢?其實大部分原因都是因為DNS服務器故障造成的,DNS服務器地址是唯一的,是運營商提供給終端用戶用來解析IP地址及域名的關系,而如果不設定DNS服務器地址,那么就無法查詢地址的去向,自然也就打不開網頁,而QQ、MSN等即時聊天軟件,采用的是UDP傳輸協議,即不可靠傳輸協議,無需提供DNS服務器地址,也同樣可以登陸。 4.2 dns的兩種查詢方式#一 :遞歸主機向本地域名服務器的查詢一般都是采用遞歸查詢。所謂遞歸查詢就是:如果主機所詢問的本地域名服務器不知道被查詢的域名的IP地址, 那么本地域名服務器就以DNS客戶的身份,向其它根域名服務器繼續發出查詢請求報文(即替主機繼續查詢),而不是讓主機自己進行下一步查詢。 因此,遞歸查詢返回的查詢結果或者是所要查詢的IP地址,或者是報錯,表示無法查詢到所需的IP地址。# 二:迭代本地域名服務器向根域名服務器的查詢的迭代查詢。迭代查詢的特點:當根域名服務器收到本地域名服務器發出的迭代查詢請求報文時,要么給出所要查詢的IP地址, 要么告訴本地服務器:“你下一步應當向哪一個域名服務器進行查詢”。然后讓本地服務器進行后續的查詢。根域名服務器通常是把自己知道的頂級域名服務器的IP地址告訴本地域名服務器, 讓本地域名服務器再向頂級域名服務器查詢。頂級域名服務器在收到本地域名服務器的查詢請求后,要么給出所要查詢的IP地址,要么告訴本地服務器下一步應當向哪一個權限域名服務器進行查詢。 最后,知道了所要解析的IP地址或報錯,然后把這個結果返回給發起查詢的主機。 下圖給出了這兩種查詢的差別 圖1 圖2 4.3 DNS解析流程舉例如上圖所示,我們將詳細闡述DNS解析流程。1、首先客戶端位置是一臺電腦或手機,在打開瀏覽器以后,比如輸入http://www.的域名,它首先是由瀏覽器發起一個DNS解析請求, 如果本地緩存服務器中找不到結果,則首先會向根服務器查詢,根服務器里面記錄的都是各個頂級域所在的服務器的位置,當向根請求http://www.的時候, 根服務器就會返回.cn服務器的位置信息。2、遞歸服務器拿到.cn的權威服務器地址以后,就會尋問cn的權威服務器,知不知道http://www.的位置。這個時候cn權威服務器查找并返回http://服務器的地址。3、繼續向http://的權威服務器去查詢這個地址,由http://的服務器給出了地址:202.173.11.10 4、最終才能進行http的鏈接,順利訪問網站。5、這里補充說明,一旦遞歸服務器拿到解析記錄以后,就會在本地進行緩存,如果下次客戶端再請求本地的遞歸域名服務器相同域名的時候,就不會再這樣一層一層查了, 因為本地服務器里面已經有緩存了,這個時候就直接把http://www.的A記錄返回給客戶端就可以了。 ![]() ![]() 4.4 DNS緩存DNS緩存指DNS返回了正確的IP之后,系統就會將這個結果臨時儲存起來。并且它會為緩存設定一個失效時間 (例如N小時),在這N小時之內,當你再次訪問這個網站時,系統就會直接從你電腦本地的DNS緩存中把結果交還給你,而不必再去詢問DNS服務器,變相“加速”了網址的解析。 當然,在超過N小時之后,系統會自動再次去詢問DNS服務器獲得新的結果。所以,當你修改了 DNS 服務器,并且不希望電腦繼續使用之前的DNS緩存時,就需要手動去清除本地的緩存了。 4.5 DNS緩存分類1)瀏覽器DNS緩存(內存中): 瀏覽器會按照一定頻率緩存DNS記錄2)本地操作系統DNS緩存(內存中): 如果瀏覽器緩存中找不到需要的DNS記錄,那就去操作系統找。3)本地HOSTS文件(硬盤中): Windows系統中位于C:\Windows\System32\drivers\etc4)路由器指定的DNS(遠程): 路由器自動獲取DNS地址,也可以手動修改-登錄后臺設置DNS服務器地址 ps:路由器DNS被篡改會造成域名劫持,你訪問的網址都會被定位到同一個位置,但是IP直接可以訪問5)ISP的DNS服務器(遠程): ISP(Internet Service Provider互聯網服務提供商、聯通電信移動),ISP有專門的DNS服務器應 對DNS查詢請求 6)根服務器(遠程,跨國): ISP的DNS服務器還找不到的話,它就會向根服務器發出查詢請求 調用系統緩存需要跨進程,消耗大,因此為了解析速度的方便,就有了一系列緩存來加快IP查找速度。 4.6 瀏覽器DNS查找順序瀏覽器DNS緩存->本地系統DNS緩存->本地計算機HOSTS文件->ISP DNS緩存->遞歸or迭代搜索 期間如果查詢到了,也就直接訪問ip地址了,這個就像三級緩存原理一樣,例如,能夠在hosts文件中找到就不會再去查其他的 4.7 清除DNS緩存打開cmd執行命令:ipconfig /all 全國通用DNS地址(國內用戶推薦使用,速度較快!) 首先DNS服務器地址添:114.114.114.114 (位于北京人民英雄紀念碑) 備用DNS服務器地址添:114.114.115.115全球通用DNS地址(此DNS地址為谷歌服務器的) 首選DNS服務器地址添:8.8.8.8備用DNS服務器地址添:8.8.4.4 查看本地dns緩存命令:ipconfig /displaydns 清除本地dns緩存命令:ipconfig /flushdns 清除瀏覽器緩存: 我們在開發的時候,有時候會給某個域名綁hosts,用于本地開發測試,但是綁了之后,用谷歌瀏覽器訪問會發現并沒有生效,按F12會發現訪問的還是線上的ip, 說明瀏覽器是有該域名的dns緩存的,那么如何清除瀏覽器的dns緩存呢?# 1、針對谷歌瀏覽器谷歌瀏覽器清除方法如下:打開瀏覽器,訪問如下地址 chrome://net-internals/#dns點擊 clear host cache,就清楚了瀏覽器的dns緩存,再訪問綁hosts的域名,就會發現ip變啦# 2、針對火狐瀏覽器如果是firefox火狐瀏覽器的話,可以按照以下方式: 在地址欄中 about:config 并回車,可能會出現一個警告信息,直接點擊按鈕進入,會出現firefox的所有配置信息,通過搜索dns 進行過濾, 可以看到一項名為 network.dnsCacheExpirationGracePeriod 項,它對應的值就是DNS緩存的時間,雙擊此項,會出現修改的提示框,填入 0 (不緩存DNS)即可。 4.8 其他了解13臺根dns: A.root-servers.net198.41.0.4美國 域名定義:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html 頂級域名:以.com,.net,.org,.cn等等屬于國際頂級域名,根據目前的國際互聯網域名體系,國際頂級域名分為兩類:類別頂級域名(gTLD)和地理頂級域名(ccTLD)兩種。類別頂級域名是 以'COM'、'NET'、'ORG'、'BIZ'、'INFO'等結尾的域名,均由國外公司負責管理。地理頂級域名是以國家或地區代碼為結尾的域名,如'CN'代表中國,'UK'代表英國。地理頂級域名一般由各個國家或地區負責管理。 二級域名:二級域名是以頂級域名為基礎的地理域名,比喻中國的二級域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com. 五 網絡通信流程1.本機獲取
2.打開瀏覽器,想要訪問Google,在地址欄輸入了網址:www.google.com。 3.dns協議(基于udp協議) 4.HTTP部分的內容,類似于下面這樣:
我們假定這個部分的長度為4960字節,它會被嵌在TCP數據包之中。 5 TCP協議 TCP數據包需要設置端口,接收方(Google)的HTTP端口默認是80,發送方(本機)的端口是一個隨機生成的1024-65535之間的整數,假定為51775。 TCP數據包的標頭長度為20字節,加上嵌入HTTP的數據包,總長度變為4980字節。 6 IP協議 然后,TCP數據包再嵌入IP數據包。IP數據包需要設置雙方的IP地址,這是已知的,發送方是192.168.1.100(本機),接收方是172.194.72.105(Google)。 IP數據包的標頭長度為20字節,加上嵌入的TCP數據包,總長度變為5000字節。 7 以太網協議 最后,IP數據包嵌入以太網數據包。以太網數據包需要設置雙方的MAC地址,發送方為本機的網卡MAC地址,接收方為網關192.168.1.1的MAC地址(通過ARP協議得到)。 以太網數據包的數據部分,最大長度為1500字節,而現在的IP數據包長度為5000字節。因此,IP數據包必須分割成四個包。因為每個包都有自己的IP標頭(20字節),所以四個包的IP數據包的長度分別為1500、1500、1500、560。 8 服務器端響應 經過多個網關的轉發,Google的服務器172.194.72.105,收到了這四個以太網數據包。 根據IP標頭的序號,Google將四個包拼起來,取出完整的TCP數據包,然后讀出里面的”HTTP請求”,接著做出”HTTP響應”,再用TCP協議發回來。 本機收到HTTP響應以后,就可以將網頁顯示出來,完成一次網絡通信。 |
|
來自: ABCmfza71ifzqx > 《待分類》