逐夢offer -- 網絡基礎知識篇

1. 網絡基礎

1.1 OSI 7層模型 與 TCP/IP 四層模型

OSI 7層模型javascript

  1. 物理層:負責 0,1 比特流與電壓高低、光的閃滅之間的互換html

    設備: 中繼器:將電纜傳過來的電信號與光信號經中繼器的波形調整與放大傳給另外一個。
  2. 數據鏈路層: 負責數據幀與比特流的轉換java

    設備: 網橋:經過 MAC 地址鏈接兩個網絡。經過CRC(cyclic redundancy check 循環冗餘校驗)的方式對數據鏈路層中的 FCS(frame check sequence) 驗證。從而確保數據的完整性。
  3. 網絡層:負責尋址與路由的選擇程序員

    設備: 路由器:根據IP 地址進行處理。
  4. 傳輸層:管理兩個節點之間數據的傳輸。確保數據被可靠的傳送到目標地址,檢測是否有數據丟失。
  5. 會話層:負責創建和斷開通訊鏈接
  6. 表示層:負責數據格式的轉換
  7. 應用層:針對特定應用的協議web

    4-7層交換機
    網關:負責從傳輸層到應用層的數據進行轉換和轉發的設備。

TCP/IP 四層模型
包爲描述數據的全能型單位。算法

  • 網絡接口層
    單位:幀
    相關技術:數據庫

    • MAC 地址: 使用網卡(NIC) , 有惟一性
    • 共享介質型網絡:半雙工通訊,只發送或只接收的方式
      一、爭用方式(CSMA (carrier sense multiple access) - 載波監聽多路訪問)

    二、令牌傳遞方式編程

    • 非共享介質型網絡:雙工通訊
      每一個站直連交換機,由交換機負責轉發數據幀。
    • 以太網幀格式: MAC(介質訪問控制層)+LLC(邏輯鏈路控制層)+SNAP+IP+TCP+上層數據+FCS
  • 網絡層
    協議:IP / ICMP / ARP(Address Resolution Protocol) / NAT / DHCP / DNS
    相關技術:瀏覽器

    • Hop : 數據鏈路層如下分層的傳輸數據幀的一個區間。是主機或路由器網卡不經其餘路由器而能直接到達的對象之間的一個區間。
    • MTU (Maximum Transmission Unit): 最大傳輸單位
    • ARP : 經過 IP 地址 獲得 MAC 地址 -- RARP : MAC 獲得 IP
    • ICMP :確認網絡的正常使用,以及異常的排查
      類型3 :目標不可達
      類型5 :重定向
      類型11 :超時
      類型0 :向對方發送消息
      類型8 :接收對方發送的消息
      ping 命令就是 類型0、8 。
      TTL Time To Live 防止IP 包無限制的傳遞下去
    • NAT(Network Adddress Translator) : 由本地網絡中的私有地址轉換爲全局 IP 地址。
    • DNS :域名命名系統 -- 使用 TCP 53號端口
    • DHCP :動態域名控制協議
    • 路由控制
  • 傳輸層
    協議:TCP / UDP
  • 應用層
    協議:WWW / HTTP / MIME,SMTP、POP、IMPA / FTP / TELNET - SSH / SNMP
    相關技術:緩存

    • FTP :用兩條 TCP 鏈接:

      一、數據控制 , 使用 21號端口
      二、數據傳輸 , 使用 20號端口
      三、狀態碼: 1-提供信息,2-鏈接管理,3-用戶相關,4-錯誤,5-文件系統
    • HTTP : 使用 80 端口

      一、 主要命令:GET.PUT.POST.DELETE.OPTIONS.HEAD.TRACE
      二、 狀態碼: 1-提供信息,2-確定應答,3-重寫向請求,4-客戶端請求內容錯誤,5-服務器錯誤
    • HTTPS : 使用 443 端口

1.2 TCP / UDP

SYN (Synchronize Flag) ACK(Acknowledgement Flag) FIN(Fin Flag)
TCP 的三次握手

  1. 客戶端 --》 SYN
  2. SYN ACK 《-- 服務器
  3. 客戶端 --》SYN

四次揮手

  1. 客戶端 --》 FIN
  2. ACK 《-- 服務器
  3. FIN 《-- 服務器
  4. 客戶端 --》 ACK

MSS(Maximum Segment Size) 最大消息長度:由三次握手的時候,兩端主機會在TCP首部寫入 MSS 長度,經過比較,取得其中比較少的值

