当前位置:文档之家› 《互联网原理和应用》实验大纲和指导书2011

《互联网原理和应用》实验大纲和指导书2011

《互联网原理和使用》实验指导书

计算机学院

2010年7月

第一部分、《互联网原理和使用》实验教学大纲 (2)

1、实验课程基本情况 (2)

2、课程实验介绍 (2)

3、实验项目设置 (3)

第二部分、《互联网原理和使用》实验指导书 (4)

实验一SOCKET网络程序设计 (4)

实验二使用层协议分析:TELNET及FTP (12)

实验三使用层HTTP协议实验 (15)

第一部分、《互联网原理和使用》实验教学大纲1、实验课程基本情况

院(系):计算机

课程编号

(和学校教学指导书同)课程名

课程

类别

课程

性质

课程

属性

实验

学期

学时数实验

个数

实验者专业代

实验

学分

1 必修

2 限选

3 任选

1独立

设课

2非独立

设课

1 基础

2 技术

基础

3 专业

1 本科

2 专科

3研究生

4 其他

610819 4互联

网原

理和

使用

2 1

3 3 上5

4 14 4 4 1

08061

3W

0.5

2、课程实验介绍

(1)课程简介及要求

《互联网原理和使用》是网络工程技术方向模块的限选课和计算机其它专业的选修专业课。本课程任务是在学习《计算机网络》之后,再进一步加深对计算机互联网组成的完整体系结构、网络协议和主要网络使用。重点理解和掌握互联网(因特网)TCP/IP的体系结构、各部分协议和主要使用软件工作原理;掌握因特网的结构特点及其使用操作。

(2)实验目的及要求

在实验室,通过网络协议仿真设备相关实验,进一步理解主要互联网协议和网络使用接口的理解。要求每个学生都能认真完成实验,并写出详细的实验报告。

(3)实验方式

在学院网络工程实验室,实验分小组来做,4个同学一个小组,分为不同的协议编辑和协议分析两端,分别操作网络协议仿真系统完成,或4个同学一组实际操作路由交换设备完成。

(4)测试方法及评分

每个实验都做出相应的结果来,并且上交了详细的实验报告,则可得到该课程的15%的成绩,否则根据情况扣除相应的成绩。

(5)主要仪器设备

网络协议仿真实验系统、联网PC机。

(6)教材及参考书

教材:《互联网原理和使用实验指导书》,自编

3、实验项目设置

实验室名称:计算机学院网络工程实验室

实验课程及编号项

实验项目名称内容提要实验

学时

计划/

已开

拟配

仪器

套数

已配

仪器

套数

每套

人数

实验属性

1 验证

2 设计

3 综合

4 科技

创新

开出

要求

1 必做

2 选做

1 SOCKET网

络编程设计

1、通过C语言和

WinSock2进行简单的

无连接的网络服务器和

客户程序设计;

2、实现网络UDP数

据传输;

3、并对捕获数据进行

分析。

3 20端

