**Transmission Control Protocol-**

Before you go through this article, make sure that you have gone through the previous article on **TCP in Networking**.

We have discussed-

- TCP continuously receives data from the application layer.
- It divides the data into chunks where each chunk is a collection of bytes.
- It then creates TCP segments by adding a TCP header to the data chunks.

TCP segment = TCP header + Data chunk |

**Also Read-** **TCP Header**

In this article, we will discuss about TCP Sequence Number.

**TCP Sequence Number-**

- Each TCP segment sent by the sender contains some bytes of data.
- TCP assigns a unique number to each data byte for its identification.
- This unique number is called as
**TCP Sequence Number**.

**Purpose-**

Sequence number serves the following purposes-

- It helps to identify each data byte uniquely.
- It helps in the segmentation of data into TCP segments and reassemble them later.
- It helps to keep track of how much data has been transferred and received.
- It helps to put the data back into the correct order if it is received in the wrong order.
- It helps to request data when it has been lost in transit.

**Maximum Number of Sequence Numbers-**

- In TCP header, sequence number is a 32 bit field.
- So, maximum number of possible sequence numbers = 2
^{32}. - These sequence numbers lie in the range [0 , 2
^{32 }– 1].

**NOTE-**

- Maximum number of possible sequence numbers = 2
^{32}. - This does not imply that only 2
^{32}bytes = 4 GB data can be sent using TCP. - The concept of wrap around allows to send unlimited data using TCP.

**Concept Of Wrap Around-**

The concept of wrap around states-

After all the 2^{32} sequence numbers are used up and more data is to be sent, the sequence numbers can be wrapped around and used again from the starting. |

In general,

- If the initial sequence number chosen is X.
- Then sequence numbers are used from X to 2
^{32}– 1 and then from to 0 to X-1. - Then, sequence numbers are wrapped around to send more data.

**Example-**

- Consider the initial sequence number used is 0.
- Then after sending 4 GB data, all the sequence numbers would get used up.
- To send more data, sequence numbers are reused from the starting.
- Wrapping around can be done again and again to send more and more data.

**Wrap Around Time-**

- Time taken to use up all the 2
^{32}sequence numbers is called as**wrap around time**. - It depends on the bandwidth of the network i.e. the rate at which the bytes go out.
- More the bandwidth, lesser the wrap around time and vice versa.

Wrap Around Time ∝ 1 / Bandwidth |

**Formula-**

If bandwidth of the network = x bytes/sec, then-

**Life Time Of TCP Segment-**

In modern computers,

- Life time of a TCP segment is 180 seconds or 3 minutes.
- It means after sending a TCP segment, it might reach the receiver taking 3 minutes in the worst case.

**How Wrap Around Is Possible?**

It is possible to wrap around the sequence numbers because-

- The life time of a TCP segment is just 180 seconds.
- Wrap around time is much greater than life time of a TCP segment.
- So, by the time the sequence numbers wrap around, there is no probability of existing any segment having the same sequence number.
- Thus, even after wrapping around, the sequence number of all the bytes will be unique at any given time.

**Reducing Wrap Around Time-**

Wrap around time can be reduced to the life time of a TCP segment. |

This is because-

- After the life time of a segment completes, it is considered that the segment no longer exists.
- So, sequence numbers used by the segment frees up and can be reused.

To reduce the wrap around time to the life time of segment,

- There must exist as many sequence numbers as there are number of data bytes sent in time equal to life time of segment.

**Formula-**

Number of bits required in the sequence number field so that wrap around time becomes equal to lifetime of TCP segment = log |

- The number of bits will be greater than 32 bits.
- The extra bits are appended in the Options field of TCP header.

**PRACTICE PROBLEMS BASED ON WRAP AROUND TIME IN TCP-**

**Problem-01:**

Given the bandwidth of a network is 1 MB / sec. Calculate the wrap around time.

**Solution-**

We know,

- Wrap around time = Time taken to use all the 2
^{32}sequence numbers. - TCP assigns 1 sequence number to each byte of data.

