0793843d-4e09-4f2b-baeb-0cf9d33c9c8b
0793843d-4e09-4f2b-baeb-0cf9d33c9c8b
List of Experiments
1. Implement the data link layer framing methods such as character, character-stuffing and bit
stuffing.
2. Write a program to compute CRC code for the polynomials CRC-12, CRC-16 and CRC CCIP
3. Develop a simple data link layer that performs the flow control using the sliding window protocol,
5. Take an example subnet of hosts and obtain a broadcast tree for the subnet.
6. Implement distance vector routing algorithm for obtaining routing tables at each node.
10. Wireshark
i. NS2 Simulator-Introduction
For protocols that require a fixed-size frame, bits are sometimes inserted to make the frame
size equal to this set size.
For protocols that required a continuous stream of data, zero bits are sometimes inserted to
ensurethat the stream is not broken.
import java.util.*;
import java.lang.*;
import java.io.*;
public class
Bitstuffing
InputStreamReader(System.in));String str=br.readLine();
String res=new
String();int count=0;
for(int i=0;i<str.length();i++)
if(str.charAt(i)!='1'&&str.charAt(i)!='0')
return;
if(str.charAt(i)=='1')
count++; res=res+str.
charAt(i);
else
res=res+str.charAt(i)
;count=0;
if(count==5)
res=res+'0'
;count=0;
System.out.println("the Bitstuffing
message011111101
message10110
the Bitstuffing
message:10110
One the bits are stuffed and sent by the sender the receiver receives the msg.The
receiver has to decode it. The algorithm used is destuffin algorithm. It removes a bit when
consequtive 5 ones appear.
1. Input the stuffed sequence.2. Remove start of frame from sequence.3. For every bit in input,a.
Append bit to output sequence. b. Is bit a 1?Yes: Increment count. If count is 5, remove next
bit (which is0) and reset count. No: Set count to 0.4. Remove end of frame bits from sequence.
import java.util.*;
import
java.lang.*;
import java.io.*;
InputStreamReader(System.in));String str=br.readLine();
String res=new
String();int count=0;
for(int i=8;i<str.length()-8;i++)
System.out.println(str.charAt(i));
if(str.charAt(i)!='1'&&str.charAt(i)!='0')
return;
if(str.charAt(i)=='1')
count++; res=res+str.
charAt(i);
else
res=res+str.charAt(i)
;count=0;
if(count==5)
i++;
count=0;
DESCRIPTION: In byte stuffing (or character stuffing), a special byte is added to the data section of
the frame when there is a character with the same pattern as the flag. The data section is stuffed
with an extrabyte. This byte is usually called the escape character (ESC), which has a predefined bit
pattern. Whenever the receiver encounters the ESC character, it removes it from the data section
and treats the next character as data, not a delimiting flag.
import java.io.*;
import java.util.*;
import
java.lang.*;
System.out.println("enter message");
InputStreamReader(System.in));String str=br.readLine();
System.out.println("enter starting
flag");char sf=br.readLine().charAt(0);
System.out.println("enter ending
for(int i=0;i<str.length();i++)
System.out.println(“\n”);
Computer Networks Lab Page 13
Computer Networks Lab Page 14
System.out.println(str.charAt(i));
if(str.charAt(i)==sf)
res=res+str.charAt(i)+sf;
else
if(str.charAt(i)==e
f)
res=res+str.charAt(i)+ef;
else
res=res+str.charAt(i);
res=sf+res+ef;
enter
message
flagb
is:cnoslab
is:cnoslaabb
stuffing:acnoslaabbb
enter
message
aceec
enter starting
flaga
enter ending
is:aceec
is:aacceecc
stuffing:aaacceeccc
DESCRIPTION:
import java.io.*;
import java.util.*;
import
java.lang.*;
System.out.println("enter message");
InputStreamReader(System.in));String str=br.readLine();
String res=new
String();char
sf=str.charAt(0);
char
ef=str.charAt(str.length()-1);
for(int i=1;i<str.length()-1;i++)
res=res+str.charAt(i);
else if(str.charAt(i)==ef)
++i;
res=res+str.charAt(i);
else
res=res+str.charAt(i)
enter
message
acnoslaabbb
cnoslab
enter message
aaacceecc
c the string
DESCRIPTION:
1. Let r be the degree of G(x). Append r zero bits to the low-order end of theframe, so it now
contains m+rbits and corresponds to the polynomial x^r M(x).
2. Divide the bit string corresponding to G(X) into the bit string corresponding to x^r M(x) using
modulo-2division.
3. Subtract the remainder (which is always r or fewer bits) from the bit stringcorresponding to
x^r M(x) using modulo-2 subtraction. The result is the checksummed frame to be transmitted.
Call its polynomialT(x).The CRC-CCITT polynomial is x^16+ x^12+ x^5+ 1
import
java.lang.*;
import java.util.*;
import java.io.*;
class CRC
CRCFN obj=new
CRCFN();obj.send();
obj.receive();
class CRCFN
int n,h,l,dl;
char om[]=new
Computer Networks Lab Page 24
char[50];
char[50];char r[]=new
String tempdiv=new
IOException
System.out.println("enter 12 for crc -12 \n 160 for crc 16\n 161 for
crc-16-cit\n");n=Integer.parseInt(br.readLine());
if(!((n==12||(n==160)||(n==161))))
System.out.println("invalid");
System.exit(0);
System.out.println("\nat sender
side");System.out.println(" ");
str1=br.readLine();
om=str1.toCharArray();
for(int
System.out.print(om[i]);
;str2+=str1;
if(n==12)
poly+=("1100000001111
");
str2+=("000000000000");
else if(n==160)
str2+=("000000000000");
else if(n==161)
str2+=("0000000000000000");
else
System.exit(0);
dv=str2.toCharArray();
p=poly.toCharArray();
t=tempdiv.toCharArray(
);l=p.length;
dl=dv.length;
System.out.println("\naugmented didvdend\n");
for(int i=0;i<dv.length;i++)
System.out.print(dv[i]);
System.out.println("\n");
System.out.println("\ngenerator\n"
);for(int i=0;i<p.length;i++)
System.out.print(p[i]);
System.out.println("\n");
System.out.println("\ntemp
data\n");for(int i=0;i<t.length;i++)
System.out.print(t[i]);
modulo-2");for(i=0;i<h;i++)
if(dv[i]=='0')
if(dv[j]==t[k])
dv[j]='0';
else
dv[j]='1';
else if(dv[i]=='1')
for(j=i,k=0;j<(l+i)&&k<l;j++,k++)
if(dv[j]==p[k])
dv[j]='0';
else
dv[j]='1';
else if((dv[i]!='0')||(dv[i]!='1'))
System.out.println("invalid frame");
System.exit(0);
for(z=i;z<(l+i);z++)
for(i=h,j=0;i<=(dl-1);i++,j++)
r[j]=dv[i];
System.out.println("\nthe reminder
is\n"+rstr);str1+=rstr;
//char
om[50],dv[50],r[20];char
r[]=new char[50];
int i,j,k,z,c=0;
received:\n");omstr=br.readLine();
om=omstr.toCharArray(
for(i=0;i<om.length;i++)
//strcpy(dv,om);
is:\n");for(i=0;i<=h-1;i++)
if(dv[i]=='0')
for(j=i,k=0;j<(l+i)&&k<l;j++,k++)
if(dv[j]==t[k])
dv[j]='0';
else
dv[j]='1';
else if(dv[i]=='1')
for(j=i,k=0;j<(l+i)&&k<l;j++,k++)
if(dv[j]==p[k])
dv[j]='0';
else
dv[j]='1';
System.out.println("invalid frame\n");
System.exit(0);
for(z=i;z<13+i;z++)
System.out.print(dv[z]);
for(i=h,j=0;i<=(dl-1);i++,j++)
r[j]=dv[i];
if(r[j]=='0')
c++;
//r[j]='\0';
is\n");for(int q=0;q<r.length;q++)
System.out.print(r[q]);
System.out.println("\n\n\n"+c);
if(c==l-1)
//om[h]='\0';
q=0;q<om.length;q++)
System.out.print(om[q]);
\n");for(int x=0;x<h;x++)
System.out.print(om[x]);
else
enter 12 for
crc-12160 for crc-
16
161 for crc-16-ccitt
12
temp data
the remainder
is
100010011001
at the receiver
.........................
the remainder is
000000000000012
the frame received is error free:
enter crc to be
usedenter 12 for
crc-12 160 for
crc-16
161 for crc-16-ccitt
32
Invalid
#include<stdio.h
>
#include<conio.h
>void main()
char
sender[50],receiver[50];int
i,winsize;
printf("\n ENTER THE WINDOWS SIZE : ");
scanf("%d",&winsize);
printf("\n SENDER WINDOW IS EXPANDED TO STORE MESSAGE OR
WINDOW \n");printf("\n ENTER THE DATA TO BE SENT: ");
fflush(stdin);
gets(sender);
for(i=0;i<winsize;i+
+)
receiver[i]=sender[i]
;receiver[i]=NULL;
printf("\n MESSAGE SEND BY THE SENDER:\n");
puts(sender);
printf("\n WINDOW SIZE OF RECEIVER IS
EXPANDED\n");printf("\n ACKNOWLEDGEMENT
FROM RECEIVER \n");
Computer Networks Lab Page 42
for(i=0;i<winsize;i++)
;printf("\n ACK:%d",i);
printf("\n MESSAGE RECEIVED BY RECEIVER IS : ");
puts(receiver);
DESCRIPTION: Let the node at which we are starting be called the initial node. Let the distance of
node Y be the distance from the initial node to Y. Dijkstra's algorithm will assign some initial
distance values and will try to improve them step by step.
1.Assign to every node a tentative distance value: set it to zero for our initial node and to infinity
for all other nodes.
2.Mark all nodes unvisited. Set the initial node as current. Create a set of the unvisited nodes
called the consisting of all the nodes except the initial node.
3.For the current node, consider all of its unvisited neighbors and calculate their
distances. For example, if the current node A is marked with a tentative distance of 6, and the
edge connecting it with a neighbor B has length 2, then the distance to B (through A) will be
6+2=8. If this distance is less than the previously recorded tentative distance of B, then
overwrite that distance. Even though a neighbor has been examined, it is not marked as
"visited" at this time, and it remainsin the .
4.When we are done considering all of the neighbors of the current node, mark the current node
as visited and remove it from the . A visited node will never be checked again; its
distancerecorded now is final and minimal.
5.If the destination node has been marked visited (when planning a route between two specific
nodes) or if the smallest tentative distance among the nodes in the is infinity
(when planning a complete traversal), then stop. The algorithm has finished.
6.Set the unvisited node marked with the smallest tentative distance as the next "current node"
and go back to step
Import java.io.*;
Import
java.lang.*;Import
java.util.*; class
STATES
Int l;
Int p;
Int label;
//state
DIJ
InputStreamReader(System.in));int INF=1000;
int x,y;
STATES state[]=new
STATES[10];
for(i=0;i<10;i++)
System.out.println("Enter no.of
nodes");
n=Integer.parseInt(br.readLine());
for(i=1;i<=n;i++)
j=Integer.parseInt(br.readLine());
for(k=0;k<j;k++)
dist[i][temp1]=dest;
for(j=1;j<=n;j++)
System.out.print("\t
dist[i][j]==0)
System.out.print("\t "+99);
else
System.out.print("\t "+dist[i][j]);
System.out.println("\n");
t=Integer.parseInt(br.readLine());
System.out.println("Enter ending
node");
s=Integer.parseInt(br.readLine());
for(i=1;i<=n;i++)
state[i].l=INF
state[t].l=0;
state[t].label=1
;k=t;
do
for(i=1;i<=n;i++)
if(state[k].l+dist[k][i]<state[i].l)
state[i].p=k;
state[i].l=state[k].l+dist[k][i];
k=0;
min=INF;
for(i=1;i<=n;i++
state[k].label=1;
i=0;
k=s;
is:");x=0;
do
path[i]=k+1
;route[x]=k;
x++;
i++;
k=state[k].p;
}while(k>0);
for(y=x-1;y>=0;y--
System.out.print(route[y]+"->");
enter no. of
13
enter Neighbour
number ,Distance2
22
enter Neighbour
number ,Distance1
33
enter Neighbour
number ,Distance1
42
enter Neighbour
number ,Distance3
52
enter Neighbour
number ,Distance1
matrix
0 2 1 99 3
2 0 2 99 99
1 2 0 2 99
99 99 2 0 2
enter starting
node1
enter ending
node4
Shortest Path
is:1->3->4->
Minimum cost is 3
enter no.of
nodes4
12
enter Neighbour
number ,Distance3
24
enter Neighbour
number ,Distance1
31
enter Neighbour
number ,Distance4
44
enter Neighbour
number ,Distance3
matrix
0 99 2 2
99 99 0 1
2 1 1 0
enter starting
node1
enter ending
node2
Shortest Path
is:1->4->2->
Minimum cost is 3
DESCRIPTION: Distance Vector means that Routers are advertised as vector of distance and
Direction. Direction is simply next hop address and exit interface and Distance means hop count.
Routers using distance vector protocol do not have knowledge of the entire path to a destination.
Instead DV uses two methods:
1.Direction in which router or exit interface a packet should be forwarded.
2.Distance from its destination.
In distance vector routing, the least cost route between any two nodes is the route with minimum
distance. In this protocol, as the name implies, each node maintains a vector (table) of minimum
distance to every node. As the name suggests the DV protocol is based on calculating the direction
and distance to any link in a network. 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 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.
#include<stdio.h>
int dist[50][50],temp[50][50],n,i,j,k,x;
void dvr();
int main()
scanf("%d",&dist[i][j]);
dist[i][i]=0;
temp[i][j]=j;
printf("\n");
dvr();
printf("To enter new cost between the nodes enter value of i &j:");
scanf("%d",&i);
scanf("%d",&j);
printf("enter the new
cost");scanf("%d",&x);
dist[i][j]=x;
printf("After
update\n\n");dvr();
return 0;
void dvr()
for(i=0;i<n;i++)
if ((temp[i][j]+1)==(j+1))
printf("\n%d\t %d\t --",j+1,dist[i][j]);
else
printf("\n%d\t %d\t %d",j+1,dist[i][j],temp[i][j]+1);
printf("\n\n");
0 5 2 3 99
5 0 4 99 3
2 4 0 99 4
3 99 99 0 99
To Cost Next
--
--
--
--
To Cost Next
--
--
--
--
To Cos Next
t
--
--
--
--
4isToCost Next
1 3 --
To Cos Next
t
--
--
--
2 3 99 99
5 2 78
99 4 2 1
6 99 3 6
To Cos Next
t
--
--
Computer Networks Lab Page 66
Computer Networks Lab Page 67
10
11
To Cos Next
t
--
--
--
--
To Cos Next
t
--
--
--
To Cost Next
--
--
--
DESCRIPTION:
Kruskal's algorithm is used to obtain the broadcast tree from the given subnet.
This algorithm constructs a minimal spanning tree for a connected weighted graph G.
SOURCE CODE:
#include<stdio.h
>
#include<conio.h
> #define
VERTEX 5
#define FALSE -1
#define TRUE 1
void create_graph(int [][VERTEX],int [][VERTEX],int []);
void prims(int [][VERTEX],int [][VERTEX],int []);
void display(int
[][VERTEX]);void main(){
int graph[VERTEX][VERTEX];
clrscr();
create_graph(graph,tree,selected);
prims(graph,tree,selected);
display(tree);
}}
tree[x][y] = 1;
tree[y][x] = 1;
selected[y] =
TRUE;ne++;
int i,j;
printf("%6c",' ');
for(i =0;i<VERTEX;i++)
printf("%6d",i+1);
printf("\n");
for( i = 0; i<VERTEX; i++)
printf("%6d",i+1) ;
for(j = 0; j<VERTEX; j++)
Computer Networks Lab Page 72
printf("%6d",tree[i][j]);
printf("\n");
1 0
2 0
3 1
4 1
5 0
DESCRIPTION:
RSA is an Internet encryption and authentication system that uses analgorithm developed in 1977
by Ron Rivest, Adi Shamir, and Leonard Adleman. The RSA algorithm is the most commonly used
encryptionand authentication algorithm and is included as part of the Web browsers from
Microsoft and Netscape.
#include<stdio.h
>
#include<math.h
>
#include<conio.h
>void main()
int m,n,d,e,val,count1,count2,p,q,i,j,k,pn,a[10],op;
int c=1; clrscr();
printf("\nRSA ALGORITHM");
printf("\nEnter the Plain Text :");
scanf("%d",&m);
printf("\nKey
Generation\n");
for(p=1;p<=180;p++)
for(q=1;q<=180;q++)
if(p==q)
goto
one;
if(p*q>m
)
one:
for(e=1;e<=180;e++)
count1=0;
for(i=1;i<=e;i++
)
if(e%i==0
)
count1++
;
if(count1==2
)
three: val=gcd(pn,e
);if(val==1)
goto three;
printf("\n4.e=%d",e);
for(d=1;d<=180;d++
)if((d*e)%pn==1)
goto four;
four: printf("\n5.d=%d",d);
printf("\nEncryption \nCipher text is :
");k=1;
for(i=1;i<=(e/2);i++)
k=k*c;
k=k%n;
}
if(e%2!=0
)
k=k*(m%n);
c=k%n;
printf("%d",c);
printf("\nDecryption\nPlain text is :
");k=1;
for(i=1;i<=(d/2);i++)
int c,j;
for(j=1;j<=pn;j++
)
if((pn%j==0)&&(e%j==0
))c=j;
return c;
RSA ALGORITHM
Enter the Plain Text :
56Key Generation
1.prime numbers p=2
q=2
92.n=58
3.pn=28
4.e=3
5.d=19
Encryption
Cipher text is :
50Decryption
Plain text is :56
DESCRIPTION:
SOURCE CODE:
#include<iostream.
h>#include<dos.h>
#include<stdlib.h>
void bktInput(int,int)
#define bucketSize
512void main()
int oprate,
pktSize;
randomize();
cout<<"Enter output rate :
";cin>>oprate;
for(int i=1;i<=5;i++)
delay(random(1000));
pktSize=random(100
0);
cout<<"\nPacket no "<<i<<"\tPacket size = "<<pktSize;
bktInput(pktSize,oprate);
if(ps>bucketSize)
cout<<"\n\t\tBucket
overflow";else
delay(500);
while(ps>or
)
cout<<"\n\t\t"<<or<<" bytes
outputted.";ps=ps-or;
delay(500);
if (ps>0)
cout<<"\n\t\tLast "<<ps<<" bytes sent\t";
Computer Networks Lab Page 82
cout<<"\n\t\tBucket output successful";
SOURCE CODE:
#include
<stdlib.h>
#include <time.h>
#include
<stdio.h>
#include
<conio.h>
#include
<string.h>#define
FSize 3
typedef struct packet{int SeqNum; char
Data[FSize+1];}packet;struct packet *readdata, *transdata;
int divide(char *msg) {
int msglen, NoOfPacket, i,
j;msglen = strlen(msg);
NoOfPacket =
msglen/FSize;
if ((msglen%FSize)!=0) NoOfPacket++;
readdata = (struct packet *)malloc(sizeof(packet) *
NoOfPacket);for(i = 0; i < NoOfPacket; i++) {
readdata[i].SeqNum = i + 1;
for (j = 0; (j < FSize) && (*msg != '\0'); j++,
msg++)readdata[i].Data[j] = *msg;
readdata[i].Data[j] = '\0';
void shuffle(int
NoOfPacket) {int *Status;
int i, j, trans;
free(Status);
void sortframes(int
NoOfPacket) {packet temp;
int i, j;
for (i = 0; i < NoOfPacket; i++)
for (j = 0; j < NoOfPacket – i-1; j++)
if (transdata[j].SeqNum > transdata[j +
1].SeqNum) {temp.SeqNum =
transdata[j].SeqNum; strcpy(temp.Data,
transdata[j].Data); transdata[j].SeqNum =
transdata[j + 1].SeqNum; strcpy(transdata[j].Data,
transdata[j + 1].Data); transdata[j + 1].SeqNum =
temp.SeqNum; strcpy(transdata[j + 1].Data,
temp.Data);
void receive(int
NoOfPacket) {int i;
printf("\nPackets received in the following order\n");
for (i = 0; i < NoOfPacket; i++) printf("%4d", transdata[i].SeqNum);
sortframes(NoOfPacket);
printf("\n\nPackets in order after sorting..\n");
for (i = 0; i < NoOfPacket; i++) printf("%4d", transdata[i].SeqNum);
printf("\n\nMessage received is :\n");
for (i = 0; i < NoOfPacket; i++) printf("%s", transdata[i].Data);
void main()
{char *msg;
int
NoOfPacket;
Computer Networks Lab Page 88
clrscr();
printf("\nEnter The message to be Transmitted :\n");
Output
Enter The messgae to be
Transmitted :hi, it was nice meeting
u on Sunday
The Message has been divided as
followsPacket No. Data
hi,
it
wa
sn
ice
me
eti
ng
uo
ns
und
ay
order4 2 6 3 5 1 8 9 11 7 12 10
Packets in order after sorting..
1 2 3 4 5 6 7 8 9 10 11 12
Message received is :
DESCRIPTION:
DESCRIPTION:
i. NS2 SIMULATOR-INTRODUCTION
ii. SIMULATE TO FIND THE NUMBER OF PACKETS DROPPED
iii. SIMULATE TO FIND THE NUMBER OF PACKETS DROPPED BY TCP/UDP
iv. SIMULATE TO FIND THE NUMBER OF PACKETS DROPPED DUE TO CONGESTION
v. SIMULATE TO COMPARE DATA RATE & THROUGHPUT.
vi. SIMULATE TO PLOT CONGESTION FOR DIFFERENT SOURCE/DESTINATION
vii. SIMULATE TO DETERMINE THE PERFORMANCE WITH RESPECT TO
TRANSMISSION OFPACKETS.
DESCRIPTION:
Network Simulator version 2 (NS-2) is discrete event packet level simulator. The
network simulator covers a very large number of application of different kind of
protocols of different network types consisting of different network elements and
traffic models. NS-2 isa package of tools that simulates behavior of networks such as
creating network topologies, log events that happen under any load, analyze the
events and understand the network. The aim of this first experiment is to learn how to
use NS-2, to get acquainted with the simulated objects and understand the operations
of network simulation. We will also look at how to analyze the outcome of a
simulation
SOURCE CODE:
set n0 [$ns
node] set n1
[$ns node] set
n2 [$ns node]
set n3 [$ns
node]
# Insert your own code for topology creation and agent definitions, etc.
DESCRIPTION:
Routing that is based on hierarchical addressing.
Note: Most Transmission Control Protocol/Internet Protocol (TCP/IP) routing is based on a
two-level hierarchical routing in which an IP address is divided into a network portion and a host
portion. Gatewaysuse only the network portion until an IP datagram reaches a gateway that can
deliver
it directly. Additional levels of hierarchical routing are introduced by the addition of subnetworks.
include<stdio.h>
#include<conio.h
>
#include<string.h
>
#include<ctype.h
>struct hierar
char
node[10];char
line[10]; int
hops;
state[20];
void
main()
int i,boo,small,t1,t2,j,n;
char
Computer Networks Lab Page
ch,rnode[10],temp[10];
clrscr();
);scanf(“%d”,&n);
printf(“Enter %d node,line,hops”
,n);for(i=0;i<n;i++)
for(i=0;i<n;i++)
printf(“%s \t \t %s \t \t %d \n”,state[i].node,state[i].line,state[i].hops);printf(
scanf(“%s”,&rnode);
for(i=0;i<n;i++)
t1=toascii(rnode[0]);
if(t1=t2)
boo=0;
else
boo=1;
if(boo=0
printf(“%s \t \t %s \t \t %d \n”,state[i].node,state[i].line,state[i].hops);
else
printf(“%c”,state[i].node[0]); printf(
“\t \t %s”,state[i].line);
strcpy(temp,state[i].node);
small=state[i].hops;
for(j=i;temp[0]==state[i].node[0];j++
l)
small=state[j].hops;
i++;
printf(“\t \t %d \n”,small);
getch();
7Enter 7 node,line,hops
1A
1B 1B
1C 1C
2A 1B
2B 1B
2C 1B
2D 1B
1B 1B
1C 1C
2A 1B
Computer Networks Lab Page
2B 1B
1B 1B
1C 1C
1B