当前位置:文档之家› 计算机网络原理实验七实验报告

计算机网络原理实验七实验报告

计算机网络原理实验七实验报告
计算机网络原理实验七实验报告

实验七、传输层可靠传输协议GBN编程实验报告

一、实验目的:

1、编程实现简单可靠的数据传输GBN协议,模拟可靠数据传输

2、理解TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。

二、实验指导:

参考教材。

三、实验要求:

编程实现一个GBN传输协议,采用编程语言不限,要求能将发送――接收流程以及处理方法

表现出来.附源代码及注释并附上实验结果截图。

一、GBN.h

#pragma once

#include

//基础功能模块的数据结构声明

#define BIDIRECTIONAL 1 /* change to 1 if you're doing extra credit and

write a routine called B_output */ 如果你想做酷文解码和写一个程序叫

B_output就改变值为1

/* a "msg" is the data unit passed from layer 5 (teachers code) to layer

4 (students' code). It contains the data (characters) to be delivered to

layer 5 via the students transport level protocol entities. */

一个“msg”是从第五层传送到第四层的数据单元.它包含通过传送层协议被传送到

第五层的数据

struct msg

{ char data[20];

};

/* a packet is the data unit passed from layer 4 (students code) to layer

3 (teachers code). Note the pre-defined packet structure, which all

students must follow. */一个数据包从第四层传送到第三层的数据单元.声明提

前定义的学生必须遵守的数据包结构

struct pkt

{

int seqnum;

int acknum;

int checksum;

char payload[20];

};

#define WINDOWSIZE 8

#define MAXBUFSIZE 50

#define RTT 15.0

#define NOTUSED 0

#define NACK -1

#define TRUE 1

#define FALSE 0

#define A 0

#define B 1

//网络仿真部分数据结构声明***********************************************************

struct event

{

float evtime; /* event time */ 事件时间

int evtype; /* event type code */ 事件类型代码

int eventity; /* entity where event occurs */ 所在的实体事件

发生时

struct pkt *pktptr; /* ptr to packet (if any) assoc w/ this event */用指针来显示这个数据包

struct event *prev;

struct event *next;

};

/* possible events: */可能发生

#define TIMER_INTERRUPT 0

#define FROM_LAYER5 1

#define FROM_LAYER3 2

#define OFF 0

#define ON 1

//基础功能模块的函数声明******************************************************************* void ComputeChecksum(struct pkt *packet);//计算校验和

int CheckCorrupted(struct pkt packet);//检查数据是否出错

void A_output( struct msg message);//A端向外发送数据

void A_input(struct pkt packet);//A端接收数据

void A_timerinterrupt();//A计时器超时

void A_init();//A端初始化

void B_output(struct msg message);

void B_input(struct pkt packet);

void B_timerinterrupt();

void B_init();

//网络仿真部分的函数声明

**************************************************

void init(); //初始化仿真器

float jimsrand();//随机数发生器[0,1]

//处理事件列表部分的函数声明*********************************************

void generate_next_arrival();//产生下一个到达的分组

void insertevent(struct event *p);//向事件列表中插入一条新的事件

void printevlist();//打印事件列表

//******************************************************************** //**********************计时器模块*********************************** void stoptimer(int);//停止计时器

void starttimer(int,float);//启动计时器

//******************************************************************** *

//**************************网络各层之间传送模块***********************

void tolayer3(int AorB,struct pkt packet);//向第3层发送信息

void tolayer5(int AorB,char datasent[20]);//向第5层发送信息

二、GBN.c

#include "GBN.h"

#include

#include

#include

extern int TRACE = 1; /* for my debugging */ 为我的调试

extern int nsim = 0; /* number of messages from 5 to 4 so far */ 目前为止信息的数字是从5到4

extern int nsimmax = 0; /* number of msgs to generate, then stop */ 如果信息产生的数字为0,然后就停止

extern float time = 0.000;

float lossprob; /* probability that a packet is dropped */数据包可能会丢失

float corruptprob; /* probability that one bit is packet is flipped */这一点的数据包可能会被弹出去

float lambda; /* arrival rate of messages from layer 5 */ 从

第五层到达的信息的次序int ntolayer3; /* number sent into layer 3 */被传送到第三层的数据

static int nlost = 0; /* number lost in media */在媒介中数据丢失

static int ncorrupt = 0; /* number corrupted by media*/

被媒介毁坏的数据

static int expectedseqnum = 0; /* expected sequence number at receiver side */ 在接收者这边接收到预期的序列数据

static int nextseqnum; /* next sequence number to use in sender side */ 下一个序列数据使用在发送者这边static int base; /* the head of sender window */

发送者的头窗口

struct pkt winbuf[WINDOWSIZE]; /* window packets buffer */

数据包缓冲区窗口

static int winfront,winrear; /* front and rear points of window buffer */

窗口缓冲区的前方点和后方点

static int pktnum; /* packet number of window buffer */

窗口缓冲区的数据包个数

struct msg buffer[MAXBUFSIZE]; /* sender message buffer */

发送消息缓冲区

int buffront,bufrear; /* front and rear pointers of buffer */

缓冲区的前指针与后指针

static int msgnum; /* message number of buffer */

信息数量的缓冲

int packet_lost =0;

int packet_corrupt=0;

int packet_sent =0;

extern int packet_correct=0;

extern int packet_resent =0;

int packet_timeout=0;

extern struct event *evlist = NULL; /* the event list */ 事件表

//计算校验和

void ComputeChecksum( struct pkt *packet)

{

int checksum;

int i;

checksum = packet->seqnum;

checksum = checksum + packet->acknum;

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

checksum = checksum + (int)(packet->payload[i]);

checksum = 0-checksum;

packet->checksum = checksum;

}

//检查是否出错

int CheckCorrupted(struct pkt packet)

{

int checksum;

int i;

checksum = packet.seqnum;

checksum = checksum + packet.acknum;

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

checksum = checksum + (int)(packet.payload[i]);

if ( (packet.checksum+checksum) == 0 )

return (FALSE);

else

return (TRUE);

}

//A端向外发送数据

/* called from layer 5, passed the data to be sent to other side */

来自第五层,通过数据派往另一边

void A_output(struct msg message)

