| 
						  
						Connection 
						Oriented  
						
						What this basically means is that 
						a connection is established between the two hosts or 
						rather, the two computers, before any data is 
						transferred. When the term "connection 
						is established" is used, 
						this means that both computers know about each other and 
						have agreed on the exchange of data. This is also where 
						the famous 3-way handshake happens. You will find the
						SYN
						and 
						ACK bits in the Code bits 
						field which are used to perform the 3-way handshake. 
						Thanks to the 3-way handshake, TCP is connection 
						oriented. 
						
						
						The following diagram explains the procedure of the 
						3-way handshake: 
						
						
						  
						
						STEP 1:
						Host A
						sends the initial packet to 
						Host B.
						This packet has the 
						"SYN" 
						bit enabled.
						Host B
						receives the packet and sees the
						"SYN" 
						bit which has a value of "1" (in binary, this means ON) 
						so it knows that Host A
						is trying to establish a 
						connection with it.  
						
						STEP 2:
						Assuming 
						Host B
						has enough resources, it sends a 
						packet back to Host A
						and with the 
						"SYN 
						and ACK"
						bits enabled (1). The 
						SYN 
						that Host B
						sends, at this step, means 'I want 
						to synchronise with you' and the 
						ACK 
						means 'I acknowledge your previous 
						SYN 
						request'.  
						
						STEP 3:
						So... after all that, 
						Host A
						sends another packet to 
						Host B
						and with the 
						"ACK" 
						bit set (1), it effectively tells 
						Host B
						'Yes, I acknowledge your previous 
						request'. 
						
						Once the 3-way handshake is 
						complete, the connection is 
						established (virtual 
						circuit) and the data transfer begins. 
						
						
						Flow Control 
						
						
						Flow control is used to control the data flow between 
						the connection. If for any reason one of the two hosts 
						are unable to keep up with the data transfer, it is able 
						to send special signals to the other end, asking it to 
						either stop or slow down so it can keep up.  
						
						For example, if 
						Host B
						was a webserver from which people 
						could download games, then obviously 
						Host A
						is not going to be the only 
						computer downloading from this webserver, so 
						Host B
						must regulate the data flow to 
						every computer downloading from it. This means it might 
						turn to Host A
						and tell it to wait for a while 
						until more resources are available because it has 
						another 20 users trying to download at the same time. 
						
						
						Below is a diagram that illustrates a simple flow 
						control session between two hosts. At this point, we 
						only need to understand the concept of flow control: 
						
						
						  
						
						
						Generally speaking, when a machine receives a flood of 
						data too quickly for it to process, it stores it in a 
						memory section called a buffer. This buffering 
						action solves the problem only if the data bursts are 
						small and don't last long.  
						
						However, if the data burst 
						continues it will eventually exhaust the memory of the 
						receiving end and that will result in the arriving data 
						being discarded. So in this situation the receiving end 
						will simply issue a "Not 
						ready" or "Stop" 
						indicator to the sender, or source of the flood. After 
						the receiver processes the data it has in its memory, it 
						sends out a "Ready" 
						or "Go" 
						transport indicator and the sending machine receives the 
						"Go" 
						indicator and resumes its transmission. 
						 
						
						
						Windowing 
						
						Data throughput, or transfer 
						efficiency, would be low if the transmitting machine had 
						to wait for an acknowledgment after sending each packet 
						of data (the correct term is segment as we will 
						see on the next page). Because there is time available 
						after the sender transmits the data segment and before 
						it finishes processing acknowledgments from the 
						receiving machine, the sender uses the break to transmit 
						more data. If we wanted to briefly define 
						Windowing 
						we could do so by stating that it is the number of data 
						segments the transmitting machine is allowed to send 
						without receiving an acknowledgment for them. 
						
						Windowing
						controls how much information is 
						transferred from one end to the other. While some 
						protocols quantify information by observing the number 
						of packets, TCP/IP measures it by counting the number of 
						bytes. 
						
						
						  
						
						
						Let's explain what is happening in the above diagram.
						 
						
						Host B
						is sending data to 
						Host A, 
						using a window size equal to one. This means that 
						Host B
						is expecting an 
						"ACK" 
						for each data segment it sends to 
						Host A. 
						Once the first data segment is sent, 
						Host A
						receives it and sends an 
						"ACK 2" 
						to Host B. 
						You might be wondering why 
						"ACK 2" and not just 
						"ACK"? 
						
						The "ACK 
						2" is translated by 
						Host B
						to say: 'I acknowledge 
						(ACK) 
						the packet you just sent me and I am ready to receive 
						the second (2)
						segment'. So 
						Host B
						gets the second data segment ready 
						and sends it off to Host A, 
						expecting an "ACK 3"
						response from 
						Host A
						so it can send the third data 
						segment for which, as the picture shows, it receives the
						"ACK 3". 
						
						However, if it received an 
						"ACK 2"
						again, this would mean something 
						went wrong with the previous transmission and 
						Host B 
						will retransmit the lost segment. We will see how this 
						works in the Acknowledgments section later on. Let's now 
						try a different Window size to get a better 
						understanding.. let's say 3!  
						
						Keep in mind the way the 
						"ACK's"
						work, otherwise you might find the 
						following example a bit confusing. If you can't 
						understand it, read the previous example again where the 
						Window size was equal to one. 
						
						
						  
						
						In the above example, we have a 
						window size equal to 3, which means that 
						Host B
						can send 3 data segments to 
						Host A
						before expecting an 
						"ACK" 
						back. Host B
						sends the first 3 segments (Send 
						1, Send 2 and Send 3), Host 
						A receives them all in good 
						condition and then sends the 
						"ACK 4"
						to 
						Host B. This means that
						Host A
						acknowledged the 3 data segments
						Host B
						sent and awaits the next data 
						segments which, in this case, would be 4, 5 and 6. 
						Acknowledgments 
						
						Reliable data delivery ensures the 
						integrity of a stream of data sent from one machine to 
						the other through a fully functional data link. This 
						guarantees the data won't be duplicated or lost. The 
						method that achieves this is known as 
						positive acknowledgment with 
						retransmission. This 
						technique requires a receiving machine to communicate 
						with the transmitting source by sending an 
						acknowledgment message back to the sender when it 
						receives data. The sender documents each segment it 
						sends and waits for this acknowledgment before sending 
						the next segment. When it sends a segment, the 
						transmitting machine starts a timer and retransmits if 
						it expires before an acknowledgment is returned from the 
						receiving end. 
						
						
						  
						
						This figure shows how the 
						Acknowledgments work. If you examine the diagram closely 
						you will see the window size of this transfer which is 
						equal to 3. At first,
						Host B
						sends 3 data segments to 
						Host A
						and they are received in perfect 
						condition so, based on what we learned, 
						Host A
						sends an 
						"ACK 4" 
						acknowledging the 3 data segments and requesting the 
						next 3 data segments which will be 4, 5, 6. As a result,
						Host B
						sends data segments 4, 5, 6 but 5 
						gets lost somewhere along the way and 
						Host A
						doesn't receive it so, after a bit 
						of waiting, it realises that 5 got lost and sends an
						"ACK 5" 
						to Host B,
						indicating that it would like data 
						segment 5 retransmitted. Now you see why this method is 
						called "positive 
						acknowledgment with retransmission". 
						
						At this point 
						Host B
						sends data segment 5 and waits for
						Host A 
						to send an "ACK"
						so it can continue sending the 
						rest of the data. Host A receives the 5th data segment 
						and sends "ACK 7" 
						which means 'I received the previous data segment, now 
						please send me the next 3'. The next step is not shown 
						on the diagram but it would be Host B sending data 
						segments 7, 8 and 9.  
						
						
						More Overhead 
						
						
						As you can see, there is quite a neat mechanism under 
						the TCP hood that enables data to be transferred error 
						free. All the features the protocol supports come at a 
						price, and this is the overhead associated with TCP.
						 
						
						When we talk about overhead, we 
						are referring to all the different fields contained 
						within the TCP header and error checking that takes 
						place to ensure no portion of the data is corrupt. While 
						for most this is a fair trade off, some people simply 
						can't spare the extra processing power, bandwidth and 
						increased time the TCP transactions require, for this 
						reason we have the alternative UDP protocol, which you 
						can read about in the 
						UDP protocol section. 
						 
						
						
						At this point our quick overview of the TCP has reached 
						its conclusion. From the next page onwards, we start to 
						dive in deeper, so take a deep breath and jump right 
						into it! 
						   |