SPDY協議簡介

2021-06-05 10:11:43 字數 2758 閱讀 9434

spdy的主頁:

我主要看的是spdy protocol drafts 3,這個草稿現在還沒完成,google的人將它放在github上面:

按照我的理解,spdy只是在效能上對http做了很大的優化(比如它的核心思想就是儘量減少連線個數),而對於http的語義並沒有做太大的修改(刪除了一些頭),基本上還是相容http.

spdy相對於http,主要是有下面4個增強:

1 multiplexed requests

對於一條spdy連線,併發的發起多少request沒有任何限制,其實也就是可以擁有多條stream(接下來會介紹stream).

2 prioritized requests

提供具有優先順序的請求(同乙個spdy 連線)。這個主要是解決了http中的pipeline請求是嚴格的fifo的。比如有多個request,如果先到的乙個request處理時間比較長,則後面的request會被阻塞住,而在spdy中,就會優先處理高優先順序的stream中的frame(後面會介紹這個)

3 compressed headers

在spdy中,頭是可以被壓縮的。

4 server pushed streams

server可以主動的push資料給client,而不需要客戶端的request.

———————————————————————

然後來看spdy中的一些基本的概念。

首先在spdy中的第乙個概念是session,這裡的session也就是代表一條tcp連線。

在spdy中第二個概念就是frame,frame也就是spdy中server和client之間互動的資料。 spdy framing layer是在tcp之上的一層,而當client端和server端建立連線之後,他們之間的互動資料就是frame。 spdy中分為2種型別的frame,分別是control frame 和data frame。(具體frame的結構,我這裡就不介紹了,可以去看協議中的介紹).而每種frame都有對應的flag.

第三個是stream的概念,一條tcp連線,可以有多條的stream,每個stream都有乙個stream id.在spdy中有3種control frame來控制stream的生命週期,分別是:

syn_stream – open a new stream

syn_reply – remote acknowledgement of a new, open stream

rst_stream – close a stream

可以看到,和tcp建立連線很像。這裡要注意stream也是有優先順序的。如果一端傳送乙個設定了flag_fin標記的frame,則這個stream將會成為半關閉的.(也就是不會再傳送資料,而只能夠接收收據,這個和tcp的半關閉很類似).如果乙個傳送端傳送了帶有flag_fin標記的flag,如果它再次傳送資料,則將會收到乙個rst_stream的frame.

要注意,只有synstreamframe(建立乙個stream的控制frame)才擁有priority,也就是說在spdy中優先順序只到stream這個級別,只有某個stream中的request會被優先處理,而同乙個stream中的frame則類似於http的行為。

從stream我們可以看到相比較於http,spdy可以很打程度上減少建立的連線的數目,因為每個stream其實就類似於乙個虛擬的連線。

假設現在需要做乙個http->spdy的**,當乙個http request過來的時候,如果這個request沒有body,則將會傳送乙個設定了flag_fin標記的frame,而對應的http頭都將會放入到這個frame中。可以看下go 中對於syn frame的結構定義:

1

2

3

4

5

6

7

8

9

type synstreamframestruct

這裡可以看到http的頭就是緊挨著spdy的frame,不過這裡注意由於http是文字協議,所以最終spdy還是會將headers轉成二進位制的。

reponse類似,下面就是go中的synreplay frame,可以看到和syn類似:

1

2

3

4

5

6

// synreplyframe is the unpacked, in-memory representation of a syn_reply frame.

type synreplyframestruct

最後來看下pushed stream,在spdy中,server能夠傳送多個replay給乙個request,就是說有時候server能夠知道需要傳送多個資源給client,此時就需要server push資源給client,而如果沒有這個特性,則需要client不斷的發多個request來請求多個資源。這樣子就極大的rt延遲。

在spdy中,如果server要push資料給client,則它必須選擇乙個已經存在的stream id,並且server端必須得設定乙個比較高的優先順序,以便於客戶端能夠迅速的發現pushed stream,然後響應它。server端能push的內容必須是客戶端能夠通過乙個get請求所得到的資源(也就是push過來的syn frame必須包含一些頭資訊)

MQTT協議 MQTT協議簡介

mqtt messagequeuing telemetry transport,訊息佇列遙測傳輸 是ibm開發的乙個即時通訊協議。mqtt是面向m2m和物聯網的連線協議,採用輕量級發布和訂閱訊息傳輸機制。它的設計思想是輕巧 開放 簡單 規範,因此易於實現。這些特點使得它對很多場景來說都是很好的選擇,...

網路協議 FTP協議簡介

一 什麼是ftp協議?ftp file transfer protocol,檔案傳輸協議 是 tcp ip 協議組中的協議之一。ftp協議包括 兩個組成部分,其一為ftp伺服器,其二為ftp客戶端。其中ftp伺服器用來儲存檔案,使用者可以使用ftp客戶端通過ftp協議訪問位於ftp伺服器上的資源。在...

網路協議 HTTP協議簡介

http的作用 http hyper text transfer protocol 超文字傳輸協議,是基於應用層 tcp ip參考模型 的通訊規範 是從web伺服器傳輸超文字到客戶端的傳輸協議,無狀態的傳輸協議 不僅能夠保證正確 快速 高效的傳輸超文字文件,而且可以確定資源載入順序等。http是不儲...