(套

20端

(套

2 3 1

2 FTP实验1、TELNET协议格式

和命令,

2、FTP协议格式和命

3、TELNET和FTP操

2 20端

(套

20端

(套

2 1

3 使用层HTTP

协议实验

1、HTTP协议的格式

2、TCP和HTTP协议

关系

3、HTTP通信过程和

特性。

3 20端

(套

20端

(套

2 1 1

4 4、

责任编辑:范冰冰

第二部分、《互联网原理和使用》实验指导书

实验一SOCKET网络程序设计

【实验目的】

1、进一步掌握UDP及TCP协议的工作原理

2、掌握SOCKET编程的基本方法

3、学习使用C语言和WinSock2进行简单的无连接的网络程序设计,实现网络数据传输【实验学时】

5学时

【实验类型】

综合型

【实验要求】

实验前根据给出的服务器端程序编好客户端程序。

【实验原理】

1、关于使用套接字编程的一些基本概念

(a) 半相关和全相关

半相关

在网络中,用一个三元组可以在全局唯一标志一个进程:

(协议,本地地址,本地端口号)

这样一个三元组,叫做一个半相关(half-association),它指定连接的每半部分。

全相关

一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识:

(协议,本地地址,本地端口号,远地地址,远地端口号)

这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。

(b) TCP/IP协议的地址结构为:

struct sockaddr_in{

short sin_family; /*AF_INET*/

u_short sin_port; /*16位端口号,网络字节顺序*/

struct in_addr sin_addr; /*32位IP地址,网络字节顺序*/

char sin_zero[8]; /*保留*/

}

(c) 套接字类型

TCP/IP的socket提供下列三种类型套接字。

流式套接字(SOCK_STREAM)

提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。文件传送协议(FTP)即使用流式套接字。

数据报式套接字(SOCK_DGRAM)

提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。网络文件系统(NFS)使用数据报式套接字。

原始式套接字(SOCK_RA W)

该接口允许对较低层协议,如IP、ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。

(d) 基本套接字系统调用

为了更好地说明套接字编程原理,下面给出几个基本套接字系统调用说明。

(1) 创建套接字──socket()

使用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向使用程序提供创建套接字的手段,其调用格式如下:

SOCKET socket(int af, int type, int protocol);

该调用要接收三个参数:af、type、protocol。参数af指定通信发生的区域,UNIX系统支持的地址族有:AF_UNIX、AF_INET、AF_NS等,而DOS、WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址族和协议族相同。参数type 描述要建立的套接字的类型。参数protocol说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。根据这三个参数建立一个套接字,并将相应的资源分配给它,同时返回一个整型套接字号。因此,socket()系统调用实际上指定了相关五元组中的“协议”这一元

(2) 指定本地地址──bind()

当一个套接字用socket()创建后,存在一个名字空间(地址族),但它没有被命名。bind()将套接字地址(包括本地主机地址和本地端口地址)和所创建的套接字号联系起来,即将名字赋予套接字,以指定本地半相关。其调用格式如下:

int bind(SOCKET s, const struct sockaddr FAR * name, int namelen);

参数s是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。参数name 是赋给套接字s的本地地址(名字),其长度可变,结构随通信域的不同而不同。namelen表明了name 的长度。

如果没有错误发生,bind()返回0。否则返回值SOCKET_ERROR。

地址在建立套接字通信过程中起着重要作用,作为一个网络使用程序设计者对套接字地址结构必须有明确认识。

(3) 建立套接字连接──connect()和accept()

这两个系统调用用于完成一个完整相关的建立,其中connect()用于建立连接。无连接的套接字进程也可以调用connect(),但这时在进程之间没有实际的报文交换,调用将从本地操作系统直接返回。这样做的优点是程序员不必为每一数据指定目的地址,而且如果收到的一个数据报,其目的端口未和任何套接字建立“连接”,便能判断该端口不可操作。而accept()用于使服务器等待来自某客户进程的实际连接。

connect()的调用格式如下:

int connect(SOCKET s, const struct sockaddr FAR * name, int namelen);

参数s是欲建立连接的本地套接字描述符。参数name指出说明对方套接字地址结构的指针。对方套接字地址长度由namelen说明。

如果没有错误发生,connect()返回0。否则返回值SOCKET_ERROR。在面向连接的协议中,该调用导致本地系统和外部系统之间连接实际建立。

由于地址族总被包含在套接字地址结构的前两个字节中,并通过socket()调用和某个协议族相关。因此bind()和connect()无须协议作为参数。

accept()的调用格式如下:

SOCKET accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen);

参数s为本地套接字描述符,在用做accept()调用的参数前应该先调用过listen()。addr 指向客户方套接字地址结构的指针,用来接收连接实体的地址。addr的确切格式由套接字创建时建立的地址族决定。addrlen 为客户方套接字地址的长度(字节数)。如果没有错误发生,accept()返回一个SOCKET类型的值,表示接收到的套接字的描述符。否则返回值INV ALID_SOCKET。

accept()用于面向连接服务器。参数addr和addrlen存放客户方的地址信息。调用前,参数addr 指向一个初始值为空的地址结构,而addrlen 的初始值为0;调用accept()后,服务器等待从编号为s的套接字上接受客户连接请求,而连接请求是由客户方的connect()调用发出的。当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个和s有相同特性的新套接字号。新的套接字可用于处理服务器并发请求。

四个套接字系统调用,socket()、bind()、connect()、accept(),可以完成一个完全五元相关的建立。socket()指定五元组中的协议元,它的用法和是否为客户或服务器、是否面向连接无关。bind()指定五元组中的本地二元,即本地主机地址和端口号,其用法和是否面向连接有关:在服务器方,无论是否面向连接,均要调用bind();在客户方,若采用面向连接,则可以不调用bind(),而通过connect()自动完成。若采用无连接,客户方必须使用bind()以获得一个唯一的地址。

以上讨论仅对客户/服务器模式而言,实际上套接字的使用是非常灵活的,唯一需遵循的原则是进程通信之前,必须建立完整的相关。

(4) 监听连接──listen()

此调用用于面向连接服务器,表明它愿意接收连接。listen()需在accept()之前调用,其调用格式如下:

int listen(SOCKET s, int backlog);

参数s标识一个本地已建立、尚未连接的套接字号,服务器愿意从它上面接收请求。backlog 表示请求连接队列的最大长度,用于限制排队请求的个数,目前允许的最大值为5。如果没有错误发生,listen()返回0。否则它返回SOCKET_ERROR。

listen()在执行调用过程中可为没有调用过bind()的套接字s完成所必须的连接,并建立长度为backlog的请求连接队列。

调用listen()是服务器接收一个连接请求的四个步骤中的第三步。它在调用socket()分配一个流套接字,且调用bind()给s赋于一个名字之后调用,而且一定要在accept()之前调用。

(5) 数据传输──send()和recv()

当一个连接建立以后,就可以传输数据了。常用的系统调用有send()和recv()。

send()调用用于在参数s指定的已连接的数据报或流套接字上发送输出数据,格式如下:int send(SOCKET s, const char FAR *buf, int len, int flags);

参数s为已连接的本地套接字描述符。buf 指向存有发送数据的缓冲区的指针,其长度由len 指定。flags 指定传输控制方式,如是否发送带外数据等。如果没有错误发生,send()返回总共发送的字节数。否则它返回SOCKET_ERROR。

recv()调用用于在参数s指定的已连接的数据报或流套接字上接收输入数据,格式如下:int recv(SOCKET s, char FAR *buf, int len, int flags);

参数s 为已连接的套接字描述符。buf指向接收输入数据缓冲区的指针,其长度由len 指定。flags 指定传输控制方式,如是否接收带外数据等。如果没有错误发生,recv()返回总共接收的字节数。如果连接被关闭,返回0。否则它返回SOCKET_ERROR。

(6) 输入/输出多路复用──select()

select()调用用来检测一个或多个套接字的状态。对每一个套接字来说,这个调用可以请求读、写或错误状态方面的信息。请求给定状态的套接字集合由一个fd_set结构指示。在返回时,此结构被更新,以反映那些满足特定条件的套接字的子集,同时,select()调用返回满足条件的

套接字的数目,其调用格式如下:

int select(int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR * timeout);

参数nfds 指明被检查的套接字描述符的值域,此变量一般被忽略。

参数readfds 指向要做读检测的套接字描述符集合的指针,调用者希望从中读取数据。参数writefds 指向要做写检测的套接字描述符集合的指针。exceptfds 指向要检测是否出错的套接字描述符集合的指针。timeout 指向select()函数等待的最大时间,如果设为NULL 则为阻塞操作。select()返回包含在fd_set 结构中已准备好的套接字描述符的总数目,或者是发生错误则返回SOCKET_ERROR 。

(7) 关闭套接字──closesocket()

closesocket()关闭套接字s ,并释放分配给该套接字的资源;如果s 涉及一个打开的TCP 连接,则该连接被释放。closesocket()的调用格式如下:

BOOL closesocket(SOCKET s);

参数s 待关闭的套接字描述符。如果没有错误发生,closesocket()返回0。否则返回值SOCKET_ERROR 。

2、用于无连接协议(如UDP )的SOCKET 系统调用流程框图:

3、面向连接协议(如TCP )的SOCKET 系统调用流程框图:

Socket()

Bind()

等待来自客户的数据

recvfrom()

sendto()

数据处理

服务员 数据(请

数据(回

Socket()

sendto()

recvfrom()

客户

bind()

4、其他原理请参考教材。

【实验步骤】

使用UDP 协议的无连接客户-服务员程序设计。

根据实验原理中介绍的内容,设计一个无连接的客户-服务员系统,实现二者之间的数据传递。下面是一个简单的UDP 客户-服务员程序的实例,作为参考。

说明:下述服务员程序保存在服务器端,可以直接从服务器拷贝,并稍作修改(如服务员IP 地址)后在本地进行编译连接并运行。

数据采集器的红色按钮要求按出来,使监控机捕获到局域网的数据。 #include #include

#define SERV_UDP_PORT 6000 /*服务员进程端口号,视具体情况而定*/ #define SERV_HOST_ADDR "10.60.46.58" /*服务员地址,视具体情况而定*/ /* 宏定义用来打印错误消息*/ #define PRINTERROR(s) \

fprintf(stderr,"\n%: %d\n", s, WSAGetLastError())

//////////////////////////////////////////////////////////// //数据报通信的服务员端子程序 //

//////////////////////////////////////////////////////////// void DatagramServer(short nPort)

服务员

建立连接

数据(请求)

数据(回答)

send()

Socket()

connect ()

recv()

客户

Listen()

Socket()

Bind()

等待来自客户的连接请求

accept()

send()

recv()

数据处理

{

SOCKET theSocket;

/*创建一个数据报类型的socket*/

theSocket = socket(AF_INET, // 地址族

SOCK_DGRAM, // socket类型

IPPROTO_UDP);// 协议类型:UDP

/*错误处理*/

if (theSocket == INVALID_SOCKET)

{

PRINTERROR("socket()");

return;

}

/*填写服务员地址结构*/

SOCKADDR_IN saServer;

saServer.sin_family = AF_INET;

saServer.sin_addr.s_addr = INADDR_ANY; // 由WinSock指定地址saServer.sin_port = htons(nPort); // 服务员进程端口号

/* 将服务员地址和已创建的socket绑定*/

int nRet;

nRet = bind(theSocket, // Socket 描述符

(LPSOCKADDR)&saServer, // 服务员地址

sizeof(struct sockaddr) //地址长度

);

/*错误处理*/

if (nRet == SOCKET_ERROR)

{

PRINTERROR("bind()");

closesocket(theSocket);

return;

}

/* 等待来自客户端的数据*/

SOCKADDR_IN saClient;

char szBuf[1024];

int nLen;

while(1)

{

/*准备接收数据*/

memset(szBuf, 0, sizeof(szBuf));

nRet = recvfrom(theSocket, // 已绑定的socket

szBuf, // 接收缓冲区

sizeof(szBuf), // 缓冲区大小

0, // Flags

(LPSOCKADDR)&saClient, // 接收客户端地址的缓冲区

&nLen); // 地址缓冲区的长度

/*打印接收到的信息*/

printf("\nData received: %s", szBuf);

/* 发送数据给客户端*/

strcpy(szBuf, "From the Server");

sendto(theSocket, // 已绑定的socket

szBuf, // 发送缓冲区

strlen(szBuf), // 发送数据的长度

0, // Flags

(LPSOCKADDR)&saClient, // 目的地址

nLen); // 地址长度

}

closesocket(theSocket);

return;

}

////////////////////////////////////////////////////////////

//数据报服务员端主程序 //

////////////////////////////////////////////////////////////

void main()

{

WORD wVersionRequested = MAKEWORD(1,1);

WSADATA wsaData;

int nRet;

short nPort;

nPort = SERV_UDP_PORT;

/* 初始化Winsock*/

nRet = WSAStartup(wVersionRequested, &wsaData);

if (wsaData.wVersion != wVersionRequested)

{

fprintf(stderr,"\n Wrong version\n");

return;

}

/*调用数据服务员子程序*/

DatagramServer(nPort);

/*结束WinSock*/

WSACleanup();

}

请学生认真阅读分析上述服务员程序,然后根据实验原理二中介绍的内容,自行编写相应的无连接的客户端程序并运行。从而实现客户和服务器间的数据传输。

要求在仿真机端运行客户端进程,在监控机端捕获数据并进行分析。

【思考问题】

根据实验中记录的客户和服务器程序的端口号并结合程序,说明:

在客户/服务器模型当中,客户进程的端口号和服务器进程的端口号都是由程序给出说明的吗?为什么?

【实验报告要求】

1、写出客户端程序。

2、回答提出的问题。

实验二使用层协议分析:TELNET及FTP

【实验目的】

了解TELNET、FTP协议

【实验学时】

4学时

【实验类型】

综合型

【实验要求】

1、理解TELNET协议及作用

2、理解FTP协议及工作原理

【实验原理】

1、

名称代码(十进制)描述

EOF 236 文件结束符

SUSP 237 挂起当前进程(作业控制)

ABORT 238 异常中止进程

EOR 239 记录结束符i

SE 240 自选项结束

NOP 241 无操作

DM 242 数据标记

BRK 243 中断

IP 244 中断进程

AO 245 异常中止输出

AYT 246 对方是否还在运行?

EC 247 转义字符

EL 248 删除行

GA 249 继续进行

SB 250 子选项开始

WILL 251 同意启动(enable)选项

WONT 252 拒绝启动选项

DO 253 认可选项请求

DONT 254 拒绝选项请求

IAC 255 数据字节255

选项协商:4种请求

1)WILL:发送方本身将激活选项

2)DO:发送方想叫接受端激活选项

3)WONT:发送方本身想禁止选项

4)DON’T:发送方想让接受端去禁止选项

常用Telnet选项代码:

选项标识名称

1 回显

3 抑制继续进行

5 状态

6 定时标记

24 终端类型

31 窗口大小

32 终端速度

33 远程流量控制

34 行方式

36 环境变量

【实验步骤】

练习一:运行TELNET命令捕获数据并分析

1、在DOS命令提示符下运行:

a.telnet 本机名

b.telnet 本机IP地址

对上述两项操作,在监控机端是否捕获到数据?分析原因。

2、从地址本中选择另一个主机的主机名和IP地址,在DOS命令提示符下运行:

a.telnet 主机名

b.telnet 主机IP地址

对上述两项操作,在监控机端捕获数据,比较这两项操作的执行过程有何不同,分析原因。

3、实验环境中的服务器上的telnet服务已经启动,并且提供一个公共帐号,其用户名:user;口令:无。

在DOS命令提示符下运行:

(a) telnet 服务器主机域名;

(b) 在“Login:”提示符后输入用户名,然后在“Password:”提示符后输入口令;

(c) 在虚拟终端上进行一些简单的操作(可不做);

(d) 按“CTRL+]”回到telnet提示符下;

(e) 输入“quit”退出telnet。

在监控机端捕获数据,分析该次telnet操作的完整过程:

能否捕获到用户名及密码?telnet明文传输安全吗?

练习二:运行FTP。

1、实验环境中的服务器上的FTP服务已经启动,并且提供一个公共帐号,其用户名:anonymous;口令:(无)

在DOS命令提示符下运行:

(a) ftp 服务器主机域名(或服务器的IP地址);

(b) 在“Login:”提示符后输入用户名(anonymous),然后在“Password:”提示符后输

入口令(无);

(c) 在客户端上进行一些简单的操作(可不作),如:

pwd

ls

help

……

(d) 在ftp提示符下输入“quit”退出ftp。

2、在监控机一端捕获数据,对该过程中仿真机发送和接收的全部TCP数据包:

(a) 记录每个TCP数据包的TCP协议头部分,关注其中以下字段的值:

源、目的端口号;

序号和确认序号;

ACK、SYN和FIN等标志位;

窗口大小;

(b) 根据各字段的值分析TCP协议的建立连接、会话和断开连接的全过程。

(c) 分析该过程中所有TCP包的源端口号和目的端口号。

(d) 分析FTP的工作方式。

(e) 能否捕获到用户名及密码?telnet明文传输安全吗?

【实验报告要求】

1、回答提出的问题。

2、画出各会话流程图。

实验三 使用层HTTP 协议实验

【实验目的】

1、掌握HTTP 协议的使用

2、掌握HTTP 和TCP 协议的关系 2、了解HTTP 协议的实现方式 【实验学时】

3学时 【实验类型】

综合型 【实验要求】

1、了解HTTP 协议的通信过程

2、理解HTTP 协议的无连接、无状态特性

3、学习HTTP 协议的格式

4、理解HTTP 协议和TCP 协议的关系 【实验原理】

1、TCP 的首部

TCP 数据被封装在一个IP 数据报中,如图3-1所示。

IP 首部TCP 首部TCP 数据

IP 数据报

TCP 数据报

图3-1 TCP 数据在IP 数据报中的封装

图3-2显示TCP 的数据报格式。其首部的长度通常是20个字节。

16位源端口号

16位目的端口号

32位序号32位确认序号

16位窗口大小4位首部长度

保留(6位)

A C K

P S H

R S T

S Y N

F I N

U R G

16位检查和

16位紧急指针

选项数据1

16

17

32

图3-2 TCP 数据报的格式

URG (紧急指针):值为1时,表示此报文应尽快传送; ACK (确认比特):值为1时,表示此报文的确认序号字段有效; PSH (急迫比特):值为1时,表示此报文应立即传送; RST (复位比特):值为1时,表示出现严重差错必须释放连接,然后再重建传输连接; SYN (同步比特):值为1时,表示此报文在建立连接; FIN (终止比特):值为1时,表示此报文已是最后一个,要求释放传输连接。

TCP 段包含一个12字节长的伪首部,它是为了计算校验和而设置的。伪首部包含IP 首部

一些字段。

2、HTTP报文

共有两种通用类型:请求报文,响应报文。

(1)请求报文:包括请求行、首部,以及有时出现的主体。如图

请求行

首部

空行

主体

(只在某些报文中出现)

请求行:

请求类型

空格URL 空格HTTP版本

(方法)

请求类型:

常用的几种方法:

1:GET:客户要从服务器读取文档时使用。

2:HEAD:当客户想得到关于文档的某些信息但并不是要这个文档时使用。

3:POST:当客户要给服务器提供某些信息时使用。

4:PUT:当客户将新的或更换的文档存储在服务器上时使用。

5:PA TCH:和PUT相似,但它只包含必须在现有文件中出现的差异清单。

6:COPY:当需要将文件复制到另一个位置时使用。

7:MOVE:当需要将文件移到另一个位置时使用。

8:DELETE:当需要将服务器上的文档移走时使用。

9:LINK:当需要创建从一个文档到另一个位置的链接时使用。

10:UNLINK:当需要删除由LINK方法创建的链接时使用。

11:OPTION:当客户向服务器询问到一些可用的选项时使用。

URL

方法:// 主机: 端口/ 路径

方法:

主机:放置信息的计算机。计算机常使用”WWW”开始的别名.

端口:服务器的端口号,可选。

路径:放置文件的路径名。

(2)响应报文:

状态行

首部

空行

主体

(只在某些报文中出现)

HTTP版本空格状态码空格状态短语

状态码:

100系列:提供信息的;

200系列:指示成功的请求;

300系列:把客户重定向到另一个URL;

400系列:指示客户端差错;

500系列:指示服务器端差错。

状态短语:用来解释状态码。

3、其他原理请参考教材

【实验步骤】

练习一:编辑并发送TCP数据包。

说明:

1.在本实验中由于TCP连接有超时时间的限制,故仿真机端和监控机端的两位同学要

默契配合,某些步骤(如计算TCP校验和)要求熟练、迅速。

2.为了实现TCP三次握手过程的仿真,发送第一个连接请求帧之前,暂停仿真机端的

TCP/IP 协议(否则计算机系统的网络会对该请求帧发出拒绝响应)。

3.通过手工编辑TCP数据包实验,要求理解实现TCP连接建立、数据传输以及断开连

接的全过程。注意体会TCP首部中的序列号和标志位的作用。

a)ping 193.169.1.2,目的是让主控设备知道自己的MAC。

b)在“本地连接”属性处,取消仿真机端的TCP/IP 协议。