窗口控制
原先的缺點:TCP 以一個段爲單位,每發一個段進行一次確認應答的處理。包的往返時間越長,通訊性能越低。
所以引入窗口這個概念。窗口大小是指無需等待確認應答,而能夠繼續發送數據的最大值。
使用大量的緩衝區,若是有部分數據丟包,發送端主機設置緩存保留這些數據,直至收到它們的確認應答。
若是沒有丟包,就滑動窗口到下一個位置

重發控制
窗口在必定程度上較大時,即便有少部分的確認應答丟失也不會進行數據重發。能夠經過下一個確認應答確認。
當某一報文段丟失後,發送端會一直收到序號爲原數據的確認應答。連續 3 次 同一個確認應答,會進行重發

流控制
TCP 首部中有專門的字段用來通知窗口的大小
接收主機將本身能夠接收的緩衝區大小放入這個字段中通知給發送端,這個字段的值越大,說明網絡的吞吐量越高

擁塞控制
慢啓動:經過擁塞窗口,第一次大小爲 1 MSS , 之後每次 收到一次確認應答(ACK),擁塞窗口的值 加 1.
而後比較 兩端 窗口的 大小,發送比小值還的小的數。

1.3 路由協議

  • 靜態路由 與 動態路由
  • AS (Autonomous System) 與 路由選擇域(Routing Domain)
    內部使用 IGP (Interior Gateway Protocol) 外部使用 EGP (Exterior Gateway Protocol).
  • IGP 中可使用 RIP (Routing Information Protocol) , OSPF(Open Shortest Path First);

    • RIP -- 距離向量(Distance-Vector)協議:經過距離與方向決定目標網絡或主機位置。
    • OSPF -- 鏈路狀態(Link-State)協議:瞭解網絡總體鏈接狀態的基礎上生成路由控制表。

      將每條鏈路賦予一個權重,採用 **Dijkstra 算法(最短路徑優先算法)**生成相應的路由控制表。
      權重,是經過 HELLO 協議, **HELLO**包在LAN中傳遞,**3 次**以上空等後,使用**鏈路狀態更新包(Link state update package) **通知狀態的改變。
      鏈路狀態更新包 傳達 : 網絡 LSA(Link State Advertisement 鏈路狀態通告) , 路由器 LSA 信息。 從而讓 路由器生成**鏈路狀態數據庫**。
  • EGP 中使用 BGP(Border Gateway Protocol)

    • BGP -- 路徑向量(Path-Vector)協議:
  • 總結 : 路由選擇時的度量 , RIP表現爲 路由器個數, OSPF則是每一個子網的成本, BGP 爲 AS 的個數。

1.4 HTTP

1. get與post

Http 定義了服務器交互的不一樣方法 ,最基本的有四種 :GET查, POST改,PUT增,DELETE刪。

  1. get通常用於信息獲取,是安全與冪等的。

    安全指。該操做用於獲取信息,因此不會對數據有什麼破壞。
    冪等意味着 對同一URL 的多個請求返回一樣的結果。
  2. post表示可能修改服務器上的資源的請求。

區別:

  1. GET請求的數據會附在URL以後,以 ?分割URL和傳輸數據,參數之間用&相連。
    post 方式則是將提交的數據放置在 HTTP 包的 包體中。
  2. GET方式提交的數據有限制,是由於特定的瀏覽器及服務器對它的限制,URL不存在參數上限的問題。HTTP規範中並無對URL長度進行限制。
    post方式提交的大小是沒有限制的,限制的是服務器的處理程序的處理能力。
  3. POST比GET 提交的安全性高,是由於GET提交數據,用戶名和密碼是明文出如今URL上,POST數據是隱藏到HTTP包的包體中的。抓包時,仍然能夠看見。

2. session與cookie

