资源描述
信息技术学院计算机网络基础课 程 设 计 方 案目录课程设计说明1课程设计选题21.CRC算法模拟22.零比特填充模拟23.曼彻斯特编码模拟24.截断二进制指数退避算法35.透明网桥自学习与转发帧算法模拟36.IP分片模拟47.IP首部检验和算法模拟48.IPv4数据报封装模拟59.使用子网时IP分组转发模拟610.距离向量算法模拟711.UDP检验和算法模拟712.利用滑动窗口实现流量控制模拟813.慢开始、拥塞避免算法模拟9课程设计示例111.字节填充法解决透明传输模拟11课程设计选题1. CRC算法模拟【分值】20分【页码】P68-69【描述】待传送的一组数据 M以二进制字符存储在input_m.txt文件中,生成多项式P以二进制字符存储input_p.txt文件中。编写CRC算法,计算冗余码R并输出到output_r文件中。【提示】a、模2加减可以采用按位异或运算的方法计算。【举例】input_m.txt101001input_p.txt1101output_r.txt0012. 零比特填充模拟【分值】10分【页码】P74【描述】待传送的原始数据以二进制字符存储在input.txt文件中,内含若干5个连续1的子串、6个连续1的子串。编写零比特填充算法,并将结果保存至output_f.txt文件;并且编写算法还原数据,结果保存至output_d.txt文件。【提示】a、原始数据只要包含5个连续1的子串、6个连续1的子串即可,内容任意。【举例】input.txt0100111111011111010output_f.txt010011111010111110010output_d.txt01001111110111110103. 曼彻斯特编码模拟【分值】10分【页码】P80【描述】待传送的原始数据以二进制字符存储在input.txt文件中。编写曼彻斯特编码模拟算法,将编码的结果保证至output_e.txt;并且编写从电压高低到二进制数据的解码算法,结果保存至output_d.txt。【提示】a、用字符“HL”代表电压“前高后低”,表示码元1;用字符“LH”代表电压“前低后高”,表示码元0。【举例】input.txt1000100111output_e.txtLHHLHLHLLHHLHLLHLHLHoutput_d.txt10001001114. 截断二进制指数退避算法【分值】10分【页码】P82【描述】重传次数存储在input.txt文件中。编写截断二进制指数退避算法,计算得到的重传推迟时间存入output.txt文件。【提示】a、以太网争用期为51.2s,最多重传次数为16这些可预定义为常量。b、若重传已经超过16次,则将重传推迟时间设置为-1s,表示应丢弃该帧。【举例】input.txt1output.txt0(说明:或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: A1 B1 C2 D2input_event.txt: AD BA CZ BCoutput.txt:事件1:A to D; 网桥帧转发策略:泛洪; 转发表: A1事件2:B to A; 网桥帧转发策略:丢弃; 转发表: A1 B1事件3:C to Z; 网桥帧转发策略:泛洪; 转发表: A1 B1 C2事件4:B to C; 网桥帧转发策略:向端口2转发; 转发表: A1 B1 C26. IP分片模拟【分值】10分【页码】P123-124【描述】IP数据包原始长度、分片最大长度存储在input.txt文件中。编写一算法计算分片结果,将每一分片的总长度、MF、DF、片偏移存入output.txt。【提示】a、设该IP首部无选项,IP固定首部长度为20字节。b、一行中的多个字段自行决定分隔符,比如空格或制表符等。【举例】input.txt(注:两字段分别是IP数据包原始长度、分片最大长度)38201420output.txt:(注:每行信息分别是分片总长度、MF、DF、片偏移)14201001420101751020003507. IP首部检验和算法模拟【分值】10分【页码】P125【描述】20个字节的某IP首部以十六进制字符存储在input.txt文件中每行8个字符(即4个字节),其中首部检验和字段为0。编写IP首部检验和算法,检验和计算结果以4个十六进制字符形式存入output.txt。【提示】a、首部检验和的计算涉及每个字(16位)间的反码算术运算求和计算规则见课本P125的脚注。b、一行中的多个字段自行决定分隔符,比如空格或制表符等。【举例】input.txt: 45 00 00 864C 37 40 007F 06 00 00C0 A8 42 D4C0 A8 63 CBoutput.txt: 87 4A8. 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(名词解释参见http:/baike.baidu.com/view/339343.htm,头文件为)中的inet_addr函数,其函数原型如下: unsigned long inet_addr(const char* cp) 入口参数cp:点分十进制形式的IP地址 返回值: 网络字节顺序的IP地址,是无符号的长整数 d、一行中的多个字段自行决定分隔符,比如空格或制表符等。【举例】input.txt:192.168.66.181192.168.99.20360output.txt:45 00 00 5003 70 40 007F 06 D0 66C0 A8 42 B5C0 A8 63 CB41 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 419. 使用子网时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.0255.255.255.128Interface0 128.30.33.128 255.255.255.128Interface1 128.30.36.0255.255.255.0Router2 0.0.0.00.0.0.0 Router3input_d.txt: 128.30.33.13 128.30.33.130 128.30.36.2 128.50.39.3output.txt:(注:每行包括目的IP地址、处理结果) 128.30.33.13Interface0 128.30.33.130 Interface1 128.30.36.2Router2 128.50.39.3Router310. 距离向量算法模拟【分值】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 R5input_n.txt: R4 Net1 3 R1 Net2 4 R2 Net3 1 直接交付output.txt: R6 Net1 4 R4 Net2 5 R4 Net3 2 R411. 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 54 45 53 54 49 4E 47output.txt: 69 1212. 利用滑动窗口实现流量控制模拟【分值】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 0output.txt: A-Bseq=1300101-400 A-Bseq=101200201-400 A-Bseq=201100301-400 B-Aack=201200301-500 A-Bseq=301100401-500 A-Bseq=4010 A-Bseq=2010 B-Aack=501100501-600 A-Bseq=5010 B-Aack=601013. 慢开始、拥塞避免算法模拟【分值】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.txt16input_c.txt12 23output.txt: 1216慢开始 2416慢开始 3816慢开始 41616拥塞避免 51716拥塞避免 61816拥塞避免 71916拥塞避免 82016拥塞避免 92116拥塞避免 102216拥塞避免 112316拥塞避免 122416拥塞避免 13112慢开始 14212慢开始 15412慢开始 16812慢开始 171212拥塞避免 181312拥塞避免 191412拥塞避免 201512拥塞避免 211612拥塞避免 221712拥塞避免 231812拥塞避免 2419慢开始 2529慢开始 2649慢开始 2789慢开始 2899拥塞避免 29109拥塞避免 30119拥塞避免课程设计示例1. 字节填充法解决透明传输模拟【分值】10分【页码】P67【描述】待传送的原始数据以十六进制字符存储在input.txt文件中,内含SOH(0x01)、EOT(0x04)、ESC(0x1B)等字符。编写字节填充算法,并将结果保存至output_f.txt文件;并且编写算法还原数据,结果保存至output_d.txt文件。【提示】a、原始数据只要包含3种特殊字符即可,内容任意。b、存储原始数据的input.txt文件中只可能出现十六进制字符,且长度为偶数。【举例】input.txtAC00013C5604201B76output_f.txtAC001B013C561B04201B1B76output_d.txtAC00013C5604201B76【程序清单】01 #include stdio.h02 03 typedef int status;04 #define TRUE 105 #define FALSE 006 07 #define MAX_BUF_LEN 150008 09 #define SOH 0x0110 #define EOT 0x0411 #define ESC 0x1B12 13 typedef struct StuffingString14 15 unsigned char bufMAX_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-bufi = SOH | psin-bufi = EOT | psin-bufi = ESC )26 psf-bufpsf-len+ = ESC;27 psf-bufpsf-len+ = psin-bufi+;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-bufi = ESC )39 40 i+;41 if ( psf-bufi != SOH & psf-bufi != EOT & psf-bufi != ESC )42 return FALSE;43 44 psd-bufpsd-len+ = psf-bufi+;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)54 return FALSE;55 while ( fscanf(fp, %2X, &psin-bufpsin-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 64 FILE * fp;65 unsigned int i=0;66 if (fp = fopen(f, w) = NULL)67 return FALSE;68 while ( ilen )69 70 if ( psout-bufi bufi+);73 74 if ( fclose(fp) )75 return FALSE;76 return TRUE;77 78 79 void main()80 81 StuffingString sin, sf, sd;82 if (input(c:input.txt, &sin) = TRUE)83 84 if (byte_stuffing(&sin, &sf) = TRUE)85 86 output(c:output_f.txt, &sf);87 if (byte_unstuffing(&sf, &sd) = TRUE)88 89 output(c:output_d.txt, &sd);90 printf(byte-stuffing/unstuffing successful!n);91 92 93 94
展开阅读全文