Python 網絡編程 (全)

計算機網絡html

1.網絡分層
    ①(DoD模型):鏈路層(網絡接口層),網絡層(網際層),傳輸層,應用層  
    ②(OSI開放互聯模型):物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層java

2. OSI參考模型 
    ①應用層:提供用戶接口,特指網絡應用程序,能產生網絡流量的應用程序 
    ②表示層:表示數據,如採用二進制或ASCII等,處理數據,如數據加密,數據壓縮等 
    ③會話層:會話層的做用主要是創建,維護,管理應用程序之間的會話 
    ④傳輸層:提供可靠或不可靠的傳輸,可以錯誤糾正,糾正失敗可以重傳 
    ⑤網絡層:爲網絡設備提供邏輯地址,根據數據包的邏輯地址選擇最佳網絡路徑 
    ⑥數據鏈路層:常被稱爲MAC層,它管理網絡設備的物理地址,因此物理地址也稱爲MAC地址 
    ⑦物理層:主要負責二進制數據比特流在設備之間的傳輸python

3. 數據封裝 
    數據在傳輸層添加源端口和目標端口,咱們稱之爲數據段或消息,可靠傳輸稱爲數據段,不可靠傳輸稱爲消息.在網絡層會爲數據段或消息添加目標地址和源地址,稱爲數據包.數據包在數據鏈路層添加了目標MAC地址,源MAC地址和幀校驗序列(FCS)數據幀. 
    注意:數據包包括數據,端口,IP地址.數據幀包括數據,端口,IP地址,MAC地址web

網絡層的協議分析 算法

在TCP/IP協議棧中網絡層有四個協議IP,IGMP,ICMP和ARP: 
    ①因特網協議(IP) 
    ②因特網控制報文協議(ICMP) 
    ③地址解析協議(ARP) 
    ④逆地址解析協議(RARP) 
    ⑤代理ARP 
    ⑥組管理協議(IGMP)數據庫

1.IP數據報:也稱IP分組,是指IP層傳輸的數據單元及其格式,同時也是指IP層的無鏈接數據報傳輸機制和無鏈接服務 
2.接口層的做用(包含ARP地址解析協議,RARP逆地址解析協議)    
    ①爲IP模塊發送和接收IP數據報 
    ②爲ARP模塊發送ARP請求和接收ARP應答 
    ③爲RARP模塊發送RARP請求和接收RARP應答 
    ④目前使用最普遍的鏈路層協議有以太網,串行接口鏈路等 
    ⑤MAC地址:48位(6字節)的目標地址和源地址編程

3.ARP協議工做過程 
    ①首先在本身的ARP告訴緩存中找這個IP地址與MAC地址的映射關係 
    ②若是找不到,則ARP就發送一份ARP請求給以太網上的每一個主機,這個過程稱爲ARP廣播 
    ③目的主機的ARP層收到了這份ARP廣播後,識別出發送方在詢問他的地址,因而就發送一個包含IP地址及對應物理地址的ARP應答發送給發送方 
    ④收到ARP應答後,發送方就能夠傳IP數據報了windows

4. RARP協議 
    ①RARP用於支持誤判工做站在引導或啓動時得到自身的IP地址(無盤指沒有存放有引導所需操做文件的輔助存儲器),常常和TFTP(簡單文件傳輸協議)一塊兒使用,即經過RARP得到IP地址 
    ②從接口卡讀取惟一的物理地址(MAC地址) 
    ③發送一份RARP請求某個RARP服務器響應該無盤系統的IP地址,在網絡上廣播,請求響應IP地址的響應 
    ④若是網絡上有RARP服務器收到請求,就發送一個RARP應答,包含無盤主機分配的IP地址,一般是單播傳送的 
    ⑤假如網絡上沒有RARP服務器,無盤主機會按必定的時間間隔持續地發送RARP請求到網絡上後端

5.ICMP協議(Internet control message protocol) 
    ①ICMP可提供有關網絡可鏈接性的信息,提供可達性,交互錯誤,路由錯誤報告及控制信息等IP不可以提供的信息,並把信息返回給發送方,是TCP/IP網絡層的重要協議 
    ②IP負責把數據從一個網絡傳送到另外一個網絡,而IP協議自己沒有差錯控制機制,若是在傳遞過程當中出現因某種緣由不能發送的IP數據,ICMP將被用來傳遞差錯報文及其餘須要注意的信息瀏覽器

