您好,欢迎来到六九路网。
搜索
您的当前位置:首页「计算机网络基础课程设计方案」

「计算机网络基础课程设计方案」

来源:六九路网


信息技术学院

计算机网络基础

课 程 设 计 方 案

目录

课程设计说明 ....................................................................................................错误!未定义书签。 课程设计选题 ................................................................................................................................... 2

1. CRC算法模拟 ................................................................................................................... 2 2. 零比特填充模拟 ............................................................................................................... 2 3. 曼彻斯特编码模拟 ........................................................................................................... 2 4. 截断二进制指数退避算法 ............................................................................................... 3 5. 透明网桥自学习与转发帧算法模拟 ............................................................................... 3 6. IP分片模拟 ....................................................................................................................... 4 7. IP首部检验和算法模拟 ................................................................................................... 4 8. IPv4数据报封装模拟 ....................................................................................................... 5 9. 使用子网时IP分组转发模拟 .......................................................................................... 6 10. 距离向量算法模拟 ....................................................................................................... 7 11. UDP检验和算法模拟 ................................................................................................... 7 12. 利用滑动窗口实现流量控制模拟 ............................................................................... 8 13. 慢开始、拥塞避免算法模拟 ....................................................................................... 9 课程设计示例 ................................................................................................................................. 11

1. 字节填充法解决透明传输模拟 ..................................................................................... 11

课程设计选题

1. CRC算法模拟 【分值】20分 【页码】P68-69 【描述】

待传送的一组数据 M以二进制字符存储在input_m.txt文件中,生成多项式P以二进制字符存储input_p.txt文件中。编写CRC算法,计算冗余码R并输出到output_r文件中。 【提示】

a、模2加减可以采用按位异或运算的方法计算。 【举例】 input_m.txt 101001 input_p.txt 1101 output_r.txt 001 2. 零比特填充模拟 【分值】10分 【页码】P74 【描述】

待传送的原始数据以二进制字符存储在input.txt文件中,内含若干5个连续1的子串、6个连续1的子串。编写零比特填充算法,并将结果保存至output_f.txt文件;并且编写算法还原数据,结果保存至output_d.txt文件。 【提示】

a、原始数据只要包含5个连续1的子串、6个连续1的子串即可,内容任意。 【举例】 input.txt 11111010 output_f.txt 0111110010 output_d.txt 11111010 3. 曼彻斯特编码模拟 【分值】10分 【页码】P80 【描述】

待传送的原始数据以二进制字符存储在input.txt文件中。编写曼彻斯特编码模拟算法,将编码的结果保证至output_e.txt;并且编写从电压高低到二进制数据的解码算法,结果保存至output_d.txt。

【提示】

a、用字符“HL”代表电压“前高后低”,表示码元1;用字符“LH”代表电压“前低后高”,表示码元0。 【举例】 input.txt 1000100111 output_e.txt LHHLHLHLLHHLHLLHLHLH output_d.txt 1000100111

4. 截断二进制指数退避算法 【分值】10分 【页码】P82 【描述】

重传次数存储在input.txt文件中。编写截断二进制指数退避算法,计算得到的重传推迟时间存入output.txt文件。 【提示】

a、以太网争用期为51.2μs,最多重传次数为16——这些可预定义为常量。 b、若重传已经超过16次,则将重传推迟时间设置为-1μs,表示应丢弃该帧。 【举例】 input.txt 1 output.txt 0(说明:或51.2,随机选择;此括号内信息不是输出内容)

5. 透明网桥自学习与转发帧算法模拟 【分值】20分 【页码】P94-96 【描述】

网络拓扑由input_top.txt文件给出,数据帧发送事件由input_event.txt文件给出。网桥初始转发表为空。试编写透明网桥自学习与转发帧算法,将网桥处理完每一发送事件后的网桥帧转发策略和当前转发表输出到output.txt文件。 【提示】

a、为简单起见,可以仅考虑单个两端口的网桥。 b、input_top.txt文件的每行包括“主机”、“连接的网桥端口号”等拓扑信息,主机用字母(除字母“Z”)编号,网络端口用数字编号。 c、input_event.txt文件的每行给出“源主机”、“目的主机”等信息,其中用目的主机为“Z”表示广播帧。

d、网桥帧转发策略的可能结果有“丢弃”、“向端口x转发“、”泛洪“。 e、一行中的多个字段自行决定分隔符,比如空格或制表符等。 【举例】

input_top.txt:

