oo11100111

Computer Stores everything in binary

Welcome to Easy Learning. Place to learn stuff in a cool way.

Thinking ...

It gives you solutions !!!

Human Eye

The human eye sees basically three colors: red, green and blue. The white is a combination of the three, the black is their lack.

LAN Cables with RJ-45 Connectors

Ethernet Connectivity is enabled by using Cables.

Time

Time's precious. Don't waste it.

Small Office network simulation

Here is the link to the post.

https://www.rivier.edu/faculty/vriabov/Tutotial-com_small_int.pdf





C File Handling Introduction

File Handling in C can be a bit of complicated task.

 

A file can be opened in various modes as follows :

 

 12

 

 

Here is the program to write a file in C.

 

8

 

 

9

File Handling in C

 

Here are the screenshots for the code taken from the book , “C How To Program”. Write the code in the editor and execute it.

 

1

 

 2

 

 

 3

 

 

 4

 

 

 5

 

 

 6

 

The output of the above code is :

 

7

BST implementation in C

include "stdio.h"
include "stdlib.h"
include "time.h"

struct treeNode {
struct treeNode *leftPtr; /* pointer to left subtree */
int data; /* node value */
struct treeNode *rightPtr; /* pointer to right subtree */
};


typedef struct treeNode TreeNode; /* synonym for struct treeNode */
 typedef TreeNode *TreeNodePtr; /* synonym for TreeNode* */

/* prototypes */
 void insertNode( TreeNodePtr *treePtr, int value );
 void inOrder( TreeNodePtr treePtr );
 void preOrder( TreeNodePtr treePtr );
 void postOrder( TreeNodePtr treePtr );

 int main( void )
 {
 int i; /* counter to loop from 1-10 */
 int item; /* variable to hold random values */
 TreeNodePtr rootPtr = NULL; /* tree initially empty */

 srand( time( NULL ) );
 printf( "The numbers being placed in the tree are:\n" );

 /* insert random values between 0 and 14 in the tree */
 for ( i = 1; i <= 10; i++ ) {
 item = rand() % 55;
 printf( "%3d", item );

 insertNode( &rootPtr, item );

 } /* end for */

 /* traverse the tree preOrder */
 printf( "\n\nThe preOrder traversal is:\n" );

preOrder( rootPtr );

printf( "\n\nThe inOrder traversal is:\n" );


inOrder( rootPtr );

printf( "\n\nThe postOrder traversal is:\n" );

postOrder( rootPtr );

getch();
return 0; /* indicates successful termination */
 } /* end main */

 /* insert node into tree */
 void insertNode( TreeNodePtr *treePtr, int value )
 {
 /* if tree is empty */
 if ( *treePtr == NULL ) {
 *treePtr = malloc( sizeof( TreeNode ) );

 /* if memory was allocated then assign data */
 if ( *treePtr != NULL ) {
 ( *treePtr )->data = value;
 ( *treePtr )->leftPtr = NULL;
 ( *treePtr )->rightPtr = NULL;
 } /* end if */
 else {
 printf( "%d not inserted. No memory available.\n", value );
 } /* end else */
 } /* end if */

else {
     if ( value < ( *treePtr )->data ) {
insertNode( &( ( *treePtr )->leftPtr ), value );
}

else if ( value > ( *treePtr )->data ) {
insertNode( &( ( *treePtr )->rightPtr ), value );
}

else { /* duplicate data value ignored */
 printf( "dup" );
 } /* end else */
 } /* end else */
 } /* end function insertNode */

 /* begin inorder traversal of tree */
 void inOrder( TreeNodePtr treePtr )
{

        if ( treePtr != NULL ) {
inOrder( treePtr->leftPtr );
printf( "%3d", treePtr->data );
inOrder( treePtr->rightPtr );
}

} /* end function inOrder */

 /* begin preorder traversal of tree */
 void preOrder( TreeNodePtr treePtr )
 {

    if ( treePtr != NULL ) {
printf( "%3d", treePtr->data );
preOrder( treePtr->leftPtr );
preOrder( treePtr->rightPtr );
}

} /* end function preOrder */

 /* begin postorder traversal of tree */
 void postOrder( TreeNodePtr treePtr )
 {

    if ( treePtr != NULL ) {
postOrder( treePtr->leftPtr );
postOrder( treePtr->rightPtr );
printf( "%3d", treePtr->data );
}
}

