SlideShare una empresa de Scribd logo
1 de 22
SPDYの中身を見てみる


• IIJ 大津繁樹
• ohtsuあっとiij.ad.jp

          2012年5月17日
SPDY フレームの種類と役割
   Data Frames         Control Frames

                 1.   SYN_STREAM
                 2.   SYN_REPLY
                 3.   RST_STREAM
                 4.   SETTINGS
                 5.   NOOP( spdy/3で廃止)
HTTPリクエスト・レスポン   6.   PING
スボディの送受信などで使     7.   GOAWAY
う                8.   HEADERS
                 9.   WINDOW_UPDATE
                 •    CREDENTIAL


                 HTTPリクエスト・レスポンス
                 ヘッダの送受信に使う
                 その他SPDY通信制御情報のやり
                 取りに使う
単純なSPDYのストリームフロー

               SSLハンドシェイク

         NPN (Next Protocol Negotiation) を
         使って SPDY 利用バージョンを交換

                 SYN_STREAM
          HTTPリクエストヘッダ情報を送信

                   SYN_REPLY

          HTTPレスポンスヘッダ情報を送信
クライアント                                       サーバー
                   DATA Frame

          HTTPレスポンスボディを送信

                   GOAWAY

          SPDYストリーム利用停止を通知
spdylayを使ってSPDYの中身を見る
 www.google.com サーバ編 (その1)
 $ ./examples/spdycat -v https://www.google.com

 NPNでプロトコル情報の交換
 [ 0.012] NPN select next protocol: the remote server offers:
       * spdy/3
       * spdy/2
       * http/1.1
       NPN selected the protocol: spdy/3


 google サーバから SDPYの設定情報が送られてくる
 [ 0.018] recv SETTINGS frame <version=3, flags=0, length=20>
       (niv=2)
       [4(1):100]
       [7(0):12288]
4: SETTINGS_MAX_CONCURRENT_STREAMS 最大同時アクティブなストリーム数
7: SETTINGS_INITIAL_WINDOW_SIZE ストリームの初期ウィンドウサイズ(バイト)
spdylayを使ってSPDYの中身を見る
       www.google.com サーバ編 (その2)
SYN_STREAMを使ってHTTPリクエストヘッダ情報をサーバに送信

