TCPoverUDP ChengHan Lee cl 2804 Outline To U

  • Slides: 25
Download presentation
TCP-over-UDP Cheng-Han Lee (cl 2804)

TCP-over-UDP Cheng-Han Lee (cl 2804)

Outline � To. U APIs �Using of To. U: Sample code � Simulation �Environmental

Outline � To. U APIs �Using of To. U: Sample code � Simulation �Environmental Setup �Test Results � Architecture �To. U Modules �Processtou Thread/ Timer thread (fired pkt & dup ACKs rexmit) �Congestion FSM(TCP Reno)/ Processtou FSM/ Delayed ACK FSM �Logging mechanisms �Closure (close func. ) and Connection control � Demo (Vmware)

 To. U Initialize To. U APIs Server Mode tou. Socket( ) Client Initialize

To. U Initialize To. U APIs Server Mode tou. Socket( ) Client Initialize Mode To. U tou. Bind() tou. Socket( ) tou. Listen() tou. Bind() tou. Accept( ) tou. Connect( ) run() tou. Recv() tou. Send() tou. Close() �Just like C/C++ Socket �Sample Codes �Client �Server

 #include "tou. h" #include <sys/socket. h> #include <netdb. h> using namespace std; /*

#include "tou. h" #include <sys/socket. h> #include <netdb. h> using namespace std; /* … main … */ tou. Main tm; /* fill in the socket struct with server's info */ memset(&socket_svr, NULL, sizeof(socket_svr)); assign_addr(&socket_svr, AF_INET, SVR_IP, SVR_PORT); /* fill in client socket info */ memset(&socket_cli, NULL, sizeof(socket_cli)); socket_cli. sin_family = AF_INET; socket_cli. sin_addr. s_addr = INADDR_ANY; socket_cli. sin_port = htons(CLI_PORT); /* grab client socket */ sockd = tm. tou. Socket(AF_INET, SOCK_TOU, 0); /* bind the socket wiht port number */ tm. tou. Bind(sockd, (struct sockaddr*) &socket_cli, sizeof(socket_cli)); /* connect to port on server */ tm. tou. Connect(sockd, (struct sockaddr_in*)&socket_svr, sizeof(socket_svr)); /* send a message to the server PORT */ while(true){ FD_ZERO(&socks); FD_SET(sockd, &socks); tim. tv_sec = TIMEOUTVAL; tim. tv_usec = 0; if(!indata. eof() && tm. get. Cir. Snd. Buf() > MORE_BUF)) { indata. read(send_data, MORE_BUF); readsize = indata. gcount(); sendsize = tm. tou. Send(sockd, send_data, readsize , 0); total_sendsize += sendsize; } selectval = select(sockd+1, &socks, NULL, &tim); if (selectval){ tm. run(sockd); }else { break; } if (totalsendsize < readsize) { sendsize = tm. tou. Send(sockd, send_data, readsize , 0); total_sendsize += sendsize; } }// while(true) cout << "Exit!" << endl; tm. tou. Close(sockd); /* . . . read data to send_data with size of read_sz */ Client Side

 #include "tou. h" #include <sys/socket. h> #include <netdb. h> using namespace std; /*

#include "tou. h" #include <sys/socket. h> #include <netdb. h> using namespace std; /* … main … */ tou. Main tm; /* Set socket structures */ memset(&socket_svr, 0, sizeof(socket_svr)); socket_svr. sin_family = AF_INET; socket_svr. sin_addr. s_addr = INADDR_ANY; socket_svr. sin_port = htons(SVR_PORT); memset(&socket_cli, 0, sizeof(socket_cli)); if (select(sockd+1, &socks, NULL, &tim)){ tm. run(sockd); //RECV: tou. Recv data memset(recv_data, 0, sizeof(recv_data)); tm. tou. Recv(sockd, recv_data, MAXSNDBUF, 0); }else{ break; }// while(true) cout << "Exit!" << endl; tm. tou. Close(sockd); sockd = tm. tou. Socket(AF_INET, SOCK_TOU, 0); tm. tou. Bind(sockd, (struct sockaddr*) &socket_svr, sizeof(socket_svr)); tm. tou. Listen(sockd, 1); socklen_t sinlen = sizeof(socket_cli); tm. run(sockd); tm. tou. Accept(sockd, (struct sockaddr_in*)&socket_cli, &sinlen); while(true){ FD_ZERO(&socks); FD_SET(sockd, &socks); tim. tv_sec = TIMEOUTVAL; Server Side