To calculate wrap around time, we just need to calculate how much time will be taken to send 2^{32} bytes of data.

Now,

- Given bandwidth = 1 MB / sec = 10
^{6}bytes / sec. - It means 10
^{6}bytes of data is sent in time = 1 sec. - So, 2
^{32}bytes of data will be sent in time = ( 1 / 10^{6}) x 2^{32}sec. - On solving, we get 1.19 hours.

Thus,

- It will take 1.19 hours to consume all the 2
^{32}sequence numbers if bandwidth = 1 MB / sec. - Wrap Around Time = 1.19 hours.

**Alternatively,**

Using the formula, we have-

Wrap Around Time

= 2^{32} / 10^{6} sec

= 1.19 hours

**Problem-02:**

If bandwidth of the network is 1 GBps, how many extra bits will have to be appended in the Options field so that wrap around time becomes equal to the life time of segment?

**Solution-**

For wrap around time to become equal to the life time of TCP segment,

Number of sequence numbers required = Number of bytes sent in life time of TCP segment

We know-

- Life time of TCP segment = 180 sec.
- Bandwidth of the network = 1 GBps (Given)

Now,

- Number of bytes transferred in 1 sec = 1 GB
- So, number of bytes transferred in 180 sec = 180 GB = 180 x 2
^{30}bytes - So, number of sequence numbers required = 180 x 2
^{30}

Suppose y number of bits in the sequence number field are required to represent the value 180 x 2^{30}.

So, we have-

2^{y} = 180 x 2^{30}

ylog2 = log(180 x 2^{30})

y = log_{2}(180 x 2^{30})

y = log_{2}180 + log_{2}2^{30}

y = 7.49 + 30

y ≅ 38

From here,

- Total number of bits required for sequence numbers = 38 bits.
- In TCP header, sequence number field is a 32 bit field.
- So, extra bits required to be appended in the Options field = 38 – 32 = 6 bits.

**Alternatively,**

Using the formula, we have-

Total bits required

= log_{2} (life time of TCP segment x bandwidth)

= log_{2} ( 180 x 2^{30})

= log_{2}180 + log_{2}2^{30}

= 7.49 + 30

= 38

From here,

- Total number of bits required for sequence numbers = 38 bits.
- In TCP header, sequence number field is a 32 bit field.
- So, extra bits required to be appended in the Options field = 38 – 32 = 6 bits.

**Problem-03:**

In a network that has a maximum TPDU size of 128 bytes, a maximum TPDU lifetime of 30 sec and 8 bit sequence number, what is the maximum data rate per connection?

(TPDU is Transport layer protocol data unit which is the segment.)

**Solution-**

Given-

- Maximum segment size (MSS) = 128 bytes
- Segment lifetime = 30 sec
- Bits in sequence number = 8

Now,

- Maximum number of possible sequence numbers using 8 bits = 2
^{8}= 256. - So, maximum number of bytes that can be uniquely identified = 256 bytes.
- Lifetime of a segment = 30 seconds.
- So, maximum amount of data that can be sent in 30 seconds = 256 bytes.

Thus,

Maximum data rate per connection

= 256 bytes / 30 seconds

≈ 68 bits/sec

**Problem-04:**

Suppose that the advertised window 1 MB long. If a sequence number is selected at random from the entire sequence number space, what is the probability that the sequence number falls inside the advertised window?

**Solution-**

We know,

- Number of bits in sequence number field = 32 bits.
- So, Maximum number of sequence numbers possible = 2
^{32}. - 2
^{32}bytes of data can be labeled uniquely with these sequence numbers. - Advertised window size = 1 MB = 2
^{20}bytes which uses 2^{20}sequence numbers.

Therefore,

Required probability

= 2^{20} / 2^{32}

= 1 / 2^{12}

**Next Article-** **Three Way Handshake**

Get more notes and other study material of **Computer Networks**.

Watch video lectures by visiting our YouTube channel **LearnVidFun.**