[ 0.018] send SYN_STREAM frame <version=3, flags=1, length=106>
      (stream_id=1, assoc_stream_id=0, pri=3)
      :host: www.google.com
      :method: GET
      :path: /
      :scheme: https
      :version: HTTP/1.1
      accept: */*
      user-agent: spdylay/0.2.0
spdylayを使ってSPDYの中身を見る
          www.google.com サーバ編 (その3)
SYN_REPLY でHTTPレスポンスヘッダ情報がサーバから送られてくる
[ 0.057] recv SYN_REPLY frame <version=3, flags=0, length=558>
      (stream_id=1)
      :status: 302 Found
      :version: HTTP/1.1
      cache-control: private
      content-length: 222
      content-type: text/html; charset=UTF-8
      date: Thu, 17 May 2012 01:24:23 GMT
      location: https://www.google.co.jp/
      server: gws
     (以下略)
spdylayを使ってSPDYの中身を見る
       www.google.com サーバ編 (その4)
Dataフレーム でHTTPレスポンスボディがサーバから送られてくる

  <HTML><HEAD><meta http-equiv="content-type"
  content="text/html;charset=utf-8">
  <TITLE>302 Moved</TITLE></HEAD><BODY>
  <H1>302 Moved</H1>
  The document has moved
  <A HREF="https://www.google.co.jp/">here</A>.
  </BODY></HTML>
  [ 0.058] recv DATA frame (stream_id=1, flags=1, length=222)


SPDY終了
   [ 0.058] send GOAWAY frame <version=3, flags=0, length=8>
         (last_good_stream_id=0
spdylayを使ってSPDYの中身を見る
              Chrome ブラウザ編 (その1)
      ./examples/spdyd --htdocs=. -v 3000 ./foo-key.pem ./foo-cert.pem

  NPNでプロトコル情報の決定
[id=1] [ 5.046] closed
The negotiated next protocol: spdy/3

SYN_STREAMを使ってHTTPリクエストヘッダ情報がChromeから送られてくる

[id=2] [ 5.051] recv SYN_STREAM frame <version=3, flags=1, length=250>
      (stream_id=1, assoc_stream_id=0, pri=0)
      :host: unixjp:3000
      :method: GET
      :path: /
      :scheme: https
      :version: HTTP/1.1
      accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      accept-charset: Shift_JIS,utf-8;q=0.7,*;q=0.3
      (以下略)
spdylayを使ってSPDYの中身を見る
             Chrome ブラウザ編 (その2)
 サーバからSETTINGSによって同時ストリーム数の設定

 [id=2] [ 5.052] send SETTINGS frame <version=3, flags=0, length=12>
       (niv=1)
       [4(0):100]


SYN_REPLY でHTTPレスポンスヘッダ情報を Chrome に送る

[id=2] [ 5.052] send SYN_REPLY frame <version=3, flags=0, length=109>
      (stream_id=1)
      :status: 200 OK
      :version: HTTP/1.1
      cache-control: max-age=3600
      content-length: 40
      date: Thu, 17 May 2012 02:40:28 GMT
      last-modified: Mon, 14 May 2012 20:34:32 GMT
      server: spdyd spdylay/0.2.0
spdylayを使ってSPDYの中身を見る
            Chrome ブラウザ編 (その3)

データフレームでレスポンスボディを送信
最後のデータフレームは flag 1 (FLAG_FIN) を使ってストリームを
終了させてます。

[id=2] [ 5.052] send DATA frame (stream_id=1, flags=0, length=40)
[id=2] [ 5.053] send DATA frame (stream_id=1, flags=1, length=0)
[id=2] [ 5.053] stream_id=1 closed
spdylayを使ってSPDYの中身を見る
           Chrome ブラウザ編 (その4)
Chrome が favicon.ico を取りに来てるリクエスト

[id=2] [ 5.094] recv SYN_STREAM frame <version=3, flags=1, length=39>
      (stream_id=3, assoc_stream_id=0, pri=1)
      :host: unixjp:3000
      :method: GET
      :path: /favicon.ico
      :scheme: https
      :version: HTTP/1.1
      accept: */*
      accept-charset: Shift_JIS,utf-8;q=0.7,*;q=0.3
      accept-encoding: gzip,deflate,sdch
      accept-language: en-US,en;q=0.8
      user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5
(KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5
spdylayを使ってSPDYの中身を見る
            Chrome ブラウザ編 (その5)
favicon なんて用意していないので404を返す SYN_REPLY
[id=2] [ 5.095] send SYN_REPLY frame <version=3, flags=0, length=33>
      (stream_id=3)
      :status: 404 Not Found
      :version: HTTP/1.1
      content-encoding: gzip
      date: Thu, 17 May 2012 02:40:28 GMT
      server: spdyd spdylay/0.2.0

最後に Chrome から PING で SPDY の生存確認をしています。
[id=2] [ 6.048] recv PING frame <version=3, flags=0, length=4>
      (unique_id=1)
[id=2] [ 6.048] send PING frame <version=3, flags=0, length=4>
      (unique_id=1)
Control frames
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1            version                          Type
     Flags                           Length
                             Data
Data frames
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
0                            Stream-ID
     Flags                               Length
                              Data

                              Flags
                    0x01 FLAG_FIN
                    0x02 FLAG_COMPRESS
SYN_STREAM
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1                     version                                        1
          Flags                                           Length
X                                           Stream-ID
X                                   Associated-To-Stream-ID
    Pri      Unused               Slot               Number of Name/Value pairs (32bit)
                                 Number of Name/Value pairs
                                    Length of name (32bit)
                                         Name (string)
                                    Length of value (32bit)
                                         Value (string)

                                             Flags
                                0x01 FLAG_FIN
                                                                            圧縮データ
                                0x02 FLAG_UNIDIRECTIONAL
SYN_REPLY
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1            version                                     2
     Flags                                      Length
X                                 Stream-ID
                        Number of Name/Value pairs
                              Length of name
                                  Name
                              Length of value
                                  Value


                                  Flags
                       0x01 FLAG_FIN


                                                             圧縮データ
RST_STREAM
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1               version                                    3
    0 (flags)                                 8 (length)
X                                Stream-ID
                              Status Code



                                 Satus code
         1 PROTOCOL_ERROR             7     FLOW_CONTROL_ERROR
         2 INVALID_STREAM             8     STREAM_ALREADY_CLOSED
         3 REFUSED_STREAM             9     STREAM_IN_USE
         4 UNSUPPORTED_VERSION        10 INVALID_CREDENTIALS
         5 CANCEL                     11 FRAME_TOO_LARGE
         6 INTERNAL_ERROR
SETTINGS
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1                    version                                              4
         Flags                                           Length

                                      Number of entries
        ID.flags                                            ID
                                            Value


                     Flags                                             ID.flags
              FLAG_SETTING_CLEAR_SETTINGS              0x01      FLAG_SETTINGS_PERSIST_VALUE
    0x01
                                                       0x02      FLAG_SETTINGS_PERSISTED

                                              ID
    1   SETTINGS_UPLOAD_BANDWIDTH                  5   SETTINGS_CURRENT_CWND

    2   SETTINGS_DOWNLOAD_BANDWIDTH                6   SETTINGS_DOWNLOAD_RETRANS_RATE

    3   SETTINGS_ROUND_TRIP_TIME                   7   SETTINGS_INITAL_WINDOW_SIZE

    4   SETTINGS_MAX_CONCURRENT_STREAM             8   SETTINGS_CLIENT_CERTIFICATE_VECTOR_SIZE
PING
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1               version                              6
    0 (flags)                           4 (length)

                            32-bit ID
GOAWAY
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1               version                                    7
    0 (flags)                                 8 (length)

X                             Last-good-stream-ID
                                Status code

                                Status code
                          0   OK
                          1   PROTOCOL_ERROR
                          11 INTERNAL_ERRRO
HEADERS
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1            version                                     8
     Flags                                      Length
X                                 Stream-ID
                        Number of Name/Value pairs
                              Length of name
                                  Name
                              Length of value
                                  Value


                                  Flags
                       0x01 FLAG_FIN


                                                             圧縮データ
WINDOW_UPDATE
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1               version                                   9
    0 (flags)                                8 (length)
X                                Stream-ID
X                            Delta-Window-Size

Más contenido relacionado

Destacado

Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話shigeki_ohtsu
 
第43回HTML5とか勉強会 SPDY/QUICデモ
第43回HTML5とか勉強会 SPDY/QUICデモ第43回HTML5とか勉強会 SPDY/QUICデモ
第43回HTML5とか勉強会 SPDY/QUICデモshigeki_ohtsu
 
httpbis interim@シアトル レポート (第2回HTTP/2.0接続試験)
httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)
httpbis interim@シアトル レポート (第2回HTTP/2.0接続試験)shigeki_ohtsu
 
HTTP/2.0がもたらす Webサービスの進化(後半)
HTTP/2.0がもたらすWebサービスの進化(後半)HTTP/2.0がもたらすWebサービスの進化(後半)
HTTP/2.0がもたらす Webサービスの進化(後半)shigeki_ohtsu
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成shigeki_ohtsu
 
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法shigeki_ohtsu
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能についてshigeki_ohtsu
 
Node最新トピックス
Node最新トピックスNode最新トピックス
Node最新トピックスshigeki_ohtsu
 
HTTP/2の現状とこれから
HTTP/2の現状とこれからHTTP/2の現状とこれから
HTTP/2の現状とこれからshigeki_ohtsu
 
ピッチをする前に知っておきたかったこと スタートアップの資金調達
ピッチをする前に知っておきたかったこと スタートアップの資金調達ピッチをする前に知っておきたかったこと スタートアップの資金調達
ピッチをする前に知っておきたかったこと スタートアップの資金調達Takaaki Umada
 
資金調達入門“以前” スタートアップが資金調達の前に考えること
資金調達入門“以前” スタートアップが資金調達の前に考えること資金調達入門“以前” スタートアップが資金調達の前に考えること
資金調達入門“以前” スタートアップが資金調達の前に考えることTakaaki Umada
 

Destacado (13)

Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
 
第43回HTML5とか勉強会 SPDY/QUICデモ
第43回HTML5とか勉強会 SPDY/QUICデモ第43回HTML5とか勉強会 SPDY/QUICデモ
第43回HTML5とか勉強会 SPDY/QUICデモ
 
httpbis interim@シアトル レポート (第2回HTTP/2.0接続試験)
httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)
httpbis interim@シアトル レポート (第2回HTTP/2.0接続試験)
 
HTTP/2.0がもたらす Webサービスの進化(後半)
HTTP/2.0がもたらすWebサービスの進化(後半)HTTP/2.0がもたらすWebサービスの進化(後半)
HTTP/2.0がもたらす Webサービスの進化(後半)
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
Node最新トピックス
Node最新トピックスNode最新トピックス
Node最新トピックス
 