Sorted Linked List implementation in C

include "stdio.h"
include "stdlib.h"
include "conio.h"



void del(int data);
void insert(int value);
void display();


struct node
{
    int data;
    struct node *link;
};

struct node *top=NULL,*temp, *temp1, *temp2, *temp3;

int main()
{
    int choice,data;

 
    while(1) //infinite loop is used to insert/delete infinite number of elements in linked list
    {
     
        printf("\n1.Insert\n2.Delete\n3.Display\n4.Exit\n");
        printf("\nEnter ur choice:");
        scanf("%d",&choice);
        switch(choice)
        {
        case 1:
         
         
            printf("Enter a new element :");
            scanf("%d",&data);
            insert(data);
            break;
         
        case 2:
     
        printf("Enter the value to be deleted from sorted linked list :");
            scanf("%d",&data);
         
            del(data);
            break;
         
        case 3:
            display();
            break;
        case 4:
            exit(0);
        }
     
    }  
getch();
return 0;
}

void insert(int data)
{

temp=(struct node *)malloc(sizeof(struct node));
temp->data=data;

if(top == NULL)
{

            temp->link=NULL;
            top=temp;
         
}
else            // top not null
{
temp1 = top ;
while(temp1 != NULL)
{
if(temp1->data >= data)   // list element is smaller ...

{
if(temp1 == top)   // list element is head ...
{
  temp->link = temp1;

top = temp;
break;

}
else // list element is not head ..
{

temp->link = temp1;
temp2->link = temp;
break;
}

}
else
{

if(temp1->link == NULL)
{
temp->link = NULL;
temp1->link = temp;
break;

}
else
{
temp2 = temp1;
temp1 = temp1->link;
}

}

}

}
          // creating a space for the new element.
                 
}

void del(int data)
{
     struct node *temp,*var;
     temp=top;
 int i=0;
     while(temp!=NULL)
     {
          if(temp->data == data)
          {      i = 1;   // Flag ..
                if(temp==top)
                {
                     top=temp->link;
                     free(temp);
                   break;
                }
                else
                {
                     var->link=temp->link;
                     free(temp);
                     break;
                 
                }
          }
          else
          {
               var=temp;
               temp=temp->link;
          }
     }
     if(i == 1)
     {
printf("data deleted from list is %d",data);
 
     }
     else
     {
      printf("\n The required data, %d is not found in the list. go look somewhere else",data);

     }
}





void display()
{
         temp=top;
            if(temp==NULL)
            {
                printf("\nStack is empty\n");
            }
         
            while(temp!=NULL)
            {
                printf(" %d ->",temp->data);
                temp=temp->link;
            }
             
}

Priority Queue Implementation in C using Arrays

#include <stdio.h>

#include <conio.h>

#define size 5

int queue[5][2] = {0};

int top = -1;

int bottom;

void push(int value, int pr)

{

int i,j,k;

if(top < size-1)

{

if(queue[top][1] > pr)

{

for(i=0;i<top;i++)

{

if(queue[i][1] > pr)

{

break;

}

}

for(j=top;j>=i;j--)

{

queue[j+1][0] = queue[j][0];

queue[j+1][1] = queue[j][1];

}

top++;

queue[i][0] = value;

queue[i][1] = pr;

}

else

{

top++;

queue[top][0] = value;

queue[top][1] = pr;

}

}

else

{

printf("queue overflow \n");

}

}

void pop()

{

int i;

if(queue[0][0] == 0)

{

printf("\n The queue is empty  \n");

}

else

{

printf("After , dequeue the following value is erased \n  %d \n", queue[0][0]);

for(i=0;i<top;i++)

{

queue[i][0] = queue[i+1][0];

queue[i][1] = queue[i+1][1];

}

queue[top][0] = 0;

queue[top][1] = 0;

top--;

}

}

void display()

{ int i,j;

printf("Element\tPriority \n");

for(i=size - 1;i>=0;i--)

{

for(j=0;j<2;j++)

{

printf(" %d\t",queue[i][j]);

}

printf("\n");

}

}

int main()