6.IP協議(Internet protocol) 
    ①IP協議(網際協議)是TCP/IP協議族中最核心的協議,全部的TCP,UDP,ICMP及IGMP數據都是IP數據報格式傳輸的 
    ②IP層主要負責路由,即數據包選路,使經過由路由器鏈接的互聯網絡傳輸數據報

7.IP層的傳輸特色 
    ①IP提供的是不可靠,無鏈接的數據報傳送 
    ②不可靠的意思是不能保證IP數據報能成功地到達目的地,IP僅提供盡力傳送服務,負責數據的路由與傳輸,卻並不處理數據報的內容 
    ③無鏈接是IP並不維護任何關於後續數據報的狀態信息,每一個數據報的處理是相互獨立的,這也說明,IP數據報不按順序發送順序接收

8.IP路由選擇 
    當目的主機與源主機不是直接相連或處在同一個共享網絡上,那麼IP數據報就不能直接送到目的主機上,而須要路由器來轉發數據報,一般主機把數據報發往一個默認的路由器上,由路由器決定怎麼發送數據報

9.IP選路機制 
    ①搜索匹配的主機地址 
    ②搜索匹配的網絡地址 
    ③搜索默認路由 
    ④若是路由表中沒有默認項,而又沒有找到匹配項,這時若是數據報是由本地主機產生的,那麼可能返回主機不可達差錯,網絡不可達差錯

動態選路協議(網絡層)

1.靜態選路和動態選路 
    ①靜態選路:就是在配置接口時,以默認的方式生成路由表項,並經過ICMP報文來更新表項 
    ②動態選路:管理員不須要像靜態路由同樣,對路由表進行手工維護,而是在每臺路由器上運行一個路由表管理程序

2.動態選路特徵: 
    ①不改變選路機制,還是按(主機,網絡,默認路由) 
    ②改變選路策略:路由項目由守護程序動態增長或刪除 
    ③動態選路由守護程序完成

3.RIP協議(由UDP傳輸的動態選路協議或動態路由協議)
    ①RIP是最 普遍使用的動態選路協議,協議採用距離向量算法,即相鄰的路由器之間互相交換整個路由表並進行矢量的疊加,最終得到整個網絡的路由信息 
    ②RIP以跳數做爲路由器之間距離的度量,全部直鏈接口的跳數爲1,每增長一個路由器,可達到的網絡跳數加1,爲限制路由收斂的時間,RIP規定跳數取值爲0~15,大於等於16跳數表示目的不可達,某種程度上限制了網絡的大小

4.OSRF協議(內部網關協議和鏈路狀態協議) 
    ①OSRF協議是除RIP以外的另外一個內部網關協議,與採用距離向量的RIP不一樣的是,OSRF是一個鏈路狀態協議,於是克服了RIP的全部限制,OSRF在實現上直接使用IP協議而再也不使用傳輸層協議,如UDP 
    ②鏈路狀態包括路由器鏈路的端口地址,網絡掩碼,此鏈路互聯的網絡及網絡類型等,它構成了路由器的鏈路狀態數據庫,是路由器進行路由決策主要依據

IP地址

1.什麼是Ip地址 
    網絡地址是一個網絡層概念,是互聯網上的主機在網絡中具備的邏輯地址,Internet上採用的IP地址表示網絡地址

2.IP地址的做用 
    IP地址:用來在網絡中標記一臺電腦的一串數字,好比192.168.1.1;在本地局域網上是唯一的

3.IP地址的分類 
    ①每個IP地址包括兩部分:網絡地址和主機地址 
    ②A類網絡號:主機數2^24-2,子網數2^22 
    ③B類網絡號:主機數2^16-2,子網數2^14 
    ④C類網絡號:主機數2^8-2,子網數2^6 
    ⑤私有ip: 
        在這麼多網絡IP中,國際規定有一部分IP地址是用於咱們的局域網使用,也就是屬於私網IP,不在公網中使用的,它們的範圍是: 
        10.0.0.0~10.255.255.255 
        172.16.0.0~172.31.255.255 
        192.168.0.0~192.168.255.255 
        可是最大的表明廣播地址,最小的表明網絡號,不容許使用,也就是在局域網中,Ip地址最大是254,最小是1

