3000字長文預警~html
做爲科班生,先分享我在OS課堂上聽過的,印象最深的的說法:進程是資源分配的最小單位;線程是任務調度的最小單位。算法
個人理解是:OSI 是更偏重於規範性的體系結構,而 TCP/IP 則是目前網絡環境中的最佳實踐。瀏覽器
實際上在本科的課本中是抽象爲五層模型來說的:緩存
應用層(應用層+表示層+會話層)=> 傳輸層=> 網絡層=> 鏈路層=> 物理層安全
可見具體的分層方式並非關鍵,關鍵的是上圖中間列對應的重要功能是否獲得了實現。服務器
這是每一個本科老師都很是擅長講的故事。當時聽課的我並無因這個故事而很快理解計算機網絡的基本運做,但時至今日,這個例子卻很好地指導了我對於計算機網絡的理解。網絡
DNS的查詢方式分爲兩種:迭代 / 遞歸;多線程
HTTPS (http secure)= HTTP + 混合加密 + 權威認證 + 完整性保證架構
因爲網絡中對於HTTPS的詳盡介紹很是豐富,此處不進行詳細地敘述了,直接奔向結論。併發
網絡上包含兩種說法(3個隨機數生成密鑰 or 2個隨機數生成密鑰),但大同小異,都採用了對稱加密+非對稱加密的方式:
面向鏈接,可靠的傳輸層協議。
三次握手過程:
Client與Server都明確自身的發送和接受能力正常,須要肯定對方的發送和接收能力。
Server確認Client的發送能力正常:Client發送了SYN報文。
Client確認Server的發送和接收能力正常:由於Server正確地接收並響應了Client。
Server確認Client的接收能力正常:Server接收到了Client的ACK。
假設捨棄最後一次握手,則Server端沒法明確Client的接收能力是否正常。
四次揮手過程:
FIN=1,seq=x
AKC=1,seq=y,ack=x+1
期間Server能夠繼續向Client發送數據,此時處於TCP的半鏈接狀態;
Client還須要繼續監聽Server發送來的報文。
FIN=1,seq=z,ack=x+1
ACK=1,seq=x+1,ack=z+1
。同時等待2MSL,若此期間沒有接收到報文,則TCP鏈接順利斷開。這是由於服務端在LISTEN(監聽)狀態下,收到創建鏈接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉鏈接時,當收到對方的FIN報文時,僅僅表示對方再也不發送數據了可是還能接收數據,己方是否如今關閉發送數據通道,須要上層應用來決定,所以,己方ACK和FIN通常都會分開發送。
爲何要等待2MSL?
由瀏覽器判斷地址欄中的字符串是否符合url命名規則。若不符合則將該字符串交由搜索引擎處理;若合理則進入第二步。
GET url HTTP/1.1
主進程將該報文經過IPC交給網絡進程處理。
若瀏覽器曾經請求過該資源且資源並未過時,則網絡進程將緩存文件返回並攔截HTTP請求。若查找緩存未命中,則進入第4步。
詳情見第二關DNS;
獲得的ip最終返回到瀏覽器的網絡進程中。
Chrome瀏覽器有對於TCP鏈接的限制(同個域名最多維持6個TCP鏈接),若超過6個則須要放入TCP隊列中等待。
詳情見上文HTTPS相關內容。
詳情見第四關TCP協議
一次除去以太網頭和IP頭部,提交到傳輸層
若須要重定向則返回301(永久重定向)或302(暫時重定向)狀態碼,並在響應報文首部Location字段寫入重定向的地址。
若爲更新返回304狀態碼,表示資源未更新。
若須要瀏覽器更新,則設定cache-control:max-age=2000(以2000秒爲例)
過程與上述無異。
查看是否處於長鏈接
這部份內容十分複雜(包括了瀏覽器的渲染過程和 Javascript的執行機制)
請看下次博客分享~