Outline � To. U APIs �Using of To. U: Sample code � Simulation �Environmental

Outline � To. U APIs �Using of To. U: Sample code � Simulation �Environmental Setup �Test Results � Architecture �To. U Modules �Processtou Thread/ Timer thread (fired pkt & dup ACKs rexmit) �Congestion FSM(TCP Reno)/ Processtou FSM/ Delayed ACK FSM �Logging mechanisms �Closure (close func. ) and Connection control � Demo (Vmware)

Environmental Setup �Using physical machines rather than vmware to make sure the simulations are

Environmental Setup �Using physical machines rather than vmware to make sure the simulations are close to real cases. Hardware setting of client, server, and router ASUS D-Link DI-604 Sony m 5200 a NW 120 J OS: Ubuntu 9. 04 2. 6. 28 -19 CPU: Intel Pentium-M 740 MEM: 768 MB OS: Ubuntu 9. 04 2. 6. 2819 CPU: Intel Core 2 T 6500 MEM: 4096 MB

Environmental Setup �Turn the kernel to TCP Reno. �Configure the kernel recv/send buffers. echo

Environmental Setup �Turn the kernel to TCP Reno. �Configure the kernel recv/send buffers. echo "reno" > /proc/sys/net/ipv 4/tcp_congestion_control echo "3" > /proc/sys/net/ipv 4/tcp_reordering echo "0" > /proc/sys/net/ipv 4/tcp_abc echo "0" > /proc/sys/net/ipv 4/tcp_dsack echo "0" > /proc/sys/net/ipv 4/tcp_fack echo "0" > /proc/sys/net/ipv 4/tcp_timestamps echo "1" > /proc/sys/net/ipv 4/tcp_window_scaling echo "1" > /proc/sys/net/ipv 4/tcp_no_metrics_save echo "0" > /proc/sys/net/ipv 4/tcp_slow_start_after_idle echo "5000" > /proc/sys/net/core/netdev_max_backlog echo "72800" > /proc/sys/net/core/optmem_max # Socket buffer's size echo "72800" > /proc/sys/net/core/rmem_default echo "4194304" > /proc/sys/net/core/rmem_max echo "72800" > /proc/sys/net/core/wmem_default echo "4194304" > /proc/sys/net/core/wmem_max #Number of pages allowed for queuing. echo "65000 80000 94000" > /proc/sys/net/ipv 4/tcp_mem echo "65000 80000 94000" > /proc/sys/net/ipv 4/udp_mem #TCP buffer limits echo "4096 72800 4194304" > /proc/sys/net/ipv 4/tcp_rmem echo "4096 72800 4194304" > /proc/sys/net/ipv 4/tcp_wmem #Minimal size buffers used by UDP sockets. echo "8192" > /proc/sys/net/ipv 4/udp_rmem_min echo "8192" > /proc/sys/net/ipv 4/udp_wmem_min

Environmental Setup �Turn off TSO/GSO. #! /bin/bash ethtool –K eth. X tso off ethtool

Environmental Setup �Turn off TSO/GSO. #! /bin/bash ethtool –K eth. X tso off ethtool –K eth. X gso off ethtool –k eth. X �Connection monitor for TCP. #! /bin/bash modprobe tcp_probe port=$1 chmod 666 /prob/net/tcpprobe cat /proc/net/tcpprobe > /tmp/tcpprobe. out & TCPPROB=$! �Commands for emulating WAN. # Delay 50 ms tc qdisc add dev eth 0 root netem delay 50 ms tc qdisc change dev eth 0 root netem delay 100 ms 10 ms # Loss rate set to 0. 1% tc qdisc change dev eth 0 root netem loss 0. 1% To. U: tou –s tou IP test_file -c TCP: ttcp -r -v -p Port > /dev/null ttcp –t –v –l 1456 -p Port IP < test_file