4.域名
    ①因爲IP地址由純數字組成,很難讓人記憶,且不能表達功能,地理位置等附加含義,因此在TCP/IP網絡造成不久,標準化組織就定義了這種主機地址表達方式 
    ②域名是一個應用層概念,是由一串用點分隔的名字組成的Internet上某臺計算機或計算機組的名字,用於在數據傳輸時標誌計算機的電子方位(有時也指地理位置,地理上的域名或有行政自主權的一個地方區域) 
    ③域名其實就是IP地址的“面具”,熟知的有www.baidu.com

5.子網掩碼 
    ①子網掩碼不能單獨存在,它必須結合IP地址一塊兒使用 
    ②子網掩碼只有一個做用,就是將某個IP地址劃分紅網絡地址和主機地址兩部分子網掩碼的設定必須遵循必定的規則 
    ③與IP地址相同,子網掩碼的長度也是32位 
    ④網絡掩碼與ip地址相與就是網絡號,假設IP地址爲192.168.1.1子網掩碼爲255.255.255.0,那麼此網絡號就是192.168.1.0

6.tcp和端口 
    IP地址是網絡層的尋址方式,端口是傳輸層的尋址方式

socket(插口,套接字)簡介

1.什麼是socket 
    ①socket(套接字)接口是應用程序與TCP/IP協議棧的接口,它定義了一組函數或例程來支持TCP/IP網絡應用程序開發 
    ②socket(簡稱 套接字) 是進程間通訊的一種方式,它與其餘進程間通訊的一個主要不一樣是: 
    ③它能實現不一樣主機間的進程間通訊

2.建立socket 
    ①在 Python 中 使用socket 模塊的函數 socket 就能夠完成socket.socket(AddressFamily, Type) 
    ②Address Family:能夠選擇 AF_INET(用於 Internet 進程間通訊) 或者 AF_UNIX(用於同一臺機器進程間通訊),實際工做中經常使用AF_INET 
    ③Type:套接字類型,能夠是 SOCK_STREAM(流式套接字,主要用於 TCP 協議)或者 SOCK_DGRAM(數據報套接字,主要用於 UDP 協議)

udp介紹

1.UDP介紹 
    UDP採用無鏈接的方式來提供通訊服務,是傳輸層中最簡單的協議

2.UDO特色 
    ①UDP是一個簡單的,面向數據報的傳輸層協議,無鏈接協議,簡單地把TCP/IP應用層獲得的消息打包到數據板中 
    ②UDP沒有提供任何類型的內置出錯檢查或重傳能力來提升可靠性,這種方法稱爲盡最大能力努力交付 
    ③因爲通信不須要鏈接,因此能夠實現廣播發送 
    ④UDP傳輸數據時有大小限制,每一個被傳輸的數據報必須限定在64KB以內 
    ⑤適用狀況: 
        UDP是面向消息的協議,通訊時不須要創建鏈接,數據的傳輸天然是不可靠的,UDP通常用於多點通訊和實時的數據業務,好比: 
        語音廣播 
        視頻 
        QQ 
        TFTP(簡單文件傳送) 
        SNMP(簡單網絡管理協議) 
        RIP(路由信息協議,如報告股票市場,航空信息) 
        DNS(域名解釋)

3.DNS(域名系統,使用UDP協議工做) 
    ①功能:每一個IP地址均可以有一個主機名,主機名由一個或多個字符串組成,字符串之間用小數點隔開。有了主機名,就不要死記硬背每臺IP設備的IP地址,只要記住相對直觀有意義的主機名就好了。這就是DNS協議的功能 
    ②主機名到IP地址的映射有兩種方式: 
        靜態映射,每臺設備上都配置主機到IP地址的映射,各設備獨立維護本身的映射表,並且只供本設備使用; 
        動態映射,創建一套域名解析系統(DNS),只在專門的DNS服務器上配置主機到IP地址的映射,網絡上須要使用主機名通訊的設備,首先須要到DNS服務器查詢主機所對應的IP地址。

4.DHCP協議(動態主機配置協議,使用UDP協議工做) 
    動態主機配置協議(DHCP)是在TCP/IP網絡上使計算機得到它所須要的全部配置信息的協議,不只容許計算機快讀動態地獲取IP地址和子網掩碼,還能夠獲取其餘網絡配置信息,如DSN服務器  
       DHCP採用UDP做爲傳輸協議,DHCP服務器使用67號端口,客戶機使用68號端口