HTTP/2の現状とこれから
HTTP/2の現状とこれからHTTP/2の現状とこれから
HTTP/2の現状とこれから
 
Stream2の基本
Stream2の基本Stream2の基本
Stream2の基本
 
ピッチをする前に知っておきたかったこと スタートアップの資金調達
ピッチをする前に知っておきたかったこと スタートアップの資金調達ピッチをする前に知っておきたかったこと スタートアップの資金調達
ピッチをする前に知っておきたかったこと スタートアップの資金調達
 
資金調達入門“以前” スタートアップが資金調達の前に考えること
資金調達入門“以前” スタートアップが資金調達の前に考えること資金調達入門“以前” スタートアップが資金調達の前に考えること
資金調達入門“以前” スタートアップが資金調達の前に考えること
 
Node js 入門
Node js 入門Node js 入門
Node js 入門
 

Similar a SPDYの中身を見てみよう

2014 dart flight school in Tokyo
2014 dart flight school in Tokyo2014 dart flight school in Tokyo
2014 dart flight school in Tokyonothingcosmos
 
130522 rt講習会(説明用)
130522 rt講習会(説明用)130522 rt講習会(説明用)
130522 rt講習会(説明用)openrtm
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014Nov Matake
 
詳解Dexファイルフォーマット
詳解Dexファイルフォーマット詳解Dexファイルフォーマット
詳解DexファイルフォーマットTakuya Matsunaga
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説Shoken Fujisaki
 
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)libpanda
 
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向shigeki_ohtsu
 
The overview of Server-ide Bulk Loader
 The overview of Server-ide Bulk Loader The overview of Server-ide Bulk Loader
The overview of Server-ide Bulk LoaderTreasure Data, Inc.
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Takuya Matsunaga
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門Takashi Takizawa
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-Hiromu Yakura
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/AndroidセキュアコーディングMasaki Kubo
 
Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Makoto Haruyama
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersSeiya Mizuno
 
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみようHokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみようPanda Yamaki
 
ZigBee/IEEE802.15.4について調べてみた
ZigBee/IEEE802.15.4について調べてみたZigBee/IEEE802.15.4について調べてみた
ZigBee/IEEE802.15.4について調べてみたRyosuke Uematsu
 

Similar a SPDYの中身を見てみよう (20)

2014 dart flight school in Tokyo
2014 dart flight school in Tokyo2014 dart flight school in Tokyo
2014 dart flight school in Tokyo
 
130522 rt講習会(説明用)
130522 rt講習会(説明用)130522 rt講習会(説明用)
130522 rt講習会(説明用)
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
 
詳解Dexファイルフォーマット
詳解Dexファイルフォーマット詳解Dexファイルフォーマット
詳解Dexファイルフォーマット
 
Reconf 201901
Reconf 201901Reconf 201901
Reconf 201901
 
Xml Security
Xml SecurityXml Security
Xml Security
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説
 
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
 
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向
 
The overview of Server-ide Bulk Loader
 The overview of Server-ide Bulk Loader The overview of Server-ide Bulk Loader
The overview of Server-ide Bulk Loader
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
Source Code of Dart
Source Code of DartSource Code of Dart
Source Code of Dart
 
HTTP/2, QUIC入門
HTTP/2, QUIC入門HTTP/2, QUIC入門
HTTP/2, QUIC入門
 
Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみようHokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
 
ZigBee/IEEE802.15.4について調べてみた
ZigBee/IEEE802.15.4について調べてみたZigBee/IEEE802.15.4について調べてみた
ZigBee/IEEE802.15.4について調べてみた
 