A B C D A B C B 1 1 2 2 D A Z C input_event.txt: output.txt: 事件1:A to D; 网桥帧转发策略:泛洪; 转发表: A 1 事件2:B to A; 网桥帧转发策略:丢弃; 转发表: A 1 B 1 事件3:C to Z; 网桥帧转发策略:泛洪; 转发表: A 1 B 1 C 2 事件4:B to C; 网桥帧转发策略:向端口2转发; 转发表: A 1 B 1 C 2 6. IP分片模拟 【分值】10分 【页码】P123-124 【描述】

IP数据包原始长度、分片最大长度存储在input.txt文件中。编写一算法计算分片结果,将每一分片的总长度、MF、DF、片偏移存入output.txt。 【提示】

a、设该IP首部无选项,IP固定首度为20字节。

b、一行中的多个字段自行决定分隔符,比如空格或制表符等。 【举例】

input.txt(注:两字段分别是IP数据包原始长度、分片最大长度) 3820 1420 output.txt:(注:每行信息分别是分片总长度、MF、DF、片偏移) 1420 1 1420 1 1020 0 0 0 0 0 175 350

7. IP首部检验和算法模拟 【分值】10分

【页码】P125 【描述】

20个字节的某IP首部以十六进制字符存储在input.txt文件中——每行8个字符(即4个字节),其中首部检验和字段为0。编写IP首部检验和算法,检验和计算结果以4个十六进制字符形式存入output.txt。 【提示】 a、首部检验和的计算涉及每个字(16位)间的反码算术运算求和——计算规则见课本P125的脚注。

b、一行中的多个字段自行决定分隔符,比如空格或制表符等。 【举例】

input.txt: 45 00 00 86 4C 37 40 00 7F 06 00 00 C0 A8 42 D4 C0 A8 63 CB output.txt: 87 4A 8. IPv4数据报封装模拟 【分值】20分 【页码】P122-125 【描述】

input.txt文件的第一行以点分十进制给出了某IP数据报的源IP地址、第二行以点分十进制给出了目的IP地址,第三行给出了待封装的TCP数据报长度。整个TCP数据报的数据用字母“A”代替(ASCII为0x41)。定义IP数据报固定首部数据结构,并编写封装算法,结果以每行8个的十六进制字符(即4个字节)存入output.txt文件。 【提示】

a、IP数据报首部的“区分服务字段填0、标识字段可随意设置、生存时间可随意设置(比如127),不考虑可选字段。

b、可以不考虑IP分片的问题,但应实现首部检验和的计算。

c、点分十进制地址到二进制地址的转换可以使用Winsock API(名词解释参见,头文件为)中的inet_addr函数,其函数原型如下: unsigned long inet_addr(const char* cp) 入口参数cp:点分十进制形式的IP地址 返回值: 网络字节顺序的IP地址,是无符号的长整数 d、一行中的多个字段自行决定分隔符,比如空格或制表符等。 【举例】 input.txt: 192.168.66.181 192.168.99.203 60 output.txt:

45 00 00 50 03 70 40 00 7F 06 D0 66 C0 A8 42 B5 C0 A8 63 CB 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41

9. 使用子网时IP分组转发模拟 【分值】20分 【页码】P133-135 【描述】

input_r.txt文件给出了某路由器的路由表,文件由若干行组成,每行给出了目的网络地址、子网掩码、下一跳地址等信息(地址均以点分十进制表示);input_d.txt文件给出了该路由器收到的一系列IP数据报点分十进制表示的目的IP地址。编写使用子网时IP分组转发算法,将每一个IP数据报的处理结果输出到output.txt文件。 【提示】

a、点分十进制地址到二进制地址的转换可以使用Winsock API中的inet_addr函数。 b、一行中的多个字段自行决定分隔符,比如空格或制表符等。 【举例】 input_r.txt:(注:每行包括目的网络地址、子网掩码、下一跳地址等信息;最后一行给出了默认路由)

128.30.33.0 255.255.255.128 Interface0 128.30.33.128 255.255.255.128 Interface1 128.30.36.0 255.255.255.0 Router2 0.0.0.0 0.0.0.0 Router3 input_d.txt: 128.30.33.13 128.30.33.130 128.30.36.2 128.50.39.3 output.txt:(注:每行包括目的IP地址、处理结果) 128.30.33.13 128.30.33.130 128.30.36.2 128.50.39.3 Interface0 Interface1 Router2 Router3

10. 距离向量算法模拟 【分值】20分 【页码】P148-149 【描述】

