实验心得体会
在本次实验中,我通过对网络课上所学知识的应用,学到了很多实践中的知识。并且加深了我对课本知识的理解和认识,在实验过程中,更容易记忆和深入理解各种协议的工作以及在网络编程中应该注意的一系列问题。
我们的第一个实验是对ARP、ICMP、FTP和HTTP协议的分析和验证。在利用软件Etherpeek抓取在主机通信中的报文,得到了很多的关于这些协议的具体参数。在课程学习过程中,书本和老师给我的感觉就是太枯燥,通过课本的学习根本没有办法理解各种协议的工作细节。有很多的细微之处是想不通的。但是,在本次实验中,我就通过各种报文的分析,看到了网络中不同层次协议之间的协做过程。对应不同层之间就是通过协议来使用,我对整个网路的大体架构有了一个统筹的了解,虽然对很多的更深入的知识不是很了解,但是比我在课上学的东西要更有趣,而且容易学习,更能够我学习的兴趣。 第二个实验是Socket编程实验。在编写网络程序之前,我对网路通信可以说一无所知,根本不知道那些网路上的程序是怎么通过网路进行通信的。在本次实验中,终于揭开了他们神秘的面纱。当然在实验中出现了很多的插曲,我是在Linux环境下编写的程序,很多技术方面的问题都无法解决。查阅书籍和网上咨询才弄懂了他们的来龙去脉,最终是将我的程序编写完了。开始接触网路编程时,那是一头雾水,根本不知从何下手。在看了辅导教员给我们程序之后才有了很
多的起色,才能够自己编写程序。在网络编程中,我最深的体会就是对具体的内部细节不熟悉,导致在调试的过程中感觉到很无力。在很多函数的作用下,经常就是一团乱麻。之后,我每次编写之前就是将用到的函数的用法温习一下,最后还是能够解决很多的问题的。
本次试验是我们学习网路的第一次。以前的课程从来没有接触到网路方面的知识。这次的新知识对我们的挑战还算不是太大,通过我们的努力,所有的困难时被克服掉了。其实,实验应该是我们的重点,在以后的工作中要的就是我们的实际的动手能力,如果我们在学习期间就是只学了书本上的知识,那样对理论的了解是不够深刻的,只有通过实验才能激发我们的学习兴趣。总之,我觉得实验才是检验理论的唯一标准。
第二篇:socket编程实验报告问题汇总
问题一:写C++ Socket有关的程序遇到,以下错误
错误 2 error LNK2019: 无法解析的外部符号 __imp__WSACleanup@0,该符号在函数 "int __cdecl InitWinsock(void)" (?InitWinsock@@YAHXZ) 中被引用 E:\学习程序\C++\NALUH264\NALUH264\Encoder.obj NALUH264
解决方法:在添加头文件处,添加引用:
#pragma comment(lib,"ws2_32.lib")
问题二:在linux下不需要构造ipharder
在<netinet/ip.h>中可以查看IP包头结构struct iphdr
可直接定义:
struct iphdr * ip_header;//IP包头
问题三:读wireshark中的txt文档实时性不好
使用windows自带数据包捕获软件winsock
问题四:socket函数来创建一个能够进行网络通信的套接字
其中套接字类型为原始套接字SOCK_RAW,因为WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据报以及协议首部
问题五:bind函数中本地IP值赋为0时,内核会自动把本地IP绑定在空socket上
问题六:强制类型转换,使得接收到的数据包转换成IP头部?
因为recv中buffer的大小规定为一个ip_hdr的大小
问题七:错误 3 error C1010: 在查找预编译头时遇到意外的文件结尾。
忘记了向源中添加“#include "stdafx.h"”?
问题八:端口号是多少
随便。只要不和公共端口冲突就可以。
问题九:IP头部中Version和HarderLength为前八位,不够一个BYTE
所以合并为一个Version_IHL,需要版本号则右移4位,需要长度则只取低4位。而首部长度为该值*4
问题十:将IP显示为一个互联网标准点分格式的字符串使用inet_ntoa函数,存储使用inet_addr("132.241.5.10");
需要完善的地方:
问题十一:MAC层数据在哪
问题十二: 字符顺序
问题十三:发送报告未完成
问题十四:没有封装改变参数的函数,以及外部调用的makefile文件