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
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