{

int i,j, ch=0 ,value = 0,pr=0;

while(1)

{

printf("\n Please Enter the choice. \n");

printf("1 for Enqueue \n 2 for Dequeue \n 3 for display\n  5 for exit: \t \n");

scanf("%d",&ch);

switch(ch)

{

case 1:

printf("\n Please Enter the number to be inserted: \t ");

scanf("%d", &value);

printf("\n Please Enter the priority: \t ");

scanf("%d", &pr);

push(value,pr);

break;

case 2:

pop();

break;

case 3:

display();

break;

case 5:

exit(0);

default:

printf("You entered wrong choice\n");

}

}

}

C program for Stack implementation using array

#include "stdio.h"
#include "conio.h"

#define size 5

int stack[size] = {0};

int top = -1;

void push(int value)
{
if(top < size)
{
top++;
stack[top] = value;
}
else
{
printf("Stack overflow \n");
}
}

void pop()
{
if(top >= 0)
{
printf("The popped element is:\t %d \n", stack[top]);
stack[top] = 0;
top--;
}

else
{
printf("Stack underflow \n");
}


}
void display()
{

                 int i;

for(i=size - 1;i>=0;i--)
{
printf(" %d \n",stack[i]);
}
}

void tos()
{
printf("The value at top is %d", stack[top]);
}

int main()
{

int i,j, ch=0 ,value = 0;

while(1)
{
printf("\n Please Enter the choice. \n");
printf("1 for push\n 2 for pop \n 3 for display\n 4 for top \t  \n 5 for exit");
scanf("%d",&ch);

switch(ch)
{
case 1:
printf("\n Please Enter the number to be inserted: \t");
scanf("%d", &value);
push(value);
break;

case 2:

pop();

break;

case 3:

display();

break;


case 4:
tos();

break;

case 5:

exit(0);



}
}

}

WAN _ LAN implementation on IT Guru

Click on the link below and download the file. 



Click Here

Firewalls and VPN

Network Security and Virtual Private Networks
Objective
The objective of this lab is to study the role of firewalls and Virtual Private Networks (VPNs) in providing security to shared public networks such as the Internet.
Overview
Computer networks are typically a shared resource used by many applications for many different purposes. Sometimes the data transmitted between application processes is confidential, and the application users would prefer that others not be able to read it.
A firewall is a specially programmed router that sits between a site and the rest of the network. It is a router in the sense that it is connected to two or more physical networks and it forwards packets from one network to another, but it also filters the packets that flow through it. A firewall allows the system administrator to implement a security policy in one centralized place. Filter-based firewalls are the simplest and most widely deployed type of firewall. They are configured with a table of addresses that characterize the packets they will and will not forward.
A VPN is an example of providing a controlled connectivity over a public network such as the Internet. VPNs utilize a concept called an IP tunnel—a virtual point-to-point link between a pair of nodes that are actually separated by an arbitrary number of networks. The virtual link is created within the router at the entrance to the tunnel by providing it with the IP address of the router at the far end of the tunnel. Whenever the router at the entrance of the tunnel wants to send a packet over this virtual link, it encapsulates the packet inside an IP datagram. The destination address in the IP header is the address of the router at the far end of the tunnel, while the source address is that of the encapsulating router.
In this lab you will set up a network where servers are accessed over the Internet by customers who have different privileges. You will study how firewalls and VPNs can provide security to the information in the servers while maintaining access for customers with the appropriate privilege.
Procedure
Create a New Project
1. Start OPNET IT Guru Academic Edition ⇒ Choose New from the File menu.
2. Select Project and click OK ⇒ Name the project <your initials>_VPN, and the scenario NoFirewall ⇒ Click OK.
3. Click Quit on the Startup Wizard.
4. To remove the world background map, select the View menu ⇒ BackgroundSet Border Map Select NONE from the drop-down menu Click OK.
Create and Configure the Network
The ppp_server and ppp_wkstn support one underlying SLIP (Serial Line Internet Protocol) connection at a selectable data rate.
PPP DS1 connects two nodes running IP. Its data rate is 1.544 Mbps.
Initialize the Network:
1. Open the Object Palette dialog box by clicking clip_image007. Make sure that the internet_toolbox item is selected from the pull-down menu on the object palette.
2. Add the following objects, from the palette, to the project workspace (see figure below for placement): Application Config, Profile Config, an ip32_cloud, one ppp_server, three ethernet4_slip8_gtwy routers, and two ppp_wkstn hosts.
a. To add an object from a palette, click its icon in the object palette ⇒ Move your mouse to the workspace and click where you want to place the object ⇒ Right-click to indicate you are done creating objects of this type.
  1. Rename the objects you added and connect them using PPP DS1 links, as shown below:
