《计算机网络编程》复习题.docx 下载本文

内容发布更新时间 : 2024/11/16 1:45:56星期一 下面是文章的全部内容请认真阅读。

*/

#include #include #include

#pragma comment (libz nws2_3211) void getcurtime(char* curtime) {

tm;//time?h

time(&tm);//time?h sprintf (curtime, 11 %s\\nH z ctime (&tm)); )

int main()

{

int iResult;

WORD wVersionRequested; WSADATA wsaData;

SOCKET serversocket; struct sockaddr_in service; char on = 1; char msg[256];

serverSocket = socket(AF_INET, SOCK_DGRAM, 0);

setsockopt(serverSocket z SOL_SOCKETf S 0_BROAD CAST, &on, sizeof

(on) ) ; //允许发广播包

service.sin_family = AF_INET; service.sin_port = htons (9999);

service?sin_addr?s_addr = inet_addr(”226?6?6?6\

printf ( ”每3秒向组226 ? 6.6.6发包,告之本机的时间\\n” );

while (1) {

getcurtime(msg);

sendto(serverSocket, msg, strlen(msg)r 0A (sockaddr

*)&serverSocket, sizeof (serverSocket));

printf(H%s\\nu,msg);

Sleep (3000);/* sleep 3 seconds between send */

} closesocket(serverSocket); WSACleanup(); return 0; }

3?协议分析

3?1? IP数据报头部最大/小长度、头部选项最大/小长度,最多记录路由个数

头部最小长度:20 Bytes 头部最大长度:60 Bytes 选项最小t度:0 Bytes 选项最小长度:40 Bytes 最多记录路由:9个

3?2? 程序设计步骤:MyPing

(源主机发送类型为8代码为0的“回送请求报文”,当目标主机收到该报文时,将标 识符、序号、数据区复制以组成类型为0代码为0的“冋送应答报文”,发送给源主机。)

1) 创建原始套接字;

2) 设置套接字的超时选项(如6秒);

3) 构造ICMP数据报:类型为8代码为0回送请求;

4) 构造TP数据报,将上述的ICMP数据报作为IP数据报的数据部分;设置超时选 项; 5) 发送IP数据报到目标IP地址、端口;

6)若收到目标主机的类型为0代码为0的回头应答报文,则表示目标地址、端口号 可达;

3?3? 程序设计步骤:路由MTU发现

1) 创建原始套接字(ICMP协议); 2) 打开选项; 3) 构造IP报文:

4) 填写头部:报文头部长度设置为最大,不允许分片; 5) 填写数据:TCP数据报;

当路由器发现报文长度太长,需要分片,但报文头部设置为不允许分片,则路由器丢弃 该报文,并发送ICMP报文给源主机;本地收到ICMP报文后,将报文长度设置为收到的 ICMP报文长度,再次重新发送IP数据报。直到源主机收到来自目的主机的TCP确认报文, 最后一次发送的报文长度就是该路径的MTUo

3?4? 程序设计步骤:记录两主机之间经过的路由

1) 创建原始套接字;

2) 打开记录路由选项:选项类为0;选项号为7;选项长度为39;指针初值为4;

初始时,指针指向存放第一个工P地址的位置,经过各路由器时,存入每个路由器的IP 地址,指针的值每次加4;最多可存放9个IP地址;

3?5? 程序设计步骤:FTP断点续传

1) USER用户名 2) PASS 口令

3) TYPE I (文件类型:二进制) 4) FILE F (文件的数据结构:文件结构) 5) MODE S (文件的传输方式:流) 6) PORT IP端口号(客户端:EP、端口号) 7) REST N (N:己下载的字节数) 8) RETR文件名 9) QUIT (退出)

3?6? 程序设计步骤:FTP多线程下载

1) 创建N个线程,通过“SIZE文件名”获収文件大小M; 2) 每个线程历经3?5中的1)-6)步; 3) 第 i 个线程:REST I*M/N; 4) RETR文件名; 5) QUIT

3?7?FTP主动、被动方式的区别及适用的场合

FTP数据连接有两种方式:主动方式和被动方式;

主动和被动是就服务器而言的;

主动方式:服务器主动向客户端发起连接,客户端使用PORT命令将本地的IP地址和 端口号告诉服务器,服务器使用20端口连接客户端的端口;

被动方式:服务器等待客户端的连接,客户端使用PASV命令使服务器处于被动传输模 式,服务器使用PORT命令将服务器的端口(大于1024的非特权端口)告诉客户端,客户 端向服务器发起连接;

主动模式适用场合:服务器在子网内;

被动模式适用场合:客户端在子网内;客户端的防火墙可能会阻塞某些非特权端口,导 致服务器无法主动连接客户端:

3?8? 程序设计步骤:HTTP断点续传

1) 确定已下载数量n; 2) get方法头部:

range : bytes=n-(从n处开始下载)

3?9? 程序设计步骤:HTTP文件多线程下载

通过HTTP协议的head方法,提取cont ent-length内容,获取文件的大小M; 将文件分成n份,每个线程都向服务器提出文件下载请求,第i个线程的get方法头 nP

Range: bytes=(i-1)*M/N - i * M/N;

3?10? HTTP状态管理方法

HTTP是无状态的。若要对购物车进行状态管理,方法有:

1) 通过get方法,传递参数 2) 利用表单中的隐藏域 3) session 4) cookie

4?扩展

4?1?TCP连接池的设计方法

定义连接池的大小N;

创建一个大小为N的TCP套接字数组,每个套接字绑定到本地IP和端口号; 创建一个标记数组,大小为N,分别标记对应的套接字是否空闲;

当有新的连接请求时,在套接字数组中取出一个空闲的套接字,进行连接,并将该套接 字的状态改为“正在使用”;

当有连接结束时,释放该连接,并将对应的状态改为“空闲”;

4?2? 服务器端程序如何判断客户端程序是否在线

客户端按照一定的时间间隔向服务器发送心跳包,以通知服务器自己是在线的。若服务 器在间隔一定的时间(如5分钟)后,没有收到心跳包,则认为该客户端不在线,服务器 进行相

应的数据保存及资源释放处理。

5?其他