Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
TCP section 6.5 (Read this section!) 1 Mar 2007 CS 360 – Spring 2007 Pacific University Transport Layer • Key interface between applications and the network • What does reliable really mean? – Network Layer (IP) does not guarantee • delivery of packets • in order delivery of packets – RFC: “The TCP must recover from data that is damaged, lost, duplicated, or delivered out of order…” “As long as the TCPs continue to function properly and the internet system does not become completely partitioned, no transmission errors will affect the correct delivery of data. TCP recovers from internet communication system errors.” CS 360 – Spring 2007 Pacific University TCP • Transport layer (TCP) does guarantee (RFC 793) – delivery – in order delivery • Provides – full duplex connections – point-to-point (exactly two end points, no multicasting) CS 360 – Spring 2007 Pacific University TCP Protocol Basics • Each byte in the stream has its own 32-bit sequence number – on a 56 kbps phone line, it takes 1 week (plus) to cycle through – “At 100 megabits/sec, the cycle time is 5.4 minutes” RFC 793 – “Maximum Segment Lifetime, the time a TCP segment can exist in the internetwork system. Arbitrarily defined to be 2 minutes.” RFC 793 Not really enforced, assumed – time to live set to one minute or 00111100 • TTL set in IP header (8 bit field) • Basic unit of transfer is the TCP segment – – – – – sometimes called a packet (incorrectly) fixed 20-byte header optional header extension data max segment size: • 64KB IP payload • networks MTU (maximum transfer unit) (~1500 bytes for Ethernet) CS 360 – Spring 2007 Pacific University CS 360 – Spring 2007 Pacific University TCP Options 16-bit max segment size – 64KB • If this is not specified the default size is 536 bytes – RFC 879 • Both sides send this option to determine segment size – both sides must use the same segment size CS 360 – Spring 2007 Pacific University Sliding Window • Sliding window protocol used to manage flow/retransmission – waits for acknowledgement (ACK) or a timeout – retransmit if the ACK times out • Acknowledgement number denotes the next byte to be received – when ACK 1138 is sent • all bytes 0-1137 have been received – an ACK may contain data • piggybacking • Window size denotes how many more bytes may be sent – – – – 16-bit field really denotes how many bytes may be in transit at one time zero is a legitimate window size ACK and Window size are decoupled • variable window sizeCS 360 – Spring 2007 Pacific University Tanenbaum, Figure 6-33, p543 CS 360 – Spring 2007 Pacific University Buffers • Senders may buffer data for any amount of time before sending it • Receivers may delay an ACK as well • This could save bandwidth • Could be bad if you are typing on a remote shell • What does it cost to send one byte of data? CS 360 – Spring 2007 Pacific University Nagle • When data comes in to the buffer one byte at a time – – – – – – – send first byte buffer data until the ACK is received send all buffered data buffer until the ACK repeat send extra packets if the buffer fills 1/2 way before the ACK good for fast typing on a slow network • Sometimes needs to be disabled – when might this be bad? CS 360 – Spring 2007 Pacific University Silly Window Syndrome • Sender produces large chunks of data • Receiver eats the data a byte at a time What is the problem? How can we fix this? Tanenbaum, Figure 6-35, p546 CS 360 – Spring 2007 Pacific University No one will ever need more than 64KB! • Max window size: 64 KB. – Goal: keep the pipe as full as possible without causing too much network congestion! • On a T3 line (44.736 Mbps) – – – – 12 msec to output 64KB 50 msec propagation delay for transcontinental fiber How often is the sender idle? worse on a satellite link (why?) • Hack (Fix) RFC 1323 – we cannot change the size of the 16-bit field – but we can change what it represents – adds a TCP option that allows the 16-bit field to be shifted left up to 14 bits • for a window size of up to 230 • most TCP implementations now support this CS 360 – Spring 2007 Pacific University Connection Establishment • 3-way handshake • Uses the SYN and ACK bit fields in the TCP header • Security – common Denial of Service attack is the SYN flood – send a SYN – server sends a SYN ACK • allocates memory to track the connection! – client never sends the ACK – server holds memory until timeout – generating many SYNs quickly is easy – how would you implement this? Tanenbaum, Figure 6-31, p540 • you don’t want to get caught • how can we prevent this? CS 360 – Spring 2007 Pacific University Initial Sequence Number • Initial sequence number is not zero – – – – – Initial Sequence Number Generator selects the ISN 32 bit clock with a tick every 4 microseconds rolls over every 4.55 hours this allows a connection to be reused quickly no lingering packets in the network can show up with a valid sequence number • why might packets linger in the network? • If a TCP service crashes it is to refrain from sending any packets for a MSL – if it does retain its last used sequence number, no need to wait CS 360 – Spring 2007 Pacific University Connection Release • One or both sides send a packet with the FIN bit set – “I will send no more data” – can still receive data – other side needs to send an ACK • After two FINs are sent the connection is closed by each end – two ACKs must be received • After a FIN if nothing is received after a period of time the connection times out – two maximum segment lifetimes CS 360 – Spring 2007 Pacific University Tanenbaum, Figure 6-33, p543 CS 360 – Spring 2007 Pacific University Timers & Retransmission • Send segment & start timer – if the timer goes off before the ACK is received, retransmit • How long should the timeout interval be? – what factors do we need to consider? – what makes this hard? – what happens if we set the timerout to T1? T2? Tanenbaum, Figure 6-38, p551 CS 360 – Spring 2007 Pacific University Timers • Each connection keeps a value RTT – estimated Round Trip Time – updated after every ACK • M = round trip time of the last ACK • RTT = *RTT + (1 - )*M – is a smoothing factor – typically 7/8 • Timeout: *RTT – early implementations set to 2. why? – not flexible enough? why? • Jacobson proposed making roughly proportional to standard deviation of the ACK time – use mean deviation as cheap estimator – variable named D CS 360 – Spring 2007 Pacific University Timers • D = * D + (1- ) * | RTT - M| – Jacobson showed how to do with with only integer • • • • add subtracts shifts why is this important? • Timeout value: RTT + 4 * D – ACK can be 4 standard deviations late • initially used 2 but 4 found to be better (experimentally) • less than 1% timeout on a healthy link – somewhat arbitrary choice – easy to implement with shifts! • When might you get two ACKs for the same segment? – why might this cause problems? – solution? CS 360 – Spring 2007 Pacific University Other Timers • Persistence Timer – – – – – receiver sets window size to 0 sender waits receiver sets window size to 2048 but the packet is lost! both sides wait for something to happen the persistence timer tells the sender to probe the receiver if the receiver has not been heard from in a while • Keepalive Timer – if the connection is idle, send a packet to see if the other side is still connected – not always used – adds traffic CS 360 – Spring 2007 Pacific University ACKs & Retransmission • When does the receiver ACK? – Receive in-order segment with expected sequence number • all previous data already ACKed • wait up to 500 msec for next in-order segment • send ACK – Receive in-order segment w/ expected seq number • previous segment no yet ACKed • send cumulative ACK immediately • Fast Retransmit (RFC 2581) – Receive out-of-order segment w/ higher than expected seq number • • • • GAP! send duplicate ACK (for last ACKed segment) this acts a message to the sender that things are going bad a “Triple Duplicate ACK” means 3 segments beyond the gap have been seen (total of 4 ACKs for one segment) – Receive segment that fills in gap • send ACK (if this fills in the lower end of the gap) CS 360 – Spring 2007 Pacific University Congestion Control • Some done in Network Layer • Most done in Transport Layer – how do you control congestion? • Law of conservation of packets: – don’t send new packets until old ones are received • Dynamically manipulate window size to control how much data is in the network • How can we detect congestion in the network? CS 360 – Spring 2007 Pacific University CS 360 – Spring 2007 Tanenbaum, Figure 6-36, p548 Pacific University Implementation Details • Receiver Capacity – receiver window (based on receiver buffer size, load, etc) • Network Capacity – congestion window (sender window) • Use the minimum of the two values • How do we find the Congestion Window Size? – Slow Start algorithm – connection initialization: Congestion Window = Max Segment Size • how is max segment size determined? – Send off one segment, if it is ACKed before Timeout • after the ACK, add 1 max segment size to the window size – Send off 2 segments • after EACH ACK, add 1 max segment size to the window size • what just happened there? – Continue until timeout or the receiver window size is reached CS 360 – Spring 2007 Pacific University A Loss • What happens when there is a lost packet? – what does that loss tell us? – what should we do in response to that? CS 360 – Spring 2007 Pacific University More Details • When a timeout occurs, we reduce the congestion window (TCP Tahoe) – set threshold variable: 1/2 the congestion window at TO – set congestion window to 1 max segment size • use slow start until congestion window hits threshold • after that, grow congestion window by 1 max segment size per burst • TCP Reno (Fast Recovery) – – – – after a “Triple Duplicate ACK” loss, Congestion Window = Threshold no slow start grow congestion window by 1 max segment size per burst why do this? CS 360 – Spring 2007 Pacific University Tanenbaum, Figure 6-37, p550 CS 360 – Spring 2007 Pacific University Project Questions • How do I stress test my server? – use the Konsole to open multiple shells – start a client in each shell – send input to all of them at once setsockopt( writeSocket, IPPROTO_TCP, TCP_NODELAY, SOL_TCP is Linux-specific! CS 360 – Spring 2007 Pacific University ... ) Safari • Online books! Search the DB via the Library web site – Library | Search Databases | Computer Science | Safari CS 360 – Spring 2007 Pacific University Safari • 5 simultaneous users – be sure to logout when you are done! – being idle for 10 minutes will log you out – I will be putting sections of books on electronic reserve • everyone can access them at once (or print them out) • about 50 books we (CS profs) have chosen based on our classes – – – – TCP/IP Illustrated (Volume 1 & 2) UNIX Network Programming CISCO Manuals Eclipse handbook/Make guide/Shell Scripting/Linux Guides • You can print sections from Safari – HOWEVER, printing large amounts of material is frowned upon by Safari and may constitute a copyright violation • this could lead to problems! CS 360 – Spring 2007 Pacific University Project Overview- TCP360 • You need to implement a restricted version of TCP – – – – – 3 Way Handshake Graceful connection termination Send & Receive buffer Sliding window protocol Reliable transmission • • • • lost packets corrupt packets out of order packets duplicate packets • You DO NOT need to implement – – – – – – Persistence timers Fast retransmit Congestion control Estimation of RTT or D Nagle/fixes for silly window syndrome TCP Options CS 360 – Spring 2007 Pacific University Your server and client will run on top of this new Transport Layer. You must support multiple TCP360 connections at once (think about your server) I will also give you another application (FTP) to stress test your TCP360 Project • The key here is DESIGN! – how many threads do you have? – where is your data? • Plan your implementation very carefully • To help you along this project will be made of smaller assignments due on a weekly basis! • I will provide you a basic design and some code! CS 360 – Spring 2007 Pacific University Design Overview (10000 meters) Client Server Application Application sock = TCP360socket() sock = TCP360socket() TCP360Listen(sock, 99...) TCP360connect(sock,...,99) rSock = TCP360accept(sock, 99 TCP360send(sock, data ...) TCP360recv(rSock, data ...) TCP360 TCP360 Logical TCP360 Connection TCP360 port:98 SendToTCPConn(data,...) TCP360 port:99 NetworkLayerSend(data, IPAddr ...) NetworkLayer UDP port:9000 NetworkLayer UDP port:10001 UDP udpSock = socket() udpSock = socket() bind(udpSock, myUDPport) sendto(udpSock, data, 9000, recvfrom(udpSock, data, 9000,.. sendDataToTCP(data) IPAddr ...) CS 360 – Spring 2007 Pacific University Design Overview (1 meter) Me You TCP360Connection TCP360Connection MessageQueue Timer MessageQueue NetworkLayer Alarm TCP data TCP data TCP data createAlarm() MessageQueue recvfrom() TCP360 CS 360 – Spring 2007 Pacific University Your First Assignment • Thread-safe Queue - Due April 6! – What is a queue? What is a thread safe data structure? – You need to provide a thread-safe queue to be used for the message passing • to make this general, the queue will store void* items – I will give you a .h file with function prototypes you must implement • Project description and .h file will be on the web page tomorrow • Watch the CS message boards for announcements! • you may NOT change the .h file, EXCEPT to add mutex variables – You must provide TWO test cases that show your queue works properly in a multithread environment – Due at 6PM! April 6! CS 360 – Spring 2007 Pacific University Design Docs • Design is key! • Also due on April 6: A short design document for TCP360 – – – – – How many threads? What will each do? Where will the data be stored? Who handles retransmits? The full TCP360 project description will be posted by April 2 • You will need to schedule an individual meeting with me to discuss your design (April 6-9) CS 360 – Spring 2007 Pacific University