Вы находитесь на странице: 1из 24

VISVESVARAYA TECHNOLOGICAL UNIVERSITY

Jnana Sangama, BELGAUM 590 014


KARNATAKA

LABORATORY MANUAL ON

NETWORKS LABORATORY
For
Computer Science & Engineering and Information Science & Engineering

By
Mr. Navile Nageshwara Naveen
Assistant Professor, CSE Department,
Coorg Institute of Technology, Ponnampet.

COORG INSTITUTE OF TECHNOLOGY


PONNAMPET

2013-2014

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

NETWORKS LABORATORY
Sub Code : 10CSL77
Note : Students are required to solve one problem from PART-A and one problem
from PART-B. Both the parts have equal weightage.
PART A Simulation Exercises
The following experiments shall be conducted using either NS228/OPNET or any other
simulators.
1. Simulate a three nodes point-to-point network with duplex links between them. Set
the queue size vary the bandwidth and find the number of packets dropped.
2. Simulate a four node point-to-point network, and connect the links as follows: n0-n2,
n1-n2 and n2-n3. Apply TCP agent between n0-n3 and UDP n1-n3. Apply relevant
applications over TCP and UDP agents changing the parameter and determine the
number of packets by TCP/UDP.
3. Simulate the transmission of ping messaged over a network topology consisting of 6
nodes and find the number of packets dropped due to congestion.
4. Simulate an Ethernet LAN using N-nodes(6-10), change error rate and data rate and
compare the throughput.
5. Simulate an Ethernet LAN using N nodes and set multiple traffic nodes and plot
congestion window for different source/destination.
6. Simulate simple ESS and with transmitting nodes in wire-less LAN by simulation and
determine the performance with respect to transmission of packets.
PART B
The following experiments shall be conducted using C/C++.
1. Write a program for error detecting code using CRC-CCITT (16-bits).
2. Write a program for distance vector algorithm to find suitable path for transmission.
3. Using TCP/IP sockets, write a client-server program to make client sending the file
name and the server to send back the contents of the requested file if present.
4. Implement the above program using as message queues or FIFOs as IPC channels.
5. Write a program for simple RSA algorithm to encrypt and decrypt the data.
6. Write a program for congestion control using Leaky bucket algorithm.

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

PART A Programs
1. Simulate a three-node point-to-point network with a duplex link between them. Set
the queue size and vary the bandwidth and find the number of packets dropped.
Topology:-

Sender:stcp p 2000 l 1024 1.0.1.2


Receiver:rtcp p 2000 l 1024
Parameters:Drop Packets and Collision Packets.
2. Simulate a four-node point-to-point network and connect the link as follows: Apply a
TCP agent between n0 to n3 and apply a UDP agent between n1 and n3. Apply
relevant applications over TCP and UDP agents changing the parameters and
determine the number of packets sent by two agents.
Topology:-

Sender:stcp p 3000 l 1024 1.0.1.3


stg u 1024 1.0.1.3
Receiver:rtcp p 3000 l 1024
rtg u 3000
Parameters:Throughput of incoming and outgoing Packets
Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

3. Simulate the transmission of ping messages over a network topology consisting of 6


nodes and find the number of packets dropped due to congestion.
Topology:-

Sender:stcp p 2000 l 1024 1.0.1.4


Receiver:rtcp p 2000 l 1024
Command Console:Goto tools-> simulation time and change Simulation time to 100. During run
mode, double click host 2 and then click command console. And execute the
following command.
ping 1.0.1.4
Parameters:Drop Packets and Collision Packets.

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

4. Simulate an Ethernet LAN using N nodes (6-10), change error rate and data rate and
compare throughput.
Topology:-

Sender:stcp p 2000 l 1024 1.0.1.4


Receiver:rtcp p 2000 l 1024
Double click on receiver link and change BER to 0.000001, Run Again.
Parameters:Throughput of outgoing Packets

5. Simulate an Ethernet LAN using N nodes and set multiple traffic nodes and plot
congestion window for different source/destination.
Topology:-