5.SNMP協議(簡單網絡管理協議,使用UDP協議工做) 
    最先提出的網絡管理協議,也是最先提出的網絡管理協議,其前身是簡單網關監控協議,用來對通訊線路進行管理 
    簡單網絡管理協議(SNMP),由一組網絡管理的標準組成,包含一個應用層協議(application layer protocol)、數據庫模型(database schema)和一組資源對象。該協議可以支持網絡管理系統,用以監測鏈接到網絡上的設備是否有任何引發管理上關注的狀況

6.UDP的通訊過程
Snip20160902_79.png

TFTP項目  

1.TFTP協議介紹 
    ①TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議) 
    ②是TCP/IP協議族中的一個用來在客戶端與服務器之間進行簡單文件傳輸的協議 
    ③特色: 
        簡單 
        佔用資源小 
        適合傳遞小文件 
        適合在局域網進行 
        傳遞端口號爲69 
        基於UDP實現

2.TFTP下載過程 
    ①TFTP服務器默認監聽69號端口 
    ②當客戶端發送下載請求(即讀請求)時,須要向服務器的69端口發送 
    ③服務器若批准此請求,則使用一個新的、臨時的 端口進行數據傳輸 
    ④當服務器找到須要如今的文件後,會馬上打開文件,把文件中的數據經過TFTP協議發送給客戶端 
    ⑤若是文件的總大小較大(好比3M),那麼服務器分屢次發送,每次會從文件中讀取512個字節的數據發送過來 
    ⑥由於發送的次數有可能會不少,因此爲了讓客戶端對接收到的數據進行排序,因此在服務器發送那512個字節數據的時候,會多發2個字節的數據,用來存放序號,而且放在512個字節數據的前面,序號是從1 開始的 
    ⑦由於須要從服務器上下載文件時,文件可能不存在,那麼此時服務器就會發送一個錯誤的信息過來,爲了區分服務發送的是文件內容仍是錯誤的提示信息,因此又用了2個字節 來表示這個數據包的功能(稱爲操做碼),而且在序號的前面 
    操做碼    功能 
        1        讀請求,即下載 
        2        寫請求,即上傳 
        3        表示數據包,即DATA 
        4        確認碼,即ACK 
        5        錯誤

3.怎麼完成下載 
    ①建立一個空文件 
    ②向裏面寫數據 
    ③關閉

4.什麼樣的狀況下知道了服務器發送完畢 
    若是接收到的數據總長度小於516那麼意味着 發送完畢

5.構造下載請求數據

cmd_buf = struct.pack("!H8sb5sb",1, "test.jpg",0,"octet",0)

    解釋:!表示大端格式組織(上網),H表示佔用兩個字節(幫1佔坑),8s佔用8個字節(幫test.jpg佔坑),b佔用一個字節(幫0佔坑)

TCP編程

1.TCP和UDP相關介紹  
    ①tcp:傳輸控制協議 
    ②特色:穩定 
        相對於udp而言,要慢一些 
        web服務器都是使用的tcp 
    ③通訊模型:udp通訊模型中,在通訊開始以前,必定要先創建相關的連接,才能發送數據,相似於生活中,"打電話" 
    ④udp:用戶數據報協議 
    ⑤特色:不穩定 
        適當比tcp要快一些 
    ⑥通訊模型:udp通訊模型中,在通訊開始以前,不須要創建相關的連接,只須要發送數據便可,相似於生活中,"寫信"

2.tcp服務器構建流程 
    ①socket建立一個套接字 
    ②bind綁定ip和port 
    ③listen使套接字變爲能夠被動連接 
    ④accept等待客戶端的連接 
    ⑤recv/send接收發送數據 
    ⑥若是接收到的客戶端發送的數據長度爲0,那麼意味着客戶端經過調用close下線

3.tcp客戶端構建流程 
    ①若是想要完成一個tcp客戶端的功能,須要的流程以下:   
    ②socket建立一個套接字 
    ③鏈接connect服務器 
    ④send/recv接收和發送數據(不須要再填寫地址了) 
    ⑤關閉套接字      