3、编辑TCP数据包――SYN帧。

(1) 打开协议仿真编辑器。

(2) 填写该帧的以太网协议首部:

①源MAC地址:本机MAC地址;

②目的MAC地址:注意如选择的目的主机和本机不在同一子网时,目的MAC

地址该怎样填写;

③“类型或长度”:0800(IP协议);

④DA TA不要填写内容。

(3) 填写IP协议头信息:

①上层协议类型:6(TCP);

②总长度:40(20IP头部+20TCP头部);

③首部校验和:留待最后计算;

④源IP地址;填写本机IP地址;

⑤目的IP地址:注意要和目的MAC地址对应;

⑥其它字段:任意。

(4) 填写TCP协议头信息:

①16位源端口号:任意大于1024的数,不要用下拉选择。

②16位目的端口号:如80(HTTP协议)、110(SMTP协议)等。

③32位序号:任意(记录下来,以备后面使用)。

④32位确认序号:0。

⑤首部长度和标志位:5002(即长度为20字节,标志SYN为1)。

⑥窗口大小:自定。

⑦校验和:覆盖TCP首部(包含伪首部)和TCP数据两部分,计算方法如下:

a)将0006(TCP协议类型值)填写到TCP的校验和字段;

b)将TCP总长度换算为十六进制(如20个字节换算为0014),填写到TCP