Último

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Último (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

SPDYの中身を見てみよう

  • 1. SPDYの中身を見てみる • IIJ 大津繁樹 • ohtsuあっとiij.ad.jp 2012年5月17日
  • 2. SPDY フレームの種類と役割 Data Frames Control Frames 1. SYN_STREAM 2. SYN_REPLY 3. RST_STREAM 4. SETTINGS 5. NOOP( spdy/3で廃止) HTTPリクエスト・レスポン 6. PING スボディの送受信などで使 7. GOAWAY う 8. HEADERS 9. WINDOW_UPDATE • CREDENTIAL HTTPリクエスト・レスポンス ヘッダの送受信に使う その他SPDY通信制御情報のやり 取りに使う
  • 3. 単純なSPDYのストリームフロー SSLハンドシェイク NPN (Next Protocol Negotiation) を 使って SPDY 利用バージョンを交換 SYN_STREAM HTTPリクエストヘッダ情報を送信 SYN_REPLY HTTPレスポンスヘッダ情報を送信 クライアント サーバー DATA Frame HTTPレスポンスボディを送信 GOAWAY SPDYストリーム利用停止を通知
  • 4. spdylayを使ってSPDYの中身を見る www.google.com サーバ編 (その1) $ ./examples/spdycat -v https://www.google.com NPNでプロトコル情報の交換 [ 0.012] NPN select next protocol: the remote server offers: * spdy/3 * spdy/2 * http/1.1 NPN selected the protocol: spdy/3 google サーバから SDPYの設定情報が送られてくる [ 0.018] recv SETTINGS frame <version=3, flags=0, length=20> (niv=2) [4(1):100] [7(0):12288] 4: SETTINGS_MAX_CONCURRENT_STREAMS 最大同時アクティブなストリーム数 7: SETTINGS_INITIAL_WINDOW_SIZE ストリームの初期ウィンドウサイズ(バイト)
  • 5. spdylayを使ってSPDYの中身を見る www.google.com サーバ編 (その2) SYN_STREAMを使ってHTTPリクエストヘッダ情報をサーバに送信 [ 0.018] send SYN_STREAM frame <version=3, flags=1, length=106> (stream_id=1, assoc_stream_id=0, pri=3) :host: www.google.com :method: GET :path: / :scheme: https :version: HTTP/1.1 accept: */* user-agent: spdylay/0.2.0
  • 6. spdylayを使ってSPDYの中身を見る www.google.com サーバ編 (その3) SYN_REPLY でHTTPレスポンスヘッダ情報がサーバから送られてくる [ 0.057] recv SYN_REPLY frame <version=3, flags=0, length=558> (stream_id=1) :status: 302 Found :version: HTTP/1.1 cache-control: private content-length: 222 content-type: text/html; charset=UTF-8 date: Thu, 17 May 2012 01:24:23 GMT location: https://www.google.co.jp/ server: gws (以下略)
  • 7. spdylayを使ってSPDYの中身を見る www.google.com サーバ編 (その4) Dataフレーム でHTTPレスポンスボディがサーバから送られてくる <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="https://www.google.co.jp/">here</A>. </BODY></HTML> [ 0.058] recv DATA frame (stream_id=1, flags=1, length=222) SPDY終了 [ 0.058] send GOAWAY frame <version=3, flags=0, length=8> (last_good_stream_id=0
  • 8. spdylayを使ってSPDYの中身を見る Chrome ブラウザ編 (その1) ./examples/spdyd --htdocs=. -v 3000 ./foo-key.pem ./foo-cert.pem NPNでプロトコル情報の決定 [id=1] [ 5.046] closed The negotiated next protocol: spdy/3 SYN_STREAMを使ってHTTPリクエストヘッダ情報がChromeから送られてくる [id=2] [ 5.051] recv SYN_STREAM frame <version=3, flags=1, length=250> (stream_id=1, assoc_stream_id=0, pri=0) :host: unixjp:3000 :method: GET :path: / :scheme: https :version: HTTP/1.1 accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 accept-charset: Shift_JIS,utf-8;q=0.7,*;q=0.3 (以下略)
  • 9. spdylayを使ってSPDYの中身を見る Chrome ブラウザ編 (その2) サーバからSETTINGSによって同時ストリーム数の設定 [id=2] [ 5.052] send SETTINGS frame <version=3, flags=0, length=12> (niv=1) [4(0):100] SYN_REPLY でHTTPレスポンスヘッダ情報を Chrome に送る [id=2] [ 5.052] send SYN_REPLY frame <version=3, flags=0, length=109> (stream_id=1) :status: 200 OK :version: HTTP/1.1 cache-control: max-age=3600 content-length: 40 date: Thu, 17 May 2012 02:40:28 GMT last-modified: Mon, 14 May 2012 20:34:32 GMT server: spdyd spdylay/0.2.0
  • 10. spdylayを使ってSPDYの中身を見る Chrome ブラウザ編 (その3) データフレームでレスポンスボディを送信 最後のデータフレームは flag 1 (FLAG_FIN) を使ってストリームを 終了させてます。 [id=2] [ 5.052] send DATA frame (stream_id=1, flags=0, length=40) [id=2] [ 5.053] send DATA frame (stream_id=1, flags=1, length=0) [id=2] [ 5.053] stream_id=1 closed
  • 11. spdylayを使ってSPDYの中身を見る Chrome ブラウザ編 (その4) Chrome が favicon.ico を取りに来てるリクエスト [id=2] [ 5.094] recv SYN_STREAM frame <version=3, flags=1, length=39> (stream_id=3, assoc_stream_id=0, pri=1) :host: unixjp:3000 :method: GET :path: /favicon.ico :scheme: https :version: HTTP/1.1 accept: */* accept-charset: Shift_JIS,utf-8;q=0.7,*;q=0.3 accept-encoding: gzip,deflate,sdch accept-language: en-US,en;q=0.8 user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5
  • 12. spdylayを使ってSPDYの中身を見る Chrome ブラウザ編 (その5) favicon なんて用意していないので404を返す SYN_REPLY [id=2] [ 5.095] send SYN_REPLY frame <version=3, flags=0, length=33> (stream_id=3) :status: 404 Not Found :version: HTTP/1.1 content-encoding: gzip date: Thu, 17 May 2012 02:40:28 GMT server: spdyd spdylay/0.2.0 最後に Chrome から PING で SPDY の生存確認をしています。 [id=2] [ 6.048] recv PING frame <version=3, flags=0, length=4> (unique_id=1) [id=2] [ 6.048] send PING frame <version=3, flags=0, length=4> (unique_id=1)
  • 13. Control frames 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 version Type Flags Length Data
  • 14. Data frames 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 Stream-ID Flags Length Data Flags 0x01 FLAG_FIN 0x02 FLAG_COMPRESS
  • 15. SYN_STREAM 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 version 1 Flags Length X Stream-ID X Associated-To-Stream-ID Pri Unused Slot Number of Name/Value pairs (32bit) Number of Name/Value pairs Length of name (32bit) Name (string) Length of value (32bit) Value (string) Flags 0x01 FLAG_FIN 圧縮データ 0x02 FLAG_UNIDIRECTIONAL
  • 16. SYN_REPLY 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 version 2 Flags Length X Stream-ID Number of Name/Value pairs Length of name Name Length of value Value Flags 0x01 FLAG_FIN 圧縮データ
  • 17. RST_STREAM 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 version 3 0 (flags) 8 (length) X Stream-ID Status Code Satus code 1 PROTOCOL_ERROR 7 FLOW_CONTROL_ERROR 2 INVALID_STREAM 8 STREAM_ALREADY_CLOSED 3 REFUSED_STREAM 9 STREAM_IN_USE 4 UNSUPPORTED_VERSION 10 INVALID_CREDENTIALS 5 CANCEL 11 FRAME_TOO_LARGE 6 INTERNAL_ERROR
  • 18. SETTINGS 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 version 4 Flags Length Number of entries ID.flags ID Value Flags ID.flags FLAG_SETTING_CLEAR_SETTINGS 0x01 FLAG_SETTINGS_PERSIST_VALUE 0x01 0x02 FLAG_SETTINGS_PERSISTED ID 1 SETTINGS_UPLOAD_BANDWIDTH 5 SETTINGS_CURRENT_CWND 2 SETTINGS_DOWNLOAD_BANDWIDTH 6 SETTINGS_DOWNLOAD_RETRANS_RATE 3 SETTINGS_ROUND_TRIP_TIME 7 SETTINGS_INITAL_WINDOW_SIZE 4 SETTINGS_MAX_CONCURRENT_STREAM 8 SETTINGS_CLIENT_CERTIFICATE_VECTOR_SIZE
  • 19. PING 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 version 6 0 (flags) 4 (length) 32-bit ID
  • 20. GOAWAY 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 version 7 0 (flags) 8 (length) X Last-good-stream-ID Status code Status code 0 OK 1 PROTOCOL_ERROR 11 INTERNAL_ERRRO
  • 21. HEADERS 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 version 8 Flags Length X Stream-ID Number of Name/Value pairs Length of name Name Length of value Value Flags 0x01 FLAG_FIN 圧縮データ
  • 22. WINDOW_UPDATE 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 version 9 0 (flags) 8 (length) X Stream-ID X Delta-Window-Size