input_r.txt文件给出了某路由器Rx的当前路由表信息,文件由若干行组成,第一行为路由器名,后续每行给出了目的网络(以网络名称表示)、距离、下一跳路由器等信息;input_n.txt文件给出了路由器Rx刚接收到的来自相邻路由器Ry的RIP路由更新信息,文件由若干行组成,第一行为路由器名,后续每行给出了目的网络、距离、下一跳路由器等信息。编写距离向量更新算法,将路由器Rx更新后的路由表写入output.txt。 【提示】

a、可参照课本P149例4-5,以网络名称表示目的网络、以路由器名称或“直接交付”给出下一跳路由器信息。

b、一行中的多个字段自行决定分隔符,比如空格或制表符等。 【举例】 input_r.txt: R6 Net2 3 R4 Net3 4 R5 input_n.txt: R4 Net1 3 R1 Net2 4 R2 Net3 1 直接交付 output.txt: R6 Net1 4 R4 Net2 5 R4 Net3 2 R4

11. UDP检验和算法模拟 【分值】10分 【页码】P185-187 【描述】

input.txt文件的第一、二行分别以点分十进制给出某即将传输的UDP数据报的源IP地址和目的IP地址,后续每行8个十六进制字符(即4个字节)给出整个UDP数据报的数据(其中检验和字段为0,最后一行可能少于4个字节)。编写UDP检验和算法,检验和计算结果以4个十六进制字符形式存入output.txt。 【提示】

a、点分十进制地址到二进制地址的转换可以使用Winsock API中的inet_addr函数。 b、UDP的检验和计算包括伪首部、UDP首部和UDP数据部分,其中数据部分字节数为奇数时需在末尾填入一个全零字节参与计算。

c、一行中的多个字段自行决定分隔符,比如空格或制表符等。 【举例】 input.txt: 153.19.8.104 171.3.14.11 04 3F 00 0D 00 0F 00 00 45 53 49 4E 47 output.txt: 69 12

12. 利用滑动窗口实现流量控制模拟 【分值】20分 【页码】P203-204 【描述】

input.txt文件的第一行给出主机A发送给主机B的TCP报文段的大小(单位:字节),第二行给出了主机A发送的起始序号seq,第三行给出了主机B设置的初始接收窗口rwnd的大小(单位:字节),后续若干行描述了报文段传输事件——每行的第一个字段是方向(“A->B”或“B->A”),若方向为“A->B”则该行后续字段包括标志(“新发”或“重发”)、结果(“成功”或“丢失”),若方向为“A->B”则该行后续字段为新的接收窗口rwnd。编写利用滑动窗口实现流量控制模拟算法,将处理结果写入output.txt——每行为一次传输事件的信息,包括方向、序号(若方向为“A->B”则为发送序号seq,若方向为“B->A”则为确认序号ack)、A主机实际还可发送的字节数(即减去已发字节数)、A主机实际还可发送的序号范围(若前一字段为0则不写此项)。 【提示】

a、设置两全局变量分别记录发送序号seq和确认序号ack,在处理每一事件时及时更新seq、ack的值。

b、确认序号ack是期望收到对方下一个报文段的第一个数据字节的序号。 c、设置一数组记录传输丢失的报文段序号,以便重传。

d、若一行有多个字段,自行决定分隔符,比如空格或制表符等。 【举例】 input.txt: 100 1 400 A->B 新发 成功 A->B 新发 成功 A->B 新发 丢失 B->A 300 A->B 新发 成功 A->B 新发 成功 A->B 重发 成功 B->A 100 A->B 新发 成功 B->A 0 output.txt: A->B A->B A->B B->A A->B A->B A->B B->A A->B B->A seq=1 seq=101 seq=201 ack=201 seq=301 seq=401 seq=201 ack=501 seq=501 ack=601 300 101-400 200 201-400 100 301-400 200 301-500 100 401-500 0 0 100 501-600 0 0 13. 慢开始、拥塞避免算法模拟 【分值】20分 【页码】P208-210 【描述】

input_s.txt文件给出了慢开始门限ssthresh状态变量的初始值;input_c.txt文件给出了若干个出现网络拥塞的传输轮次(取值在1-30之间)。编写慢开始、拥塞避免模拟算法,计算并输出前30个传输轮次的拥塞窗口cwnd等信息,结果存入output.txt——每行包含轮次、cwnd、ssthresh、现用算法等信息。 【提示】

a、此模拟中的窗口单位不使用字节而使用报文段的个数。

b、拥塞窗口cwnd的初值为1,即第1传输轮次允许传输一个报文段,传输成功后cwnd即按照指数规律增长为2。