clip_image009
4. Save your project.
Several example application configurations are available under the Default setting. For example, "Web Browsing (Heavy HTTP1.1)" indicates a Web browsing application performing heavy browsing using HTTP 1.1 protocol..
Configure the Nodes:
  1. Right-click on the Applications node ⇒ Edit Attributes ⇒ Assign Default to the Application Definitions attribute Click OK.
  1. Right-click on the Profiles node ⇒ Edit Attributes ⇒ Assign Sample Profiles to the Profile Configuration attribute ⇒ Click OK.
  1. Right-click on the Server node ⇒ Edit Attributes ⇒ Assign All to the
Application: Supported Services attribute Click OK.
4. Right-click on the Sales A node ⇒ Select Similar Nodes (make sure that both Sales A and Sales B are selected).
i. Right-click on the Sales A node ⇒ Edit Attributes ⇒ Check the Apply Changes to Selected Objects check-box.
ii. Expand the Application: Supported Profiles attribute ⇒ Set rows to 1 ⇒ Expand the row 0 hierarchy ⇒ Profile Name = Sales Person (this is one of the “sample profiles” we configured in the Profiles node).
iii. Click OK.
5. Save your project.
Choose the Statistics
DQ Query Response Time is measured from the time when the database query application
sends a request to the server to the time it receives a response packet.
HTTP Page Response Time specifies the time required to retrieve the entire page with all the contained inline objects.
1. Right-click anywhere in the project workspace and select Choose Individual Statistics from the pop-up menu.
2. In the Choose Results dialog, check the following statistics:
i. Global Statistics DB Query Response Time (sec).
ii. Global Statistics HTTP Page Response Time (seconds).
3. Click OK.
4. Right-click on the Sales A node and select Choose Individual Statistics from the pop-up menu.
5. In the Choose Results dialog, check the following statistics:
i. Client DB Traffic Received (bytes/sec).
ii. Client Http Traffic Received (bytes/sec).
6. Click OK.
7. Right-click on the Sales B node and select Choose Individual Statistics from the pop-up menu.
8. In the Choose Results dialog, check the following statistics:
i. Client DB Traffic Received (bytes/sec).
ii. Client Http Traffic Received (bytes/sec).
9. Click OK and then save your project.
The Firewall Scenario
In the network we just created, the Sales Person profile allows both sales sites to access applications such as Database Access, Email, and Web Browsing from the server (check the Profile Configuration of the Profiles node). Assume that we need to protect the database in the server from external access, including the salespeople. One way to do that is to replace Router C with a firewall as follows:
1. Select Duplicate Scenario from the Scenarios menu and name it Firewall
Click OK.
2. In the new scenario, right-click on Router CEdit Attributes.
3. Assign ethernet2_slip8_firewall to the model attribute.
4. Expand the hierarchy of the Proxy Server Information attribute ⇒ Expand the row 1, which is for the Database application, hierarchy Assign No to the Proxy Server Deployed attribute as shown:
clip_image011
Proxy Server Information is a table defining the configuration of the proxy servers on the firewall. Each row indicates whether a proxy server exists for a certain application and the amount of additional delay that will be introduced to each forwarded packet of that application by the proxy server.
5. Click OK and then save your project.
Our Firewall configuration does not allow database-related traffic to pass through the firewall (it filters such packets out). This way, the databases in the server are protected from external access. Your Firewall scenario should look like the following figure.
clip_image013

The Firewall_VPN Scenario
In the Firewall scenario, we protected the databases in the server from “any” external access using a firewall router. Assume that we want to allow the people in the Sales A site to have access to the databases in the server. Since the firewall filters all database-related traffic regardless of the source of the traffic, we need to consider the VPN solution. A virtual tunnel can be used by Sales A to send database requests to the server. The firewall will not filter the traffic created by Sales A because the IP packets in the tunnel will be encapsulated inside an IP datagram.
1. While you are in the Firewall scenario, select Duplicate Scenario from the Scenarios menu and give it the name Firewall_VPN Click OK.
2. Remove the link between Router C and the Server.
3. Open the Object Palette dialog box by clicking clip_image014. Make sure that the opened palette is the one called internet_toolbox.
i. Add to the project workspace one ethernet4_slip8_gtwy and one IP VPN Config (see the figure below for placement).
ii. From the Object Palette, use two PPP DS1 links to connect the new router to Router C (the firewall) and to the Server, as shown below.
iii. Close the Object Palette dialog box.
4. Rename the IP VPN Config object to VPN.
5. Rename the new router to Router D as shown:
clip_image016

