網絡基礎

知識內容:html

1.C/S架構與B/S架構前端

2.IP地址、端口、域名與URLnode

3.網絡分層web

4.TCP/UDP協議編程

5.HTTP協議設計模式

6.socket瀏覽器

 

 

 

1、C/S架構與B/S架構緩存

1.C/S架構:client-server架構安全

C/S即client/server架構,是當前大多數網絡編程所採用的架構模型。經過它能夠充分利用兩端硬件環境的優點,將任務合理分配到client端和server端來實現,下降了系統的通訊開銷。client/server架構通常有一臺後臺計算機做爲服務器,用戶的我的機上的軟件程序做爲客戶端服務器

server:服務端     client:客戶端

典型應用:QQ、LOL

 

 

2.B/S架構:browser-server架構

B/S即browser/server架構,是web興起後流行起來的一種網絡架構模式,B/S架構使用瀏覽器看成客戶點的應用軟件,因此B/S架構能夠看做C/S的一種特殊狀況,是對C/S架構模式的一種改進

serve:服務端     browser:瀏覽器

典型應用:全部的網站

 

 

3.B/S架構的優勢

a.便於部署、維護和升級: B/S的應用程序都部署在後臺服務器上,通常無需更新客戶端軟件(即瀏覽器)

b.跨平臺、對客戶機要求低:  客戶端的計算機硬件環境千差萬別,傳統C/S架構須要對不一樣操做系統開發不一樣的客戶端軟件,而每種操做系統都支持web瀏覽器,基於web開發的B/S架構系統只需開發一套客戶端程序而且客戶端程序是部署在web服務器上,由瀏覽器在訪問時下載到客戶端運行 (注: 這裏的客戶端程序通常指前端代碼 eg: HTML\CSS\JavaScript等)

c.對安全性要求極高:  B/S架構系統通常創建在廣域網上,也就是有不少人能訪問,面向的是未知用戶,因此開發B/S系統時更要注意系統的防攻擊、數據加密、備份、非僞造等能力

 

 

4.B/S架構與C/S架構的關係

B/S架構其實C/S架構的一種,不過client變成了browser,browser其實也是一種客戶端

 

 

 

2、IP地址、端口、域名與URL

1.IP地址

(1)IP定義

IP是一個網絡層中的概念,是物聯網上的主機在網絡中具備的邏輯地址,計算機網絡中採用IP地址表示網絡地址。如今的IP地址能夠分爲IPv4和IPv6兩種

 

(2)IPv4和IPv6

IPv4: 一個32位二進制數的地址,通常表示爲4個十進制數字,好比: 172.16.32.三、10.38.96.243等 

一個IPv4地址被劃分爲兩部分: 網絡地址和主機地址。根據網絡地址和主機地址的不一樣位數規定,能夠將IP地址劃分爲3類:

A(8位網絡地址和24位主機地址)  B(16位網絡地址和16位主機地址)  C(24位網絡地址和8位主機地址),因爲某些緣由,A類和B類地址幾乎分配殆盡

IPv6: 因爲IPv4的數量限制,就推出了IPv6,IPv6由1128位二進制數表示,在表達方式上使用8個16進制數字表示,好比: d23:4334:0:0:23:ade:9853:23

IPv4與IPv6比較:  單從數量級上來講,IPv6所擁有的地址容量大概是IPv4的8*10^28倍,達到2^128個。IPv6不但解決了網絡地址資源數量的問題,也爲除了計算機外的設備分配IP地址來連入互聯網提供了方便。固然目前普遍使用的仍是IPv4,可是毫無疑問IPv6將是將來IP地址的主流。

 

(3)IP\MAC\ARP之間的關係

爲何須要IP地址:爲了方便找到其餘主機,能夠經過ARP協議將IP地址轉化成MAC地址, MAC地址是一個主機的惟一標識(全球惟一)

關於ARP協議:https://baike.baidu.com/item/ARP/609343?fr=aladdin&fromid=1742212&fromtitle=ARP%E5%8D%8F%E8%AE%AE

獲取本機的IP地址和MAC地址:

 1 # __author__ = "wyb"
 2 # date: 2018/5/11
 3 # 獲取本機的IP地址和MAC地址
 4 
 5 import socket
 6 import uuid
 7 
 8 ip = socket.gethostbyname(socket.gethostname())
 9 node = uuid.getnode()
10 macHex = uuid.UUID(int=node).hex[-12:]
11 mac = []
12 for i in range(len(macHex))[::2]:
13     mac.append(macHex[i:i+2])
14 mac = ':'.join(mac)
15 print('IP:', ip)
16 print('MAC:', mac)

 

(4)保留IP地址

