SlideShare a Scribd company logo
1 of 36
Download to read offline
Mer data på kortare tid, tack!




Daniel Stenberg
Daniel Stenberg


                  Haxx och Fossgruppen
                           curl
                         libssh2
                          IETF

                  http://daniel.haxx.se/



Daniel Stenberg            31:a maj 2010   2
Agenda



                  Transport                   API



                         Framtid


Daniel Stenberg               31:a maj 2010         3
Protokoll-lager

                  Innehåll som HTML och annat
                           Application
                         Transport
                         Internet
                         Link


Daniel Stenberg                 31:a maj 2010   4
Link- och Internet-lagren




                                                 Bild från www.useit.com
                   50 % mer bandbredd varje år

Daniel Stenberg                31:a maj 2010                               5
Link och Internet, RTT
    ●   RTT, Round Trip (delay) Time står still eller backar
    ●   Genomsnitt till Google inom USA: 90 ms, i världen
        100 ms
    ●   Telefoner GSM/3G upp till 6000 ms
    ●   DSL: 40-50 ms
    ●   Kabel: 60 ms
    ●   Uppringt modem: 120-150 ms
    ●   (MTUs...)

Daniel Stenberg                31:a maj 2010                   6
TCP Transport: fördröjningar
    ●   DNS resolve                          Undvik, cacha
    ●   Handshake – 3 way                    Pool, återanvänd
    ●   Nagle – vänta för att fylla på mer
                                     Kan stängas av
    ●   Slow start                           Var medveten
    ●   Delayed ACKs                         När 2 är bättre än 1
               Att optimera för mindre fördröjningar och kortare
              RTT kan leda till sämre throughput och bandbredd


Daniel Stenberg                     31:a maj 2010                   7
TCP Transport: fördröjningar
    ●   DNS resolve                          Undvik, cacha
    ●   Handshake – 3 way                    Pool, återanvänd
    ●   Nagle – vänta för att fylla på mer
                                     Kan stängas av
    ●   Slow start                           Var medveten
    ●   Delayed ACKs                         När 2 är bättre än 1
               Att optimera för mindre fördröjningar och kortare
              RTT kan leda till sämre throughput och bandbredd


Daniel Stenberg                     31:a maj 2010                   8
TCP Transport: fördröjningar
    ●   DNS resolve                          Undvik, cacha
    ●   Handshake – 3 way                    Pool, återanvänd
    ●   Nagle – vänta för att fylla på mer
                                     Kan stängas av
    ●   Slow start                           Var medveten
    ●   Delayed ACKs                         När 2 är bättre än 1
               Att optimera för mindre fördröjningar och kortare
              RTT kan leda till sämre throughput och bandbredd


Daniel Stenberg                     31:a maj 2010                   9
TCP Transport: fördröjningar
    ●   DNS resolve                          Undvik, cacha
    ●   Handshake – 3 way                    Pool, återanvänd
    ●   Nagle – vänta för att fylla på mer
                                     Kan stängas av
    ●   Slow start                           Var medveten
    ●   Delayed ACKs                         När 2 är bättre än 1
               Att optimera för mindre fördröjningar och kortare
              RTT kan leda till sämre throughput och bandbredd


Daniel Stenberg                     31:a maj 2010                   10
TCP Transport: fördröjningar
    ●   DNS resolve                          Undvik, cacha
    ●   Handshake – 3 way                    Pool, återanvänd
    ●   Nagle – vänta för att fylla på mer
                                     Kan stängas av
    ●   Slow start                           Var medveten
    ●   Delayed ACKs                         När 2 är bättre än 1
               Att optimera för mindre fördröjningar och kortare
              RTT kan leda till sämre throughput och bandbredd