Configure the VPN:
  1. Right-click on the VPN node ⇒ Edit Attributes.
i. Expand the VPN Configuration hierarchy ⇒ Set rows to 1 ⇒ Expand row 0 hierarchy ⇒ Edit the value of Tunnel Source Name and write down Router A Edit the value of Tunnel Destination Name and write down Router D.
ii. Expand the Remote Client List hierarchy ⇒ Set rows to 1 ⇒ Expand row 0 hierarchy ⇒ Edit the value of Client Node Name and write down Sales A.
iii. Click OK and then save your project.
clip_image018
Run the Simulation
To run the simulation for the three scenarios simultaneously:
1. Go to the Scenarios menu ⇒ Select Manage Scenarios.
2. Change the values under the Results column to <collect> (or <recollect>) for the three scenarios. Keep the default value of the Sim Duration (1 hour). Compare to the following figure.
clip_image020

3. Click OK to run the three simulations. Depending on the speed of your processor, this may take several minutes to complete.
4. After the three simulation runs complete, one for each scenario, click Close ⇒ Save your project.
View the Results
To view and analyze the results:
1. Select Compare Results from the Results menu.
2. Expand the Sales A hierarchy ⇒ Expand the Client DB hierarchy ⇒ Select the
Traffic Received statistic.
3. Change the drop-down menu in the middle-lower part of the Compare Results dialog box from As Is to time_average as shown.
clip_image022
4. Press Show and the resulting graph should resemble the following one:
clip_image024

5. Create a graph similar to the previous one, but for Sales B:
clip_image026

  1. Create two graphs similar to the previous ones to depict the Traffic Received by the Client Http for Sales A and Sales B.
clip_image028

Note: Results may vary slightly due to different node placement.

TCP: Transmission Control Protocol

 

A Reliable, Connection-Oriented, Byte-Stream Service

 

Objective

This lab is designed to demonstrate the congestion control algorithms implemented by the Transmission Control Protocol (TCP). The lab provides a number of scenarios to simulate these algorithms. You will compare the performance of the algorithms through the analysis of the simulation results.

 

Overview

The Internet’s TCP guarantees the reliable, in-order delivery of a stream of bytes. It includes a flow-control mechanism for the byte streams that allows the receiver to limit how much data the sender can transmit at a given time. In addition, TCP implements a highly tuned congestion-control mechanism. The idea of this mechanism is to throttle how fast TCP sends data to keep the sender from overloading the network.

The idea of TCP congestion control is for each source to determine how much capacity is available in the network, so that it knows how many packets it can safely have in transit. It maintains a state variable for each connection, called the congestion window, which is used by the source to limit how much data it is allowed to have in transit at a given time. TCP uses a mechanism, called additive increase/multiplicative decrease, that decreases the congestion window when the level of congestion goes up and increases the congestion window when the level of congestion goes down. TCP interprets timeouts as a sign of congestion. Each time a timeout occurs, the source sets the congestion window to half of its previous value. This halving corresponds to the multiplicative decrease part of the mechanism. The congestion window is not allowed to fall below the size of a single packet (the TCP maximum segment size, or MSS). Every time the source successfully sends a congestion window’s worth of packets, it adds the equivalent of one packet to the congestion window; this is the additive increase part of the mechanism.

TCP uses a mechanism called slow start to increase the congestion window “rapidly” from a cold start in TCP connections. It increases the congestion window exponentially, rather than linearly. Finally, TCP utilizes a mechanism called fast retransmit and fast recovery. Fast retransmit is a heuristic that sometimes triggers the retransmission of a dropped packet sooner than the regular timeout mechanism

In this lab you will set up a network that utilizes TCP as its end-to-end transmission protocol and analyze the size of the congestion window with different mechanisms.

 

 

Procedure

Create a New Project

1. Start OPNET IT Guru Academic Edition ⇒ Choose New from the File menu.

2. Select Project and click OK ⇒ Name the project <your initials>_TCP, and the scenario No_Drop ⇒ Click OK.