c、若一行有多个字段,自行决定分隔符,比如空格或制表符等。 【举例】 input_s.txt 16 input_c.txt 12 23 output.txt: 1 2 3 4 5 6 7 8 2 4 8 16 17 18 19 20 16 16 16 16 16 16 16 16 慢开始 慢开始 慢开始 拥塞避免 拥塞避免 拥塞避免 拥塞避免 拥塞避免 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 21 22 23 24 1 2 4 8 12 13 14 15 16 17 18 1 2 4 8 9 10 11 16 16 16 16 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 拥塞避免 拥塞避免 拥塞避免 拥塞避免 慢开始 慢开始 慢开始 慢开始 拥塞避免 拥塞避免 拥塞避免 拥塞避免 拥塞避免 拥塞避免 拥塞避免 慢开始 慢开始 慢开始 慢开始 拥塞避免 拥塞避免 拥塞避免 课程设计示例

1. 字节填充法解决透明传输模拟 【分值】10分 【页码】P67 【描述】

待传送的原始数据以十六进制字符存储在input.txt文件中,内含SOH(0x01)、EOT(0x04)、ESC(0x1B)等字符。编写字节填充算法,并将结果保存至output_f.txt文件;并且编写算法还原数据,结果保存至output_d.txt文件。 【提示】

a、原始数据只要包含3种特殊字符即可,内容任意。

b、存储原始数据的input.txt文件中只可能出现十六进制字符,且长度为偶数。 【举例】 input.txt

AC00013C5604201B76 output_f.txt AC001B013C561B04201B1B76 output_d.txt AC00013C5604201B76

【程序清单】

01 #include \"stdio.h\" 02 03 typedef int status; 04 #define TRUE 1 05 #define FALSE 0 06 07 #define MAX_BUF_LEN 1500 08 09 #define SOH 0x01 10 #define EOT 0x04 11 #define ESC 0x1B 12 13 typedef struct StuffingString 14 { 15 unsigned char buf[MAX_BUF_LEN]; 16 unsigned int len; 17 } * PStuffingString; 18 19 status byte_stuffing(PStuffingString psin, PStuffingString psf) 20 { 21 unsigned int i=0; 22 psf->len = 0; 23 while ( ilen ) 24 { 25 if ( psin->buf[i] == SOH || psin->buf[i] == EOT || psin->buf[i] == ESC ) 26 psf->buf[psf->len++] = ESC; 27 psf->buf[psf->len++] = psin->buf[i++]; 28 } 29 return TRUE; 30 } 31 32 status byte_unstuffing(PStuffingString psf, PStuffingString psd) 33 { 34 unsigned int i=0; 35 psd->len = 0; 36 while ( ilen ) 37 { 38 if ( psf->buf[i] == ESC ) 39 { 40 i++; 41 if ( psf->buf[i] != SOH && psf->buf[i] != EOT && psf->buf[i] != ESC ) 42 return FALSE; 43 } 44 psd->buf[psd->len++] = psf->buf[i++]; 45 } 46 return TRUE; 47 } 48 49 status input(char f[], PStuffingString psin) 50 { 51 FILE * fp; 52 psin->len = 0; 53 if ((fp = fopen(f, \"r\")) == NULL) return FALSE; 55 while ( fscanf(fp, \"%2X\", &psin->buf[psin->len++]) != EOF ); 56 psin->len--; 57 if ( fclose(fp) ) 58 return FALSE; 59 return TRUE; 60 } 61 62 status output(char f[], PStuffingString psout) 63 { FILE * fp; 65 unsigned int i=0; 66 if ((fp = fopen(f, \"w\")) == NULL) 67 69 { 70 71 72 73 } return FALSE; 68 while ( ilen ) if ( psout->buf[i] < 0x10 ) fprintf(fp, \"0\"); fprintf(fp, \"%0X\", psout->buf[i++]); 74 if ( fclose(fp) ) 75 77 } 78 79 void main() 80 { 81 StuffingString sin, sf, sd; 82 if (input(\"c:\\input.txt\", &sin) == TRUE) 83 { 84 85 86 87 88 90 91 92 93 } 94 } if (byte_stuffing(&sin, &sf) == TRUE) { } output(\"c:\\output_f.txt\", &sf); if (byte_unstuffing(&sf, &sd) == TRUE) { } output(\"c:\\output_d.txt\", &sd); printf(\"byte-stuffing/unstuffing successful!\\n\"); return FALSE; 76 return TRUE;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务