保留IP地址:保留IP地址不會在互聯網中使用,其主要被用在企業機構內部做爲局域網地址使用

保留地址主要在如下四類:

  • A類:10.0.0.0-10.255.255.255(長度至關於1個A類IP地址)
  • A類:100.64.0.0-100.127.255.255
  • B類:172.16.0.0-172.31.255.255(長度至關於16個連續的B類IP地址)
  • C類:192.168.0.0-192.168.255.255(長度至關於256個連續的C類IP地址)

這些地址是不會被互聯網分配的,也不會被路由經過

127.0.0.1 -> 迴環地址

 

 

2.端口

在web中,端口是一個軟件級的概念,是虛擬端口,IP地址是網絡層的尋址方式,而端口就是傳輸層的尋址方式。端口是一個16位二進制數表達的正整數,數字範圍爲0到65535

注:在同一時間內只能有只會有一個程序佔用一個端口,不可能同時有兩個程序佔用同一個端口,通常狀況下咱們本身使用8000以後的端口

經常使用的默認端口號:

 

IP地址與端口:

  • IP-->肯定一臺主機
  • 端口-->肯定惟一的程序
  • IP+端口-->肯定惟一的一臺機器上的惟一的一個程序

 

 

3.域名

IP地址由純數字組成,讓人難以記住,且不能表達功能、地理位置等信息,因此標準化組織就定義了域名這種主機地址表示方式

域名: 域名是應用層概念,是由一串用點分割的名字組成的網絡上某臺計算機或計算機組的名稱,域名能夠說是IP地址的一個面具

常見的域名: www.baidu.com   www.sina.com.cn

注: 域名中的符號都由英文字母和數字組成,每一個標點不超過63個字符,也不區分大小寫字母,標號中除了連字符(-)之外不能使用任何其餘標點符號

 

 

4.URL

URL: 全球統一資源定位符  其實就是一個連接,連接背後是資源,資源能夠是一張圖片、一首歌、一張網頁、、、

URL的標準形式:   [協議]://[主機]:[端口]/[路徑]?[參數]      注: 通常協議有: http、https、ftp等  端口通常都省略了

eg:  https://www.nowcoder.com/1476481

    http://www.cnblogs.com/wyb666/p/8494861.html

URL組成(四部分)

  • 協議      http, httpshttps 是加密的 http
  • 主機      g.cn  zhihu.com之類的網址
  • 端口      HTTP 協議默認是 80,所以通常不用填寫
  • 路徑      下面的「/」和「/question/31838184」都是路徑

http://www.zhihu.com/

http://www.zhihu.com/question/31838184

 

 

 

3、網絡分層

TCP/IP四層            TCP/TP五層              OSI七層模型

每層的物理設備以下

每層的常見協議以下

 

OSI模型各層對應的協議:

  • 應用層 ->     DNS(域名解析) FTP(文件傳輸) HTTP(超文本傳輸協議,用於網頁中) SMTP(簡單郵件傳輸協議) TELNET(遠程登陸協議)
  • 傳輸層 ->     TCP UDP
  • 網絡層 ->     IP協議
  • 數據鏈路層 -> ARP協議

 

 

 

4、TCP/UDP協議

1.TCP

TCP是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議

TCP的特性:  有序性、真確性、可靠性、可控性,TCP使用面向鏈接的方式收發數據,在收發數據以前需創建鏈接,在數據傳輸以後釋放鏈接,創建鏈接時採用3次握手的方式來保證發送的可靠性、可控性

在雙方成功握手以後將在兩個應用程序之間創建一個全雙工的通訊,這個全雙工通訊將佔用兩個計算機之間的通訊線路,直到它被一方關閉或雙方關閉爲止

全雙工:雙方能夠收發消息,接受消息

應用:web瀏覽器、電子郵件、文件傳輸

爲何鏈接的時候是三次握手,關閉的時候倒是四次揮手?
由於當Server端收到Client端的SYN鏈接請求報文後,能夠直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。可是關閉鏈接時,當Server端收到FIN報文時,極可能並不會當即關閉鏈接,因此只能先回復一個ACK報文,告訴Client端,"你發的FIN報文我收到了"。只有等到我Server端全部的報文都發送完了,我才能發送FIN報文,所以不能一塊兒發送。故須要四步握手

 

 

2.UDP

UDP是一種無鏈接的傳輸層協議,提供面向對象的簡單的不可靠信息傳送服務,雖然UDP不可靠,可是因爲UDP的開銷小通常UDP適用於吞吐量大(輕量級控制)、能夠承受信息丟失(傳輸不可靠)的應用場景。並且在網絡情況良好的狀況下,UDP的丟包率在實際狀況下也很是少,因此有不少經典的協議採用UDP進行傳輸,好比SNMP、NFS、DNS等