Daniel Stenberg                     31:a maj 2010                   11
TCP Transport: fördröjningar
    ●   DNS resolve                          Undvik, cacha
    ●   Handshake – 3 way                    Pool, återanvänd
    ●   Nagle – vänta för att fylla på mer
                                     Kan stängas av
    ●   Slow start                           Var medveten
    ●   Delayed ACKs                         När 2 är bättre än 1
               Att optimera för mindre fördröjningar och kortare
              RTT kan leda till sämre throughput och bandbredd


Daniel Stenberg                     31:a maj 2010                   12
HTTP
    ●   Ovanpå TCP så...
    ●   Request size, pratigt protokoll
    ●   Cookie sizes, cookies skickas alltid om de matchar
    ●   Cache friendliness, skicka inte mer HTTP än
        nödvändigt
    ●   Pipelining, besegra RTT men...
    ●   Compression



Daniel Stenberg                 31:a maj 2010                13
HTTP
    ●   Ovanpå TCP så...
    ●   Request size, pratigt protokoll
    ●   Cookie sizes, cookies skickas alltid om de matchar
    ●   Cache friendliness, skicka inte mer HTTP än
        nödvändigt
    ●   Pipelining, besegra RTT men...
    ●   Compression



Daniel Stenberg                 31:a maj 2010                14
HTTP
    ●   Ovanpå TCP så...
    ●   Request size, pratigt protokoll
    ●   Cookie sizes, cookies skickas alltid om de matchar
    ●   Cache friendliness, skicka inte mer HTTP än
        nödvändigt
    ●   Pipelining, besegra RTT men...
    ●   Compression



Daniel Stenberg                 31:a maj 2010                15
HTTP
    ●   Ovanpå TCP så...
    ●   Request size, pratigt protokoll
    ●   Cookie sizes, cookies skickas alltid om de matchar
    ●   Cache friendliness, skicka inte mer HTTP än
        nödvändigt
    ●   Pipelining, besegra RTT men...
    ●   Compression



Daniel Stenberg                 31:a maj 2010                16
HTTP
    ●   Ovanpå TCP så...
    ●   Request size, pratigt protokoll
    ●   Cookie sizes, cookies skickas alltid om de matchar
    ●   Cache friendliness, skicka inte mer HTTP än
        nödvändigt
    ●   Pipelining, besegra RTT men...
    ●   Compression



Daniel Stenberg                 31:a maj 2010                17
HTTP
    ●   Ovanpå TCP så...
    ●   Request size, pratigt protokoll
    ●   Cookie sizes, cookies skickas alltid om de matchar
    ●   Cache friendliness, skicka inte mer HTTP än
        nödvändigt
    ●   Pipelining, besegra RTT men...
    ●   Compression



Daniel Stenberg                 31:a maj 2010                18
HTTP i webbläsare
    ●   Många koppel. Var 2. Numera 6 eller 8. Snart...
    ●   Ingen Pipelining
    ●   AJAX
    ●   “long polling”




Daniel Stenberg               31:a maj 2010               19
HTTP i handhållet
    ●   Wifi
    ●   GSM/3g
    ●   High latency, low bandwidth




Daniel Stenberg              31:a maj 2010   20
API

    ●   Hur man gör saker har
        betydelse




Daniel Stenberg    31:a maj 2010   21
Typisk TCP-klient
        Så länge klienten lever {
                  vänta på socket-händelse
                  Kolla vilken socket som det hände på
                  Hantera socketen
        }


        Traditionellt med select() eller poll()



Daniel Stenberg                      31:a maj 2010       22
10000 koppel ändrar reglerna
    ●   select och poll blir
        exponentiellt sämre med
        antalet koppel




Daniel Stenberg               31:a maj 2010      23
event-based
    ●   Agera vid
        händelse på
        socketen det
        händer på
    ●   Inte leta, veta




                                                                    Bild från http://www.monkey.org/~provos/libevent/
          Bild från http://developers.sun.com