HTTP協議 ( http://www.w3.org/Protocols/ )是「一次性單向」協議。
服務端不能主動鏈接客戶端,只能被動等待並答覆客戶端請求。客戶端鏈接服務端,發出一個HTTP Request,服務端處理請求,而且返回一個HTTP Response給客戶端,本次HTTP Request-Response Cycle結束。
Session ID其實是在客戶端和服務端之間經過HTTP Request和HTTP Response傳來傳去的。

  1. Session對象在瀏覽器中的有效範圍:
    IE中:

    1. Session對象只在創建Session對象的窗口中有效。
    2. 在創建Session對象的窗口中新開連接的窗口也有效。
      Session只會在內存中,他會隨着IE窗口的關閉而死亡。

也就是說單用seesion是不會有產生自動登入的效果的。

  1. Cookie 是在服務器給客戶端IE一個命令後在客戶端產生並存的,
    它能夠存放用戶信息,存到客戶端硬盤上,在COOKIE記錄被刪除

或者失效日期以前,就能夠實現自動登入的現象。

  1. Session 和 Cookie 是不一樣的,可是他們確實是相關的。
    當打開IE登入後,會向服務器發出一個指令請求SESSIONID以

及頁面內容,服務器會返回頁面內容和一個沒有被使用的
SESSIONID讓此IE使用,當時IE就對返回SESSIONID作存儲;而當此IE再訪問任何這個站點的JSP程序的時候,都會給服務器這個 SESSIONID,來確認客戶端的身份。(在沒有Cookie 的狀況下session死亡 SESSIONID被取消就須要從新登入)

3. http 與 https 的區別

1、HTTP

1.支持客戶/服務器模式。
2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不一樣。因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。
3.靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
4.無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。

1) HTTP協議詳解之請求篇

http請求由三部分組成,分別是:請求行、消息報頭、請求正文

一、請求行以一個方法符號開頭,以空格分開,後面跟着請求的URI和協議的版本,格式以下:
    **Method Request-URI HTTP-Version CRLF**
其中 Method表示請求方法;Request-URI是一個統一資源標識符;HTTP-Version表示請求的HTTP協議版本;CRLF表示回車和換行(除了做爲結尾的CRLF外,不容許出現單獨的CR或LF字符)。
請求方法(全部方法全爲大寫)有多種,各個方法的解釋以下:
    GET    請求獲取Request-URI所標識的資源
    POST    在Request-URI所標識的資源後附加新的數據
    HEAD    請求獲取由Request-URI所標識的資源的響應消息報頭
    PUT     請求服務器存儲一個資源,並用Request-URI做爲其標識
    DELETE   請求服務器刪除Request-URI所標識的資源
    TRACE    請求服務器回送收到的請求信息,主要用於測試或診斷
    CONNECT  保留未來使用
    OPTIONS   請求查詢服務器的性能,或者查詢與資源相關的選項和需求
二、請求報頭後述
三、請求正文(略)

2) HTTP協議詳解之響應篇

在接收和解釋請求消息後,服務器返回一個HTTP響應消息。

HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文
一、狀態行格式以下:
**HTTP-Version Status-Code Reason-Phrase CRLF**
其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
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  //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常
eg:HTTP/1.1 200 OK (CRLF)
二、響應報頭後述
三、響應正文就是服務器返回的資源的內容

3) HTTP協議詳解之消息報頭篇

HTTP消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。

