问答题
某单位有一个100台机器的大机房,要实现每一台计算机都上网,一般认为,用代理是一个办法,但是工作量比较大,要为每一台机器分别安装客户端软件,而且还要设置IP地址、网关、DNS服务器等。此外,还有一个不错的方法,那就是建立NAT服务器,在服务器上配置 DNS和DHCP服务器,每个工作站只要做简单的设置就能自动接入Internet了,同时还能让网外的计算机直接访问内部网的特定计算机。
试简述如何组建局域网“NAT”服务器。
【参考答案】
此题暂无答案,小编努力补充中……
热门
试题
问答题
网络应用的基本模型是客户机 服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户机和服务器。以下是一个简单的客户机程序(服务器程序略),其工作过程非常简单:客户机与服务器建立连接后,接收服务器向客户机返回的一条消息。程序中用到了两种结构hostent与sockaddr_in:hostent类型的结构定义如下:struct hostent { char * h_name; 主机的正式名称char * * h-aliases; 别名列表int h_addrtype; 主机地址类型:AF-XXXint H_length; 主机地址长度:4 B(32 b)char * * h_addr_list; 主机IP地址列表}#define h¬¬¬-addr h-addr-liSt[0]sockaddr_in类型的结构定义:sockaddr_in是通用套接字结构sockaddr在TCP IP协议下的结构重定义,为TCP IP套接字地址结构。Struct sockaddrin{short int sin-family; 地址类型AF_XXX,其中AF_INET为TCP P专用unsigned short int sin-port; 端口号struct in_addr Sin_addr; Internet地址 端口号以及Internet地址使用的是网络字节顺序,需要通过函数htons转换}struct iN_addr{_u32 s-addr; 类型为unsignel-long}程序中使用到了多个函数:struct hostent * gethostbyname(const char * hostname);函数gethostbyname查询与指定的域名地址对应的IP地址,返回一个hostent结构的指针,如果不成功则返回NULL。Int¬_socket(int domain,im-type,int protoco1);函数socket创建一个套接字描述符,如果失败返回-1。domain为地址类型,type为套接字类型,本题中为SOCK_STREAM;protocol指定协议,本题中为0。int connect(int sockfd,struct sockaddr * servaddr,int addrlen);函数connect与服务器建立一个连接,成功返回0,失败返回-1。servaddr为远程服务器的套接字地址,包括服务器的IP地址和端口号;addrlen为地址的长度。int read(intfd,char * bur,int len);int write(intfd,char * buf,int len);函数read和write从套接字读和写数据,成功返回数据量大小,否则返回-1。buf指定数据缓冲区,len指定接收或发送的数据量大小。[Socket程序] 程序中引用的头丈件略#definePORT 3490 定,义端口号为3490int main(int argc,char * argv[]){int tsockfd,nbytes; 套接字描述符、读入缓冲区的字节数char buf[1024]; 缓冲区struct hostent * he; 主机信息类型struct (1) srvadd; Internet套接字结构if(argc!=2){perror(“调用参数为零,请输入服务器的主机名! n”);exit(1);}if( (2) ) 如果通过主机名没有获得对应的主机信息就提示用户{perror(“无法通过主机名获得主机信息! n”);exit(1);}if( (3) ) 在无法创建套接字时,提示用户{perror(“无法创建套按字! n”);exit(1);}bzero(&srvaddr, (4) ); 置空srvaddrsraddr,SIR_family=AF_INET;srvaddr,sln_port:htons(PO日T);srvaddr.sin_addr: (5) ; 设置套接字结构的各项信息,其中的地址来自域名查询后的hp变量if(connect(sockfd,(n),sizeof(struct sockaddr))==-1){perror( 连接失败! n );exit(1);} 连接服务器,如果失败则提示用户if((nbytes=read(sockfd,buf,MAXDATASIZE))=-1){perror( 读失败! n );exit(1);} 从套接字中读出数据buf[nbytes]=’ 0’;printf( 读到的内容:%s ,buf);CIose(SOCkfd); 打印数据并关闭套接字