Daniel Stenberg                                     31:a maj 2010                                                       24
event-klient
        Function call_on_event {
                  Hantera trafik på socketen
        }
        event_wait( &call_on_event)


        Libevent, libev, epoll, kqueue,




Daniel Stenberg                      31:a maj 2010   25
Exempel
    ●   libcurl...
    ●   är open source
    ●   leds av Daniel
    ●   kan FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP,
        TELNET, DICT, LDAP, LDAPS, FILE, IMAP,
        SMTP, POP3 och RTSP just nu
    ●   det främsta dataöverförings-libraryt helt enkelt



Daniel Stenberg                31:a maj 2010               26
libcurl
    ●   DNS cache
    ●   Återanvänder TCP-koppel
    ●   API: select-stil
    ●   API: event-stil, upp tille mycket snabbare
    ●   C10K, upp till C70K




Daniel Stenberg                31:a maj 2010         27
Framtiden
    ●   WebSockets
    ●   SPDY
    ●   SCTP
    ●   MPTCP
    ●   ...




Daniel Stenberg         31:a maj 2010   28
Framtid 1: WebSockets
    ●   WHATWG startade
    ●   IETF hybi working group
    ●   Browser till server
    ●   Lösning på HTTP long-polling problemet
    ●   TCP-replacement över TCP
    ●   Javascript-centric (kan inte skicka binärt!)
    ●   HTTP upgrade
    ●   Debatteras ivrigt just nu

Daniel Stenberg                 31:a maj 2010          29
Framtid 2: SPDY
    ●   Google
    ●   HTTP replacement
    ●   Multiplexade strömmar över ett koppel
    ●   Pririterade strömmar
    ●   Server-initierade strömmar
    ●   Chrome har implementation
    ●   Experiementellt


Daniel Stenberg                31:a maj 2010    30
Framtid 3: SCTP
    ●   IETF (RFC 4960, 2007)
    ●   Ersätter TCP som transport
    ●   Meddelanden, inte byte-strömmar
    ●   Flera samtidiga logiska meddelande-strömmar
    ●   HTTP över SCTP
    ●   Över UDP?
    ●   Sannolikhet oklar


Daniel Stenberg               31:a maj 2010           31
Framtid 4: MPTCP
    ●   Multi-Path TCP
    ●   IETF
    ●   Flera vägar mellan source och destination
    ●   Kompatibelt API för applikationer
    ●   “Snällt mot nätet”
    ●   Som gjort för saker med flera interface
    ●   Sannolikhet: trolig


Daniel Stenberg                31:a maj 2010        32
MPTCP




Daniel Stenberg    31:a maj 2010   33
MPTCP ett koppel




Daniel Stenberg         31:a maj 2010   34
MPTCP två koppel




Daniel Stenberg         31:a maj 2010   35
Summering
    ●   RTT står still fast bandbredd ökar
    ●   TCP har fördröjningar
    ●   HTTP kör på TCP
    ●   Använd rätt API:er
    ●   WebSockets, SPDY, SCTP och MPTCP




Daniel Stenberg                 31:a maj 2010   36

More Related Content

More from .SE (Stiftelsen för Internetinfrastruktur)

More from .SE (Stiftelsen för Internetinfrastruktur) (18)

Optimera STHLM 2011 - Tobias Järlund, Aftonbladet
Optimera STHLM 2011 - Tobias Järlund, AftonbladetOptimera STHLM 2011 - Tobias Järlund, Aftonbladet
Optimera STHLM 2011 - Tobias Järlund, Aftonbladet
 
Optimera STHLM 2011 - Ragnar Lönn, Load Impact
Optimera STHLM 2011 - Ragnar Lönn, Load ImpactOptimera STHLM 2011 - Ragnar Lönn, Load Impact
Optimera STHLM 2011 - Ragnar Lönn, Load Impact
 
Optimera STHLM 2011 - Patrik Wallström, .SE
Optimera STHLM 2011 - Patrik Wallström, .SEOptimera STHLM 2011 - Patrik Wallström, .SE
Optimera STHLM 2011 - Patrik Wallström, .SE
 