Test Results �Sending 100 MB, loss rate 0%, delay 0 ms 100 ms 300

Test Results �Sending 100 MB, loss rate 0%, delay 0 ms 100 ms 300 ms 17. 46 real seconds , 5906. 35 KB/sec 9. 70 real seconds , 10386. 96 KB/sec 16. 47 real seconds , 6261. 39 KB/sec 8. 47 real seconds , 11895. 53 KB/sec 21. 07 real seconds , 4894. 40 KB/sec 16. 62 real seconds , 6058. 87 KB/sec

Test Results �Sending 30 MB, loss rate 1%, delay 0 ms 100 ms 12.

Test Results �Sending 30 MB, loss rate 1%, delay 0 ms 100 ms 12. 99 real seconds , 2421. 65 300 ms KB/sec 8. 69 real seconds , 3533. 34 KB/sec 0 ms 302. 22 real seconds , 104. 087 KB/sec 239. 15 real seconds , 128. 46 KB/sec 100 ms �Avg. cwnd: tou(7. 99077)/ ttcp(8. 934413) �Avg. cwnd: tou(9. 539957)/ ttcp(9. 615262) �Avg. cwnd: tou(9. 79832714)/ ttcp(11. 6885906) 728. 58 real seconds , 43. 176 KB/sec 674. 59 real seconds , 45. 54 KB/sec 300 ms

Test Results �Sending 100 MB, loss rate 0. 01%, delay 0 ms 100 ms

Test Results �Sending 100 MB, loss rate 0. 01%, delay 0 ms 100 ms 300 ms 16. 61 real seconds , 6205. 39 KB/sec 8. 98 real seconds , 11216. 41 KB/sec 0 ms 38. 08 real seconds , 2707. 78 KB/sec 23. 75 real seconds , 4239. 86 KB/sec 100 ms � 100 MB is about 103124992 bytes. A pkt is about 1460 bytes. There’re about 70000 transmits in total. Since the loss rate is 0. 01%, there’re about 7 losses. 71. 02 real seconds , 1451. 85 KB/sec 61. 39 real seconds , 1640. 38 KB/sec 300 ms

Test Results: Summary Delay Loss Rate 0 ms 300 ms To. U 16. 47

Test Results: Summary Delay Loss Rate 0 ms 300 ms To. U 16. 47 real seconds 17. 46 real seconds 21. 07 real seconds 6261. 39 KB/sec 5906. 35 KB/sec 4894. 40 KB/sec TCP 8. 47 real seconds 11895. 53 KB/sec 0%(100 mb) 9. 70 real seconds 16. 62 real seconds 6058. 87 KB/sec 10386. 96 KB/sec 12. 99 real seconds To. U 2421. 65 KB/sec 302. 22 real seconds 104. 087 KB/sec 728. 58 real seconds 43. 176 KB/sec TCP 8. 69 real seconds 3533. 34 KB/sec 239. 15 real seconds 128. 46 KB/sec 674. 59 real seconds 45. 54 KB/sec To. U 16. 61 real seconds 38. 08 real seconds 71. 02 real seconds 6205. 39 KB/sec 2707. 78 KB/sec 1451. 85 KB/sec TCP 8. 98 real seconds 23. 75 real seconds 61. 39 real seconds 11216. 41 KB/sec 4239. 86 KB/sec 1640. 38 KB/sec 1%(30 mb) 0. 01%(100 m b) 100 ms

Outline � To. U APIs �Using of To. U: Sample code � Simulation �Environmental

Outline � To. U APIs �Using of To. U: Sample code � Simulation �Environmental Setup �Test Results � Architecture �To. U Modules �Processtou Thread/ Timer thread (fired pkt & dup ACKs rexmit) �Congestion FSM(TCP Reno)/ Processtou FSM/ Delayed ACK FSM �Logging mechanisms �Closure (close func. ) and Connection control � Demo (Vmware)

To. U Modules �Threading model �Timer thread/ Main thread �Adopt TCP Reno as congestion