{

int i;

struct pkt sendpkt;

/* if window is not full */ 如果窗口没有满

if ( nextseqnum < base+WINDOWSIZE )

{

printf("----A: New message arrives, send window is not full, send new messge to layer3!\n");

/* create packet */ 创建包

sendpkt.seqnum = nextseqnum;

sendpkt.acknum = NOTUSED;

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

sendpkt.payload[i] = message.data[i];

/* computer checksum */ 计算机校验

ComputeChecksum (&sendpkt);

/* send out packet */ 发送数据包

tolayer3 (A, sendpkt);

/* copy the packet to window packet buffer */ 复制数据包到窗口数据缓冲区

winrear = (winrear+1)%WINDOWSIZE;

pktnum ++;

winbuf[winrear] = sendpkt;

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

winbuf[winrear].payload[i]= sendpkt.payload[i];

/* update state variables */ 更新状态变量

nextseqnum = nextseqnum+1;

starttimer(A,RTT);

B_input(sendpkt);

A_input(sendpkt);

}

/* if window is full */ 如果窗口没有满

else

{

printf("----A: New message arrives, send window is full,");

/* if buffer full, give up and exit*/ 如果缓冲区满了,停止和退出if ( msgnum == MAXBUFSIZE)

{

printf (" Error: Sender buffer is full! \n");

exit (1);

}

/* otherwise, buffer the message */ 否则,缓冲信息

else

{

printf("buffer new message!\n");

bufrear = (bufrear+1) % MAXBUFSIZE;

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

buffer[bufrear].data[i] = message.data[i];

msgnum ++;

}

}

//B端向外发送数据

/* called from layer 5, passed the data to be sent to other side */

来自第五层,通过数据传送到另一边

void B_output(struct msg message)

{

int i;

struct pkt sendpkt;

/* if window is not full */如果窗口没有满

if ( nextseqnum < base+WINDOWSIZE )

{

printf("----A: New message arrives, send window is not full, send new messge to layer3!\n");

/* create packet */ 创建数据包

sendpkt.seqnum = nextseqnum;

sendpkt.acknum = NOTUSED;

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

sendpkt.payload[i] = message.data[i];

/* computer checksum */计算机校验

ComputeChecksum (&sendpkt);

/* send out packet */ 发送数据包

tolayer3 (A, sendpkt);

A_input(sendpkt);

/* copy the packet to window packet buffer */ 复制数据包到窗口数据缓冲区

winrear = (winrear+1)%WINDOWSIZE;

pktnum ++;

winbuf[winrear] = sendpkt;

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

winbuf[winrear].payload[i]= sendpkt.payload[i];

/* if it is the first packet in window, start timeout */ 如果第一个数据包在窗口里,开始暂停

//if ( base == nextseqnum )

//{

//starttimer(A,RTT);

//printf("----A: start a new timer!\n");

/* update state variables */ 更新状态变量

nextseqnum = nextseqnum+1;

}

/* if window is full */ 如果窗口已经满了

else

{

printf("----A: New message arrives, send window is full,");

/* if buffer full, give up and exit*/如果缓冲区满了,停止并退出if ( msgnum == MAXBUFSIZE)

{

printf (" Error: Sender buffer is full! \n");

exit (1);

}

/* otherwise, buffer the message */ 否则,缓冲信息

else

{

printf("buffer new message!\n");

bufrear = (bufrear+1) % MAXBUFSIZE;

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

buffer[bufrear].data[i] = message.data[i];

msgnum ++;

}

}

}

//A端接收数据

void A_input(struct pkt packet)

{

struct pkt sendpkt;

int i;

/* if received packet is not corrupted and ACK is received */

如果接收到的数据包没有被损坏和确认已经被接收了

if ( (CheckCorrupted(packet) == FALSE) && (packet.acknum != NACK) ) {

printf("----A: ACK %d is correctly received,",packet.acknum);

packet_correct++;

/* delete the acked packets from window buffer */

删除从窗口缓冲区里的确认数据包

winfront = (winfront+(packet.acknum+1-base)) % WINDOWSIZE; pktnum = pktnum - (packet.acknum+1-base);

/* move window base */ 移动窗口底部

base = packet.acknum+1;

stoptimer(A);

if ( base < nextseqnum)

{

//starttimer(A,RTT);

printf ("\n\n\nsend new packets!");

}

/* if buffer is not empty, send new packets */

如果缓冲区不空,发送新的数据包

while ( (msgnum!=0) && (nextseqnum

/* create packet */ 创建数据包

sendpkt.seqnum = nextseqnum;

sendpkt.acknum = NOTUSED;

buffront = (buffront+1) % MAXBUFSIZE;

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

sendpkt.payload[i] = buffer[buffront].data[i];

/* computer checksum */ 计算机校验

ComputeChecksum (&sendpkt);

/* if it is the first packet in window, start timeout */ 如果第一个数据包在窗口里,开始暂停

if ( base == nextseqnum )

{

//starttimer(A,RTT);

printf ("send new packets!\n");

}

/* send out packet */ 发送数据包

tolayer3 (A, sendpkt);

/* copy the packet to window packet buffer */

复制数据包到窗口数据缓冲区

winrear = (winrear+1)%WINDOWSIZE;

winbuf[winrear] = sendpkt;

pktnum ++;

/* update state variables */ 更新状态变量

nextseqnum = nextseqnum+1;

/* delete message from buffer */ 删除缓冲区的信息

msgnum --;

}

}

else

printf ("----A: NACK is received, do nothing!\n");

}

//B端接收数据*****************************************************一定要调用这个

/* Note that with simplex transfer from a-to-B, there is no B_output() */

/* called from layer 3, when a packet arrives for layer 4 at B*/

来自第三层,当这个数据包在B中到达第四层时

void B_input(struct pkt packet)

{

struct pkt sendpkt;

int i;

/* if not corrupted and received packet is in order */

如果没有损坏和接收到的数据包是井然有序的

if ( (CheckCorrupted(packet) == FALSE) && (packet.seqnum == expectedseqnum))

{

printf("\n----B: packet %d is correctly received, send ACK!\n",packet.seqnum);

/* send an ACK for the received packet */ 发送这个接收到的数据包的确认

/* create packet */ 创建数据包

sendpkt.seqnum = NOTUSED;

sendpkt.acknum = expectedseqnum;

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

sendpkt.payload[i] = '0';

/* computer checksum */ 计算机校验

ComputeChecksum (&sendpkt);

/* send out packet */发送数据包

//tolayer3 (B, sendpkt);

/* update state variables */更新状态变量

expectedseqnum = expectedseqnum+1;

printf("----B:expectedseqnum = %d\n",expectedseqnum);

/* deliver received packet to layer 5 */ 收到封包传递到第五层

//tolayer5(B,packet.payload);

}

/* otherwise, discard the packet and send a NACK */否则,丢弃这个数据包和发送否定应答

else

{

printf("----B: packet %d is corrupted or not I expects, send NACK!\n",packet.seqnum);

/* create packet */ 创建数据包

sendpkt.seqnum = NOTUSED;

sendpkt.acknum = NACK;

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

sendpkt.payload[i] = '0';

/* computer checksum */ 计算机校验

ComputeChecksum (&sendpkt);

/* send out packet */ 发送数据包

tolayer3 (B, sendpkt);

}

}

//A计时器超时

/* called when A's timer goes off */ 当A时器进行时

void A_timerinterrupt()

{

int i;

printf("----A: time out,resend packets!\n");

/* start timer */ 开始计时器

starttimer(A,RTT);

/* resend all packets not acked */ 重发没有被确认的所有数据包

for ( i=1; i<=pktnum; i++ )

{

packet_resent++;

tolayer3(A,winbuf[(winfront+i)%WINDOWSIZE]);

}

}

//B计时器超时

/* called when B's timer goes off */ 当B时器进行时

void B_timerinterrupt()

{

int i;

printf("----B: time out,resend packets!\n");

/* start timer */ 开始计时器

starttimer(B,RTT);

/* resend all packets not acked */ 重发没有被确认的所有数据包

for ( i=1; i<=pktnum; i++ )

{

packet_resent++;

tolayer3(B,winbuf[(winfront+i)%WINDOWSIZE]);

}

}

//A端初始化

/* entity A routines are called. You can use it to do any initialization */ 可以初始化A端

void A_init()

{

base = 0;

nextseqnum = 0;

buffront = 0;

bufrear = 0;

msgnum = 0;

winfront = 0;

winrear = 0;

pktnum = 0;

}

//B端初始化

/* entity B routines are called. You can use it to do any initialization */

void B_init()

{

expectedseqnum = 0;

}

//初始化仿真器

void init() /* initialize the simulator */ 初始化该模拟器

{

int i;

float sum, avg;

float jimsrand();

FILE *fp;

fp = fopen ("parameter.txt","r");

printf("----- Stop and Wait Network Simulator Version 1.1 -------- \n\n");

printf("Enter the number of messages to simulate: ");

//fscanf(fp,"%d",&nsimmax);

scanf("%d",&nsimmax);

printf("\nEnter packet loss probability [enter 0.0 for no loss]: "); //fscanf(fp, "%f",&lossprob);

scanf("%f",&lossprob);

printf("\nEnter packet corruption probability [0.0 for no corruption]: "); //fscanf(fp,"%f",&corruptprob);

scanf("%f",&corruptprob);

printf("\nEnter average time between messages from sender's layer5 [ > 0.0]: ");

//fscanf(fp,"%f",&lambda);

scanf("%f",&lambda);

printf("\nEnter TRACE: ");

//fscanf(fp,"%d",&TRACE);

scanf("%d",&TRACE);

printf("\n\n");

srand(9999); /* init random number generator */

初始化生成器的随机值

sum = 0.0; /* test random number generator for students */

检验学生输入的值

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

sum=sum+jimsrand(); /* jimsrand() should be uniform in [0,1] */

avg = sum/1000.0;

/*if(avg < 0.25 || avg > 0.75)

{

printf("It is likely that random number generation on your machine\n" ); printf("is different from what this emulator expects. Please take\n"); printf("a look at the routine jimsrand() in the emulator code. Sorry. \n");

exit(0);

}*/

printf("%f",avg);

ntolayer3 = 0;

nlost = 0;

ncorrupt = 0;

time=0.0; /* initialize time to 0.0 */

generate_next_arrival(); /* initialize event list */

}

//随机数发生器

float jimsrand()

{

double mmm = 2147483647; /* largest int - MACHINE DEPENDENT!!!!!!!! */最大的中断-与机器相关的

float x; /* individual students may need to change mmm */ 个别学生可能需要改变mmm

x = rand()/mmm; /* x should be uniform in [0,1] */

return(x);

}

//******************************************************************** ******************

//*******************************事件处理部分*******************************************

void generate_next_arrival()

{

double x,log(),ceil();

struct event *evptr;

char *malloc();

float ttime;

int tempint;

//if (TRACE>2)

//printf("-----------------GENERATE NEXT ARRIVAL: creating new arrival\n");

x = lambda*jimsrand()*2; /* x is uniform on [0,2*lambda] */ 要统一值 /* having mean of lambda */

evptr = (struct event *)malloc(sizeof(struct event));

evptr->evtime = time + x;

evptr->evtype = FROM_LAYER5;

if (jimsrand()<0.5)

{

evptr->eventity = A;

}

else

evptr->eventity = B;

insertevent(evptr);

}

//向事件列表中插入一条新的事件

void insertevent(struct event *p)

{

struct event *q,*qold;

if (TRACE>2)

{

//printf(" INSERTEVENT: time is %lf\n",time);

//printf(" INSERTEVENT: future time will be %lf\n",p->evtime);

q = evlist; /* q points to front of list in which p struct inserted */q指着p结构要插入的列表前面的地方

if (q==NULL)/* list is empty */ 列表是空的

{

evlist=p;

p->next=NULL;

p->prev=NULL;

}

else

{

for (qold = q; q !=NULL && p->evtime > q->evtime; q=q->next) qold=q;

if (q==NULL)/* end of list */ 列表结束

{

qold->next = p;

p->prev = qold;

p->next = NULL;

}

else if (q==evlist)/* front of list */ 列表前

{

p->next=evlist;

p->prev=NULL;

p->next->prev=p;

evlist = p;

}

else /* middle of list */ 列表中间

{

p->next=q;

p->prev=q->prev;

q->prev->next=p;

q->prev=p;

}

}

}

//打印事件列表

void printevlist()

struct event *q;

int i;

printf("--------------\nEvent List Follows:\n");

for(q = evlist; q!=NULL; q=q->next)

{

printf("Event time: %f, type: %d entity: %d\n",q->evtime,q->evtype,q->eventity);

}

printf("--------------\n");

}

//启动计时器

void starttimer(int AorB,float increment)

{

struct event *q;

struct event *evptr;

char *malloc();

if (TRACE>2)

printf("\n----A: START TIMER: starting timer at %f\n",time);

/* be nice: check to see if timer is already started, if so, then warn */ 最好:检查看看计时器是否已经开始,如果是这样,然后发出警告

/* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */

for (q=evlist; q!=NULL ; q = q->next)

if ( (q->evtype==TIMER_INTERRUPT && q->eventity==AorB) )

{

//printf("Warning: attempt to start a timer that is already started\n");

return;

}

/* create future event for when timer goes off */创建远景即使计时器停止了

evptr = (struct event *)malloc(sizeof(struct event));

evptr->evtime = time + increment;

evptr->evtype = TIMER_INTERRUPT;

evptr->eventity = AorB;

insertevent(evptr);

//停止计时器

/* called by students routine to cancel a previously-started timer */ void stoptimer(int AorB) /* A or B is trying to stop timer */

{

struct event *q,*qold;

if (TRACE>2)

printf("\n----A: STOP TIMER: stopping timer\n");

/* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */

for (q=evlist; q!=NULL ; q = q->next)

if ( (q->evtype==TIMER_INTERRUPT && q->eventity==AorB) )/* remove this event */

{

if (q->next==NULL && q->prev==NULL)

evlist=NULL; /* remove first and only event on list */ 删除第一个和只有一个事件在列表

else if (q->next==NULL) /* end of list - there is one in front */ q->prev->next = NULL;

else if (q==evlist) /* front of list - there must be event after */ 列表有开始就一定会有结束

{

q->next->prev=NULL;

evlist = q->next;

}

else /* middle of list */ 列表的中间

{

q->next->prev = q->prev;

q->prev->next = q->next;

}

free(q);

return;

}

//printf("Warning: unable to cancel your timer. It wasn't running.\n");

}

//向第三层发送信息

/************************** TOLAYER3 ***************/

void tolayer3(int AorB,struct pkt packet)

{

struct pkt *mypktptr;

struct event *evptr,*q;

char *malloc();

float lastime, x, jimsrand();

int i;

ntolayer3++;

/* simulate losses: */ 模拟丢失

if (jimsrand() < lossprob)

{

nlost++;

if (TRACE>0)

printf(" TOLAYER3: packet being lost\n");

return;

}

/* make a copy of the packet student just gave me since he/she may decide */ 既然他已经决定,就复制一个学生的数据包给我

/* to do something with the packet after we return back to him/her */ 在我们返回给他后,数据包已经有些改变了

mypktptr = (struct pkt *)malloc(sizeof(struct pkt));

mypktptr->seqnum = packet.seqnum;

mypktptr->acknum = packet.acknum;

mypktptr->checksum = packet.checksum;

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

mypktptr->payload[i] = packet.payload[i];

if (TRACE>2)

{

printf(" TOLAYER3: seq: %d, ack %d, check: %d ", mypktptr->seqnum,mypktptr->acknum, mypktptr->checksum);

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

printf("%c",mypktptr->payload[i]);

printf("");

}

/* create future event for arrival of packet at the other side */

创建远景即使数据包到达另一边

evptr = (struct event *)malloc(sizeof(struct event));

evptr->evtype = FROM_LAYER3; /* packet will pop out from layer3 */

数据包将会从第三层弹出

evptr->eventity = (AorB) % 2; /* event occurs at other entity */

事件发生在其他实体

evptr->pktptr = mypktptr; /* save ptr to my copy of packet */

保存指针,该指针指的是我复制的数据包lastime = time;

/* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */

for (q=evlist; q!=NULL ; q = q->next)

if ( (q->evtype==FROM_LAYER3 && q->eventity==evptr->eventity) ) lastime = q->evtime;

evptr->evtime = lastime + 1 + 9*jimsrand();

/* simulate corruption: */ 模拟损坏

if (jimsrand() < corruptprob)

{

ncorrupt++;

if ( (x = jimsrand()) < .75)

mypktptr->payload[0]='Z'; /* corrupt payload */

损坏的有效负载

else if (x < .875)

mypktptr->seqnum = 999999;

else

mypktptr->acknum = 999999;

if (TRACE>0)

printf(" TOLAYER3: packet being corrupted\n");

}

//if (TRACE>2)

//printf(" TOLAYER3: scheduling arrival on other side\n");

insertevent(evptr);

}

//向第五层发送信息

/************************** TOLAYER5 ***************/

void tolayer5(int AorB,char datasent[20])

{

int i;

武汉大学计算机网络实验报告 (2)

武汉大学教学实验报告 动力与机械学院能源动力系统及自动化专业2013 年11 月10 日

一、实验操作过程 1.在仿真软件packet tracer上按照实验的要求选择无线路由器,一般路由器和PC机构建一个无线局域网,局域网的网络拓扑图如下: 2.按照实验指导书上的表9.1(参数配置表)对路由器,DNS服务器,WWW服务器和PC机进行相关参数的配置: 服务器配置信息(子网掩码均为255.255.255.0) 主机名IP地址默认网关 DNS 202.2.2.1 202.2.2.2 WWW 202.3.3.1 202.3.3.3 路由器配置信息(子网掩码均为255.255.255.0) 主机名型号IP地址默认网关时钟频率ISP 2620XM e1/0:202.2.2.2 e1/1:202.3.3.3 s0/0:202.1.1.2 64000 Router2(Server) 2620XM f0/0:192.168.1.1 s0/0:202.1.1.1 Wireless Router Linksys WRT300N 192.168.1.2 192.168.1.1 202.2.2.1 备注:PC机的IP地址将通过无线路由器的设置自动分配 2.1 对router0(sever)断的配置: 将下列程序代码输到router0中的IOS命令行中并执行,对router0路由器进行设置。Router>en Router#conf t

2.3 WWW服务器的相关配置 对www服务器进行与DNS服务器相似的配置,包括它的IP地址,子网掩码,网关等,具体的相关配置图见下图: WWW服务器的相关配置图

计算机网络实验报告

计算机网络实验报告 班级:电信0901 学号:U200914332 姓名:王焕 2012.1

实验四:网络协议与Web通信 一、实验目的 1.了解网络协议数据单元的格式 2.分析网络协议工作基本流程 3.深入理解Web应用的通信过程 二、实验内容 1.网络协议数据单元分析 通过wireshark抓取局域网数据包并分析各个层次的协议数据单元内容 (1)以太网帧头 (2)IP分组首部 (3)ARP包 (4)ICMP包(ping) 2.Web原理实验 (1)HTTP协议分析 (2)通过socket编程模拟HTTP协议通信过程 三、实验原理 1.Web通信经过四个步骤: (1)建立连接 (2)客户端发送HTTP REQUEST请求 (3)服务器端接收请求,生成RESPONSE响应 (4)关闭连接 2.HTTP协议 客户端浏览器或其他程序与Web服务器之间的应用层通信协议。一般在Internet 上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。 3.Java网络编程 Java Socket对网络的封装是非常完美的,对于进行网络编程的程序员,使用网络就像使用本地文件系统一样简单。 与其他Socket网络编程有一个明显的区别就是,在服务器和客户机通信建立时就要另外一个ServerSocket 。 它仅仅适用与服务器端,监听指定端口,如果有socket 连接请求,它就答应,并在服务器端产生一个socket 与其对应,那么用这个socket 就可以和客户端进行通信了。 实验原理图如下:

四、实验内容及分析 1.编译、执行参考程序 本次实验提供了两个原始程序(NetServer.java和NetClient.java),它们可以实现一个服务器/客户端请求响应的完整过程。Dos环境下先后编译执行NetServer.java与NetClient.java,即可得到一次完整的客户端向服务器请求并得到响应的完整过程,结果如下: 2.修改、编写实验程序 参考程序模拟了客户端与服务器之间的对话,但由于其之间交互的数据都是我们设定的而不含有http报头信息,因此不能和真正的web服务器与浏览器对话,以下即为

计算机网络实验报告精编WORD版

计算机网络实验报告精 编W O R D版 IBM system office room 【A0816H-A0912AAAHH-GX8Q8-GNTHHJ8】

计算机网络实验报告实验时间:2018年5月16日 参加人员:袁志伟朱兴旺周瑞锦刘小旭 一、实验名称:VLAN划分与配置 了解vlan的作用,掌握在一台交换机上划分VLan的方法和跨交换机的VLan的配置方法,掌握Trunk端口的配置方法。理解三层交换的原理,熟悉Vlan接口的配置 二、实验内容 首先,在一台交换机上划分VLan,用ping命令测试在同一VLan和不同VLan中设备的连通性。然后,在交换机上配置Trunk端口,用ping命令测试在同一VLan和不同VLan中设备的连通性。最后,利用交换机的三层功能,实现Vlan间的路由,再次用ping命令测试其连通性。 三、实验步骤 实验组网架构

图二 Trunk 端口的配置组网图 E0/11 E0/1 E0/1 E0/11 E0/13 E0/1S1 S2 Vlan2 Vlan2 Vlan3 Vlan3 注:S1中vlan2包括端口e0/1 到e0/5,vlan3包括端口e0/7到e 0/11; 注:vlan2包括端口e0/1到e0/5,vlan3包括端口e0/7到e0/11 E0/1 E0/2 E0/10 E0/11 Vlan2 Vlan3 S1 PA PB

图三 VLan 间通信的配置组网图 实施步骤 1.Vlan 的基本配置 步骤1 按照组网图一连接好设备,为交换机划分Vlan 。参考配置命令如下: system [Quidway]VLan 2 [Quidway-vlan2]port e 0/1 e 0/2 e 0/3 e 0/4 e 0/5 [Quidway-vlan2]quit [Quidway]VLan 3 [Quidway-vlan3]port e 0/7 to e 0/11 E0/11 E0/1 E0/1 E0/11 E0/13 E0/1PCA PCB PCC PCD 网关: 网关: S1 Vlan2 Vlan3 注:S1中vlan2包括端口e0/1 到e0/5,vlan3包括端口e0/7到e 0/11; S2 网关: 网关: VLAN2: VLAN3:

计算机网络实验报告-答案.

计算机网络实验报告 专业计算机科学与技术 班级计102 学号 109074057 姓名王徽军 组号一组D 指导教师毛绪纹 安徽工业大学计算机学院 二○一二年十二月

目录 实验总体说明 (3) 实验一以太网帧的构成 (3) 实验三路由信息协议RIP (9) 实验四传输控制协议TCP (11) 实验五邮件协议SMTP、POP3、IMAP (12) 实验六超文本传输协议HTTP (14)

实验总体说明 1.实验总体目标 配合计算机网络课程的教学,加强学生对计算机网络知识(TCP/IP协议)的深刻理解,培养学生的实际操作能力。 2.实验环境 计算机网络协议仿真实验室: 实验环境:网络协议仿真教学系统(通用版)一套 硬件设备:服务器,中心控制设备,组控设备,PC机若干台 操作系统:Windows 2003服务器版 3.实验总体要求 ●按照各项实验内容做实验,记录各种数据包信息,包括操作、观察、记录、分析, 通过操作和观察获得直观印象,从获得的数据中分析网络协议的工作原理; ●每项实验均提交实验报告,实验报告的内容可参照实验的具体要求,但总体上应包 括以下内容:实验准备情况,实验记录,实验结果分析,算法描述,程序段,实验过程中遇到的问题以及对思考问题的解答等,实验目的、实验原理、实验步骤不需要写入实验报告中。 实验一以太网帧的构成 实验时间:_____________ 成绩:________________ 实验角色:_____________ 同组者姓名:______________________________

练习一:领略真实的MAC帧 00000000: FF FF FF FF FF FF 8C 89 A5 75 71 10 06 05 14 55 ..q....U 00000010: 85 48 D2 78 62 13 47 24 58 25 00 00 00 00 00 00 .H襵b.G$X%...... 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 ............ 练习二:理解MAC地址的作用 ●记录实验结果 表1-3实验结果 本机MAC地址源MAC地址目的MAC地址是否收到,为什么 主机B 8C89A5-7570BB 8C89A5-757113 8C89A5-7570C1 是,主机A与主机B接在同一共享模块 主机D 8C89A5-771A47 8C89A5-757113 8C89A5-7570C1 是,主机C与主机D接在同一共享模块 主机E 8C89A5-757110 无无否,与主机A、C都不在同一共享模块 主机 F 8C89A5-7715F8 无无否,与主机A、C都不在同一共享模块 练习三:编辑并发送MAC广播帧 ●结合练习三的实验结果,简述FFFFFF-FFFFFF作为目的MAC地址的作用。 答:该地址为广播地址,作用是完成一对多的通信方式,即一个数据帧可发送给同一网段内的所有节点。 练习四:编辑并发送LLC帧 ●实验结果 帧类型发送序号N(S)接受序号N(R) LLC 001F 0 ●简述“类型和长度”字段的两种含义 答:一是如果字段的值小于1518,它就是长度字段,用于定义下面数据字段的长度;二是如果字段的值大于1536,用于定义一个封装在帧中的PDU分组的类型。 思考问题: 1.为什么IEEE802标准将数据链路层分割为MAC子层和LLC子层? 答:出于厂商们在商业上的激烈竞争,IEEE的802委员会未能形成一个统一的、最佳的局域网标准,而是被迫制定了几个不同标准,如802.4令牌总线网、802.5令牌环网等。为了使数据链路层能更好地适应多种局域网标准,802委员会就将局域网的数据链路层拆成两个子层,即逻辑链路控制

计算机网络实验三参考答案

1. What is the IP address and TCP port number used by the client computer (source) that is transferring the file to https://www.doczj.com/doc/a818129647.html,? To answer this questio n, it’s probably easiest to select an HTTP message and explore the details of the TCP packet used to carry this HTTP message, using the “details of the selected packet header window” (refer to Figure 2 in the “Getting Started with Wireshark” Lab if you’re uncertain about the Wireshark windows). Ans: IP address:192.168.1.102 TCP port:1161 2. What is the IP address of https://www.doczj.com/doc/a818129647.html,? On what port number is it sending and receiving TCP segments for this connection? Ans: IP address:128.119.245.12 TCP port:80 If you have been able to create your own trace, answer the following question: 3. What is the IP address and TCP port number used by your client computer (source) to transfer the file to https://www.doczj.com/doc/a818129647.html,? ANS: IP address :10.211.55.7 TCP port:49265 4. What is the sequence number of the TCP SYN segment that is used to initiate the TCP connection between the client computer and https://www.doczj.com/doc/a818129647.html,? What is it in the segment that identifies the segment as a SYN segment? ANS: sequence number: 0 Syn Set = 1 identifies the segment as a SYN segment

福建农林大学计算机网络实验报告二

福建农林大学计算机与信息学院 实验报告 2015年10 月27 日

实验项目列表

实验报告 系:计算机科学专业:计算机科学与技术年级: 姓名:学号:实验室号:计算机号: 实验日期:2015 年10 月27 日指导教师签字:成绩: 报告退发(订正、重做) 实验二网络监听实验 一、实验目的 1、理解网络监听原理 2、熟悉网络监听方法 3、理解网络流量 4、掌握TCP/IP的主要协议和协议的层次结构 二、实验环境与设备 本实验在实际因特网环境下进行操作,需要的设备有:一台PC机,WireShark监听软件。WireShark监听软件可从网址:https://www.doczj.com/doc/a818129647.html,/下载。实验配置如图所示。 因特网 三、实验原理 1、网络协议分析器 如果使用Web浏览器或OICQ聊天这样的网络软件,必须有网络连接才能工作,然而,你知道它们在因特网上传送的是什么类型的信息吗? 例如,计算机要对远程Web服务器发送什么数据来获取它需要的网页呢?计算机如何将邮件发给指定的人呢? 可以通过网络协议分析器(如WireShark)来协助观察网络会话的细节。网络协议分析器是一个能记录所有网络分组,并以人们可读的形式显示的软件。在监听重流量网络时,允许用户过滤掉不想要的分组或查看感兴趣的特定分组,而且还能为用户提供所有分组的统计概要。 2、网络监听原理 在共享式局域网中,位于同一网段的每台主机都可以截获在网络中传输的所有数据,正常情况下,一个网卡只响应目的地址为单播地址和广播地址的MAC帧而忽略其它MAC帧,网卡接收这两种帧时,通过CPU产生一个硬件中断,然后由操作系统负责处理该中断,对数据

计算机网络实验报告89340

计算机专业类课程 实 验 报 告 课程名称:计算机网络 学院:计算机科学与工程 专业:计算机科学与技术 学生:ZYZ 学号:26 指导教师:FB 日期:2016年06月10日

目录 实验一 (3) 实验二 (7) 实验三 (12) 实验四 (17) 实验五 (21)

电子科技大学 实验报告 实验一 一、实验名称:交换机和路由器的基本配置 二、实验学时:4 三、实验容和目的: 理解和掌握交换机和路由器的工作原理;掌握交换机和路由器命令行各种操作模式的区别;能够使用各种帮助信息,以及用命令进行基本的配置。 假设是某公司新进的网管,公司要求你熟悉网络产品。 首先要求你登录交换机或路由器,了解并掌握交换机和路由器的命令行操作,以及如何使用一些基本命令对设备进行配置,包括交换机和路由器的设备名、登录时的描述信息、端口参数的基本配置,以及设备运行状态的查看。 四、实验原理: 交换机和路由器的管理方式基本分为两种:带管理和带外管理。 交换机或路由器的命令行操作模式,主要包括:用户模式、特权模式、全局配置模式、端口模式等几种。 交换机或路由器的基本操作命令包括Exit、End、Show version、Show mac-address-table、Show ip route、Show running-config。 以创建两种类型的标题:每日通知和登录标题。 五、实验器材(设备、元器件) 三层交换机1台、路由器1台、计算机1台。 六、实验步骤:

交换机的配置 第一步:交换机各个操作模式直接的切换 Swtich>enable Swtich#configure terminal !使用enable命令从用户模式进入特权模式,再从特权模式进入全局配置模式第二步:交换机命令行界面基本功能 第三步:配置交换机的名称和每日提示信息 第四步:配置接口状态 第五步:查看交换机的系统和配置信息 第六步:保存配置 路由器的配置 第一步:路由器各个操作模式直接的切换 第二步:路由器命令行界面基本功能 第三步:配置路由器的名称和每日提示信息 第四步:配置接口状态 第五步:配置路由器的接口并查看接口配置 第六步:显示路由表的信息 七、实验数据及结果分析: (1)交换机的配置文件容,即show running-config 的结果

计算机网络原理实验三winsock套接字编程实验报告

实验三、WINSOCK套接字编程实验报告 序号:姓名:刘易学号: 20101150040 成绩指导老师: 1.实验目的: 用C或JA V A语言编写客户端、服务器程序,实现基于TCP或UDP的网络通信数据传输服务,熟悉基于TCP或UDP的Socket编程原理。 2.实验环境: 建立在TCP/IP 网络体系结构之上计算机网络实验环境。各计算机除了安装TCP/IP 软件外,还安装了TCP/IP 开发系统。计算机具备Windows环境中套接字socket 的编程接口功能,可为用户提供全网范围的进程通信功能。 3.实验指导: 参见套接字编程实验指导 4.实验步骤 (1)运行指导书中给出的参考程序,分析实验结果,并回答问题(1)-(3) (2)根据给定参考程序修改代码,完善修改服务器和客户端的功能。并回答问题(4)-(5) 5.实验结果分析 (1)为什么在服务器和客户端要包含winsock2.h文件? (2)为什么在服务器和客户端程序中要加入#pragma comment(lib,"ws2_32.lib") 语句,如果不加会出现什么问题? (3)为什么在服务器和客户端程序中要使用WSAStartup函数,如果不用,程序会有什么问题? (4)修改后的程序完成实现了什么功能,附上修改后的源代码。(修改或填加的代码用波浪线标注,并填加注释),并附上实验截图

客户端改变的代码: { for(;;) { memset(buf, 0, 1024); printf("Please input a line to server:"); scanf("%s",&buf); rval = send(fd, buf, strlen(buf) + 1,0); if(rval < 0) printf("Write error!"); if((rval=recv(fd,buf,sizeof(buf),0)<0)) perror("reading stream message"); if(rval==0) printf("server said :%s\n",buf); } 服务器端修改的代码: for(;;) { memset(buf, 0, sizeof(buf)); if ( (rval = recv(msgsock, buf, sizeof(buf),0) < 0))

计算机网络技术实验报告

重庆交通大学 学生实验报告 实验课程名称《计算机网络技术》课程实验 开课实验室软件与通信实验中心 学院国际学院年级2012 专业班(1)班 学生姓名吴双彪学号6312260030115 开课时间2014 至2015 学年第二学期 实验2简单的局域网配置与资源共享 实验目的: 1、掌握将两台PC联网的技能与方法 2、掌握将几台PC连接成LAN的技能与方法 3、掌握局域网内资源共享的技能与方法 实验内容和要求: 1、选用百兆交换机连接PC若干台; 2、在上述两种情况下分别为PC配置TCP/IP协议,使他们实现互联和资源共享实验环境:(画出实验网络拓图) 实验步骤: 1、选择两台计算机; 选PC0与PC1. 2、设置两台计算机IP地址为C类内部地址; 两台PC机的IP分别设置为:、202.202.242.47、202.202.243.48; 两台PC机的掩码分别设置为:、255.255.255.0、255.255.255.0; 3、用一台计算机Ping另一台计算机,是否能Ping通?

4、我的电脑→工具→文件夹选项→查看→去掉“使用简单文件共享(推荐)”前 的勾;设置共享文件夹。 5、控制面板→管理工具→本地安全策略→本地策略→安全选项里,把“网络访 问:本地帐户的共享和安全模式”设为“仅来宾-本地用户以来宾的身份验证” (可选,此项设置可去除访问时要求输入密码的对话框,也可视情况设为“经典-本地用户以自己的身份验证”); 6、通过网络邻居或在运行窗口输入“\\对方IP地址”实现资源共享。 1)指定IP地址,连通网络 A.设置IP地址 在保留专用IP地址范围中(192.168.X.X),任选IP地址指定给主机。 注意:同一实验分组的主机IP地址的网络ID应相同 ..。 ..,主机ID应不同 ..,子网掩码需相同B.测试网络连通性 (1)用PING 命令PING 127.0.0.0 –t,检测本机网卡连通性。 解决方法:检查网线是否连接好,或者网卡是否完好 (2)分别“ping”同一实验组的计算机名;“ping”同一实验组的计算机IP地址,并记录结 果。答:能。结果同步骤3 (3)接在同一交换机上的不同实验分组的计算机,从“网上邻居”中能看到吗?能ping通 吗?记录结果。 2) 自动获取IP地址,连通网络 Windows主机能从微软专用B类保留地址(网络ID为169.254)中自动获取IP地址。 A.设置IP地址 把指定IP地址改为“自动获取IP地址”。 B.在DOS命令提示符下键入“ipconfig”,查看本机自动获取的IP地址,并记录结果。 C.测试网络的连通性 1.在“网上邻居”中察看能找到哪些主机,并记录结果。 2.在命令提示符下试试能“ping”通哪些主机,并记录结果。 答:能ping通的主机有KOREYOSHI ,WSB ,ST ,LBO ,CL 。思考并回答 测试两台PC机连通性时有哪些方法? 实验小结:(要求写出实验中的体会)

计算机网络实验指导书新

计算机网络实验指导书(新版)

————————————————————————————————作者:————————————————————————————————日期: 2

计算机网络 实验指导书 主编郭雅 参编余小华黄锦煜罗肖辉 主审陶培基 I

前言 计算机网络是信息社会的支柱。培养一大批谙熟计算机网络原理与技术,具有综合应用和研发创新能力的人才,是社会信息化的需要,也是高等院校相关专业的教学目的。 编者在本科院校二级学院工作多年,一直担任计算机网络课程及其实验课程的教学工作。包括编者所在学校在内的许多本科院校二级学院采用了谢希仁编著《计算机网络》作为网络基础课程的教材。该教材内容丰富,说理透彻。针对本科院校二级学院学生的特点,教学中应该基础理论和实践并重,各所院校都开出了一定的实验课时。为规范实验内容,严格实验训练,达到实验教学的目的,编者多年来一直对本类院校的实验教学进行探索,研究在课时有限的情况下,如何组织计算机网络实验教学的内容,使之既能配合课堂教学,加深对所学知识的理解,又能紧跟网络技术的发展,培养和提高学生的实际操作技能。在教学实践中,编者一直坚持编写和完善实验指导书,并与选用谢希仁编著《计算机网络》做教材的一些兄弟院校的教师多次交流,修订完成了这本《计算机网络实验指导书》。 本书内容涵盖诠释网络原理,应用组网技术和实施网络管理等几个方面的实验项目十九个。由于编者水平有限,编写时间紧迫,不足与错误在所难免,恳请专家和广大读者不吝批评指正。 参加本书编写的人员有华南理工大学广州学院计算机工程系余小华老师,华南师范大学增城学院教育信息技术部黄锦煜老师,华南师范大学增城学院网络中心罗肖辉老师。 本书由华南师范大学增城学院计算机系主任陶培基教授担任主审。 感谢广东轻工职业技术学院计算机系教授石硕对本书编写和出版所提供的意见、建议和热忱帮助。 编者 2011年6月 于华南师范大学增城学院,广州 E-mail: hsguoya@https://www.doczj.com/doc/a818129647.html, II

(完整word版)计算机网络实验报告

计算机网络实验报告 姓名 学号 专业 班级 指导教师毛绪纹 2017.12

实验2-1 PPP 与 PPPoE 学习 实验配置说明 该实验主要用于观察PPPoE和PPP的数据封装格式。其中,PC1到ISP1段的链路使用PPPoE,ISP1已经配置为PPPoE服务器。ISP1和ISP2之间的链路使用PPP。 实验目的 了解PPP协议的封装格式。 了解PPPoE协议的封装格式。 实验步骤 任务:观察PPP协议和PPPoE协议的数据封装格式 步骤1:准备工作 单击主窗口右下角 Realtime 和 Simulation 模式切换按钮数次,直至交换机指示灯呈绿色 步骤2:建立PPPoE连接 单击拓扑图中的 PC1,在弹出窗口中单击 Desktop 选项卡,选择桌面上的 Command 工具,在其中输入 ipconfig 命令查看 PC1 的 IP 地址信息, PC1 在初始状态下并未配 置 IP 地址。选择 PPPoE 拨号工具,在弹出窗口中输入拨号信息,即用户名(User Name)和密码(Password):ISP1 预设了两个用户名,分别为 user 和 admin,密码与用户名相同。输入拨号信息后单击 Connect 按钮,建立 PPPoE 连接。关闭 PPPoE 拨号窗口,重新打开 Command 工具,输入 ipconfig 命令查看 PC1 是否获取到 IP 地址。如已获取到 ISP1 预设的地址池范围内的 IP 地址,则表示 PPPoE 拨号成功。

步骤3:添加并捕获数据包 进入 Simulation(模拟)模式。设置 Event List Filters(事件列表过滤器)只显示 ICMP 事件。单击 Add Simple PDU(添加简单PDU)按钮,在拓扑图中添加PC1 向PC2 发送的数据包。单击 Auto Capture/Play(自动捕获/播放)按钮捕获数据。此时PC1 上出现信封图标,并在信封图标上闪烁“√”图标。此时可再次单击 Auto Capture/Play (自动捕获/播放)按钮停止捕获数据包。 步骤4:观察PPPoE协议封装格式 选择事件列表中PC1 到Switch0 或者 Switch0 到 ISP1 的数据包,即事件列表中的第二或第三个数据包。单击其 Info 项上的色块,在弹出的 PDU 信息窗口中选择Inbound PDU Details 选项卡。 步骤5:观察PPP协议的封装格式

计算机网络原理实验七、传输层可靠传输协议GBN编程实验报告

实验七、传输层可靠传输协议G B N编程实验报告序号:姓名:学号:成绩指导老师: 一、实验目的: 1、通过编写实现一个简单可靠的数据传输协议GBN的发送和接收代码,模拟可靠数据传输 2、理解TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。 二、实验原理: 在GBN中,发送端不需要在接收到上一个数据包的ACK后才发送下一个数据包,而是可以连续发送数据包。在发送端发送数据包的过程中,如果接收到对应已发送的某个数据包的NACK,则发送端将NACK对应的某个数据包进行重发,然后再将该数据包之后的数据包依次进行重发。 三、结果分析: 本次试验中采用java语言进行程序编写 代码注释: (一)S ender类 import java.util.Timer; public class Sender extends Thread{ public int windowsize=3; //发送方窗口长度设为3 public String[] data={"data1","data2","data3", "data4","data5","data6","data7"}; //模拟七个数据包public int sign[]={0,1,2,3,4,5,6}; //为7个数据包标号 public int localack=-1; //保存最近收到的ACK public Timers litime=null; //定时器(这里定为2秒) public int switches=0; //超时标志,1为超时 public int windowsign[]; //当前窗口内待发的数据分组的序号 public int acksign=0;

计算机网络实验报告3

计算机网络实验报告3 报告课程名称计算机网络实验项目实验三 传输控制协议TCP 实验仪器网络协议仿真教学系统系别计算机学院专业班级/学号学生姓名实验日期成绩 _______________________ 指导教师实验报告课程名称计算机网络实验项目实验三 传输控制协议TCP 实验仪器网络协议仿真教学系统系别计算机系专业班级/学号学生姓名实验日期成绩 _______________________ 指导教师高卓实验三 传输控制协议TCP 一、实验目的: 1、掌握TCP协议的报文格式 2、掌握TCP连接的建立和释放过程 3、掌握TCP数据传输中编号与确认的过程 4、掌握TCP协议校验和的计算方法 5、理解TCP重传机制 二、实验原理:一、 TCP报文格式16位源端口号16位目的端口号32位序号32位确认序号4位首部长度保留(6位)URGACKPSHRSTSYNFIN16位窗口大小16位校验和16位紧急指针选项数据二、 TCP连接的建立TCP是面向连接的协议。

在面向连接的环境中,开始传输数据之前,在两个终端之间必须先建立一个连接。对于一个要建立的连接,通信双方必须用彼此的初始化序列号seq和来自对方成功传输确认的应答号ack (指明希望收到的下一个八位组的编号)来同步,习惯上将同步信号写为SYN,应答信号写为ACK。整个同步的过程称为三次握手,如图: 3、 TCP连接的释放对于一个已经建立的连接,TCP使用四次握手来结束通话(使用一个带有FIN附加标记的报文段)。 如图:四、 TCP重传机制TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到期,但还没有收到确认,就要重传这一报文段。 三、实验环境配置:该实验采用网络结构图。说明:IP地址分配规则为主机使用原有IP,保证所有主机在同一网段内。 四、实验内容:按照拓扑结构图连接网络,使用拓扑验证检查连接的正确性。练习一:察看TCP连接的建立和释放 1、主机 B、 C、D启动协议分析器进行数据捕获,并设置过滤条件(提取TCP协议)。 2、主机C打开TCP工具,类型选择“服务器”,端口填写大于1024的值;点击“创建”,如果端口被占用则选择其它。主机A打开TCP工具,类型选择“客户端”,地址填入主机C的IP地

计算机网络实验报告

农林大学计算机与信息学院 信息工程类 实验报告 课程名称:计算机网络 姓名: 系:计算机科学与技术系 专业:计算机科学与技术 年级:2011级 学号: 指导教师:周术成老师 职称: 2014年 5 月 4 日

农林大学计算机与信息学院实验报告 系:计算机与信息系专业:计算机科学与技术年级:2011 :学号:实验课程:_ 计算机网络 实验室号____田C-305__ 计算机号:实验时间: 指导教师签字:成绩: 实验一以太网组网实验 1.实验目的和要求 1.熟悉局域网所使用的基本设备 2. 掌握以太网组建方法 3. 掌握网络连通性测试方法 2.实验原理 以太网事实上是一簇局域网技术,不同的以太网在链路层帧头的格式、电缆的类型和传输速度上有很大的差异以太网可以利用同轴电缆、双绞线、光缆等不同的传输介质进行组网,也可以运行10Mb/s、100Mb/s、1000Mb/s 的网络速度。不管采用何种传输介质,以及网络速度各不相同,只要是以太网,采用的都是CSMA/CD介质访问控制方法。即任何结点没有可预约的发送时间,所有结点平等地争用发送时间,并随机地发送数据。 组建局域网常用的传输介质为双绞线,作为10BASE-T 和100BASE-TX 以太网的传输介质,非屏蔽双绞线在组网中起着重要的作用。非屏蔽双绞线UTP 中的8 芯导线采用了不同的颜色,分成4 对,其中橙和橙白一对,绿和绿白一对,蓝和蓝白一对,棕和棕白一对。以太网使用的UTP 分为直通UTP 和交叉UTP。 UTP 双绞线有两种接法:T568A 标准和T568B 标准。 直通UTP:线的两头都按T568B 线序标准连接。 交叉UTP:线的一头按T568A 线序连接,另一头按T568B 线序连接。 组装不同类型的局域网需要不同的设备,10Base-T 和100Base-TX 组网所需要的设备有:UTP 电缆、以太网卡、10M/100M 集线器、以太网交换机等。现在的以太网在逻辑上采用星型拓扑结构,用这种拓扑结 构,每台计算机用电缆线连接到共享网络设备上,如集线器和交换机等。 集线器和交换机都是用以太网接口连接多台设备,然而,它们在实现上有很大不同。集线器是第1 层设备,是以太网的集中连接点,具有信号放大功能,扩大以太网的地理围。通常采用RJ-45 接口,计算 机或其他终端设备通过双绞线电缆与集线器相连。当数据到达集线器的一个端口后,集线器不进行过滤处 理,直接将收到的数据包复制并广播到所有其他的端口,而不管这些端口连接的设备是否需要这些数据。 因此,网络中集线器数量越多,整个网络的性能就越差。 一般以太网的拓扑既用到集线器也用到交换机,集线器连接到交换机端口上,计算机连接到集线器上。在这种配置里,连接在同一集线器的计算机能看到彼此传输的数据,并且一次只能有一个传输;但在

计算机网络原理(实验指导书)

计算机网络原理实验指导书 中原工学院 计算机学院网络工程系 2014年12月10日

实验一Windows系统网络命令的使用 一、实验目的 1. 了解Windows操作系统提供的各种网络命令的功能。 2. 熟悉Windows操作系统提供的各种网络命令的使用方法和输出格式。 3、掌握常用的网络命令,能用ping 、ipconfig等命令工具来进行网络测试、使用tracert路由跟踪命令、使用route、netstat、arp等命令查看网络状态。 二、实验内容 1、常用网络测试命令PING的使用 2、网络配置查看命令IPCONFIG的使用 3、网络连接统计命令NETSTAT的使用 4、网络路由表操作命令ROUTE的使用 5、地址解析命令ARP的使用 6、路由跟踪tracert命令的使用 三、实验步骤 (一)常用的网络测试工具-PING.EXE 1、工作原理 Ping的主要作用是验证与远程计算机的连接。该命令只有在安装了TCP/IP 协议后才可以使用。向远程计算机通过ICMP协议发送特定的数据包,然后等待回应并接收返回的数据包,对每个接收的数据包均根据传输的消息进行验证。默认情况下,传输四个包含32 字节数据(由字母组成的一个循环大写字母序列)的回显数据包。 过程如下: (1)通过将ICMP 回显数据包发送到计算机,并侦听回显回复数据包来验证与一台或多台远程计算机的连接。 (2)每个发送的数据包最多等待一秒。 (3)打印已传输和接收的数据包数。 2、用法 ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]] [-w timeout] destination-list 参数一览表:

计算机网络实验报告完整版

华中科技大学文华学院 计算机网络 实 验 报 告 姓名: 学号: 学部(系):信息科学与技术学部 专业年级: 指导教师:朱琳琳 2014年4月

实验1 常用网络命令 1.实验目的 ●掌握常用网络命令的使用方法; ●熟悉和掌握网络管理、网络维护的基本内容和方法 2. 实验前的准备 ●阅读本实验的内容及操作步骤; 3. 实验内容 (1)、arp命令 Arp –a 查看本地局域网内所有用户ip和mac地址绑定关系。 Arp –s 用于在计算机ARP表中添加一个静态的ARP记录。

(2)、ipconfig命令 Ipconfig /all 显示所有适配器的完整TCP/IP配置

Ipconfig /displaydns 显示DNS客户解析器缓存的内容 Ipconfig /flushdns 清理并重设DNS客户解析器缓存的内容。

(3)、Nbtstat命令 Nbtstat -n nbtstat –s ip 通过IP显示另一台计算机的物理地址和名字列表。如nbtstat –s192.168.0.113 (4)、netstat命令 Netstat –a 显示所有有效连接(包括TCP和UDP两种)的信息,如图。

Netstat –n 显示所有活动的TCP 连接以及计算机侦听的TCP 和UDP 端口。 Netstat –r 显示 IP 路由表的内容。该参数与 route print 命令等价。 (5)、ping 命令 Ping后加上ip地址或域名,命令用来检测TCP/IP的安装或运行存在的某些最基本的问题。 可直接键入PING寻求帮助

计算机网络实验报告

计算机网络实验报告

实验1.跨交换机实现V ALN 1.1 实验环境 (1)Windows 操作系统的计算机 (2)https://www.doczj.com/doc/a818129647.html,NP.v6.0.Final.Beta (3).NET Framework 2.0 (4)Adobe Acrobat Reader 1.2 实验目的 理解VLAN如何跨交换机实现。 1.3 背景描述 假设宽带小区城域网中有两台楼道交换机,住户PC1、PC2、PC3、PC4分别接在交换机一的0/1、0/2端口和交换机二的0/1、0/2端口。PC1和PC3是一个单位的两家住户,PC2和PC4是另一个单位的两家住户,现要求同一个单位的住户能够互联互通,不同单位的住户不能互通。 1.4 实现功能 在同一VLAN里的计算机系统能跨交换机进行相互通信,而在不同VLAN 里的计算机系统不能进行相互通信。 1.5实验设备 Switch2950 2台 Pc 4台 1.6 实验步骤 (1).用Boson Network Designer 完成实验拓补图并连接好

(2).在模拟器重配置交换机和pc 。 先打开‘Boson NetSim’软件,再在‘Boson Network Designer’中点击Load…进行加载,进入Boson模拟器的环境,一边进行相关配置。 1)交换机S1进行配置 Switch>enable Switch#vlan database Switch(vlan)#vtp domain xyz Switch(vlan)#vtp server Switch(vlan)#vlan 2 name jsjx Switch(vlan)#exit

东南大学计算机网络第二次实验报告

东南大学自动化学院 实验报告 课程名称:信息通信网络概论 第2次实验 实验名称:FTP客户端通信程序设计 院(系):自动化专业:自动化 姓名:学号: 实验室:金智楼5楼实验组别: 同组人员:实验时间:2016 年12 月13 日评定成绩:审阅教师:

目录 一.实验目的和要求 (3) 二.实验原理 (3) 三. 实验方案与实验步骤 (3) 四.实验设备与器材配置 (4) 五.实验记录 (4) 六.实验总计 (8) 七.思考题或讨论题 (9) 附录:部分代码

一.实验目的和要求 1.了解Windows下的TCP/IP通信方式与网络操作; 2.熟悉FTP的编程的过程; 3.学会用可视化编程语言编写调试简单的通信程序。 二.实验原理 在使用MFC编程时,要连接到FTP服务器是一件非常简单的事情,只需要两个简单的步骤,首先必须建立一个CinternetSession对象,用类CinternetSession创建并初始化一个或几个同时存在的Internet会话(Session),并描述与代理服务器的连接(如果有必要的话),如果在程序运行期间需要保持与Internet的廉洁,可以创建一个CinternetSession对象作为类CwinApp的成员。MFC中的类CftpConnection管理我们与Internet服务器的连接,并直接操作服务器上的目录和文件,FTP时MFC的WinInet支持的三个Internet功能之一,我们需要先创建一个CinternetSession实例和一个CftpConnection对象就可以实现和一个FTP服务器通信,我们不需要直接创建CftpConnection对象,而是通过调用CinternetSession::GetFtpConnection来完成这项工作。他创建CFtpConnection对象并返回一个指向该对象的指针。 三.实验方案与实验步骤(请绘制流程图) 1、实验方案

计算机网络实验报告xx

实验一网络命令与使用 实验要求: 1、在窗口中显示网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关 2、向一台电脑无限制的发送数据包,此数据包大小为60000byte 3、查看本地计算机或另一台计算机的ARP高速缓存中的当前内容 4、从一台ftp服务器上下载一份文件 实验过程: 1、在窗口中显示网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关 在命令行输入:ipconfig 命令 2、向一台电脑无限制的发送数据包,此数据包大小为60000byte 在命令行格式:ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]] [-w timeout] destination-lis

其中-t表示ping指定计算机直到中断,-l定义发送数据包的长度。 3、查看本地计算机或另一台计算机的ARP高速缓存中的当前内容 命令行格式:ARP -a [inet_addr] [-N if_addr] 4、从一台ftp服务器上下载一份文件 命令行格式:ftp [-v] [-n] [-i] [-d] [-g] [-s:filename] [-a] [-w:windowsize]

[computer] 《计算机网络》实验指导书(24学时).doc 实验三网络协议分析 一,使用Ethereal分析软件捕获一段Ping命令的数据流,并分析其工作过程:如图所示: 第一行suorce为172.16.38.5为我的主机名,Destination 为172.16.38.3 为我发送的目的地主机名。后面的request表明我请求发送 第二行suorce为172.16.38.3为目的地的主机名,Destination 为172.16.38.5 为我的主机名。后面的replay表明目的地主机名向我发送信息表明收到了我发的数据包。 下面是命令行的截图:

相关主题
文本预览
相关文档 最新文档