简答题:
1. 什么是网络编程?简述应用进程间的两种通信方式。
网络编程就是利用网络应用编程接口编写网络应用程序,实现网络应用进程间的信息交互功能。应用进程间的通信可分为两种:同一系统上应用进程间的通信和不同系统上应用进程间的通信。同一系统间的通信又称为进程间通信,不同系统间上进程间的通信必须通过网络编程接口访问网络协议提供的服务来实现。
2. 简述OSI参考模型及各层的主要功能。
应用层:为用户提供相应的界面,以便使用提供的连网功能。
表示层:完成数据的格式化
会话层:控制两个主机间的通信链路
传输层:提供数据传输服务
网络层:在两个主机之间提供一套定址/寻址机制,同时负责数据包路由选择
物理层:物理媒体负责以一系列电子信号的形式传出数据
3. 简述TCP/IP协议各层的主要功能。
链路层:也被称为数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,他们一起处理与电缆的物理接口细节。
网络层:也称为互联网层,负责抱我呢分组在网络中的活动,包括IP协议,ICMP及IGMP等。
传输层: 为两台主机上的应用程序提供端到端的数据通信。
应用层:负责处理实际的应用程序细节,包括Telnet、HTTP协议、SMTP协议、FTP、SNMP等。
4. 什么叫套接字,套接字按通信性质可以分为哪两类,简述这两类的套接字。
多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不
同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。
套接字按通信性质分:会话套接字和数据报套接字。会话套接字提供双向的、有序的、无重复并且无记录边界的数据流服务,及一种可靠的面向连接的数据传输方法。数据报套接字支持双向通信,提供不可靠的、非连接的数据报通信方式。
5. 简述套接字的非阻塞模式的含义,针对非阻塞模式Winsock提供了哪些不同的套接字I/O模型对I/O进行管理?
Windows套接字在阻塞和非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。
提供了select,WSAAsyncSelect(异步选择),进程通信方式WSAEventSelect(事件选择),Overlapped(重叠)以及Completion port(完成端口)。
6. 什么是消息?简述windows应用程序消息的4种来源。
消息是指报告有关事件发生的通知。
来源:1、输入消息,包括键盘和鼠标的输入 2、控制消息,用来与Windows的控制对象进行双向通信 3、系统消息,对程序化的事件或系统时钟中断作出反应。 4、用户消息,程序员自己定义并在应用程序主动发出的,一般由应用程序的某一部分进行内部处理。
7. 简述直接网络编程3种方法。
第一种是原始套接字,原始套接字可以对底层的传输协议加以控制,对IP头信息进行实际的操作,通过它可以模拟一些IP实用的工具。第二种是基于WinPcap的网络数据包捕获技术,通过WinPcap可以捕获网络中的各种链路数据帧,为用户分析网络运行状况提供支持。第三种是基于libnet的网络数据包构造技术。Libnet提供了一个跨平台的网络数据包构造和发送编程接口。
8. 简述winpcap提供的主要功能及典型的应用。
主要功能:捕获网络原始数据包;根据用户定义的规则过滤数据包;发送用户构造的数据包到网络中;统计网络流量;保存捕获的数据包。
典型应用:网络协议分析器;网络;网络流量记录;网络流量产生器;用户级的网桥和路由器;网络入侵检测系统;网络扫描器;网络安全工具。
9. libnet的主要作用体现在哪些方面。
主要作用:1、构造任意数据内容 2、构造各种不同协议的数据包 3、从IP层构造数据包 4、从链路层构造数据包 5、发送数据包 6、自动计算校验和 7、可以发送多个数据包 8、构造不同格式的数据包 9、修改已知的数据包 10、构造不同平台的网络数据包
10. 简述libnet出现的主要原因和libnet的主要目的。
主要原因:1、为网络程序员提供一个简单的编程接口,使程序员能把主要精力集中用来解决问题,而不用考虑底层网络细节; 2、libnet是一个与libpcap类似的数据包注入器,可以用来编写有关网络测试、网络故障诊断和网络安全等方面的应用程序和工具。
主要目的:用来构造和注入网络数据包。
** 网络编程接口:(1)基于NetBIOS的网络编程。(2)基于Winsock的~(3)底层~(4)基于物理设备的~。
**windows程序包括注册窗口类、创建窗口、显示和更新窗口、创建消息循环、终止应用程序、窗口过程和窗口函数以及处理消息7个部分。
**基于Winsock函数 1。Socket()功能:创建一个套接字。格式:SOCKET socket(int af,int type,int protocol);af:指定网络地址类型,一般取AF_INET,表示该套接字在Inetrnet域中进行通信。Type:用于指定套接字类型,可以取5个值,SOCK_STREAM(会话套接字),DGRAM(数据报套接字),SEQPACKET,RAM(原始套接字)和DAM。Protocol:指定网络协议,一般取0,表示默认为TCP/IP协议。2.bind()功能:将一本地址与一套接字绑定。格式:
Int bind(SOCKET s,const struct sockaddr * name,int namelen);s:标示一未绑定套接字的句柄。Name:指向与协议有关的地址结构的指针,这个结构称为套接字地址结构。该结构类型是struct sockaddr,定义如下:struct sockaddr{ u_short sa_family; char sa_data[14]; }一般与该地址大小相同的地址结构sockaddr_in更为常用,用来标识TCP/IP
协议下的地址,结构为struct sockaddr_in { short sin_family; u_short sin_port;struct in_addr sin_addr;char sin_zero[8];} sin_family字段必须设为AF_INET,表示该socket处于Internet内。Sin_pot字段用于指定服务器端口。Sin_addr字段用于把一个IP地址保存为一个4字节数,它是无符号的整数类型。Inet_addr把点分式IP地址转化一个32位的无符号长整数,其定义为:unsigned long inet_addr(const char FAR *cp);
Sin_zero字段只充当填充项作用,使~_in和~一样长,namelen:代表name指向的地址结构的长度。3。listen()功能:将套接字设为侦听模式,等待客户端提出的连续申请 int PASCAL FAR listen(SOCKET s,int backlog);s:标识一个已绑定但未连接套接字的句柄。Backlog:表示等待连接队列的最大长度。4、accept()SOCKET PASCAL FAR accept(SOCKER s,struct sockaddr FAR*addr,int FAR*addrlen)s:套接字句柄,该套接字在listen()后已经侦听连接。Addr:请求方SOCKADDR_IN结构的地址,addrlen:SOCKADDR_IN结构长度。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论