應用:域名系統(DNS)、視頻流

 

 

3.TCP與UDP

TCP---傳輸控制協議,提供的是面向鏈接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間創建一個TCP鏈接,以後才能傳輸數據。TCP提供超時重發,丟棄重複數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另外一端。

UDP---用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,可是並不能保證它們能到達目的地。因爲UDP在傳輸數據報前不用在客戶和服務器之間創建一個鏈接,且沒有超時重發等機制,故而傳輸速度很快

 

 

4.TCP、UDP與socket

 

 

 

5、HTTP協議

1.HTTP介紹

HTTP即超文本傳輸協議,是web中的最主要的web應用層標準,B/S架構的應用系統用HTTP在客戶端於服務器之間進行傳輸數據。HTTP能夠傳輸任何格式的數據,好比說文本、圖片甚至視頻均可以經過HTTP進行傳輸

瀏覽器(客戶端)按照規定的格式發送文本數據(請求)到服務器 -> 服務器解析請求,按照規定的格式返回文本數據到瀏覽器 -> 瀏覽器解析獲得的數據,並作相應處理

 

 

2.HTTP流程

 

  • 客戶端鏈接到Web服務器: HTTP客戶端,一般是瀏覽器,與Web服務器的HTTP端口(默認爲80)創建一個TCP套接字鏈接。例如,http://www.baidu.com
  • 發送HTTP請求: 經過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。
  • 服務器接受請求並返回HTTP響應: Web服務器解析請求,定位請求資源。服務器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成
  • 釋放鏈接TCP鏈接: 若connection 模式爲close,則服務器主動關閉TCP鏈接,客戶端被動關閉鏈接,釋放TCP鏈接;若connection 模式爲keepalive,則該鏈接會保持一段時間,在該時間內能夠繼續接收請求
  • 客戶端瀏覽器解析HTML內容: 客戶端瀏覽器首先解析狀態行,查看代表請求是否成功的狀態代碼。而後解析每個響應頭,響應頭告知如下爲若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示

例如:在瀏覽器地址欄鍵入URL,按下回車以後會經歷如下流程:

  • 瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址
  • 解析出 IP 地址後,根據該 IP 地址和默認端口 80,和服務器創建TCP鏈接
  • 瀏覽器發出讀取文件(URL 中域名後面部分對應的文件)的HTTP 請求,該請求報文做爲 TCP 三次握手的第三個報文的數據發送給服務器
  • 服務器對瀏覽器請求做出響應,並把對應的 html 文本發送給瀏覽器
  • 釋放 TCP鏈接
  • 瀏覽器將該 html 文本並顯示內容

HTTP端口號默認爲80,當服務器發現有客戶端創建鏈接並提交了一個HTTP請求後,就根據請求的內容執行相應的操做,並將結果返回給客戶端

 

 

3.HTTP特色

 1 HTTP協議屬於應用層,並工做於客戶端-服務端架構上  2  3 HTTP協議是用於從服務器傳輸超文本到本地瀏覽器的傳送協議  4  5 HTTP是一個基於TCP/IP通訊協議來傳遞數據的協議  6  7 瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。Web服務器根據接收到的請求後,向客戶端發送響應  8  9 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑;因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度快 10 11 靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記 12 13 無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間 14 15 無狀態:無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快

HTTP協議流程以下圖:

 

 

4.HTTP請求格式和響應格式

(1)HTTP請求格式

請求首行;        // 請求方式 請求路徑 協議和版本,例如:GET /index.html HTTP/1.1
請求頭信息;      // 請求頭名稱:請求頭內容,即爲key:value格式,例如:Host:localhost
空行;           // 用來與請求體分隔開
請求體。         // GET沒有請求體,只有POST有請求體。

瀏覽器發送給服務器的內容就這個格式的,若是不是這個格式服務器將沒法解讀!在HTTP協議中,請求有不少請求方法,其中最爲經常使用的就是GETPOST

 

HTTP默認的請求方法就是GET

注意:

  • 沒有請求體
  • 數據量有限制!
  • GET請求數據會暴露在瀏覽器的地址欄中

GET請求經常使用的操做:
       1. 在瀏覽器的地址欄中直接給出URL,那麼就必定是GET請求
       2. 點擊頁面上的超連接也必定是GET請求
       3. 提交表單時,表單默認使用GET請求,但能夠設置爲POST

 

(2)HTTP響應格式

通常狀況下,服務器接收並處理客戶端發過來的請求後會返回一個HTTP的響應消息。

HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。

  • 第一部分:狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成。
  • 第二部分:消息報頭,用來講明客戶端要使用的一些附加信息
  • 第三部分:空行,消息報頭後面的空行是必須的
  • 第四部分:響應正文,服務器返回給客戶端的文本信息。