3. In the Startup Wizard: Initial Topology dialog box, make sure that Create Empty Scenario is selected Click Next Select Choose From Maps from the Network Scale list Click Next Choose USA from the Map List Click Next twice ⇒ Click OK.

Create and Configure the Network

Initialize the Network:

The ip32_cloud node model represents an IP cloud supporting up to 32 serial line interfaces at a selectable data rate through which IP traffic can be modeled. IP packets arriving on any cloud interface are routed to the appropriate output interface based on their destination IP address. The RIP or OSPF protocol may be used to automatically and dynamically create the cloud's routing tables and select routes in an adaptive manner. This cloud requires a fixed amount of time to route each packet, as determined by the

Packet Latency attribute of the node.

1. The Object Palette dialog box should now be on the top of your project space. If it is not there, open it by clicking clip_image007. Make sure that the internet_toolbox item is selected from the pull-down menu on the object palette.

2. Add to the project workspace the following objects from the palette: Application Config, Profile Config, an ip32_Cloud, and two subnets.

a. To add an object from a palette, click its icon in the object palette ⇒ Move your mouse to the workspace ⇒ Click to drop the object in the desired location ⇒ Right-click to finish creating objects of that type.

3. Close the palette.

4. Rename the objects you added as shown and then save your project:

clip_image009

Configure the Applications:

  1. Right-click on the Applications node ⇒ Edit Attributes ⇒ Expand the Application Definitions attribute and set rows to 1 Expand the new row Name the row FTP_Application.

i. Expand the Description hierarchy ⇒ Edit the FTP row as shown (you will need to set the Special Value to Not Used while editing the shown attributes):

clip_image011

2. Click OK twice and then save your project.

Configure the Profiles:

  1. Right-click on the Profiles node ⇒ Edit Attributes ⇒ Expand the Profile Configuration attribute and set rows to 1.

i. Name and set the attributes of row 0 as shown ⇒ Click OK.

clip_image013

The ethernet4_slip8_ gtwy node model represents an IP-based gateway supporting four Ethernet hub interfaces and eight serial line interfaces.

Configure the West Subnet:

  1. Double-click on the West subnet node. You get an empty workspace, indicating that the subnet contains no objects.
  1. Open the object palette clip_image007[1] and make sure that the internet_toolbox item is selected from the pull-down menu.
  1. Add the following items to the subnet workspace: one ethernet_server, one ethernet4_slip8_gtwy router, and connect them with a bidirectional 100_BaseT link ⇒ Close the palette ⇒ Rename the objects as shown.

clip_image015

  1. Right-click on the Server_West node ⇒ Edit Attributes:

i. Edit Application: Supported Services ⇒ Set rows to 1 ⇒ Set Name to FTP_Application Click OK.

ii. Edit the value of the Server Address attribute and write down Server_West.

iii. Expand the TCP Parameters hierarchy ⇒ Set both Fast Retransmit and

Fast Recovery to Disabled.

  1. Click OK and then save your project.

Now, you have completed the configuration of the West subnet. To go back to the top level of the project, click the Go to next higher level clip_image017 button.

Configure the East Subnet:

  1. Double-click on the East subnet node. You get an empty workspace, indicating that the subnet contains no objects.
  1. Open the object palette clip_image018 and make sure that the internet_toolbox item is selected from the pull-down menu.
  1. Add the following items to the subnet workspace: one ethernet_wkstn, one ethernet4_slip8_gtwy router, and connect them with a bidirectional 100_BaseT link ⇒ Close the palette ⇒ Rename the objects as shown.

clip_image020

  1. Right-click on the Client_East node ⇒ Edit Attributes:

i. Expand the Application: Supported Profiles hierarchy ⇒ Set rows to 1 ⇒ Expand the row 0 hierarchy ⇒ Set Profile Name to FTP_Profile.

ii. Assign Client_ East to the Client Address attributes.

iii. Edit the Application: Destination Preferences attribute as follows:

Set rows to 1 ⇒ Set Symbolic Name to FTP Server ⇒ Edit Actual Name

Set rows to 1 ⇒ In the new row, assign Server_West to the Name column.

  1. Click OK three times and then save your project.
  1. You have now completed the configuration of the East subnet. To go back to the project space, click the Go to next higher level clip_image021 button.