4.tcp特性總結 
    ①有序性:爲每一個數據包編排序號,使接收端可以判斷前後到達的次序混亂的數據包的本來順序 
    ②正確性:tcp用一個checksum函數來檢驗數據是否有錯誤,在發送和接收時都要計算校驗和,這使得接收端可以判斷數據是否在傳輸過程當中被破壞 
    ③可靠性:發送端採用超時重傳並有確認機制識別錯誤或丟失數據,進行重發 
    ④可控性:接收端和發送端的網絡質量一般不一樣,tcp採用滑動窗口協議和擁塞控制算法使數據的發送速度達到合理值

5.C/S和B/S 
    ①C/S,即client/server,是當前大多數網絡編程所使用的架構模型,它能夠將任務合理分配到client端和server端來實現,下降了系統的通訊開銷,它們經常處在相距很遠的兩臺計算機上,client程序的任務是將用戶的要求提交給server程序,再將server程序返回的結果以特定的形式顯示給用戶,server程序的任務是接收客戶程序提出的服務請求,進行相應的處理,再將結果返回給客戶程序 
    ②B/S,即Browser/Server,是web興起後的一種網絡架構模式,B/S實驗web瀏覽器做爲客戶端的應用軟件,因此B/S能夠看做C/S的一種特殊狀況,B/S架構是伴隨因特網的興起而興起的,是對C/S的一種改進 
    ③如:Django、Tornado、和Flask均是以B/S架構爲主要開發目標的框架,Twisted主要面向C/S架構系統

應用層協議

1.HTTP(超文本傳輸協議)默認使用TCP的80端口標識

2.FTP(文件傳輸協議)默認使用TCP的80端口標識

3.SMTP(簡單郵件傳輸協議)默認使用TCP的25端口標識

4.POP3(郵局協議)默認使用TCP的110端口

5.HTTPS默認使用TCP的443端口

6.DNS使用UDP的53端口

7.遠程桌面協議(RDP)默認使用TCP的3389端口

8.Telnet使用TCP的23號端口

9.windows訪問共享資源使用TCP的445端口

網絡常見問題

1.兩臺電腦之間能通訊的前提是什麼?      
    處在同一網段(網絡號)內

2.多臺電腦爲何不能把網線剪開連接在一塊兒?  
    數據是經過電信號控制的,若是一塊兒發送一塊兒接收容易亂

3.連接多臺電腦的hub(集線器)有什麼做用?        
    實現多臺電腦鏈接在一塊兒,實現小型局域網    

4.集線器和交換機的區別?   
    集線器收到的全部數據包都是以廣播的形式發送,交換機有學習的功能,若是是已經通訊過的,這些時候就不是廣播

5.網絡協議
    ①ICMP:ping一個電腦
    ②arp:獲取一個電腦上的網卡號,就是mac地址(物理地址、硬件地址,數據鏈路層)
    ③rarp:根據mac地址找ip

6.把域名解析成ip地址的步驟,以百度爲例
    ①先要解析出baidu.com對應的ip地址
        先知道默認網關的mac,使用arp獲取默認網關的mac地址
        組織數據發送給默認網關(ip仍是dns服務器的ip,可是mac地址是默認網關的mac地址)
        默認網關具備轉發數據的能力,讓數據轉發給路由器
        路由器根據本身的路由協議,來選擇一個合適的較快的路徑轉發給目的網關
        目的網關(dns服務器所在的網關),把數據轉發給dns服務器
    ②獲得了baidu.com對應的ip地址後,會發送tcp的三次握手,進行鏈接
    ③使用http協議發送請求數據給web服務器
    ④web服務器收到數據請求以後,經過查詢本身的服務器獲得相應的結果,原路返回給瀏覽器
    ⑤瀏覽器接收到數據後經過瀏覽器的本身的渲染功能來顯示這個網頁
    ⑥瀏覽器關閉tcp鏈接,即4次揮手完成整個訪問過程

Tcp常見問題

