一、網絡概述
網絡是由若干節點和連接這些節點的鏈路構成,表示諸多對象及其相互聯繫。在計算機領域中,網絡是信息傳輸、接收、共享的虛擬平臺,通過它把各個點、面、體的信息聯繫到一起,從而實現這些資源的共享。網絡是人類發展史來最重要的發明,提高了科技和人類社會的發展。
二、網絡基礎概念
- 客戶端:應用 C/S(客戶端/服務器) B/S(瀏覽器/服務器)
- 服務器:爲客戶端提供服務、數據、資源的機器
3 .請求:客戶端向服務器索取數據點擊免費下載海量工程資料 - 響應:服務器對客戶端請求作出反應,一般是返回給客戶端數據
- URL:Uniform Resource Locator(統一資源定位符)。網絡中每一個資源都對應唯一的地址。
- IP地址是IP協議提供的一種統一的地址格式,它爲互聯網上的每一個網絡和每一臺主機分配一個邏輯地址,以此來屏蔽物理地址(每個機器都有一個編碼,如MAC上就有一個叫MAC地址的東西)的差異。是32位二進制數據,通常以十進制表示,並以“.”分隔。IP地址是一種邏輯地地址,用來標識網絡中一個個主機,在本地局域網上是惟一的。
- IP(網絡之間互連的協議)它是能使連接到網上的所有計算機網絡實現相互通信的一套規則,規定了計算機在因特網上進行通信時應當遵守的規則。任何廠家生產的計算機系統,只要遵守IP協議就可以與因特網互連互通。IP地址有唯一性,即每臺機器的IP地址在全世界是唯一的。這裏指的是網絡上的真實IP它是通過本機IP地址和子網掩碼的"與"運算然後再通過各種處理算出來的(要遵守TCP協議還要加報文及端口什麼的,我沒有細追究,現在還用不上,反正暫時知道被處理過的就行了)
三、網絡通信
1. 網絡三要素
IP:主機的唯一表示 (http://202.108.22.5/)
端口號:正在運行的程序(0~65535)
協議:通信規則,TCP以及UDP
2. 網絡模型
2.1 簡介
- 定義:計算機網絡的各層 + 其協議的集合
- 作用:定義該計算機網絡的所能完成的功能
2.2 結構介紹
OSI體系結構:概念清楚 & 理念完整,但複雜 & 不實用
TCP / IP體系結構:含了一系列構成互聯網基礎的網絡協議,是Internet的核心協議 & 被廣泛應用於局域網 和 廣域網
五層體系結構:融合了OSI 與 TCP / IP的體系結構,目的是爲了學習 & 講解計算機原理
網絡參考模型OSI概述:(物聯網傳話試用)
1. 物理層:主要定義物理設備標準,如網線的接口類型、光纖的接口類型、各種傳輸介質的傳輸速率等。它的主要作用是傳輸比特流(就是由1、0轉化爲電流強弱來進行傳輸,到達目的地後在轉化爲1、0,也就是我們常說的數模轉換與模數轉換)。這一層的數據叫做比特。 指兩臺電腦進行傳輸數據的網線。
2. 數據鏈路層:主要將從物理層接收的數據進行MAC地址(網卡的地址)的封裝與解封裝。常把這一層的數據叫做幀。在這一層工作的設備是交換機,數據通過交換機來傳輸。
3. 網絡層:主要將從下層接收到的數據進行IP地址(例192.168.0.1)的封裝與解封裝。在這一層工作的設備是路由器,常把這一層的數據叫做數據包。 將發送端電腦發送過來的數據, 通過路由器進行分配給指定IP的電腦上。
4. 傳輸層:定義了一些傳輸數據的協議和端口號(WWW端口80等),如:TCP(傳輸控制協議,傳輸效率低,可靠性強,用於傳輸可靠性要求高,數據量大的數據),UDP(用戶數據報協議,與TCP特性恰恰相反,用於傳輸可靠性要求不高,數據量小的數據,如QQ聊天數據就是通過這種方式傳輸的)。 主要是將從下層接收的數據進行分段和傳輸,到達目的地址後再進行重組。常常把這一層數據叫做段。 定義兩臺電腦數據傳輸方式,稱作協議,常用的協議有:TCP、UDP、HTTP。
5. 會話層:通過傳輸層(端口號:傳輸端口與接收端口)建立數據傳輸的通路。主要在你的系統之間發起會話或者接受會話請求(設備之間需要互相認識可以是IP也可以是MAC或者是主機名) 要設置目標電腦的IP地址和端口號,纔可以找到接收端的電腦和應用。
6. 表示層:主要是進行對接收的數據進行解釋、加密與解密、壓縮與解壓縮等(也就是把計算機能夠識別的東西轉換成人能夠能識別的東西(如圖片、聲音等)。 將文字或者圖片轉換成電腦識別的二進制的過程.。
7. 應用層: 主要是一些終端的應用,比如說FTP(各種文件下載),WEB(IE瀏覽),QQ之類的(可以把它理解成我們在電腦屏幕上可以看到的東西.就是終端應用)。
四、HTTP協議
1. HTTP
- HTTP是 Hyper Text Transfer Protocol(超文本傳輸協議)。
- 1960年美國人Ted Nelson構思了一種通過計算機處理文本信息的方法,並稱之爲超文本(hypertext),這成爲了HTTP超文本傳輸協議標準架構的發展根基。
- 超文本是用超鏈接的方法,將各種不同空間的文字信息組織在一起的網狀文本。超文本更是一種用戶界面範式,用以顯示文本及與文本之間相關的內容。現時超文本普遍以電子文檔方式存在,其中的文字包含有可以鏈結到其他位置或者文檔的連結,允許從當前閱讀位置直接切換到超文本連結所指向的位置。
- 它是TCP/IP協議的一個應用層協議,用於定義WEB瀏覽器與WEB服務器之間交換數據 的過程及數據本身的格式。
2. HTTP協議概述
- WEB瀏覽器與WEB服務器之間的一問一答的交互過程必須遵循一定的規則,這個規則就是HTTP協議。
- Http協議是一種應用層協議,它通過TCP實現了可靠的數據傳輸,能夠保證數據的完整性、正確性
- 而TCP對於數據傳輸控制的優點也能夠體現在Http協議上,使得Http的數據傳輸吞吐量、效率得到保證
10.1.3 http與https基本概念
- HTTP:是互聯網上應用最爲廣泛的一種網絡協議,是一個客戶端和服務器端請求和應答的標準(TCP),用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網絡傳輸減少。
- HTTPS:是以安全爲目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL(Secure Sockets Layer)層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
HTTPS協議的主要作用可以分爲兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
10.1.4 http與https的區別
簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。區別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連接方式,用的默認端口也不一樣,前者是80,後者是443。
4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
10.2 http請求的組成
從客戶端到服務器端的請求消息,信息由4部分組成請求行、消息報頭、空行、請求正文
10.2.1 請求行(請求方法URI協議/版本)
請求的第一行是“方法URI協議/版本”例如:GET/sample.jsp HTTP/1.1
以上代碼中“GET”代表請求方法,“/sample.jsp”表示URI,“HTTP/1.1代表協議和協議的版本。
10.2.2 消息報頭(請求頭Request Header)
4. 常用請求頭
- Host: www.baidu.com
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0
(User Agent用戶代理,是Http協議中的一部分,屬於頭域的組成部分,User Agent也簡稱UA。它是一個特殊字符串頭,是一種向訪問網站提供你所使用的瀏覽器類型及版本、操作系統及版本、瀏覽器內核、等信息的標識。通過這個標識,用戶所訪問的網站可以顯示不同的排版從而爲用戶提供更好的體驗或者進行信息統計;例如用手機訪問谷歌和電腦訪問是不一樣的,這些是谷歌根據訪問者的UA來判斷的。UA可以進行僞裝。- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
- Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
- Accept-Encoding: gzip, deflate, br
- Connection: keep-alive
- Cache-Control: max-age=0
- Content-Type: text/html
- Content-Length:120
請求頭包含許多有關的客戶端環境和請求正文的有用信息。例如,請求頭可以聲明瀏覽器所用的語言,請求正文的長度等。例如:
Accept:image/gif.image/jpeg./(請求的圖片內容格式)
Accept-Language:zh-cn(zh-CN 是表示中文,fr-FR 是表示法語。 這是RFC1766定義的語言表示方式)
Connection:Keep-Alive(又稱持久連接、連接重用,Keep-Alive功能使客戶端到服務器端的連接持續有效,當出現對服務器的後繼請求時,Keep-Alive功能避免了建立或者重新建立連接。)
Host:localhost(主機名字)
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)(客戶端身份信息)
Accept-Encoding:gzip,deflate( 以壓縮格式接收請求數據)
10.2.3 空行
必須有,發送回車符和換行符,通知服務器以下不再有請求頭
10.2.4 請求正文(body)
請求頭和請求正文之間是一個空行,這個行非常重要,它表示請求頭已經結束,接下來的是請求正文。請求正文中可以包含客戶提交的查詢字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP請求中,請求的正文只有一行內容。當然,在實際應用中,HTTP請求正文可以包含更多的內容。
案例
10.4 請求方法
請求方法 | 解釋 |
---|---|
GET | 請求獲取Request-URI所標識的資源 |
POST | 在Request-URI所標識的資源後附加新的數據 |
HEAD | 請求獲取由Request-URI所標識的資源的響應消息報頭 |
PUT | 請求服務器存儲一個資源,並用Request-URI作爲其標識 |
DELETE | 請求服務器刪除Request-URI所標識的資源 |
TRACE | 請求服務器回送收到的請求信息,主要用於測試或診斷 |
CONNECT | 保留將來使用 |
OPTIONS | 請求查詢服務器的性能,或者查詢與資源相關的選項和需求 |
PATCH | 對PUT方法的補充,用來對已知資源進行局部更新 |
面試題:psot與get的區別
- Get是不安全的,因爲在傳輸過程,數據被放在請求的URL中;Post是安全的,因爲所有操作對用戶來說都是不可見的。
- Get傳送的數據量較小,這主要是因爲受URL長度限制;Post傳送的數據量較大,一般被默認爲不受限制。
- Get限制Form表單的數據集的值必須爲ASCII字符;而Post支持整個ISO10646字符集。
- Get執行效率卻比Post方法好。Get是form提交的默認方法。
拓展:
- Http的get請求方法提交的數據大小長度並沒有限制,Http協議規範沒有對URL長度進行限制。目前說的get長度有限制,是特定的瀏覽器及服務器對它的限制。
- 各種瀏覽器和服務器的最大處理能力如下:
IE:對URL的最大限制爲2083個字符,若超出這個數字,提交按鈕沒有任何反應。
Firefox:對Firefox瀏覽器URL的長度限制爲:65536個字符。
Safari:URL最大長度限制爲80000個字符。
Opera:URL最大長度限制爲190000個字符。
Chrome:URL最大長度限制爲8182個字符。
Apache(Server):能接受的最大url長度爲8192個字符(這個準確度待定???) Microsoft Internet Information Server(IIS):n能接受最大url的長度爲16384個字符。- 理論上講,post是沒有大小限制的。Http協議規範也沒有進行大小限制,起限制作用的是服務器處理程序的處理能力。
Tomcat下默認post長度爲2M,可通過修改conf/server.xml中的“maxPostSize=0”來取消對post大小的限制。- 注意:若長度超限,則服務端返回414標識
10.5 http響應格式
從服務器端到客戶器端的響應信息,信息由4部分組成:狀態行、消息報頭、空行、響應正文。
10.5.1 狀態行
HTTP-1.1 Status-Code Reason-Phrase CRLF其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。
例如:HTTP/1.1 200 OK \r\n
狀態碼
當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在服務器發出請求。當瀏覽器接收並顯示網頁前,此網頁所在的服務器會返回一個包含HTTP狀態碼的信息頭(server header)用以響應瀏覽器的請求。
HTTP狀態碼的英文爲HTTP Status Code。
下面是常見的HTTP狀態碼:
狀態碼 | 描述 |
---|---|
200 | 請求成功 |
301 | 資源(網頁等)被永久轉移到其它URL |
404 | 請求的資源(網頁等)不存在 |
500 | 內部服務器錯誤 |
HTTP狀態碼分類
HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,後兩個數字沒有分類的作用。HTTP狀態碼共分爲5種類型:
狀態碼 | 解釋 |
---|---|
100-199 | 信息狀態碼,表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程。100(continue)繼續發送 |
200-299 | 成功狀態碼,表示成功接收請求並已完成整個處理過程,常用200(OK)成功接收 |
300-399 | 重定向狀態碼,例如,請求的資源已經移動一個新地址,常用302、307和304 |
400-499 | 客戶端的請求有錯誤,常用404(Not Found),403(Fobidden) |
500-599 | 服務器端出現錯誤,常用 500 |
HTTP狀態碼列表:
狀態碼 | 狀態碼英文名稱 | 中文描述 |
---|---|---|
100 | Continue | 繼續。客戶端應繼續其請求 |
101 | Switching Protocols | 切換協議。服務器根據客戶端的請求切換協議。只能切換到更高級的協議,例如,切換到HTTP的新版本協議 |
200 | OK | 請求成功。一般用於GET與POST請求 |
201 | Created | 已創建。成功請求並創建了新的資源 |
202 | Accepted | 已接受。已經接受請求,但未處理完成 |
203 | Non-Authoritative Information | 非授權信息。請求成功。但返回的meta信息不在原始的服務器,而是一個副本 |
204 | No Content | 無內容。服務器成功處理,但未返回內容。在未更新網頁的情況下,可確保瀏覽器繼續顯示當前文檔 |
205 | Reset Content | 重置內容。服務器處理成功,用戶終端(例如:瀏覽器)應重置文檔視圖。可通過此返回碼清除瀏覽器的表單域 |
206 | Partial Content | 部分內容。服務器成功處理了部分GET請求 |
300 | Multiple Choices | 多種選擇。請求的資源可包括多個位置,相應可返回一個資源特徵與地址的列表用於用戶終端(例如:瀏覽器)選擇 |
301 | Moved Permanently | 永久移動。請求的資源已被永久的移動到新URI,返回信息會包括新的URI,瀏覽器會自動定向到新URI。今後任何新的請求都應使用新的URI代替 |
302 | Found | 臨時移動。與301類似。但資源只是臨時被移動。客戶端應繼續使用原有URI |
303 | See Other | 查看其它地址。與301類似。使用GET和POST請求查看 |
304 | Not Modified | 未修改。所請求的資源未修改,服務器返回此狀態碼時,不會返回任何資源。客戶端通常會緩存訪問過的資源,通過提供一個頭信息指出客戶端希望只返回在指定日期之後修改的資源 |
305 | Use Proxy | 使用代理。所請求的資源必須通過代理訪問 |
306 | Unused | 已經被廢棄的HTTP狀態碼 |
307 | Temporary Redirect | 臨時重定向。與302類似。使用GET請求重定向 |
400 | Bad Request | 客戶端請求的語法錯誤,服務器無法理解 |
401 | Unauthorized | 請求要求用戶的身份認證 |
402 | Payment Required | 保留,將來使用 |
403 | Forbidden | 服務器理解請求客戶端的請求,但是拒絕執行此請求 |
404 | Not Found | 服務器無法根據客戶端的請求找到資源(網頁)。通過此代碼,網站設計人員可設置"您所請求的資源無法找到"的個性頁面 |
405 | Method Not Allowed | 客戶端請求中的方法被禁止 |
406 | Not Acceptable | 服務器無法根據客戶端請求的內容特性完成請求 |
407 | Proxy Authentication Required | 請求要求代理的身份認證,與401類似,但請求者應當使用代理進行授權 |
408 | Request Time-out | 服務器等待客戶端發送的請求時間過長,超時 |
409 | Conflict | 服務器完成客戶端的 PUT 請求時可能返回此代碼,服務器處理請求時發生了衝突 |
410 | Gone | 客戶端請求的資源已經不存在。410不同於404,如果資源以前有現在被永久刪除了可使用410代碼,網站設計人員可通過301代碼指定資源的新位置 |
411 | Length Required | 服務器無法處理客戶端發送的不帶Content-Length的請求信息 |
412 | Precondition Failed | 客戶端請求信息的先決條件錯誤 |
413 | Request Entity Too Large | 由於請求的實體過大,服務器無法處理,因此拒絕請求。爲防止客戶端的連續請求,服務器可能會關閉連接。如果只是服務器暫時無法處理,則會包含一個Retry-After的響應信息 |
414 | Request-URI Too Large | 請求的URI過長(URI通常爲網址),服務器無法處理 |
415 | Unsupported Media Type | 服務器無法處理請求附帶的媒體格式 |
416 | Requested range not satisfiable | 客戶端請求的範圍無效 |
417 | Expectation Failed | 服務器無法滿足Expect的請求頭信息 |
500 | Internal Server Error | 服務器內部錯誤,無法完成請求 |
501 | Not Implemented | 服務器不支持請求的功能,無法完成請求 |
502 | Bad Gateway | 作爲網關或者代理工作的服務器嘗試執行請求時,從遠程服務器接收到了一個無效的響應 |
503 | Service Unavailable | 由於超載或系統維護,服務器暫時的無法處理客戶端的請求。延時的長度可包含在服務器的Retry-After頭信息中 |
504 | Gateway Time-out | 充當網關或代理的服務器,未及時從遠端服務器獲取請求 |
505 | HTTP Version not supported | 服務器不支持請求的HTTP協議的版本,無法完成處理 |
10.5.2 消息報頭
服務器傳遞給客戶端用於說明服務器的一些信息,以及將來繼續訪問該資源時的策略。
Location:Location響應報頭域用於重定向接受者到一個新的位置。
Server:Server響應報頭域包含了服務器用來處理請求的軟件信息。�WWW-Authenticate:WWW-Authenticate響應報頭域必須被包含在401(未授權的)響應消息中下面是WWW-Authenticate響應報頭域的一個,例子:WWW-Authenticate: Basic realm="Basic Auth Test!“
Content-Encoding:Content-Encoding實體報頭域被使用作媒體類型的修飾符.
Content-Language:Content-Language實體報頭域描述了資源所用的自然語言。
Content-Length: Content-Length實體報頭域用於指明正文的長度.
Content-Type:Content-Type實體報頭域用語指明發送給接收者的實體正文的媒體類型。
Last-Modified:Last-Modified實體報頭域用於指示資源最後的修改日期及時間。
Expires: Expires實體報頭域給出響應過期的日期和時間。
Expires實體報頭域使用的日期和時間必須是RFC 1123中的日期格式,例如:�Expires: Thu, 15 Sep 2005 16:00:00 GMT
10.5.3 響應正文
服務端返回給客戶端的HTML文本內容,或者其他格式的數據,比如:視頻流、圖片或者音頻數據。
如果請求的是HTML頁面,那麼返回的就是HTML代碼。如果是JS就是JS代碼。
7. Http協議的特點
①支持客戶/服務器模式。
②簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、 HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不同。 由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
③靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
④無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求, 並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。
⑤無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。 缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每 次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快
8. Http 1.0 與 Http1.1的區別
1.0協議,客戶端與web服務器建立連接後,只能獲得一個web資源! 而1.1協議,允許客戶端與web服務器建立連接後,在一個連接上獲取多個web資源!
3. TCP與UDP區別:
TCP:
建立連接
安全可靠協議
以流進行數據傳遞,無大小限制
三次握手協議,四次揮手UDP:
不建立連接
不可靠協議
以數據包傳遞,有大小限制64K
04. Socket以及Http:
Socket:長連接,理論上客戶端和服務端一旦建立連接,則不會主動斷掉;但是由於各種環境因素可能會是連接斷開,比如說:服務器端或客戶端主機down了,網絡故障,或者兩者之間長時間沒有數據傳輸,網絡防火牆可能會斷開該鏈接已釋放網絡資源。所以當一個socket連接中沒有數據的傳輸,那麼爲了位置連續的連接需要發送心跳消息,具體心跳消息格式是開發者自己定義的。
Http:短連接,即客戶端向服務器發送一次請求,服務器端響應後連接即會斷掉。