的紧急指针字段;

c)在十六进制显示区,从IP首部的源IP地址开始选中至TCP尾,右击鼠

标计算得到校验和,将该值填写到TCP校验和字段;

⑧紧急指针:0

(5) 填写IP协议头的首部校验和:使用前面介绍的方法计算。

4、发送TCP报文。

5、在监控机一端截获相应的应答报文并分析:

应答报文为什么帧?(看会话图中的标识)其发送序列号为,确认号为。

此时要求监控机一端的同学及时准确地捕获应答报文并迅速从中获得应答报文的发送序列号和确认号,并告之仿真机一端的同学;然后仿真机一端的同学根据应答报文提供的序号,继续编辑后续帧。

6、编辑第二个TCP数据包――ACK帧(尽量快地):

(a) 将第一个帧复制;

(b) 发送序号:应答报文的确认号(为什么?);

(c) 确认序号:应答报文中的发送序列号+1;

(d) 长度和标志位:5010(即ACK=1)。

(e)计算各校验和。

7、发送该TCP报文。

至此3次握手完成,TCP连接建立。

下面开始释放连接:

8、编辑第三个TCP数据包――ACK+FIN帧:

(a) 将第二个帧复制;

(b) 发送序号:前一发送帧的发送序号+1(请思考为什么?);