Optimera STHLM 2011 - Mikael Berggren, Spotify
Optimera STHLM 2011 - Mikael Berggren, SpotifyOptimera STHLM 2011 - Mikael Berggren, Spotify
Optimera STHLM 2011 - Mikael Berggren, Spotify
 
Optimera STHLM 2011 - Måns Jonasson
Optimera STHLM 2011 - Måns JonassonOptimera STHLM 2011 - Måns Jonasson
Optimera STHLM 2011 - Måns Jonasson
 
Tobbe Eklöv
Tobbe EklövTobbe Eklöv
Tobbe Eklöv
 
Per Blixt
Per BlixtPer Blixt
Per Blixt
 
Kurtis Lindqvist
Kurtis LindqvistKurtis Lindqvist
Kurtis Lindqvist
 
Anders Rafting
Anders RaftingAnders Rafting
Anders Rafting
 
Anders Örtengren
Anders ÖrtengrenAnders Örtengren
Anders Örtengren
 
OPTIMERA STHLM! Henrik Nordström
OPTIMERA STHLM! Henrik NordströmOPTIMERA STHLM! Henrik Nordström
OPTIMERA STHLM! Henrik Nordström
 
OPTIMERA STHLM! Jacob Hansson
OPTIMERA STHLM! Jacob HanssonOPTIMERA STHLM! Jacob Hansson
OPTIMERA STHLM! Jacob Hansson
 
OPTIMERA STHLM! Isac Lagerblad
OPTIMERA STHLM! Isac LagerbladOPTIMERA STHLM! Isac Lagerblad
OPTIMERA STHLM! Isac Lagerblad
 
OPTIMERA STHLM! Fleecelabs
OPTIMERA STHLM! FleecelabsOPTIMERA STHLM! Fleecelabs
OPTIMERA STHLM! Fleecelabs
 
OPTIMERA STHLM! Martin Källström
OPTIMERA STHLM! Martin KällströmOPTIMERA STHLM! Martin Källström
OPTIMERA STHLM! Martin Källström
 
OPTIMERA STHLM! Stefan Pettersson
OPTIMERA STHLM! Stefan PetterssonOPTIMERA STHLM! Stefan Pettersson
OPTIMERA STHLM! Stefan Pettersson
 
OPTIMERA STHLM! Loadimpact
OPTIMERA STHLM! LoadimpactOPTIMERA STHLM! Loadimpact
OPTIMERA STHLM! Loadimpact
 
OPTIMERA STHLM! Måns Jonasson
OPTIMERA STHLM! Måns JonassonOPTIMERA STHLM! Måns Jonasson
OPTIMERA STHLM! Måns Jonasson
 