普通報頭 請求報頭 響應報頭 實體報頭
Cache-Control Accept Location(重定向)
Date Accept-Charset Server(服務器用來處理軟件的信息
Connection Accept-Encoding Content-Encoding
Accept-Language Content-Language
Authorization WWW-Authenticate Content-Type
Host Last-Modified
User-Agent Expires
2、HTTPS

  HTTPS(Hypertext Transfer Protocol over Secure Socket Layer,基於SSL的HTTP協議)使用了HTTP協議,但HTTPS使用不一樣於HTTP協議的默認端口及一個加密、身份驗證層(HTTP與TCP之間)。提供了身份驗證與加密通訊方法,如今它被普遍用於互聯網上安全敏感的通訊。
  客戶端在使用HTTPS方式與Web服務器通訊時有如下幾個步驟。
(1)客戶使用https的URL訪問Web服務器,要求與Web服務器創建SSL鏈接。
(2)Web服務器收到客戶端請求後,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。
(3)客戶端的瀏覽器與Web服務器開始協商SSL鏈接的安全等級,也就是信息加密的等級。
(4)客戶端的瀏覽器根據雙方贊成的安全等級,創建會話密鑰,而後利用網站的公鑰將會話密鑰加密,並傳送給網站。
(5)Web服務器利用本身的私鑰解密出會話密鑰。
(6)Web服務器利用會話密鑰加密與客戶端之間的通訊。

1.5 RESTful(Representational State Transfer)

(1)每個URI表明一種資源;
(2)客戶端和服務器之間,傳遞這種資源的某種表現層;
(3)客戶端經過四個HTTP動詞,對服務器端資源進行操做,實現"表現層狀態轉化"。

(1)客戶-服務器:客戶-服務器約束背後的原則是分離關注點。經過分離用戶接口和數據存儲這兩個關注點,改善了用戶接口跨多個平臺的可移植性;同時經過簡化服務器組件,改善了系統的可伸縮性。

(2)無狀態:通訊在本質上是無狀態的,改善了可見性、可靠性、可伸縮性.
(3)緩存:改善了網絡效率減小一系列交互的平均延遲時間,來提升效率、可伸縮性和用戶可覺察的性能。
(4)統一接口:REST架構風格區別於其餘基於網絡的架構風格的核心特徵是,它強調組件之間要有一個統一的接口。

1.6 網絡安全

1. CSRF (Cross-Site Request Forgeries)

csrf 跨站點請求僞造 : 冒充用戶發起請求。
本質:經過已經認證的用戶權限搞事情。
模擬攻擊: user -- webA -- webB

  1. user 瀏覽 webA
  2. webA 上發送給 user 一個 cookie
  3. user 瀏覽 webB
  4. webB 要求 user 訪問 webA
  5. user 此時帶着 cookie 訪問 webA
  6. cookie 驗證合格,因此 webB 能夠 經過 user 的權限操控 webA

與 xss 區別:

一般來講 CSRF 是由 XSS 實現的,CSRF 時常也被稱爲 XSRF(CSRF 實現的方式還能夠是直接經過命令行發起請求等)。
本質上講,XSS 是代碼注入問題,CSRF 是 HTTP 問題。XSS 是內容沒有過濾致使瀏覽器將攻擊者的輸入當代碼執行。CSRF 則是由於瀏覽器在發送 HTTP 請求時候自動帶上 cookie,而通常網站的 session 都存在 cookie裏面。

2. XSS (Cross Site Scripting)

xss 跨站腳本攻擊 : 經過注入非法的 html 標籤 以及 javascript 代碼,從而當用戶瀏覽網頁時,控制用戶的瀏覽器

xss 主要分爲三類:

  1. DOM xss :
    DOM即文本對象模型,DOM一般表明在html、xhtml和xml中的對象,使用DOM能夠容許程序和腳本動態的訪問和更新文檔的內容、結構和樣式。它不須要服務器解析響應的直接參與,觸發XSS靠的是瀏覽器端的DOM解析,能夠認爲徹底是客戶端的事情。
  2. 反射型 xss :
    反射型XSS也被稱爲非持久性XSS,是如今最容易出現的一種XSS漏洞。發出請求時,XSS代碼出如今URL中,最後輸入提交到服務器,服務器解析後在響應內容中出現這段XSS代碼,最後瀏覽器解析執行。
  3. 存儲型 xss :
    存儲型XSS又被稱爲持久性XSS,它是最危險的一種跨站腳本,相比反射型XSS和DOM型XSS具備更高的隱蔽性,因此危害更大,由於它不須要用戶手動觸發。 容許用戶存儲數據的web程序均可能存在存儲型XSS漏洞,當攻擊者提交一段XSS代碼後,被服務器端接收並存儲,當全部瀏覽者訪問某個頁面時都會被XSS,其中最典型的例子就是留言板。

跨站腳本攻擊可能形成如下影響:

  1. 利用虛假輸入表單騙取用戶我的信息。
  2. 利用腳本竊取用戶的 Cookie 值,被害者在不知情的狀況下,幫助攻擊者發送惡意請求。
  3. 顯示僞造的文章或圖片。

防護:

  • httpOnly: 在cookie 中設置 HttpOnly ,使得 js 腳本沒法讀取到 cookie 信息。
  • 過濾 :

    • 輸入檢查
    • HtmlEncode : 對一些標籤進行轉化,將之轉化爲文本內容,而非一段能夠執行的代碼
    • JavaScriptEncode : 對一些字符加上反斜槓

3. DDos

由於本身沒有這方面的經驗與系統的學習,因此就大概瞭解了一下,沒有過多的分析。
漫畫告訴你什麼是DDoS攻擊?
DDoS的攻擊原理與防護方法

1.7 socket編程

請點這裏的明顯的清楚的連接

結語

都看到這裏了,點個關注好不啦。
你的關注,是我最大的動力哦。
不按期乾貨更新。
一隻至關程序員的1米88處女座大可愛。

相關文章
相關標籤/搜索