Sender:stcp p 2000 l 1024 1.0.1.4


Receiver:rtcp p 2000 l 1024
Parameters:Receiver side Collision Packets and Drop Packets

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

6. Simulate simple BSS and with transmitting nodes in wireless LAN by simulation and
determine the performance with respect to transmission of packets.
Topology:-

Click on access point. Goto wireless interface and tick on show transmission range
and then click OK.
Double click on Router -> Node Editor and then
Left stack -> throughput of Incoming packets
Right stack -> throughput of Outgoing packets
Select mobile hosts and access points then click on.
Tools -> WLAN mobile nodes-> WLAN Generate infrastructure.
Subnet ID:
Port number of router (2)
Gateway ID: IP address of router
Mobile Host 1
ttcp t u s p 3000 1.0.1.1
Mobile Host 1
ttcp t u s p 3001 1.0.1.1
Host(Receiver)
ttcp r u s p 3000
ttcp r u s p 3001
Run and then play to plot the graph.

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

Part B Programs
Experiment No 1
CRC
Problem Statement
Write a program for error detecting code using CRC-CCITT (16-bits).

Theory
CRC (Cyclic Redundancy Check) does error checking via polynomial division. Polynomial
division is based on Polynomial generator. The polynomial generator is specified by CCITT
(Communication Community of International Telephony and Telegraphy), thus, CCITT 16-bit
polynomial is given by
X16+ X12 + X5+X0
i.e., 10001000000100001 is the binary representation of polynomial generator in binary. Always
generator polynomial starts with 1.
Algorithm:1. Given a message bit string-M, append 0s to the end of it (the number of 0s is the same
as the highest degree of the generator polynomial), let M(x) be the polynomial
corresponding to M.
2. Divide M(x) by some agreed on polynomial G(x) (generator polynomial) and determine
the remainder R(x). This division is to be done using Modulo 2 Division.
3. Append the R(x) obtained to the M(x) to form a codeword, which is then transmitted
through a transmission medium.
4. At the receiver side, the received codeword is again divided using the same agreed
generator polynomial. The remainder then obtained R(x) must contain all 0s for a
successful transmission, if R(x) doesnt contains all 0s that indicates that the message
transmitted is subjected to error while transmitting.

Program
#include<stdio.h>
char
void
void
void
void

m[50],g[50],r[50],q[50],temp[50];
caltrans(int);
crc(int);
xor();
shiftl();

int main()
{
int N,i=0;
char ch,flag=0;
printf("\nEnter the Message Frame bits:\t");
while((ch=getc(stdin))!='\n')
m[i++]=ch;
N=i; // N is the length of message bits
for(i=0;i<16;i++)
m[N++]='0';
m[N]='\0';
printf("Message after appending 16 zeros:%s",m);
for(i=0;i<=16;i++)
g[i]='0';
g[0]=g[4]=g[11]=g[16]='1';
g[17]='\0';
printf("\nGenerator Polynomial: %s\n",g);
crc(N);
printf("\n\nQuotient: %s",q);
Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

caltrans(N);
printf("\nTransmitted Frame: %s",m);
printf("\nEnter Transmitted Frame:");
scanf("%s",m);
printf("CRC checking\n");
crc(N);
printf("\n\nLast Remainder:%s",r);
for(i=0;i<16;i++)
if(r[i]!='0')
flag=1;
else
continue;
if(flag==1)
printf("\nError during transmission\n");
else
printf("\n\nReceived frame is correct\n");
}
void crc(int n)
{
int i,j;
for(i=0;i<n;i++)
temp[i]=m[i];
for(i=0;i<16;i++)
r[i]=m[i];
printf("\nIntermediate Remainder's\n");
for(i=0;i<n-16;i++)
{
if(r[0]=='1')
{
q[i]='1';
xor();
}
else
{
q[i]='0';
shiftl();
}
r[16]=m[17+i];
r[17]='\0';
printf("\nRemainder %d:%s",i+1,r);
for(j=0;j<=17;j++)
temp[j]=r[j];
}
q[n-16]='\0';
}
// To perform Xor Operation
void xor()
{
int i,j;
for(i=1;i<=16;i++)
r[i-1]=((int)temp[i]-48)^((int)g[i]-48)+48;
}
// To shift the bits left by one bit
void shiftl()
{
int i;
for(i=1;i<=16;i++)
r[i-1]=r[i];
}

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