OPTIMERA STHLM! Daniel Stenberg

  • 1. Mer data på kortare tid, tack! Daniel Stenberg
  • 2. Daniel Stenberg Haxx och Fossgruppen curl libssh2 IETF http://daniel.haxx.se/ Daniel Stenberg 31:a maj 2010 2
  • 3. Agenda Transport API Framtid Daniel Stenberg 31:a maj 2010 3
  • 4. Protokoll-lager Innehåll som HTML och annat Application Transport Internet Link Daniel Stenberg 31:a maj 2010 4
  • 5. Link- och Internet-lagren Bild från www.useit.com 50 % mer bandbredd varje år Daniel Stenberg 31:a maj 2010 5
  • 6. Link och Internet, RTT ● RTT, Round Trip (delay) Time står still eller backar ● Genomsnitt till Google inom USA: 90 ms, i världen 100 ms ● Telefoner GSM/3G upp till 6000 ms ● DSL: 40-50 ms ● Kabel: 60 ms ● Uppringt modem: 120-150 ms ● (MTUs...) Daniel Stenberg 31:a maj 2010 6
  • 7. TCP Transport: fördröjningar ● DNS resolve Undvik, cacha ● Handshake – 3 way Pool, återanvänd ● Nagle – vänta för att fylla på mer Kan stängas av ● Slow start Var medveten ● Delayed ACKs När 2 är bättre än 1 Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd Daniel Stenberg 31:a maj 2010 7
  • 8. TCP Transport: fördröjningar ● DNS resolve Undvik, cacha ● Handshake – 3 way Pool, återanvänd ● Nagle – vänta för att fylla på mer Kan stängas av ● Slow start Var medveten ● Delayed ACKs När 2 är bättre än 1 Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd Daniel Stenberg 31:a maj 2010 8
  • 9. TCP Transport: fördröjningar ● DNS resolve Undvik, cacha ● Handshake – 3 way Pool, återanvänd ● Nagle – vänta för att fylla på mer Kan stängas av ● Slow start Var medveten ● Delayed ACKs När 2 är bättre än 1 Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd Daniel Stenberg 31:a maj 2010 9
  • 10. TCP Transport: fördröjningar ● DNS resolve Undvik, cacha ● Handshake – 3 way Pool, återanvänd ● Nagle – vänta för att fylla på mer Kan stängas av ● Slow start Var medveten ● Delayed ACKs När 2 är bättre än 1 Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd Daniel Stenberg 31:a maj 2010 10
  • 11. TCP Transport: fördröjningar ● DNS resolve Undvik, cacha ● Handshake – 3 way Pool, återanvänd ● Nagle – vänta för att fylla på mer Kan stängas av ● Slow start Var medveten ● Delayed ACKs När 2 är bättre än 1 Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd Daniel Stenberg 31:a maj 2010 11
  • 12. TCP Transport: fördröjningar ● DNS resolve Undvik, cacha ● Handshake – 3 way Pool, återanvänd ● Nagle – vänta för att fylla på mer Kan stängas av ● Slow start Var medveten ● Delayed ACKs När 2 är bättre än 1 Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd Daniel Stenberg 31:a maj 2010 12
  • 13. HTTP ● Ovanpå TCP så... ● Request size, pratigt protokoll ● Cookie sizes, cookies skickas alltid om de matchar ● Cache friendliness, skicka inte mer HTTP än nödvändigt ● Pipelining, besegra RTT men... ● Compression Daniel Stenberg 31:a maj 2010 13
  • 14. HTTP ● Ovanpå TCP så... ● Request size, pratigt protokoll ● Cookie sizes, cookies skickas alltid om de matchar ● Cache friendliness, skicka inte mer HTTP än nödvändigt ● Pipelining, besegra RTT men... ● Compression Daniel Stenberg 31:a maj 2010 14
  • 15. HTTP ● Ovanpå TCP så... ● Request size, pratigt protokoll ● Cookie sizes, cookies skickas alltid om de matchar ● Cache friendliness, skicka inte mer HTTP än nödvändigt ● Pipelining, besegra RTT men... ● Compression Daniel Stenberg 31:a maj 2010 15
  • 16. HTTP ● Ovanpå TCP så... ● Request size, pratigt protokoll ● Cookie sizes, cookies skickas alltid om de matchar ● Cache friendliness, skicka inte mer HTTP än nödvändigt ● Pipelining, besegra RTT men... ● Compression Daniel Stenberg 31:a maj 2010 16
  • 17. HTTP ● Ovanpå TCP så... ● Request size, pratigt protokoll ● Cookie sizes, cookies skickas alltid om de matchar ● Cache friendliness, skicka inte mer HTTP än nödvändigt ● Pipelining, besegra RTT men... ● Compression Daniel Stenberg 31:a maj 2010 17
  • 18. HTTP ● Ovanpå TCP så... ● Request size, pratigt protokoll ● Cookie sizes, cookies skickas alltid om de matchar ● Cache friendliness, skicka inte mer HTTP än nödvändigt ● Pipelining, besegra RTT men... ● Compression Daniel Stenberg 31:a maj 2010 18
  • 19. HTTP i webbläsare ● Många koppel. Var 2. Numera 6 eller 8. Snart... ● Ingen Pipelining ● AJAX ● “long polling” Daniel Stenberg 31:a maj 2010 19
  • 20. HTTP i handhållet ● Wifi ● GSM/3g ● High latency, low bandwidth Daniel Stenberg 31:a maj 2010 20
  • 21. API ● Hur man gör saker har betydelse Daniel Stenberg 31:a maj 2010 21
  • 22. Typisk TCP-klient Så länge klienten lever { vänta på socket-händelse Kolla vilken socket som det hände på Hantera socketen } Traditionellt med select() eller poll() Daniel Stenberg 31:a maj 2010 22
  • 23. 10000 koppel ändrar reglerna ● select och poll blir exponentiellt sämre med antalet koppel Daniel Stenberg 31:a maj 2010 23
  • 24. event-based ● Agera vid händelse på socketen det händer på ● Inte leta, veta Bild från http://www.monkey.org/~provos/libevent/ Bild från http://developers.sun.com Daniel Stenberg 31:a maj 2010 24
  • 25. event-klient Function call_on_event { Hantera trafik på socketen } event_wait( &call_on_event) Libevent, libev, epoll, kqueue, Daniel Stenberg 31:a maj 2010 25
  • 26. Exempel ● libcurl... ● är open source ● leds av Daniel ● kan FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, SMTP, POP3 och RTSP just nu ● det främsta dataöverförings-libraryt helt enkelt Daniel Stenberg 31:a maj 2010 26
  • 27. libcurl ● DNS cache ● Återanvänder TCP-koppel ● API: select-stil ● API: event-stil, upp tille mycket snabbare ● C10K, upp till C70K Daniel Stenberg 31:a maj 2010 27
  • 28. Framtiden ● WebSockets ● SPDY ● SCTP ● MPTCP ● ... Daniel Stenberg 31:a maj 2010 28
  • 29. Framtid 1: WebSockets ● WHATWG startade ● IETF hybi working group ● Browser till server ● Lösning på HTTP long-polling problemet ● TCP-replacement över TCP ● Javascript-centric (kan inte skicka binärt!) ● HTTP upgrade ● Debatteras ivrigt just nu Daniel Stenberg 31:a maj 2010 29
  • 30. Framtid 2: SPDY ● Google ● HTTP replacement ● Multiplexade strömmar över ett koppel ● Pririterade strömmar ● Server-initierade strömmar ● Chrome har implementation ● Experiementellt Daniel Stenberg 31:a maj 2010 30
  • 31. Framtid 3: SCTP ● IETF (RFC 4960, 2007) ● Ersätter TCP som transport ● Meddelanden, inte byte-strömmar ● Flera samtidiga logiska meddelande-strömmar ● HTTP över SCTP ● Över UDP? ● Sannolikhet oklar Daniel Stenberg 31:a maj 2010 31
  • 32. Framtid 4: MPTCP ● Multi-Path TCP ● IETF ● Flera vägar mellan source och destination ● Kompatibelt API för applikationer ● “Snällt mot nätet” ● Som gjort för saker med flera interface ● Sannolikhet: trolig Daniel Stenberg 31:a maj 2010 32
  • 33. MPTCP Daniel Stenberg 31:a maj 2010 33
  • 34. MPTCP ett koppel Daniel Stenberg 31:a maj 2010 34
  • 35. MPTCP två koppel Daniel Stenberg 31:a maj 2010 35
  • 36. Summering ● RTT står still fast bandbredd ökar ● TCP har fördröjningar ● HTTP kör på TCP ● Använd rätt API:er ● WebSockets, SPDY, SCTP och MPTCP Daniel Stenberg 31:a maj 2010 36