(c) 确认序号:同前一发送帧(请思考为什么?);

(d) 长度和标志位:5011(即ACK=1,FIN=1)。

(e) 计算各校验和。

9、发送该TCP报文。

10、在监控机一端截获报文并进行分析。

请画出整个会话过程。

注意:实验结束后启动仿真机端的TCP/IP协议。

练习二:通过IE浏览器学习HTTP协议。

1、在仿真机上打开IE浏览器;

2、在浏览器的地址栏中输入https://www.doczj.com/doc/db12376279.html,;

3、在监控机端捕获数据,分析数据包的传输过程,记录TCP连接的三次握手、序号、

确认号、数据长度和端口;一个网页是否只有一个进程?

4、在上面的网页上继续浏览一个链接,监控机端捕获数据并分析:是否需要新的TCP

连接?

5、在打开多个IE浏览器并连接到https://www.doczj.com/doc/db12376279.html, ,监控机端捕获数据并分析:

TCP连接情况有什么变化?

6、关闭IE浏览器,监控机端捕获数据并分析:TCP如何断开连接?

【思考问题】

结合实验过程中的实验结果,回答下列问题

1、如果在实验一发送建立连接请求帧之前,仿真机端不运行“PING 服务器”命令,而又停止了仿真机端的TCP/IP协议,可能出现什么情况?通过实验来验证你的答案。

2、根据实验中窗口的变化和确认序号,分析TCP协议所使用的滑动窗口协议机制。

3、当仿真机上同时打开多个浏览器窗口并访问同一WEB站点的不同页面时,系统是根据什么把返回的页面正确地显示到相应窗口的?

4、HTTP和TCP之间是什么关系?结合实验说明HTTP协议的无连接、无状态特性。【实验报告要求】

1、回答提出的问题。

2、画出TCP建立连接和断开连接的会话图。

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