// To construct the codeword


void caltrans(int n)
{
int i,k=0;
for(i=n-16;i<n;i++)
m[i]=((int)m[i]-48)^((int)r[k++]-48)+48;
m[i]='\0';
}

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

Experiment No 2
Distance Vector Routing
Problem Statement
Write a program for distance vector algorithm to find suitable path for transmission.

Theory
Routing algorithm is a part of network layer software which is responsible for deciding which
output line an incoming packet should be transmitted on.
Routing algorithms can be grouped into two major classes: adaptive and nonadaptive.
Nonadaptive algorithms do not base their routing decisions on measurement or estimates of
current traffic and topology. Instead, the choice of route to use to get from I to J (for all I and J) is
compute in advance, offline, and downloaded to the routers when the network ids booted. This
procedure is sometime called static routing.
Adaptive algorithms, in contrast, change their routing decisions to reflect changes in the
topology, and usually the traffic as well. Adaptive algorithms differ in where they get information
(e.g., locally, from adjacent routers, or from all routers), when they change the routes (e.g., every
T sec, when the load changes, or when the topology changes), and what metric is used for
optimization (e.g., distance, number of hops, or estimated transit time).
Two algorithms in particular, distance vector routing and link state routing are the most
popular. Distance vector routing algorithms operate by having each router maintain a table (i.e.,
vector) giving the best known distance to each destination and which line to get there. These
tables are updated by exchanging information with the neighbors.
The distance vector routing algorithm is sometimes called by other names, including the
distributed Bellman-Ford routing algorithm and the Ford-Fulkerson algorithm, after the
researchers who developed it (Bellman, 1957; and Ford and Fulkerson, 1962). It was the original
ARPANET routing algorithm and was also used in the Internet under the RIP and in early
versions of DECnet and Novells IPX. AppleTalk and Cisco routers use improved distance vector
protocols.
In distance vector routing, each router maintains a routing table indexed by, and containing
one entry for, each router in subnet. This entry contains two parts: the preferred out going line to
use for that destination, and an estimate of the time or distance to that destination. The metric
used might be number of hops, time delay in milliseconds, total number of packets queued along
the path, or something similar.
The router is assumed to know the distance to each of its neighbor. If the metric is hops, the
distance is just one hop. If the metric is queue length, the router simply examines each queue. If
the metric is delay, the router can measure it directly with special ECHO packets hat the receiver
just time stamps and sends back as fast as possible.

The Count to Infinity Problem.


Distance vector routing algorithm reacts rapidly to good news, but leisurely to bad news.
Consider a router whose best route to destination X is large. If on the next exchange neighbor A
suddenly reports a short delay to X, the router just switches over to using the line to A to send
traffic to X. In one vector exchange, the good news is processed.
To see how fast good news propagates, consider the five node (linear) subnet of following
figure, where the delay metric is the number of hops. Suppose A is down initially and all the other
routers know this. In other words, they have all recorded the delay to A as infinity.

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

A
B
C
D
E
_____ _____ _____ _____

1
1
1
1

2
2
2

3
3

A
B
C
D
E
_____ _____ _____ _____
Initially
After 1 exchange
After 2 exchange
After 3 exchange
After 4 exchange

1
3
3
5
5
7
7

2
2
3
3
6
6
8
:

3
3
3
5
5
7
7

4
4
4
4
6
6
8

Initially
After 1 exchange
After 2 exchange
After 3 exchange
After 4 exchange
After 5 exchange
After 6 exchange