1.tcp三次握手
    ①三次握手協議指的是在發送數據的準備階段,服務器端和客戶端之間須要進行三次交互
    ②第一次握手:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認
    ③第二次握手:服務器收到syn包,必須確認客戶的syn(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態
    ④第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手

2.tcp四次揮手        
    ①TCP客戶端發送一個FIN,用來關閉客戶到服務器的數據傳送。
    ②服務器收到這個FIN,它發回一個ACK,確認序號爲收到的序號加1。和SYN同樣,一個FIN將佔用一個序號。
    ③服務器關閉客戶端的鏈接,發送一個FIN給客戶端。
    ④客戶端發回ACK報文確認,並將確認序號設置爲收到序號加1。

3.tcp和udp的區別
    在tcp中,若是有一方收到了方的數據,必定會發送ack確認包給發送方,而在udp中,沒有這個過程,所以致使了tcp穩定,udp不穩定

4.tcp長鏈接和短鏈接
    TCP短鏈接:
        ①client 向 server 發起鏈接請求
        ②server 接到請求,雙方創建鏈接
        ③client 向 server 發送消息
        ④server 迴應 client
    TCP長鏈接:
        ①client 向 server 發起鏈接
        ②server 接到請求,雙方創建鏈接
        ③client 向 server 發送消息
        ④server 迴應 client
        ⑤一次讀寫完成,鏈接不關閉
        ⑥後續讀寫操做...
        ⑦長時間操做以後client發起關閉請求   
    TCP長/短鏈接的優勢和缺點:
        ①長鏈接能夠省去較多的TCP創建和關閉的操做,減小浪費,節約時間。對於頻繁請求資源的客戶來講,較適用長鏈接。
        ②client與server之間的鏈接若是一直不關閉的話,會存在一個問題,隨着客戶端鏈接愈來愈多,server遲早有扛不住的時候,這時候server端須要採起一些策略,如關閉一些長時間沒有讀寫事件發生的鏈接,這樣能夠避免一些惡意鏈接致使server端服務受損;若是條件再容許就能夠以客戶端機器爲顆粒度,限制每一個客戶端的最大長鏈接數,這樣能夠徹底避免某個蛋疼的客戶端連累後端服務。
        ③短鏈接對於服務器來講管理較爲簡單,存在的鏈接都是有用的鏈接,不須要額外的控制。
        ④但若是客戶請求頻繁,將在TCP的創建和關閉操做上浪費時間和帶寬。

5. tcp的十種狀態
三次握手、四次揮手.png

HTTP協議介紹

1.使用谷歌/火狐瀏覽器分析  
    在Web應用中,服務器把網頁傳給瀏覽器,實際上就是把網頁的HTML代碼發送給瀏覽器,讓瀏覽器顯示出來
    HTML是一種用來定義網頁的文本,會HTML,就能夠編寫網頁
    HTTP是在網絡上傳輸HTML的協議,用於瀏覽器和服務器的通訊

2.HTTP的請求方式
    GET(獲取數據)
    POST(修改數據)
    PUT(保存數據)
    DELETE(刪除)
    OPTION(詢問服務器的某種支持特性 
    HEAD(返回報文頭)

3.瀏覽器解析過程
    當瀏覽器讀取到新浪首頁的HTML源碼後,它會解析HTML,顯示頁面,而後,根據HTML裏面的各類連接,再發送HTTP請求給新浪服務器,拿到相應的圖片、視頻、Flash、JavaScript腳本、CSS等各類資源,最終顯示出一個完整的頁面。因此咱們在Network下面能看到不少額外的HTTP請求

4. HTTP請求
    步驟1:瀏覽器首先向服務器發送HTTP請求,請求包括:
        ①方法:GET仍是POST,GET僅請求資源,POST會附帶用戶數據;
        ②路徑:/full/url/path;
        ③域名:由Host頭指定:Host: www.sina.com以及其餘相關的Header;
        ④若是是POST,那麼請求還包括一個Body,包含用戶數據
    步驟2:服務器向瀏覽器返回HTTP響應,響應包括:
        ①響應代碼:200表示成功,3xx表示重定向,4xx表示客戶端發送的請求有錯誤,5xx表示    服務器端處理時發生了錯誤;
        ②響應類型:由Content-Type指定;
        ③以及其餘相關的Header;
        ④一般服務器的HTTP響應會攜帶內容,也就是有一個Body,包含響應的內容,網頁的HTML ,源碼就在Body中。
    步驟3:若是瀏覽器還須要繼續向服務器請求其餘資源,如圖片,就再次發出HTTP請求,重複步驟一、2
        Web採用的HTTP協議採用了很是簡單的請求-響應模式,從而大大簡化了開發。當咱們編寫一個頁面時,咱們只須要在HTTP請求中把HTML發送出去,不須要考慮如何附帶圖片、視頻等,瀏覽器若是須要請求圖片和視頻,它會發送另外一個HTTP請求,所以,一個HTTP請求只處理一個資源(此時就能夠理解爲TCP協議中的短鏈接,每一個連接只獲取一個資源,如須要多個就須要創建多個連接)
        爲了分散服務器的壓力,因此一個網站每每有多臺服務器,好比一臺存放圖片,一臺存放視頻等

5.http格式
    每一個HTTP請求和響應都遵循相同的格式,一個HTTP包含Header和Body兩部分,其中Body是可選的。
    HTTP協議是超文本傳輸文本協議,因此,它的格式也很是簡單
    ①HTTP GET請求的格式

GET /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3

    每一個Header一行一個,換行符是\r\n。

    ②HTTP POST請求的格式

POST /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3
body data goes here...

    當遇到連續兩個\r\n時,Header部分結束,後面的數據所有是Body
    ③HTTP響應的格式

200 OK
Header1: Value1
Header2: Value2
Header3: Value3
body data goes here...

    HTTP響應若是包含body,也是經過\r\n\r\n來分隔的。
    ④Body的數據類型由Content-Type頭來肯定,若是是網頁,Body就是文本,若是是圖片,Body就是圖片的二進制數據

6.服務器動態資源請求
    WSGI
        ①怎麼能夠不修改服務器和架構代碼而確保能夠在多個架構下運行web服務器呢?答案就是 Python Web Server Gateway Interface (或簡稱 WSGI,讀做wizgy)
        ②WSGI容許開發者將選擇web框架和web服務器分開。能夠混合匹配web服務器和web框架,選擇一個適合的配對。好比,能夠在Gunicorn 或者 Nginx/uWSGI 或者 Waitress上運行 Django, Flask, 或 Pyramid。真正的混合匹配,得益於WSGI同時支持服務器和架構
        ③web服務器必須具有WSGI接口,全部的現代Python Web框架都已具有WSGI接口,它讓你不對代碼做修改就能使服務器和特色的web框架協同工做。
        ④WSGI由web服務器支持,而web框架容許你選擇適合本身的配對,但它一樣對於服務器和框架開發者提供便利使他們能夠專一於本身偏心的領域和專長而不至於相互牽制。其餘語言也有相似接口:java有Servlet API,Ruby 有 Rack
    定義WSGI接口
        WSGI接口定義很是簡單,它只要求Web開發者實現一個函數,就能夠響應HTTP請求。咱們來看一個最簡單的Web版本的Hello World!

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return 'Hello World!'

    上面的application()函數就是符合WSGI標準的一個HTTP處理函數,它接收兩個參數:
        ①environ:一個包含全部HTTP請求信息的dict對象;
        ②start_response:一個發送HTTP響應的函數
        整個application()函數自己沒有涉及到任何解析HTTP的部分,也就是說,把底層web服務器解析部分和應用程序邏輯部分進行了分離,這樣開發者就能夠專心作一個領域了
        application()函數必須由WSGI服務器來調用。有不少符合WSGI規範的服務器。而咱們此時的web服務器項目的目的就是作一個很可能解析靜態網頁還能夠解析動態網頁的服務器,兩個參數environ和start_response咱們無法提供,返回的str也無法發給瀏覽器

FTP協議

1.文本傳輸協議FTP  
    提供在網絡上的主機之間共享計算機程序或數據,向用戶屏蔽不一樣主機中各文件存儲系統的細節,以基於TCP採用面向鏈接的方式在客戶和服務器之間提供可靠和高效的數據傳輸

2.FTP協議的工做原理     ①FTP工做在TCP/IP模型的應用層,採用TCP面向鏈接爲文件數據的傳輸提供了可靠的報保證     ②FTP採用客戶機-服務器模式,客戶端須要安裝FTP客戶程序,服務器端須要啓用FTP服務     ③FTP客戶與服務器之間要創建雙重鏈接,一是控制鏈接,使用TCP端口21,用來傳輸控制信息,一個是數據鏈接,使用TCP端口20,用於傳遞文件數據。FTP創建雙重鏈接的緣由在於FTP是一個交互式會話系統,客戶端每次調用FTP,便於與服務器創建一個會話,會話以控制鏈接來維持,控制鏈接負責傳輸控制信息     ④Telnet程序是Internet上經常使用的遠程登陸工具,使用TCP端口23,其協議工做過程採用了選項協商的方式,Telnet採用的NVT ASCII字符集也用在其餘的網絡應用中

相關文章
相關標籤/搜索