一、 单选题
1.以下字段中,不属于IP首部的是
A. 协议类型
B. 生存时间
C. 源IP地址
@D. 目的端口号
2.以下函数中,不会产生阻塞的是
A. send( )
B. sendto( )
C. connect( )
@D. listen( )
3.进程A是进程B的父进程,当A正在运行时B退出,下列叙述中正确的是
A.进程A也将退出
B.进程A将收到SIGCHLD信号
D. 进程A将收到SIGKILL信号
@D.进程A会成为僵尸进程
4.整数0x12345678在little-endian字节序主机内存中的存储形式是_________(注:内存由低到高)
A. 12 34 56 78 @B. 78 56 34 12
C. 34 12 78 56 D. 56 78 12 34
5.使用信号驱动I/O时哪一个不是必须要执行的操作
A.为信号SIGIO关联一个信号处理函数
@B.设置套接字为非阻塞模式
C.设置套接字所有者
D.允许套接字进行信号驱动I/O
6.对使用UDP协议的套接字调用connect函数,下面叙述中正确的是
A.connect函数将阻塞
B.connect函数将导致3次握手操作
@C.connect函数记录对方的IP地址和端口后立刻返回
D.不能对使用UDP协议的套接字描述符调用connect函数
7.对函数调用send(sockfd,“12xyz”,5,MSG_OOB)的描述中正确的是
A.只有字符z被写入发送缓冲区
B.只有字符串12xy被写入发送缓冲区
@C.字符串12xyz中的每个字符都将作为带外数据发送
D.TCP协议发送的下一个报文段中URG标志将置位
8.在给网络地址附值时,程序如果使用“INADDR_ANY”,则表明
A.对于只有一个IP地址的主机,使用“127.0.0.1”地址
B.对于有多个网卡的主机,使用其中任意一个IP地址
@C.对于有多个网卡的主机,表示所有IP地址,并处理所有地址的请求
D.以上均不对
9.请求建立连接时TCP包头中的_________标志位有效
@A. SYN
B. RST
C. PSH
D. URG
10.当通信的对方关闭其写通道时,TCP套接字的读函数read( )将_ __
A.返回大于0的整数 B.返回小于0的整数
C.阻塞 @D.返回0
1.以下哪个是TCP/IP模型?( B )
A.应用层,表示层,网络层,物理层; B.应用层,传输层,网络层,链路层
C.应用层,传输层,链路层,物理层 D.应用层,传输层,网络层,物理层
的设计架构不包含以下哪一种?( C )
A.集中式架构 B.完全分布式架构
C.点对点架构 D.混合型架构
请求方法不包括如下哪一种 ( B )
A.Post
C.Get
的作用不包括( C )
A.文件共享; B. 通过应用程序直接或间接使用远程主机;
C.提供一致性的协议,避免用户在不同主机上有相同的操作方式;
D. 提供可靠及有效率的数据传输;
与POP3的端口分别是:( B )
A.25,75 B. 25,110
C.21,75 D. 21,110
6. C )
的特点不包括如下哪一点( C )
A.面向连接 B.全双工数据传送
C.传输速度快 D.面向字节流
8.关于线程哪一点是对的。( D )
A.任何一个C#程序都有一个默认的线程,该线程是后台线程;
B. 每个进程都有一个线程池。线程池默认大小有35个线程;
C.线程池中的线程都是前台线程;
D. C#中常用的线程同步的语句是lock语句;
9.在Internet中用一个三元组可以在全局中唯一标识一个应用层进程,这不包括下列哪一种 ( A )
A.网络层协议 地址
C.端口号 D.传输层协议
IP协议簇中,哪一种是网络层协议( B )
A.TCP
C.SMTP
[A] 以A、B、C的顺序执行
[B] 以C、B、A的顺序执行
[C] 以B、C、A的顺序执行
[D] 无固定执行顺序
以下对早期ARPAnet的描述不正确的是 ( D )
[A] 使用NCP协议 [B] 不能互联不同类型的计算机
[C] 没有纠错功能 [D] 可以互联不同类型的操作系统
Internet中的世界语是 ( C )
[A] TCP [B] IP [C] TCP/IP [D] http
以下不属于socket的类型的是 ( D )。
[A] 流式套接字
[B] 数据报套接字
[C] 原始套接字
[D] 网络套接字
以下关于socket的描述错误的是 ( C )
[A] 是一种文件描述符
[B] 是一个编程接口
[C] 仅限于TCP/IP
[D] 可用于一台主机内部不同进程间的通信
路由器是根据哪一层的信息为数据包选择路由 ( C )
[A] 物理层 [B] 数据链路层 [C] 网络层 [D] 传输层
为了解决在不同体系结构的主机之间进行数据传递可能会造成歧义的问题,以下( A )函数常常用来在发送端和接收端对双字节或者四字节数据类型进行字节序转换。
[A] htons()/htonl()/ntohs()/ntohl()
[B] inet_addr()/inet_aton()/inet_...
[C] gethostbyname()/gethostbyaddr()
[D] (struct sockaddr *)&(struct sockaddr_in类型参数)
在实现基于TCP的网络应用程序时,服务器端正确的处理流程是( C )
[A] socket() -> bind() -> listen() -> connect() -> read()/write() -> close()
[B] socket() -> bind() -> listen() -> read()/write() -> close()
[C] socket() -> bind() -> listen() -> accept() -> read()/write() -> close()
[D] socket() -> connect() -> read()/write() -> close()
只用于同一主机内部进程间通信的socket应使用的协议族是 ( B )
[A] AF_INET [B] AF_UNIX [C] AF_NS [D] AF_IMPLINK
[A] IGMP [B] IP [C] ICMP [D] SMTP
二、 判断下面命题的正确性,
1. 一般情况下,守护进程是在后台运行。
守护进程不考
2. Browse/Server模型主要事务在服务器端实现,一部分事务在前端实现。
正确
3.阻塞式I/O是套接字的默认模型。
正确
4.IP数据包首部中TTL=64表示数据包在网上的最大生存时间是64秒。
错误,TTL表示数据包在网上的最大生存时间,但单位不是秒,而是表示数据包可经过的最多的路由器数量,每经过一个路由器这个值-1。当这个值减为0时网络设备将抛弃这个包。
5.可以只用通信双方的IP地址来标识一条TCP网络连接。
错误,除了需要通信双方的IP地址外还需要通信双方的端口号。
端口的分配地址是1-65535,全局分配是1-1023,本地分配是1024-65535 (F)
线程池中既有后台线程也有前台线程,某进程的所有前台线程都终止了,后台进程也自然终止。 (F)
在SMTP中,电子邮件由信封、首部和正文3部分组成。 (T)
数字签名是私钥加密,公钥解密。 (T)
ESMTP与SMTP的区别是发送邮件时要求用户身份验证。 (T)
HTTP的流水线方式是指客户在收到前一个响应后才能发出下一个请求。 (F)
HTTP(Hypertext Transfer Protocol),超文本传输协议,目前的版本是 。 (F)
NAT功能是只能用硬件来实现 (F)
常用IP地址有A,B,C,D,E五类 (F)
UDP不需要连接,速度比TCP快; (T)
UDP传输的数据无消息边界; (F)
Socket类比位于底层TcpClient类提供了更高层次的抽象,它们封装TCP套接字的创建,不需要处理连接的细节。 (F)
监听套接字与新创建的套接字所使用的端口不同。 (F)
(T)
Socket套接字的Accept()方法若检测到监听套接字的缓冲区是空的话,立刻返回 (F)
信号是一种同步通讯方式 ( F )
可以使用signal()来给同一进程组中的所有进程发送信号 ( F )
从一个空FIFO中读取数据时会发生阻塞,但从一个空PIPE中读取数据时不会发生阻塞 ( F )
IP地址均为32位 ( F )
大端序表示高位字节存储在高地址 ( F )
bind()函数用于将套接字和某个地址绑定 ( T )
connect()函数既可以用于TCP,也可以用于UDP ( T )
每个套接字最多只能connect一次 ( F )
为了区分一台主机接收到的网络数据包应该递交给哪个套接字来处理,要根据端口号 ( T )
无论是TCP socket,还是UDP socket,它们的服务器端必须调用bind()函数来绑定一个地址,这样客户端才可以和服务器端通信 ( T )
发送一个UDP数据报,必须使用sendto()函数 ( F )
三、 简答,
什么是端口,网络通信中为什么要引入端口?(6分)
答: 端口是TCP/IP协议簇中,应用层进程与传输层协议实体间的通信接口。端口是操作系统可分配的一种资源;应用程序(进程)通过系统调用与某端口绑定(binding)后,传输层传给该端口的数据都被相应进程接收,相应进程发给传输层的数据都通过该端口输出。
请简述多态的三种实现方式,以及各自的应用场景、实现的关键点
1、虚方法:将父类的方法标记为虚方法,使用关键字virtual,此方法在子类中可以重写(使用关键字override);
应用场景:该方法有具体实现和调用需求时
2、抽象类与抽象方法:如果我们不需要使用父类创建对象,它的存在只是为供子类继承。可以将父类写成抽象(关键字abstract)类,将父类的方法写成抽象方法,子类中的方法仍用关键字override重写。
应用场景:该方法当前不能确定如何实现,需要由子类去实现时 。
3、接口实现:接口就是一个规范、能力;接口的成员不允许添加修饰符,因为默认就是public;接口中不允许写具有方法体的方法;接口不能被实例化。
2.什么是套接字?(5分)
答:套接字是对网络中不同主机上应用进程之间进行双向通信的端点的抽象,一个套接字就是网络上进程通信的一端,提供了应用进程利用网络协议栈交换数据的机制。
3.套接字有哪些种类,分别有什么特点?(6分)
答:
(1)流式套接字。提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收;内设流量限制,避免数据超流限;数据被看做是字节流,无长度限制;
(2)数据报式套接字。提供无连接服务;数据包以独立包形式发送,不提供无差错保证,数据可能丢失或重复,并且接收顺序混乱。
(3)原始套接字。原始套接字允许对较低层次的协议,如IP、ICMP直接访问,用于检验新的协议的实现。
4.消息无边界问题有哪几种解决方法,各有什么优缺点?(6分)
答:
请简述TCP与UDP协议的区别,优缺点,以及使用场景
TCP最主要的特点如下。
(1) 是面向连接的协议。
(2) 端到端的通信。每个TCP连接只能有两个端点,而且只能一对一通信,不能一点对多点直接通信。
(3) 高可靠性。通过TCP连接传送的数据,能保证数据无差错、不丢失、不重复地准确到达接收方,并且保证各数据到达的顺序与其发出的顺序相同。
(4) 全双工方式传输。
(5) 数据以字节流的方式传输。
(6) 传输的数据无消息边界。
缺点:速度慢,占用系统资源高
应用场景:当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议
UDP主要特点:UDP是一种简单的、面向数据报的无连接的协议,提供的是不一定可靠的传输服务。所谓“无连接”是指在正式通信前不必与对方先建立连接,不管对方状态如何都直接发送过去。这与发手机短信非常相似,只要知道对方的手机号就可以了,不要考虑对方手机处于什么状态。UDP虽然不能保证数据传输的可靠性,但数据传输的效率较高。
缺点:可靠性差
应用场景:适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等;在音频、视频等非必须保证每一帧数据准确可靠到达的情形
协议的两种工作方式是什么,请简述。(6分)
答:
(1)PORT方式,即客户主动式。客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端使用并监听某临时端口,并在命令链路上用PORT方式告诉服务器采用主动传输方式。于是服务器从20端口向客户端的临时端口发送连接请求,建立一条数据链路来传送数据。
(2)PASV方式,即客户被动式。客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端告诉服务器采用被动传输方式。于是服务器使用并监听某临时端口,并在命令链路上用PASV命令告诉客户端对应的端口号。最后客户端向服务器发送连接请求,建立一条数据链路来传送数据。
协议的内容有哪些?(5分)
答:
3、简述如何基于TCP实现Socket客户端、服务器的数据收发
服务器端:
第一步:创建一个用于监听连接的Socket对像;
第二步:用指定的端口号和服务器的ip建立一个EndPoint对像;
第三步:用socket对像的Bind()方法绑定EndPoint;
第四步:用socket对像的Listen()方法开始监听;
第五步:接收到客户端的连接,用socket对像的Accept()方法创建一个新的用于和客户端进行通信的socket对像;
第六步:通信结束后一定记得关闭socket;
客户端:
第一步:建立一个Socket对像;
第二步:用指定的端口号和服务器的ip建立一个EndPoint对像;
第三步:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;
第四步:如果连接成功,就用socket对像的Send()方法向服务器发送信息;
第五步:用socket对像的Receive()方法接受服务器发来的信息 ;
第六步:通信结束后一定记得关闭socket;
无状态与持久连接分别是什么意思,请简述。(5分)
答:无状态的意思是,每一个请求与响应是互相独立的。而持久连接是,服务器
会在一定时间内保留该连接的相关信息。
9.在IE地址栏中输入域名后的HTTP流程。(5分)
.套接字函数close( )与shutdown( )的差别?
shutdown操作连接通道,其他进程不能再使用已被关闭的通道;close操作描述符,其他进程仍然可以使用该socket描述符
close关闭应用程序与socket的接口,调用close之后进程不能再读写这个socket;shutdown可以只关闭一个通道,另一个通道仍然可以操作
3.请简述循环服务器模型和并发服务器模型的区别。
循环服务器:任一时刻只处理一个客户机请求,处理请求过程中下一请求等待,节省服务器资源,响应时间长,适合处理非耗时请求。
并发服务器:并发执行,每收到一个连接请求创建一个进程处理该连接,服务器继续等待下一连接,响应速度快,占用系统资源多。
简述TCP和 UDP的异同点
相同点:都是传输层协议
不同点:tcp协议面向连接,提供可靠的传输;udp协议无连接,不保证可靠的传输
什么是高可靠性通信?
数据无错误、数据无丢失、数据无失序、数据无重复到达
列举同步通讯模式与异步通讯模式,并加以简要描述二者的利弊
同步通信机制
你打电话问书店老板有没有《C#并发编程》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
利弊:卡UI线程,主线程忙于计算,无法顾及其他任务。执行速度慢,由于只有一个线程进行计算。任务执行顺序容易控制,符合人类传统思维,容易理解。
异步通信机制
书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。
利弊:不卡界面,主线程闲置(可进行其他操作),计算机待办任务交由子线程来完成,改善用户体验。异步多线程执行速度快,可开启多个线程同时进行任务操作。无序执行计算机任务, 启动无序:线程资源是向操作系统申请的,由操作系统的调度策略决定,所以启动顺序随机,同一个任务同一个线程,执行时间也不确定,CPU分片,结束也无序
四、 综合,
1、使用UDP套接字编程,实现客户机发送20个整数给服务器,服务器在其中找到这些整数的最大值,返回给客户机。
2、编写一个TCP服务器端程序,可以把客户端发来的消息回发给客户端
3、如何解决线程同步问题:我们在编程的时候,有时会使用多线程来解决问题,然而,多线程不可避免地会带来一个问题,就是线程同步的问题。请列举解决线程同步问题的方法,并描述各种解决方案实现原理
??? 复习的东西你往“博问”里面发???