做者:楊志曉html
a.TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協議屬於傳輸層協議。 其中TCP提供IP環境下的數據可靠傳輸,它提供的服務包括數據流傳送、可靠性、有效流控、全雙工操做和多路複用。 經過面向鏈接、端到端和可靠的數據包發送。
b.SPDY協議是Google提出的基於傳輸控制協議(TCP)的應用層協議,經過壓縮、多路複用和優先級來縮短加載時間。 該協議是一種更加快速的內容傳輸協議。
c.QUIC(Quick UDP Internet Connections)基於UDP的傳輸層協議,提供像TCP同樣的可靠性。在提升web應用性能上,能夠選擇在應用層使用HTTP2.0實現多路傳輸,在物理層使用CDN解決網絡擁塞和最後一千米問題。在傳輸層,目前主要使用TCP,但因爲TCP自己的問題(一個充滿補丁的醜陋的協議),成爲了限制web應用性能的一個瓶頸。web
a.mac網卡(多路訪問控制協議(multiple access control protocol)瀏覽器
1_1.png
服務器
b.Ip報文解析
1_2.png
網絡
ip報頭長度計算:
1_3.png
併發
5*4 =20異步
c.tcp報文解析
1_4.png
tcp
a.經過一個普通html分析:
1_5.png
性能
1_6.png
ui
b.如上圖分析:
綠色爲:Waiting (TTFB):TTFB (Time To First Byte),是最初的網絡請求被髮起到從服務器接收到第一個字節這段時間,它包含了 TCP鏈接時間,發送HTTP請求時間和得到響應消息第一個字節的時間。
藍色爲:Content Download
c.等待時間影響因素:從發送請求到收到響應之間的空隙,會受到線路、服務器距離等因素的影響。
d.瀏覽器同域名發出6個請求,創建幾個tcp?1 or 6?
帶着上面的疑問咱們對demo進行抓包
抓包分析:
1_7.png
分析後發現:三張圖片+html總共四個請求
index.html+section4new.png端口是55653
section01.png+section2.jpg端口是55654
爲何是這樣呢:
查看tcp抓包:
1_8.png
經過抓包看到 :
第一個http請求 index.html請求端口是:55653
第二個http請求 section4new.png請求端口是:55653
第三個http請求 section01.png請求端口是:55654
第四個http請求section2.jpg請求端口是:55654
同時也看到tcp開始創建時同時發出了兩條請求
1_9.png
默認谷歌瀏覽器發起了兩條tcp請求(瀏覽器不一樣,多是請求個數少)
一樣抓包中看到了tcp的三次握手
1_10.png
a.瀏覽器加載以下:
1_11.png
b.討論點:http1.1請求會是按照以下圖1仍是圖2?
1_12.png
討論結論:
http1.1 without pipelining: 經過tcp鏈接上一個請求相應完後,下一個請求才能發出
http1.1 with pipelining: 經過tcp鏈接,上一個請求發出,下一個請求不須要等待,可是返回是同一順序。
http2.0在TCP鏈接上傳輸的是幀,客戶端會將要傳輸的數據拆分爲不一樣的幀,並標記對應的數據流ID,異步發出,服務端接收到幀集合根據數據流ID拼湊起來即爲客戶端發送來的數據。同理,服務端也是將數據拆分爲不一樣幀返回。
1_13.png
1_14
..]