To. U Modules �Threading model �Timer thread/ Main thread �Adopt TCP Reno as congestion control algorithm �Slow Start/ Congestion Avoidance/ Fast Retransmit �Fast Recovery �Karn & Partridge Algorithm � Round-Trip Time Estimates for calculating Retransmission Timeout

wc: 6064 lines 18641 words 155678 total To. U Programs � -rwxrw-rw- 1 w

wc: 6064 lines 18641 words 155678 total To. U Programs � -rwxrw-rw- 1 w 4180 6356 2011 -03 -27 23: 21 circ_buf. cpp � -rwxrw-rw- 1 w 4180 2000 2011 -03 -03 16: 28 circ_buf. h � -rwxrw-rw- 1 w 4180 16709 2011 -02 -04 13: 39 processtou. cpp � -rwxrw-rw- 1 w 4180 3139 2011 -03 -31 20: 16 processtou. h � -rwxrw-rw- 1 w 4180 17573 2011 -03 -31 15: 56 timer. cpp Circular Buffer To. U Process Thread � -rwxrw-rw- 1 w 4180 8099 2011 -03 -31 12: 34 timer. h � -rwxrw-rw- 1 w 4180 4833 2011 -03 -20 23: 29 timer_mng. cpp � -rwxrw-rw- 1 w 4180 4263 2011 -03 -28 09: 06 timer_node. cpp Timer Thread � -rwxrw-rw- 1 w 4180 1377 2011 -03 -10 22: 29 timestamp. cpp � -rwxrw-rw- 1 w 4180 240 2011 -03 -03 18: 07 timestamp. h � -rwxrw-rw- 1 w 4180 284 2010 -05 -16 15: 04 tou_boost. h � -rwxrw-rw- 1 w 4180 2535 2011 -03 -28 11: 27 tou_comm. h � -rwxrw-rw- 1 w 4180 2152 2011 -03 -28 09: 01 tou_congestion. h � -rwxrw-rw- 1 w 4180 1515 2011 -03 -26 23: 23 tou_control_block. h Congestion � -rwxrw-rw- 1 w 4180 6810 2011 -03 -27 23: 08 tou_sock_table. cpp � -rwxrw-rw- 1 w 4180 4614 2011 -03 -27 22: 43 tou_sock_table. h. FSM/ Structs � -rwxrw-rw- 1 w 4180 3983 2011 -03 -26 23: 19 tou_ss_ca. cpp � -rwxrw-rw- 1 w 4180 13915 2011 -03 -26 11: 05 tou. cpp � -rwxrw-rw- 1 w 4180 2445 2011 -03 -16 08: 37 tou. h � -rwxrw-rw- 1 w 4180 4900 2010 -05 -04 23: 09 tou_header. cpp � -rwxrw-rw- 1 w 4180 2231 2011 -03 -20 14: 24 tou_header. h � -rwxrw-rw- 1 w 4180 4415 2011 -03 -24 09: 10 tou_logger. cpp � -rwxrw-rw- 1 w 4180 2285 2011 -03 -12 20: 54 tou_logger. h To. U APIs To. U Packets/ Structs To. U Logger

To. U Transmission Models Transm it Receiv e

To. U Transmission Models Transm it Receiv e

To. U Process Thread head tail Circular Buffer 2097152 (2 M) . . Timer

To. U Process Thread head tail Circular Buffer 2097152 (2 M) . . Timer Heap. snd_una snd_nxt window Window Size Sequence number

Timer Thread node_t 100 m s cmp current time . . Timer Heap.

Timer Thread node_t 100 m s cmp current time . . Timer Heap.

To. U Control Block

To. U Control Block

Congestion FSM(TCP Reno)

Congestion FSM(TCP Reno)

Processtou FSM/ Delayed ACK FSM

Processtou FSM/ Delayed ACK FSM

Demo � 30 mb file with 1% packet loss & 100 ms delay �Log

Demo � 30 mb file with 1% packet loss & 100 ms delay �Log file �Congestion window, sequence number. �Socket tables. �Packet Send/Recv. Logs. �Timer Logs.

Thank You!

Thank You!