Many ad hoc solutions to the count to infinity problem have been proposed in the literature,
each one more complicated and less useful than the one before it. The split horizon algorithm
works the same way as distance vector routing, except that the distance to X is not reported on
line that packets for X are sent on (actually, it is reported as infinity). In the initial state of right
figure, for example, C tells D the truth about distance to A but C tells B that its distance to A is
infinite. Similarly, D tells the truth to E but lies to C.
In computer communication theory relating to packet-switched networks, a distance-vector
routing protocol is one of the two major classes of routing protocols, the other major class being
the link-state protocol. Distance-vector routing protocols use the BellmanFord algorithm, Ford
Fulkerson algorithm, or DUAL FSM (in the case of Cisco Systems's protocols) to calculate paths.
A distance-vector routing protocol requires that a router informs its neighbours of topology
changes periodically. Compared to link-state protocols, which require a router to inform all the
nodes in a network of topology changes, distance-vector routing protocols have less
computational complexity and message overhead.
The term distance vector refers to the fact that the protocol manipulates vectors (arrays) of
distances to other nodes in the network.
Examples of distance-vector routing protocols include RIPv1 and RIPv2 and IGRP.

Method:
Routers using distance-vector protocol do not have knowledge of the entire path to a destination.
Instead they use two methods:
1. Direction in which router or exit interface a packet should be forwarded.
2. Distance from its destination
Distance-vector protocols are based on calculating the direction and distance to any link in a
network. "Direction" usually means the next hop address and the exit interface. "Distance" is a
measure of the cost to reach a certain node. The least cost route between any two nodes is the
route with minimum distance. Each node maintains a vector (table) of minimum distance to every
node. The cost of reaching a destination is calculated using various route metrics. RIP uses the
hop count of the destination whereas IGRP takes into account other information such as node
delay and available bandwidth.
Updates are performed periodically in a distance-vector protocol where all or part of a router's
routing table is sent to all its neighbors that are configured to use the same distance-vector routing
protocol. RIP supports cross-platform distance vector routing whereas IGRP is a Cisco Systems
proprietary distance vector routing protocol. Once a router has this information it is able to amend
its own routing table to reflect the changes and then inform its neighbors of the changes. This
process has been described as routing by rumor because routers are relying on the information
Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

10

they receive from other routers and cannot determine if the information is actually valid and true.
There are a number of features which can be used to help with instability and inaccurate routing
information.

Program
#include<stdio.h>
#define INFINITE 999
#define NO_HOP 1000
struct snode
{
int to[10];
int cost[10];
int next[10];
int adjacent[10];
};
struct snode node[10];
int n, counter;
void
void
void
void
void

initializenodes();
inputnodes();
updatenodes(int,int);
findpath(int,int);
display(int);

int main()
{
int i,j,k,ch=0;
do
{
printf("\nEnter the No of nodes (Between 1-10): ");
scanf("%d",&n);
}while(n>10||n<=0);
initializenodes();
inputnodes();
printf("\nThe Configuration of nodes after initialization is as
follows:\n");
for(i=0;i<n;i++)
display(i);
counter = 1;
while(counter>0)
{
counter = 0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i!=j)
updatenodes(i,j);
}

for(;;)
{
printf("\n\nPress any key to Continue......\n");
printf("\n\n\t\tMENU\n");
printf("1.Confugration of nodes after path computation\n");
printf("2.Routing table of a node\n");

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

11

printf("3.Find Shortest path between two nodes\n");


printf("4.EXIT\n");
printf("Enter Your Option:");
scanf("%d",&ch);
switch(ch)
{
case 1: for(i=0;i<n;i++)
display(i);
printf("\n");
break;
case 2: do
{
printf("\nEnter the node number: ");
scanf("%d", &i);
}while(i<0 || i>n);
display(i-1);
printf("\n");
break;
case 3: do
{
printf("\nEnter the two nodes: ");
scanf("%d %d", &i, &j);
}while((i<=0 || i>n)||(j<=0 || j>n)||(i==j));
printf("\nThe most suitable route from node %d
to %d \n",i,j);
findpath(i,j);
printf("\nThe total cost of this route is %d
\n",node[i-1].cost[j-1]);
break;
case 4: return 0;
}
}
}
void initializenodes()
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
node[i].to[j] = j+1;
node[i].cost[j] = 0;
node[i].next[j] = NO_HOP;
node[i].adjacent[j] = 0;
}
}
}
void inputnodes()
{
int i,j;
for(i=0;i<n;i++)
{
printf("\nEnter the Distances from node %d to other
nodes:\n",i+1);

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

12

printf("Enter 999 if there is no direct link\n");


for(j=0;j<n;j++)
{
if(i!=j)
{
do
{
printf("Enter the Distance to node
%d:",j+1);
scanf("%d",&node[i].cost[j]);
}while(node[i].cost[j]<0 ||
node[i].cost[j]>INFINITE);
if(node[i].cost[j] < INFINITE)
{
node[i].next[j] = j+1;
node[i].adjacent[j] = 1;
}
}
}
}
}
void updatenodes(int i, int j)
{
int k, newcost = INFINITE;
for(k=0;k<n;k++)
{
if(k!=j && node[i].adjacent[k] == 1)
{
newcost = node[i].cost[k] + node[k].cost[j];
if(newcost < node[i].cost[j])
{
node[i].next[j] = k+1;
node[i].next[j] = node[i].next[k];
node[i].cost[j] = newcost;
counter++;
}
}
}
}
void findpath(int x, int y)
{
printf("%d--------->",x);
if(node[x-1].next[y-1] != y)
findpath(node[x-1].next[y-1],y);
if(node[x-1].next[y-1] == y)
printf("%d",y);
}
void display(int i)
{
int j;
printf("\n\n The Routing table for node no %d is as follows:
",i+1);
printf("\n\n\tDestination\tDistance\tNext Hop");
for(j=0;j<n;j++)
{
if(i == j)
printf("\n\t\t%d\t\t%d\t\tNo
Hop",node[i].to[j],node[i].cost[j]);

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

13

else if(node[i].next[j] == NO_HOP)


printf("\n\t\t%d\t\tNo Link\t\tNo Hop",node[i].to[j]);
else
printf("\n\t\t%d\t\t%d\t\t%d",node[i].to[j],node[i].cost[j],node[i].next
[j]);
}
}

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

14

Experiment No 3
TCP Socket
Problem Statement
Using TCP/IP sockets, write a client-server program to make client sending the file name and the

server to send back the contents of the requested file if present.


Algorithm (Client Side)
1.
2.
3.
4.
5.
6.

Start.
Create a socket using socket() system call.
Connect the socket to the address of the server using connect() system call.
Send the filename of required file using send() system call.
Read the contents of the file sent by server by recv() system call.
Stop.

Algorithm (Server Side)


1.
2.
3.
4.
5.
6.
7.

Start.
Create a socket using socket() system call.
Bind the socket to an address using bind() system call.
Listen to the connection using listen() system call.
accept connection using accept()
Receive filename and transfer contents of file with client.
Stop.

Program
/*Server*/
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<netdb.h>
#include<stdio.h>
void error(char *msg)
{
printf("%s",msg);
exit(0);
}
main(int argc,char *argv[])
{
FILE *fp;
struct sockaddr_in ser,cli;
int sock,s,cn,pn,n;
char d[50],a[50];
if(argc<2)
error("ERROR:no port provided");
s=socket(AF_INET,SOCK_STREAM,0);
if(s<0)
error("ERROR in opening socket");
bzero((char *)&ser,sizeof(ser));
pn=atoi(argv[1]);
ser.sin_family=AF_INET;
ser.sin_port=htons(pn);
ser.sin_addr.s_addr=INADDR_ANY;
cn=bind(s,(struct sockaddr *)&ser,sizeof(ser));
if(cn<0)
error("error in binding");
cn=listen(s,5);
Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

15

n=sizeof(cli);
sock=accept(s,(struct sockaddr *)&cli,&n);
if(sock<0)
error("error in socket opening");
bzero(d,50);
cn=recv(sock,d,sizeof(d),0);
if(cn<0)
error("error in reading socket");
d[cn]='\0';
fp=fopen(d,"r");
if(fp<=0)
error("error in opening the file");
while(fgets(a,50,fp))
{
cn=send(sock,a,sizeof(a),0);
if(cn<0)
error("error in sendind data");
}
close(sock);
close(s);
}

/*Client*/
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<netdb.h>
#include<stdio.h>
void error(char *msg){
printf("%s",msg);
exit(0);
}
main(int argc,char *argv[]){
struct sockaddr_in ser;
int s,cn,pn;
char a[50],d[50];
if(argc<3)
error("ERROR in input");
pn=atoi(argv[2]);
s=socket(AF_INET,SOCK_STREAM,0);
if(s<0)
error("ERROR in opening socket");
bzero((char *)&ser,sizeof(ser));
ser.sin_family=AF_INET;
ser.sin_port=htons(pn);
ser.sin_addr.s_addr=inet_addr(argv[1]);
cn=connect(s,(struct sockaddr *)&ser, sizeof(ser));
if(cn<0)
error("ERROR in connecting");
printf("Enter the file name:");
scanf("%s",a);
cn=send(s,a,sizeof(a),0);
if(cn<0)
error("ERROR in sending");
while((cn=recv(s,d,sizeof(d),0))>0) {
printf("%s",d); }
close(s);
}

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

16

Experiment No 4
FIFO IPC
Problem Statement
Implement the above program using as message queues or FIFO as IPC channels.

Algorithm (Client Side)


1.
2.
3.
4.
5.
6.

Start.
Open well known server FIFO in write mode.
Write the pathname of the file in this FIFO and send the request.
Open the client specified FIFO in read mode and wait for reply.
When the contents of the file are available in FIFO, display it on the terminal
Stop.

Algorithm (Server Side)


1.
2.
3.
4.

Start.
Create a well known FIFO using mkfifo()
Open FIFO in read only mode to accept request from clients.
When client opens the other end of FIFO in write only mode, then read the contents and
store it in buffer.
5. Create another FIFO in write mode to send replies.
6. Open the requested file by the client and write the contents into the client specified FIFO
and terminate the connection.
7. Stop.

Program
/*Server*/
#include<unistd.h>
#include<string.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<fcntl.h>
#define FIFO1 "fifo1"
#define FIFO2 "fifo2"
main()
{
FILE *fp;
char p[100],f[100],c[3000];
int n,fd,fd2;
mknod(FIFO1,S_IFIFO|0666,0);
mknod(FIFO2,S_IFIFO|0666,0);
printf("server online");
fd=open(FIFO1,O_RDONLY);
n=read(fd,p,100);
p[n]='\0';
fp=fopen(p,"r");
fd2=open(FIFO2,O_WRONLY);
while((fgets(f,100,fp))!=NULL)
strcat(c,f);
write(fd2,c,strlen(c));
return 0;
}

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

17

/*Client*/
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#define FIFO1 "fifo1"
#define FIFO2 "fifo2"
main()
{
FILE *fp;
char p[100],c[3000],f[100];
int n,fd1,fd2;
mknod(FIFO1,S_IFIFO|0666,0);
mknod(FIFO2,S_IFIFO|0666,0);
fd1=open(FIFO1,O_WRONLY);
printf("Enter the filename:");
scanf("%s",p);
write(fd1,p,strlen(p));
printf("File contents are:");
fd2=open(FIFO2,O_RDONLY);
read(fd2,c,3000);
printf("%s",c);
}

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

18

Experiment No 5
RSA Algorithm
Problem Statement
Write a program for simple RSA algorithm to encrypt and decrypt the data.

Theory
Cryptography has a long and colorful history. The message to be encrypted, known as the
plaintext, are transformed by a function that is parameterized by a key. The output of the
encryption process, known as the ciphertext, is then transmitted, often by messenger or radio. The
enemy, or intruder, hears and accurately copies down the complete ciphertext. However, unlike
the intended recipient, he does not know the decryption key and so cannot decrypt the ciphertext
easily. The art of breaking ciphers is called cryptanalysis the art of devising ciphers
(cryptography) and breaking them (cryptanalysis) is collectively known as cryptology.
There are several ways of classifying cryptographic algorithms. They are generally categorized
based on the number of keys that are employed for encryption and decryption, and further defined
by their application and use. The three types of algorithms are as follows:
1. Secret Key Cryptography (SKC): Uses a single key for both encryption and decryption. It is
also known as symmetric cryptography.
2. Public Key Cryptography (PKC): Uses one key for encryption and another for decryption. It
is also known as asymmetric cryptography.
3. Hash Functions: Uses a mathematical transformation to irreversibly "encrypt" information
Public-key cryptography has been said to be the most significant new development in
cryptography. Modern PKC was first described publicly by Stanford University professor Martin
Hellman and graduate student Whitfield Diffie in 1976. Their paper described a two-key crypto
system in which two parties could engage in a secure communication over a non-secure
communications channel without having to share a secret key.
Generic PKC employs two keys that are mathematically related although knowledge of one
key does not allow someone to easily determine the other key. One key is used to encrypt the
plaintext and the other key is used to decrypt the ciphertext. The important point here is that it
does not matter which key is applied first, but that both keys are required for the process to work.
Because pair of keys is required, this approach is also called asymmetric cryptography.
In PKC, one of the keys is designated the public key and may be advertised as widely as the
owner wants. The other key is designated the private key and is never revealed to another party. It
is straight forward to send messages under this scheme.
The RSA algorithm is named after Ron Rivest, Adi Shamir and Len Adleman, who invented it
in 1977. The RSA algorithm can be used for both public key encryption and digital signatures. Its
security is based on the difficulty of factoring large integers.

Algorithm
1.
2.
3.
4.
5.
6.

Generate two large random primes, p and q, of approximately equal size.


Compute n = p x q
Compute Z = (p-1) x (q-1).
Choose an integer E, 1 < E < Z, such that GCD (E, Z) = 1
Compute the secret exponent D, 1 < D < Z, such that E x D 1 (mod Z)
The public key is (n, E) and the private key is (n, D).

Note: The values of P, Q, and Z should also be kept secret.


The message is encrypted using public key and decrypted using private key.

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

19

An example of RSA encryption


1. Select primes p=11, q=3.
2. N = p x q = 11 x 3 = 33
Z = (p-1) x (q-1) = 10 x 2 = 20
3. Lets choose E=3
Check GCD(E, p-1) = GCD(3, 10) = 1 (i.e. 3 and 10 have no common factors except 1),
and check GCD(E, q-1) = GCD(3, 2) = 1
therefore GCD(E, Z) = GCD(3, 20) = 1
4. Compute D such that E x D 1 (mod Z)
compute D = E^-1 mod Z = 3^-1 mod 20
find a value for D such that Z divides ((E x D)-1)
find D such that 20 divides 3D-1.
Simple testing (D = 1, 2, ...) gives D = 7
Check: (E x D)-1 = 3.7 - 1 = 20, which is divisible by Z.
5. Public key = (n, E) = (33, 3)
Private key = (n, D) = (33, 7).
Now say we want to encrypt the message m = 7,
Cipher code = M^E mod n
= 7^3 mod 33
= 343 mod 33
= 13.
Hence the ciphertext c = 13.
To check decryption we compute Message = C^D mod n
= 13^7 mod 33
= 7.
Note that we don't have to calculate the full value of 13 to the power 7 here. We can make use
of the fact that a = bc mod n = (b mod n).(c mod n) mod n so we can break down a potentially
large number into its components and combine the results of easier, smaller calculations to
calculate the final value.

Program
#include<stdio.h>
#include<string.h>
#include<math.h>
int mul(unsigned int x, unsigned int y, unsigned int n)
{
unsigned long int k=1;
int j;
for(j=1;j<=y;j++)
k = (k*x) % n;
return (unsigned int) k;
}
void main()
{
int i;
char msg[100];
unsigned int pt[100], ct[100], n, d, e;
printf("Enter the Message:\t");
gets(msg);
for(i=0; i<strlen(msg); i++)
{
pt[i] = msg[i];
}
n = 253; // p=23*q=11

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

20

d = 17;
e = 13;
for(i=0;i<strlen(msg);i++)
{printf("%u",pt[i]);}
for(i= 0; i<strlen(msg); i++)
{
ct[i] = mul(pt[i],e,n);
}
printf("\n CT = ");
for(i= 0; i<strlen(msg); i++)
printf("%d",ct[i]);
for(i= 0; i<strlen(msg); i++)
{
pt[i] = mul(ct[i],d,n);
}
printf("\n PT = ");
for(i= 0; i<strlen(msg); i++)
printf("%c",pt[i]);
printf("\n");
}

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

21

Experiment No 6
Leaky Bucket
Problem Statement
Write a program for congestion control using Leaky bucket algorithm.

Theory
The congesting control algorithms are basically divided into two groups: open loop and closed
loop. Open loop solutions attempt to solve the problem by good design, in essence, to make sure it
does not occur in the first place. Once the system is up and running, midcourse corrections are not
made. Open loop algorithms are further divided into ones that act at source versus ones that act at
the destination.

In contrast, closed loop solutions are based on the concept of a feedback loop if there is any
congestion. Closed loop algorithms are also divided into two sub categories: explicit feedback and
implicit feedback. In explicit feedback algorithms, packets are sent back from the point of
congestion to warn the source. In implicit algorithm, the source deduces the existence of
congestion by making local observation, such as the time needed for acknowledgment to come
back.
The presence of congestion means that the load is (temporarily) greater than the resources (in
part of the system) can handle. For subnets that use virtual circuits internally, these methods can
be used at the network layer.
Another open loop method to help manage congestion is forcing the packet to be transmitted at
a more predictable rate. This approach to congestion management is widely used in ATM
networks and is called traffic shaping.
The other method is the leaky bucket algorithm. Each host is connected to the network by an
interface containing a leaky bucket, that is, a finite internal queue. If a packet arrives at the queue
when it is full, the packet is discarded. In other words, if one or more process are already queued,
the new packet is unceremoniously discarded. This arrangement can be built into the hardware
interface or simulate d by the host operating system. In fact it is nothing other than a single server
queuing system with constant service time.
The host is allowed to put one packet per clock tick onto the network. This mechanism turns
an uneven flow of packet from the user process inside the host into an even flow of packet onto
the network, smoothing out bursts and greatly reducing the chances of congestion.

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

22

Program
#include<stdio.h>
#include<stdlib.h>
int bucketsize;
void bktinput(int a, int b)
{
if(a>bucketsize)
printf("\n Bucket is Overflow \n");
else
{
while(a>=b)
{
printf("\n %d Bytes Outputed\n",b);
a = a-b;
}
if(a>0)
printf("\nLast %d bytes sent\n",a);
printf("\nBucket output successful\n");
}
}
void main()
{
int op, pktsize, i;
printf("\nEnter the Bucket Size:\t");
scanf("%d",&bucketsize);
printf("\n Enter input rate:\t");
scanf("%d", &op);
for(i=0; i<=5; i++)
{
pktsize = random()%600;
printf("\n Packet No %d, Packet Size %d",i,pktsize);
bktinput(pktsize,op);
}
}

Prepared by Mr.Navile Nageshwara Naveen, Assistant Professor, Dept. of CSE, C.I.T, Ponnampet.

23

Вам также может понравиться