Connect the Subnets to the IP Cloud:

  1. Open the object palette clip_image018[1].
  1. Using two PPP_DS3 bidirectional links connect the East subnet to the IP Cloud and the West subnet to the IP Cloud.
  1. A pop-up dialog box will appear asking you what to connect the subnet to the IP Cloud with. Make sure to select the “routers.”
  1. Close the palette.

clip_image023

Choose the Statistics

OPNET provides the following capture modes:

All values—collects every data point from a statistic.

Sample—collects the data according to a user-specified time interval or sample count. For example, if the time interval is 10, data is sampled and recorded every 10th second. If the sample count is 10, every 10th data point is recorded. All other data points are discarded.

Bucket—collects all of the points over the time interval or sample count into a “data bucket” and generates a result from each bucket. This is the default mode.

1. Right-click on Server_West in the West subnet and select Choose Individual Statistics from the pop-up menu.

2. In the Choose Results dialog box, choose the following statistic:

TCP Connection Congestion Window Size (bytes) and Sent Segment Sequence Number.

3. Right-click on the Congestion Window Size (bytes) statistic ⇒ Choose Change Collection Mode In the dialog box check Advanced From the drop-down menu, assign all values to Capture mode as shown ⇒ Click OK.

clip_image025

4. Right-click on the Sent Segment Sequence Number statistic ⇒ Choose

Change Collection Mode In the dialog box check Advanced From the drop-down menu, assign all values to Capture mode.

5. Click OK twice and then save your project.

6. Click the Go to next higher level clip_image021[1] button.

Configure the Simulation

Here we need to configure the duration of the simulation:

1. Click on clip_image027 and the Configure Simulation window should appear.

2. Set the duration to be 10.0 minutes.

3. Click OK and then save your project.

Duplicate the Scenario

With fast retransmit,

TCP performs a retransmission of what appears to be the missing segment, without waiting for a retransmission timer to expire.

After fast retransmit sends what appears to be the missing segment, congestion avoidance but not slow start is performed. This is the fast recovery algorithm.

The fast retransmit and fast recovery algorithms are usually implemented together (RFC 2001).

In the network we just created we assumed a perfect network with no discarded packets. Also, we disabled the fast retransmit and fast recovery techniques in TCP. To analyze the effects of discarded packets and those congestion-control techniques, we will create two additional scenarios.

  1. Select Duplicate Scenario from the Scenarios menu and give it the name

Drop_NoFast Click OK.

  1. In the new scenario, right-click on the IP CloudEdit Attributes ⇒ Assign

0.05% to the Packet Discard Ratio attribute.

  1. Click OK and then save your project.
  1. While you are still in the Drop_NoFast scenario, select Duplicate Scenario from the Scenarios menu and give it the name Drop_Fast.

5. In the Drop_Fast scenario, right-click on Server_ West, which is inside the West subnet ⇒ Edit Attributes ⇒ Expand the TCP Parameters hierarchy ⇒ Enable the Fast Retransmit attribute ⇒ Assign Reno to the Fast Recovery attribute.

  1. Click OK and then save your project.

Run the Simulation

To run the simulation for the three scenarios simultaneously:

1. Go to the Scenarios menu ⇒ Select Manage Scenarios.

2. Change the values under the Results column to <collect> (or <recollect>) for the three scenarios. Compare to the following figure.

clip_image029

3. Click OK to run the three simulations. Depending on the speed of your processor, this may take several minutes to complete.

4. After the three simulation runs complete, one for each scenario, click Close ⇒ Save your project.

View the Results

To switch to a scenario, choose Switch to Scenario from the

Scenarios menu or just press Ctrl+<scenario number>.

To view and analyze the results:

1. Switch to the Drop_NoFast scenario (the second one) and choose View Results from the Results menu.

2. Fully expand the Object Statistics hierarchy and select the following two results:

Congestion Window Size (bytes) and Sent Segment Sequence Number.

clip_image031

3. Click Show. The resulting graphs should resemble the ones below.

clip_image033

4. To zoom in on the details in the graph, click and drag your mouse to draw a rectangle, as shown above.

5. The graph should be redrawn to resemble the following one:

clip_image035

6. Notice the Segment Sequence Number is almost flat with every drop in the congestion window.

7. Close the View Results dialog box and select Compare Results from the Result menu.

8. Fully expand the Object Statistics hierarchy as shown and select the following result: Sent Segment Sequence Number.

clip_image037

9. Click Show. After zooming in, the resulting graph should resemble the one below.

clip_image039