關於響應狀態碼:

狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操做
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx:服務器端錯誤--服務器未能實現合法的請求

常見狀態碼:
200 OK                        //客戶端請求成功
400 Bad Request               //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized              //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用 
403 Forbidden                 //服務器收到請求,可是拒絕提供服務
404 Not Found                 //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error     //服務器發生不可預期的錯誤
503 Server Unavailable        //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

 

 

5.GET和POST請求的區別

GET請求

GET /books/?sex=man&name=Professional HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive

注意最後一行是空行
POST請求

POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

GET提交,請求的數據會附在URL以後(就是把數據放置在HTTP協議頭中)

POST提交:把提交的數據放置在是HTTP包的包體中。上文示例中紅色字體標明的就是實際的傳輸數據

所以,GET提交的數據會在地址欄中顯示出來,而POST提交,地址欄不會改變

傳輸數據的大小:首先聲明:HTTP協議沒有對傳輸的數據大小進行限制,HTTP協議規範也沒有對URL長度進行限制。

而在實際開發中存在的限制主要有:

  • GET:特定瀏覽器和服務器對URL長度有限制,例如 IE對URL長度的限制是2083字節(2K+35)。對於其餘瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操做系 統的支持。所以對於GET提交時,傳輸數據就會受到URL長度的 限制
  • POST:因爲不是經過URL傳值,理論上數據不受 限。但實際各個WEB服務器會規定對post提交數據大小進行限制,Apache、IIS6都有各自的配置

 

GET和POST的區別:

  • GET提交的數據會放在URL以後,以?分割URL和傳輸數據,參數之間以&相連,POST方法是把提交的數據放在HTTP包的Body中
  • GET提交的數據大小有限制(由於瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制
  • GET方式須要使用Request.QueryString來取得變量的值,而POST方式經過Request.Form來獲取變量的值
  • GET方式提交數據,會帶來安全問題,好比登陸頁面時經過GET方式提交數據時,用戶名和密碼將出如今URL上,若是頁面能夠被緩存或者其餘人能夠訪問這臺機器,就能夠從歷史記錄得到該用戶的帳號和密碼

 

 

 

6、socket

1.socket概念

socket本質上就是在2臺網絡互通的電腦之間,架設一個通道,兩臺電腦經過這個通道來實現數據的互相傳遞。 咱們知道網絡 通訊 都 是基於 ip+port 方能定位到目標的具體機器上的具體服務,操做系統有0-65535個端口,每一個端口均可以獨立對外提供服務,若是 把一個公司比作一臺電腦 ,那公司的總機號碼就至關於ip地址, 每一個員工的分機號就至關於端口, 你想找公司某我的,必須 先打電話到總機,而後再轉分機

創建一個socket必須至少有2端, 一個服務端,一個客戶端, 服務端被動等待並接收請求,客戶端主動發起請求, 鏈接創建以後,雙方能夠互發數據

 

2.socket鏈接過程

服務器監聽->服務器socket並不定位具體的客戶端socket,而是處於等待連接的狀態,實時監控網絡狀態

客戶端請求->客戶端socket發出鏈接請求,要鏈接的目標是服務端socket,爲此,客戶端socket必須先描述它要鏈接的服務端socket,指出服務端socket的地址和端口號,而後想服務端socket提出鏈接請求

鏈接確認->當服務端socket監聽到或者說是接收到客戶端socket的鏈接請求,它就響應客戶端socket的請求,創建一個新的線程,把服務端socket的描述發給客戶端,一旦客戶端確認了,鏈接就行了。服務端socket基礎處於監聽狀態

 

 

3.socket兩種模式

socket有兩種操做方式:面向鏈接和無鏈接的

  • 面向鏈接的socket操做就像一部電話,必須創建一個鏈接和一個呼叫,全部事情在到達是的順序和它們出發的順序同樣
  • 無鏈接的socket就想一個郵件投遞,沒有什麼保證,順序極可能會不一樣

具體使用什麼模式得看場景,若是可靠性更重要的話,用面向鏈接的好一些,另外面向鏈接的操做使用tcp協議,效率會低一些,可是安全性高

無鏈接的操做使用數據報協議(udp),這種模式下的socket不須要鏈接目的socket,只是簡單的透出數據報,無鏈接的操做是高效的,可是不安全。

 

 

4.socket層

 

5.理解socket

Socket是應用層與TCP/IP協議族通訊的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket接口後面,對用戶來講,一組簡單的接口就是所有,讓Socket去組織數據,以符合指定的協議

其實socket就是一個模塊,咱們經過調用模塊中的方法來創建兩個進程之間的通訊

相關文章
相關標籤/搜索