CN Lab Manual Cs
CN Lab Manual Cs
LAB MANUAL
Prepared By
Name: Mrs .K.SHWETHA REDDY
Verified By
Head of the Department:
SRI INDU COLLEGE OF ENGINEERING & TECHNOLOGY
B. TECH –COMPUTER SCIENCE AND ENGINEERING(CS)
INSTITUTION VISION
To be a premier Institution in Engineering & Technology and Management with
competency, values and social consciousness.
INSTITUTION MISSION
IM1 Provide high quality academic programs, training activities and research facilities.
IM3 Contribute to the economical and technological development of the region, state
and nation.
DEPARTMENT VISION
To be a Technologically adaptive centre for computing by grooming the students
as top notch professionals.
DEPARTMENT MISSION
The Department has following Missions:
DM1 To offer quality education in computing.
DM2 To provide an environment that enables overall development of all the stakeholders.
DM3 To impart training on emerging technologies like data analytics , artificial
intelligence and internet of things.
DM4 To encourage participation of stake holders in research and development.
PO Description
EngineeringKnowledge: Tobeableto applyknowledgeofcomputing,mathematics,
PO 1 ScienceandEngineering appropriatetothe discipline
ProblemAnalysis:Tobeableidentify,formulate
PO 2 &analyzeaproblem,andascertainanddefinethecomputing requirements appropriatetoits
solution.
Design & Development Solutions: To be able to design, implement, and evaluate
PO 3 acomputer‐basedsystem,process, component,orprogram tomeetdesired needs.
Investigationofcomplexproblems: Tobeabletoidentifyandanalyzeuserneeds
PO 4 andconsiderthem inthe selection, creation,evaluation and administrationof
computer‐basedsystems forprovidingvalidsolutionstocomplexproblems.
Modern Tool Usage: To posses skills for creating and in using
PO 5 contemporarytechniques,skills, and toolsnecessaryforcomputingpractice.
Engineering&Society:Toapplyconceptualknowledgerelevanttoprofessionalengineeringp
PO 6 racticesinsocietal,health,safety,legalandculturalissuesandtheirconsequences
Environment&Sustainability: To beableto
PO 7 analyzethelocalandglobalimpactofcomputing on individuals, organizations, and
society and work towards sustainabledevelopment.
Ethics:Tounderstandcontemporaryprofessional,ethical,legal,securityandsocialissue
PO 8 sand responsibilities.
Individual & Team work: To Be able to function effectively as an individual and
PO 9 onteamsto accomplish a common goal.
Communication: To communicate precisely and effectively both in oral and
PO 10 writtenformwith a rangeof audiences.
C216.1 Implement data link layer farming methods and Analyze error detection and error correction
codes.
C216.2
Implement and analyze routing and congestion issues in network design.
C216.3
Implement Encoding and Decoding techniques used in presentation layer.
COsMAPPINGWITHPOs&PSOs
Course PO1 PO2 PO3 PO4 PO5 PO6 PO7 PO8 PO9 PO10 PO11 PO12 PSO1 PSO2 PSO3
Outcome
C216.1 2 2 3 2 2 - - - - 1 - - 1 2 1
C216.2 2 1 2 1 2 - - - - - 2 - 1 1 1
C216.3 1 2 1 2 1 - - -- - - - - 2 1 1
C216 1.6 1.6 2.0 1.6 1.6 - - - - 0.3 0.6 - 1.3 1.3 1.16
List of Experiments
SNO PROGRAM
1 Week 1-:Implement the data link layer framing methods such as character, character-
stuffing and bit stuffing.
2 WWeek 2 -:Write a program to compute CRC code for the polynomials CRC-12, CRC-16
and CRC CCIP
3 Week 3 - :Develop a simple data link layer that performs the flow control using the
sliding window protocol, and loss recovery using the Go-Back-N mechanism.
4 Week 4 - :Implement Dijsktra’s algorithm to compute the shortest path
through a network
5 Week 5- : Take an example subnet of hosts and obtain a broadcast tree for the subnet.
6 WWeek 6- : Implement distance vector routing algorithm for obtaining routing tables at
each node.
7 WWeek 7- : Implement data encryption and data decryption.
8 WWeek 8- : Write a program for congestion control using Leaky bucket algorithm.
SOURCE CODE:
// BIT Stuffing program
#include<stdio.h>
#include<string.h>
void main()
{
int a[20],b[30],i,j,k,count,n;
printf("Enter frame length:");
scanf("%d",&n);
printf("Enter input frame (0's & 1's only):");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
i=0; count=1; j=0;
while(i<n)
{
if(a[i]==1)
{
b[j]=a[i];
for(k=i+1;a[k]==1 && k<n && count<5;k++)
{
j++;
b[j]=a[k];
count++;
if(count==5)
{
j++;
b[j]=0;
}
i=k;
}
}
else
{
b[j]=a[i];
}
i++;
j++;
}
printf("After stuffing the frame is:");
for(i=0;i<j;i++)
printf("%d",b[i]);
}
OUTPUT:
Enter frame length:5
Enter input frame (0's & 1's only):
1
1
1
1
1
After stuffing the frame is:111110
------------------
(program exited with code: 6)
Press return to continue
VIVA QUESTIONS:
1. What is bit stuffing?
2. What is the use of bitstuffing?
3. with bit stuffing the boundary b/w 2 frames can be unambiguously
recognized by ------------------------
4. -------------------- is analogous to characterstuffing
5. Each frame begins and ends with a special bit pattern 01111110 called ---
------
6. The senders data link layer encounters ----------------no of 1’sconsecutively
EXPERIMENT NO: 1. (b)
OUTPUT:
enter string
MLRITM
enter position
2
enter the character
frame after stuffing:
dlestxMdldleLRITMdleetx
------------------
(program exited with code: 0)
Press return to continue
VIVA QUESTIONS:
1. What is character stuffing?
2. What is the use of characterstuffing?
3. is analogous to bit stuffing.
4. are the delimiters for character stuffing
5. Expand DLESTX
6. Expand DLE ETX
EXPERIMENT NO: 2.
SOURCE CODE:
//PROGRAM FOR CYCLIC REDUNDENCY CHECK
#include<stdio.h>
int gen[4],genl,frl,rem[4];
void main()
{
int i,j,fr[8],dupfr[11],recfr[11],tlen,flag;
frl=8; genl=4;
printf("enter frame:");
for(i=0;i<frl;i++)
{
scanf("%d",&fr[i]);
dupfr[i]=fr[i];
}
printf("enter generator:");
for(i=0;i<genl;i++)
scanf("%d",&gen[i]);
tlen=frl+genl-1;
for(i=frl;i<tlen;i++)
{
dupfr[i]=0;
}
remainder(dupfr);
for(i=0;i<frl;i++)
{
recfr[i]=fr[i];
}
for(i=frl,j=1;j<genl;i++,j++)
{
recfr[i]=rem[j];
}
remainder(recfr);
flag=0;
for(i=0;i<4;i++)
{
if(rem[i]!=0)
flag++;
}
if(flag==0)
{
printf("frame received correctly");
}
else
{
printf("the received frame is wrong");
}
}
remainder(int fr[])
{
int k,k1,i,j;
for(k=0;k<frl;k++)
{
if(fr[k]==1)
{
k1=k;
for(i=0,j=k;i<genl;i++,j++)
{
rem[i]=fr[j]^gen[i];
}
for(i=0;i<genl;i++)
{
fr[k1]=rem[i];
k1++;
}
}
}
}
OUTPUT:
enter frame:
1
1
0
1
0
1
1
0
enter generator:
1
0
1
1
Frame received correctly.
VIVA QUESTIONS:
1. What is CRC?
2. What is the use ofCRC?
3. Name the CRC standards
4. Define checksum?
5. Define generator polynomial?
6. Polynomial arithmetic is doneby
XPERIMENT NO: 3
NAME OF THE EXPERIMENT:flow control using the sliding window protocol
AIM:Develop a simple data link layer that performs the flow control using the sliding window protocol, and
loss recovery using the Go-Back-N mechanism.
#include<stdio.h>
int main()
{
int w,i,f,frames[50];
printf("Enter window size: ");
scanf("%d",&w);
printf("\nEnter number of frames to transmit: ");
scanf("%d",&f);
printf("\nEnter %d frames: ",f);
for(i=1;i<=f;i++)
scanf("%d",&frames[i]);
printf("\nWith sliding window protocol the frames will be sent in the following manner (assuming no
corruption of frames)\n\n");
printf("After sending %d frames at each stage sender waits for acknowledgement sent by the
receiver\n\n",w);
for(i=1;i<=f;i++)
{
if(i%w==0)
{
printf("%d\n",frames[i]);
printf("Acknowledgement of above frames sent is received by sender\n\n");
}
else
printf("%d ",frames[i]);
}
if(f%w!=0)
printf("\nAcknowledgement of above frames sent is received by sender\n");
return 0;
}
Output:
With sliding window protocol the frames will be sent in the following manner (assuming no corruption of frames)
After sending 3 frames at each stage sender waits for acknowledgement sent by the receiver
12 5 89
Acknowledgement of above frames sent is received by sender
46
Acknowledgement of above frames sent is received by sender
VIVA QUESTIONS:
ALGORITHM/FLOWCHART:
Begin
Step1: Declare array path [5] [5], min, a [5][5], index, t[5];
Step2: Declare and initialize st=1,ed=5
Step 3: Declare variables i, j, stp, p, edp
Step 4: print “enter the cost “
Step 5: i=1
Step 6: Repeat step (7 to 11) until (i<=5)
Step 7: j=1
Step 8: repeat step (9 to 10) until (j<=5)
Step 9: Read a[i] [j]
Step 10: increment j
Step 11: increment i
Step 12: print “Enter the path”
Step 13: read p
Step 14: print “Enter possible paths”
Step 15: i=1
Step 16: repeat step(17 to 21) until (i<=p)
Step 17: j=1
Step 18: repeat step(19 to 20) until (i<=5)
Step 19: read path[i][j]
Step 20: increment j
Step 21: increment i
Step 22: j=1
Step 23: repeat step(24 to 34) until(i<=p)
Step 24: t[i]=0
Step 25: stp=st
Step 26: j=1
Step 27: repeat step(26 to 34) until(j<=5)
Step 28: edp=path[i][j+1]
Step 29: t[i]= [ti]+a[stp][edp]
Step 30: if (edp==ed) then
Step 31: break;
Step 32: else
Step 33: stp=edp
Step 34: end if
Step 35: min=t[st]
Step 36: index=st
Step 37: repeat step( 38 to 41) until (i<=p)
Step 38: min>t[i]
Step 39: min=t[i]
Step 40: index=i
Step 41: end if
Step 42: print” minimum cost” min
Step 43: print” minimum cost pth”
Step 44: repeat step(45 to 48) until (i<=5)
Step 45: print path[index][i]
Step 46: if(path[idex][i]==ed) then
Step 47: break
Step 48: end if
End
SOURCE CODE:
//*********************************
// .PROGRAM FOR FINDING SHORTEST //PATH FOR A GIVEN GRAPH
//*********************************
#include<stdio.h>
void main()
{
int path[5][5],i,j,min,a[5][5],p,st=1,ed=5,stp,edp,t[5],index;
printf("enter the cost matrix\n");
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
scanf("%d",&a[i][j]);
printf("enter the paths\n");
scanf("%d",&p);
printf("enter possible paths\n");
for(i=1;i<=p;i++)
for(j=1;j<=5;j++)
scanf("%d",&path[i][j]);
for(i=1;i<=p;i++)
{
t[i]=0;
stp=st;
for(j=1;j<=5;j++)
{
edp=path[i][j+1];
t[i]=t[i]+a[stp][edp];
if(edp==ed)
break;
else
stp=edp;
}
}
min=t[st];index=st;
for(i=1;i<=p;i++)
{
if(min>t[i])
{
min=t[i];
index=i;
}
}
printf("minimum cost %d",min);
printf("\n minimum cost path ");
for(i=1;i<=5;i++)
{
printf("--> %d",path[index][i]);
if(path[index][i]==ed)
break;
}
}
OUTPUT:
enter the cost matrix
12345
12345
12345
12345
12345
enter the paths
2
enter possible paths
12345
12345
minimum cost 14
VIVA QUESTIONS:
ALGORITHM/FLOWCHART:
step 1: declare variable as int p,q,u,v,n;
step 2: Initialize min=99,mincost=0;
step 3: declare variable as intt[50][2],i,j;
step 4: declare variable as int parent[50],edge[50][50];
step 5: Begin
step 6: write "Enter the number of nodes"
step 7: read "n"
step 8: Initialize i=0
step 9: repeat step(10-12) until i<n
step10: increment i
step11: write"65+i"
step12: Initialize parent[i]=-1
step13:wite "\n"
step14: Initialize i=0
step15: repeat step(15-21) until i<n
step16: increment i
step17: write"65+i"
step18: Initialize j=0
step19: repeat until j<n
step20: increment j
step21: read edge[i][j]
step22: Initialize i=0
step23: repeat step(23-43) until i<n
step24: increment i
step25: Initialize j=0
step26: repeat until j<n
step27: increment j
step28: if'edge[i]j]!=99
step29: if'min>edge[i][j] repeat step (29-32)
step30: intialize min=edge[i][j]
step31: intialize u=i
step32: intialize v=j
step33: calling function p=find(u);
step34: calling function q=find(v);
step35: if'P!=q repeat steps(35-39)
step36: intialize t[i][0]=u
step37: intialize t[i][1]=v
step38: initialize mincost=mincost+edge[u][v]
step39: call function sunion(p,q)
step40: else repeat steps(40-42)
step41: Intialize t[i][0]=-1;
step42: Intialize t[i][1]=-1;
step43: intialize min=99;
step44; write"Minimum cost is %d\n Minimum spanning tree is",mincost
step45: Initialize i=0
step46: repeat until i<n
step47: increment i
step48: if't[i][0]!=-1 && t[i][1]!=-1'repeat step(48-50)
step49: write "%c %c %d", 65+t[i][0], 65+t[i][1], edge[t[i][0]][t[i][1]]
step50: write"\n"
step51: end
step52: called function sunion(int l,int m) repeat step(51-52)
step53: intialize parent[l]=m
step54: called function find(int l) repeat step(53-56)
step55: if parent([l]>0)
step56: initialize l=parent
step57: return l
SOURCE CODE:
// Write a ‘c’ program for Broadcast tree from subnet of host
#include<stdio.h>
int p,q,u,v,n;
int min=99,mincost=0;
int t[50][2],i,j;
int parent[50],edge[50][50];
main()
{
clrscr();
printf("\n Enter the number of nodes");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("%c\t",65+i);
parent[i]=-1;
}
printf("\n");
for(i=0;i<n;i++)
{
printf("%c",65+i);
for(j=0;j<n;j++)
scanf("%d",&edge[i][j]);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
if(edge[i][j]!=99)
if(min>edge[i][j])
{
min=edge[i][j];
u=i;
v=j;
}
p=find(u);
q=find(v);
if(p!=q)
{
t[i][0]=u;
t[i][1]=v;
mincost=mincost+edge[u][v];
sunion(p,q);
}
else
{
t[i][0]=-1;
t[i][1]=-1;
}
min=99;
}
printf("Minimum cost is %d\n Minimum spanning tree is\n" ,mincost);
for(i=0;i<n;i++)
if(t[i][0]!=-1 && t[i][1]!=-1)
{
printf("%c %c %d", 65+t[i][0], 65+t[i][1],
edge[t[i][0]][t[i][1]]);
printf("\n");
}
}
sunion(int l,int m)
{
parent[l]=m;
}
find(int l)
{
if(parent[l]>0)
l=parent[l];
return l;
}
OUTPUT:
Enter the number of nodes3
A B C
A1 2 3 4
B1 2 3 4
C4 5 6 7
Minimum cost is 3
Minimum spanning tree is
CA3
VIVA QUESTIONS:
1. What is spanning tree
2. What is broad casttree?
3. What are the advantages of broad casttree?
4. Where we should use the broad casttree
5. What is flooding?
6. What is the subnet?
EXPERIMENT NO: 6
NAME OF THE EXPERIMENT: Distance Vector routing.
AIM: Obtain Routing table at each node using distance vector routing algorithm for a
given subnet.
SOURCE CODE:
#include<stdio.h>
struct node
{
unsigned dist[20];
unsigned from[20];
}rt[10];
int main()
{
int dmat[20][20];
int n,i,j,k,count=0;
printf("\nEnter the number of nodes : ");
scanf("%d",&n);
printf("Enter the cost matrix :\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
scanf("%d",&dmat[i][j]);
dmat[i][i]=0;
rt[i].dist[j]=dmat[i][j];
rt[i].from[j]=j;
}
do
{
count=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
if(rt[i].dist[j]>dmat[i][k]+rt[k].dist[j])
{
rt[i].dist[j]=rt[i].dist[k]+rt[k].dist[j];
rt[i].from[j]=k;
count++;
}
}while(count!=0);
for(i=0;i<n;i++)
{
printf("\nState value for router %d is \n",i+1);
for(j=0;j<n;j++)
{
printf("\nnode %d via %d Distance%d",j+1,rt[i].from[j]+1,rt[i].dist[j]);
}
}
printf("\n");
}
OUTPUT:
Enter the number of nodes : 2
Enter the cost matrix :
12
12
State value for router 1 is
node 1 via 1 Distance0
node 2 via 2 Distance2
State value for router 2 is
node 1 via 1 Distance1
node 2 via 2 Distance0
VIVA QUESTIONS:
1. What isrouting
2. What is best algorithm among all routingalgorithms?
3. What is static routing?
4. Difference between static and dynamic
5. How distance vector routingworks
6. What is optimality principle?
EXPERIMENT NO: 7
NAME OF THE EXPERIMENT: data encryption and data decryption.
AIM: Take a 64 bit playing text and encrypt the same using DES algorithm.
HARDWARE REQUIREMENTS: Intel based Desktop PC:- RAM of 512 MB
SOFTWARE REQUIREMENTS: Turbo C / Borland C.
THEORY:
Data encryption standard was widely adopted by the industry in security products. Plain text is
encrypted in blocks of 64 bits yielding 64 bits of cipher text. The algorithm which is parameterized by a
56 bit key has 19 distinct stages. The first stage is a key independent transposition and the last stage is
exactly inverse of the transposition. The remaining stages are functionally identical but are
parameterized by different functions of the key. The algorithm has been designed to allowdecryption
to be done with the same key as encryption
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
void main()
{
char pwd[20];
char alpha[26]="abcdefghijklmnopqrstuvwxyz";
int num[20],i,n,key;
//clrscr();
printf("\nEnter the password:");
scanf("%s",&pwd);
n=strlen(pwd);
for(i=0;i<n;i++)
num[i]=toascii(tolower(pwd[i]))-'a';
printf("\nEnter the key:");
scanf("%d",&key);
for(i=0;i<n;i++)
num[i]=(num[i]+key)%26;
for(i=0;i<n;i++)
pwd[i]=alpha[num[i]];
printf("\nThe key is:%d",key);
printf("\nEncrypted text is:%s",pwd);
for(i=0;i<n;i++)
{
num[i]=(num[i]-key)%26;
if(num[i]<0)
num[i]=26+num[i];
pwd[i]=alpha[num[i]];
}
printf("\nDecrypted text is:%s",pwd);
getch();
}
Output:
Enter the password:puji
VIVA QUESTIONS:
1. ExpandDES
2. What is cipher text?
3. What is plaintext?
4. Define publickey?
5. Define encryption?
6. Substitutions are performed by boxes
EXPERIMENT NO: 8
NAME OF THE EXPERIMENT:congestion control using Leaky bucket algorithm
AIM:Implement a program for congestion control using Leaky bucket algorithm.
HARDWARE REQUIREMENTS: Intel based Desktop PC:- RAM of 512 MB
SOFTWARE REQUIREMENTS: Turbo C / Borland C.
Program
#include<stdio.h>
int main(){
int incoming, outgoing, buck_size, n, store = 0;
printf("Enter bucket size, outgoing rate and no of inputs: ");
scanf("%d %d %d", &buck_size, &outgoing, &n);
while (n != 0) {
printf("Enter the incoming packet size : ");
scanf("%d", &incoming);
printf("Incoming packet size %d\n", incoming);
if (incoming <= (buck_size - store)){
store += incoming;
printf("Bucket buffer size %d out of %d\n", store, buck_size);
} else {
printf("Dropped %d no of packets\n", incoming - (buck_size - store));
printf("Bucket buffer size %d out of %d\n", store, buck_size);
store = buck_size;
}
store = store - outgoing;
printf("After outgoing %d packets left out of %d in buffer\n", store, buck_size);
n--;
}
}
Output
Enter bucket size, outgoing rate and no of inputs: 50 40 3
After outgoing -
20 packets left out of 50 in buffer
VIVA QUESTIONS:
1. What is Congestion?
2. What is Congestion Control?
3. What are Congestion control algorithms?
4. Differentiate between Leaky bucket and Token bucket?
5. What is the purpose of leaky bucket algorithm?
EXPERIMENT NO: 9
AFTER SHUFFLING:
AFTER SORTING
VIVA QUESTIONS:
Ed. Note: A “packet” is a single message from any network protocol (i.e., TCP, DNS, etc.)
Ed. Note 2: LAN traffic is in broadcast mode, meaning a single computer with Wireshark can
see traffic between two other computers. If you want to see traffic to an external site, you
need to capture the packets on the local computer.
Wireshark allows you to filter the log either before the capture starts or during analysis, so
you can narrow down and zero into what you are looking for in the network trace. For
example, you can set a filter to see TCP traffic between two IP addresses. You can set it only
to show you the packets sent from one computer. The filters in Wireshark are one of the
primary reasons it became the standard tool for packet analysis.
You can select one or more of the network interfaces using “shift left-
click.” Once you have the network interface selected, you can start the
capture, and there are several ways to do that.
Click the first button on the toolbar, titled “Start Capturing Packets.”
You can select the menu item Capture -> Start.
Or you could use the keystroke Control – E.
During the capture, Wireshark will show you the packets that it captures
in real-time.
Once you have captured all the packets you need, you use the same
buttons or menu options to stop the capture.
EXPERIMENT NO: 11,12
11. How to run Nmap scan
12. Operating System Detection using Nmap
Nmap builds on previous network auditing tools to provide quick, detailed scans of network traffic. It
works by using IP packets to identify the hosts and IPs active on a network and then analyze these
packets to provide information on each host and IP, as well as the operating systems they are running.
network administrators to scan for:
OS Scanning
OS scanning is one of the most powerful features of Nmap. When using this type of scan, Nmap sends
TCP and UDP packets to a particular port, and then analyze its response. It compares this response to a
database of 2600 operating systems, and return information on the OS (and version) of a host.
i. NS2 Simulator-Introduction
Network simulator 2:
Network Simulator (NS) is simply a discrete event-driven network simulation tool for studying
the dynamic nature of communication networks. Network Simulator 2 (NS2) provides
substantial support for simulation of different protocols over wired and wireless networks. It
provides a highly modular platform for wired and wireless simulations supporting different
network elements, protocols, traffic, and routing types [20].
NS2 is a simulation package that supports several network protocols including TCP, UDP,
HTTP, and DHCP and these can be modeled using this package [21]. In addition,several kinds
of network traffic types such as constant bit rate (CBR), available bit
rate (ABR), and variable bit rate (VBR) can be generated easily using this package. It is a very
popular simulation package in academic environments.
NS2 has been developed using the C++ programming language and OTcl. OTcl is a relatively
new language that uses object-oriented aspects. It was developed at MIT asan object-oriented
extension of the Tool command language (Tcl).
# create a simulator
object set ns [new
Simulator]
# monitor the queue for the link between node 2 and node
3
$ns duplex-link-op $node3 $node4 queuePos 0.5
Define the trace files, and place monitors at places in the topology to
collectinformation about packets flows. NS2 supports two primary
monitoring capabilities: traces and monitors. The traces enable
recording of packets whenever an event such as packet drop or
arrival occurs in a queue or a link.The monitors provide a means for
collecting quantities, such as number of packet drops or number of
arrived packets in the queue. The monitor can be used to collect
these quantities for all packets or just for a specified flow (a flow
monitor).
# open the nam trace file
set nam_trace_fd [open tcp_tahoe.nam w]
$ns namtrace-all
$nam_trace_fd set trace_fd
[open tcp_tahoe.tr w]
#Define a 'finish'
procedure proc finish {}
{
global ns nam_trace_fd trace_fd
proc finish {} {
global ns nf nt
$ns flush-trace
close $nf
close $nt
exit 0
}
#Create six nodes
proc SendPingPacket { } {
global ns p2 p3
$ns run
AWK FILE:(Open a new editor using “gedit command” and write awk file and save with “.awk”
extension)
BEGIN{
count=0;
if($1==”d”)
count++;
END{
#creating two color classes for ns object to distinguish the traffic coming from vari
ous sources
$ns color 0 blue
$ns color 1 red
#Finish Procedure
proc finish {} {
global ns nf
$ns flush-trace
close $nf
exec nam out.nam &
exit 0
}
#Specifying tcp traffic to have blue color as defined in the second line of the program
$tcp1 set fid_ 0
#Specifying udp traffic to have red color as defined in the second line of program
$udp0 set fid_ 1
#Attaching the UDP agent with n0
$ns attach-agent $n0 $udp0
#Connecting both udp0 and null0 agents for transferring data between n0 and n1
$ns connect $udp0 $null0
#Specifying the CBR agent to generate the traffic over udp0 agent set cbr0
[new Application/Traffic/CBR]
Solution:
##################################################
## Obtain Trace date at destination (n4) ##################################################
Output:
+ 0.311227 3 4 tcp 40 ------- 0 0.0 4.0 0 0
(@ 0.311227 sec: 40 bytes of TCP data arrives at node 3)
- 0.311227 3 4 tcp 40 ------- 0 0.0 4.0 0 0
(@ 0.311227 sec: 40 bytes of TCP data departed from node 3)r 0.351867 3 4 tcp 40 -
------ 0 0.0 4.0 0 0
(@ 0.351867 sec: 40 bytes of TCP data is received by node 4)
+ 0.831888 3 4 tcp 592 ------- 0 0.0 4.0 1 2
(@ 0.831888 sec: 592 bytes of TCP data arrives at node 3)
- 0.831888 3 4 tcp 592 ------- 0 0.0 4.0 1 2
(@ 0.831888 sec: 592 bytes of TCP data departed from node 3)
+ 0.847675 3 4 tcp 592 ------- 0 0.0 4.0 2 3
(@ 0.847675 sec: 592 bytes of TCP data arrives at node 3)
- 0.847675 3 4 tcp 592 ------- 0 0.0 4.0 2 3
(@ 0.847675 sec: 592 bytes of TCP data departed from node 3)r 0.88136 3 4 tcp 592 -
------ 0 0.0 4.0 1 2
(@ 0.88136 sec: 592 bytes of TCP data is received by node 4)
r 0.897147 3 4 tcp 592 ------- 0 0.0 4.0 2 3
+ 1.361381 3 4 tcp 592 ------- 0 0.0 4.0 3 6
- 1.361381 3 4 tcp 592 ------- 0 0.0 4.0 3 6
+ 1.377168 3 4 tcp 592 ------- 0 0.0 4.0 4 7
- 1.377168 3 4 tcp 592 ------- 0 0.0 4.0 4 7
+ 1.392955 3 4 tcp 592 ------- 0 0.0 4.0 5 8
- 1.392955 3 4 tcp 592 ------- 0 0.0 4.0 5 8
+ 1.408741 3 4 tcp 592 ------- 0 0.0 4.0 6 9
- 1.408741 3 4 tcp 592 ------- 0 0.0 4.0 6 9
r 1.410853 3 4 tcp 592 ------- 0 0.0 4.0 3 6
#===================================
# Links Definition
#===================================
#add manually
set lan [$ns newLan "$n0 $n1 $n2" 0.5Mb 40ms LL Queue/DropTailMAC/802_3 Channel]
$ns duplex-link $n2 $n3 10Mb 100ms DropTail
$ns duplex-link-op $n2 $n3 queuePos 0.5
set lan [$ns newLan "$n3 $n4 $n5" 0.5Mb 40ms LL Queue/DropTailMAC/802_3 Channel]
set loss_module [new ErrorModel]
$loss_module ranvar [new RandomVariable/Uniform]
$loss_module drop-target [new Agent/Null]
$ns lossmodel $loss_module $n2 $n3
#end #===================================
# Agents Definition
#===================================
#Setup a TCP connection set tcp0
[new Agent/TCP]
$ns attach-agent $n0 $tcp0 set sink2 [new
Agent/TCPSink]
$ns attach-agent $n4 $sink2
$ns connect $tcp0 $sink2
$tcp0 set packetSize_ 1500#Setup a
TCP connection set tcp1 [new
Agent/TCP]
$ns attach-agent $n1 $tcp1 set sink3 [new
Agent/TCPSink]
$ns attach-agent $n5 $sink3
$ns connect $tcp1 $sink3
$tcp1 set packetSize_ 1500 #===================================
# Applications Definition
#===================================
#Setup a FTP Application over TCP connectionset ftp0 [new
Application/FTP]
$ftp0 attach-agent $tcp0
$ns at 0.1 "$ftp0 start"
$ns at 9.8 "$ftp0 stop"
#Setup a FTP Application over TCP connectionset ftp1 [new
Application/FTP]
$ftp1 attach-agent $tcp1
$ns at 1 "$ftp1 start"
$ns at 9.9 "$ftp1 stop"#add
manually
$ns at 0.1 "PlotWindow $tcp0 $wf0"
$ns at 0.5 "PlotWindow $tcp1 $wf1"
$tcp0 set class_ 1
$tcp1 set class_ 2#end
#===================================
# Termination
#===================================
#Define a 'finish' procedureproc finish {}
{
global ns tracefile namfile
$ns flush-trace close
$tracefileclose $namfile
exec nam 5.nam &
exec xgraph WinFile0 WinFile1 &exit 0
}
$ns at $val(stop) "$ns nam-end-wireless $val(stop)"
$ns at $val(stop) "finish"
$ns at $val(stop) "puts \"done\" ; $ns halt"
$ns run
#Open the nam file basic1.nam and the variable-trace file basic1.trset namfile
[open basic1.nam w]
$ns namtrace-all $namfile
set tracefile [open basic1.tr w]
$ns trace-all $tracefile
#Create a TCP receive agent (a traffic sink) and attach it to Bset end0
[new Agent/TCPSink]
$ns attach-agent $B $end0
#Connect the traffic source with the traffic sink
$ns connect $tcp0 $end0
#Schedule the connection data flow; start sending data at T=0, stop at T=10.0set myftp
[new Application/FTP]
$myftp attach-agent $tcp0
$ns at 0.0 "$myftp start"
$ns at 10.0 "finish"
#Run the simulation
$ns run
After running this script, there is no command-line output (because we did not ask for any);
however, the files basic1.tr and basic1.nam are created. Perhaps the simplest thing to do at this
point is to view the animation with nam, using the command nam basic1.nam.
In the animation we can see slow start at the beginning, as first one, then two, then four andthen
eight packets are sent. A little past T=0.7, we can see a string of packet losses. This is visible in
the animation as a tumbling series of red squares from the top of R’s queue. After that, the TCP
sawtooth takes over; we alternate between the cwnd linear-increase phase (congestion avoidance),
packet loss, and threshold slow start. During the linear-increase phase the bottleneck link is at
first incompletely utilized; once the bottleneck link is saturated the router queue begins to build.