1、 异构环境下考虑的问题
1) 字节顺序:不同的平台以不同的方式存放一个二进制数。最常见的有两种格式:大数在前的字节顺序和小数在前的字节顺序。大数在前的字节顺序是指将一个多字节数的高序字节存储在内存的起始地址;而小数在前的字节顺序则相反,将低序字节存储在内存的起始地址。
2) 字的长度:不同的实现对于相同的数据类型可能有不同的表示长度。
3) 字节定界问题:不同的平台上为结构体(struct)或共同体(union)打包的方式也是不同的,这取决于所有数据类型的位数及机器的定界限制。
2、 什么是阻塞与非阻塞通信?并解释两者的区别
通信包括阻塞和非阻塞两种模式。阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
区别:对于不同的协议,阻塞通信和非阻塞通信有不同的表现。以插口为例,在阻塞模式下,
利用TCP协议发送一个报文时,如果低层协议没有可用空间来存放用户数据,则应用进程将阻塞等待直到协议有可用的空间。而在非阻塞模式下,调用将直接返回而不需等待。在应用进程调用接收函数接收报文时,如果是在阻塞模式下,若没有到达的数据,则调用将一直阻塞直到有数据到达或出错;而在非阻塞模式下,将直接返回而不需等待。 对于UDP协议而言,由于UDP没有发送缓存,因此所有UDP协议即使在阻塞模式下也不会发生阻塞。
对于面向连接的协议,在连接建立阶段,阻塞与非阻塞也表现不一。在阻塞模式下,如果没有连接请求到达,则等待连接调用将阻塞直到有连接请求到达;但在非阻塞模式下,如果没有连接请求到达,等待连接调用将直接返回。
3、 客户端/服务器模式基本内容和相关特性(各种情况下的特点)
基本内容:采用客户机/服务器结构的系统,有一台或多台服务器以及大量的客户机。服务器配备大容量存储器并安装数据库系统,用于数据的存放和数据检索;客户端安装专用的软件,负责数据的输入、运算和输出。
特点: 1)可实现资源共享。(2)可实现管理科学化和专业化。(3)可快速进行信息处理。(4)能更好地保护原有的资源。
发展:瘦C/S; 胖C/S; 瘦B/S
C/S一个典型的胖客户端包含一个或多个在用户的PC上运行的应用程序,用户可以查看并操作数据、处理一些或所有的业务规则——同时提供一个丰富的用户界面做出响应。服务器负责管理对数据的访问并负责执行一些或所有的业务规则。重点是,胖客户端应用程序是在用户的计算机上运行的。
C/S瘦客户端(Thin Client)指的是在客户端-服务器网络体系中的一个基本无需应用程序的计算机终端。 它通过一些协议和服务器通信,进而接入局域网。
B/SB/S结构(Browser/Server结构)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。
4、 什么是TCP的三次握手机制?为什么要使用TCP的三次握手机制?
含义:所谓的三次握手即对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP
原因:TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。三次握手时在存在包丢失、重复和延迟的情况下,确保通信双方信息交换确定性的充分必要条件。1.请求端(通常称为客户)发送一个SYN段,指明客户打算连接的服务器的端口以及初始序号(SEQ)。这个SYN段为报文段12.服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN1,用以对客户的SYNsocket通信报文格式报文段进行确认。一个SYN占用一个序号。3.客户必须将确认序号设置为服务器的ISN1,用以对服务器的SYN报文段进行确认(报文段3)。
5、 什么是三元组?五元组?三元组和五元组每个元素在网络连接中起到什么作用?
三元组:(协议,本地地址,本地端口号);(在网络中用一个三元组可以在全局唯一标志
一个进程: (协议,本地地址,本地端口号)这样一个三元组,叫做一个半相关(half-association),它指定连接的每半部分。)
五元组:(协议,本地地址,本地端口号,远地地址,远地端口号)(即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。)
6、 从网络编程的角度来简述和比较IP地址和端口的作用?(在编程的那个环节用得到)
端口:是一种抽象的软件结构。应用程序通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应进程所接受,相应进程发给传输层的数据都通过该端口输出。在TCP/IP协议的实现中,端口操作类似一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件。
地址:网络通信中通信的两个进程在不同的机器上。这两个机器可能位于不同的网络,这些网络通过网络互联设备连接。因此需要三级寻址:某一主机与多个网络相连,必须指定一特定网络地址;网络上每一主机应有唯一的地址;每一主机上的每一进程有在主机上的唯一标识符。
7、 什么是winsocksocket
WinSockWindows Sockets是从Berkeley Sockets扩展而来,增加了符合Windows消息驱动特性的网络事件异步选择机制。Windows Sockets由两部分组成: 开发组件:Windows Sockets 实现文档、应用程序接口(API)引入库和一些头文件。头文件:Winsock2.h ,库文件:WS2_32.LIB  运行组件:Windows Sockets应用程序接口的动态链接库(Winsock.dll)
Socket是网络通信的基本构件,是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和与之相连的进程。
8、 WinSock编程中需要什么文件?
1) Winsock.dllwinsock.dllWindows Sockets应用程序接口,用于支持很多Internet和网络相关应用程序。
2) Ws2_32.lib32位windows socket, 版本2用来实现socket网络操作的静态库。 该库对应ws2_32.dll,提供了对以下网络相关API的支持,若使用其中的API,则应该将ws2_32.lib加入工程(否则需要动态载入ws2_32.dll
3) Winsock2.hwinsock版本2头文件,里面包含一些系统定义的宏
9、 流套接字和数据报套接字的时序图P71
10、 Winpcap的主要功能?能够做些什么事情?
winpcap是win32环境下的数据包捕获结构。winpcap提供捕获原语捕获网络中传输的各种数据包,并传输到调用它们的应用程序中。winpcap可以用于网络分析、网络故障诊断、网络安全和监视等网络工具中,所提供的功能主要包括以下四个方面:捕获网络原始数据包;根据用户定义的规则过滤数据包;发送用户构造的数据包的网络中;统计网络流量。winpcap由数据包捕获驱动器、底层动态链接库(Packet.dll)和高层静态连接库(wpcap.lib)三部分组成。
Winpcap编程中需要什么文件?
packet.sys内核驱动程序,从网络中取得链路层数据包,并传送到应用程序中。
packet.dll动态链接库,工作在用户层,与捕获应用程序分离,它屏蔽低层的实现细节,提供一个与系统无关的接口。
wpcap.lib静态连接库,它利用packet.dll提供的服务,为应用程序提供高层接口(API函数)。
pcap.h:winpcap头文件。
11、 理解多线程、多进程概念和程序框架
进程是指一个可执行程序的实例,由私有虚拟地址空间、代码、数据和其他操作系统资源组成。当一个应用程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。
线程是指进程的一条执行路径,是操作系统分时调度分配CPU时间的基本实体。当它被创建后,它就包含了自己独立的堆栈和CPU寄存器状态。所有的线程都是由一个叫做系统调度的程序控制的。该程序会决定执行哪个线程和在什么时候执行。
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的执行路径(线程)来执行不同的任务,也就是说允许单个程序创建多个并行执行的子程序来完成各自的任务。
多线程:int main()
{
    SOCKET s;
    printf("开始监听,等待客户端连接......\n");
    SOCKET ns;
    while(1)
    {
        ns = accept(s,(struct sockaddr *)&client,&iNameLength);
        hThread=CreateThread(NULL,NULL,
            ServiceThread,(LPVOID)ns,0,&dwThreadId);
    }
    closesocket(s);
}
DWORD WINAPI ServiceThread(LPVOID lparam)
{
    SOCKET ClientSocket=(SOCKET)(LPVOID)lparam;
    send/recv…
    closesocket(ClientSocket)
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。