常见网络编程面试题

1.简述OSI七层协议

应用层、表示层、会话层、运输层、网络层、数据链路层、物理层

2.简述TCP/IP四层协议

应用层、运输层、网际层、网络接口层

3.tcp和udp的区别
在这里插入图片描述

4.tcp连接建立3次握手的具体过程,以及其中每一步是为什么

第一次握手是客户端connect连接到server,server accept client的请求之后,向client端发送一个消息,
相当于说我都准备好了,你连接上我了,这是第二次握手,第3次握手就是client向server发送的,就是对第二次
握手消息的确认。之后client和server就开始通讯了。

5.tcp断开连接的具体过程,其中每一步是为什么那样做

断开连接的一端发送close请求是第一次挥手,另外一端接收到断开连接的请求之后需要对close进行确认,发送一个
消息,这是第二次挥手,发送了确认消息之后还要向对端发送close消息,要关闭对对端的连接,这是第3次挥手,而
在最初发送断开连接的一端接收到消息之后,进入到一个很重要的状态time_wait状态,这个状态也是面试官经常问
道的问题,最后一次挥手是最初发送断开连接的一端接收到消息之后。对消息的确认。

6.tcp的十一种状态

 LISTEN - 侦听来自远方TCP端口的连接请求; 

SYN-SENT -在发送连接请求后等待匹配的连接请求; 

SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认; 

ESTABLISHED- 代表一个打开的连接,数据可以传送给用户; 

FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;

FIN-WAIT-2 - 从远程TCP等待连接中断请求; 

CLOSE-WAIT - 等待从本地用户发来的连接中断请求; 

CLOSING -等待远程TCP对连接中断的确认; 

LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认; 

TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认; 

CLOSED - 没有任何连接状态;

7.什么是socket,简述基于tcp协议的套间字通信流程

socket是介于应用层和传输层之间的一组接口。将复杂的TCP/IP协议封装到接口里面,使用者只需要知道怎么用即可
,不需要关心底层的实现。
基于TCP的套接字通信流程:
1)服务端:创建一个套接字对象;绑定本机地 址信息;开始时监听;接收连接;
2)客户端:创建套接字对象;主动连接客户端;等待对方接收
通过三次握手后建立连接,开始收发消息。
收发消息完了之后,通过四次挥手断开连接。

8.简述基于udp协议的套间字通信流程

无连接的通信不需要建立起客户机与服务器之间的连接,因此在程序中没有建立连接的过程。进行通信之前,需要建立
网络套接字。服务器需要绑定一个端口,在这个端口上监听接收到的信息。客户机需要设置远程 IP 和端口,需要传递
的信息需要发送到这个 IP 和端口上。

9.tcp为什么不是俩次连接而是三次握手

原因:为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

分析,假如有这样一种场景:
客户端给服务器端发送请求报文,结果由于网络问题,迟迟没有到达。
客户端迟迟没有收到服务器端的确认,于是进行N次请求,发送N条报文,但均迟迟未到达。
服务器端突然收到N+1条报文请求,于是给服务器端返回N+1条确认报文。

如果只有两次握手,岂不是会建立N+1条连接?那就很浪费资源了。
而如果三次握手,那么客户端知道自己只需要请求一次,所以只会再发一条确认报文,最终只会建立一条连接。

10.为何基于tcp协议的通信比基于udp协议的通信更可靠

  tcp协议一定是先建好双向链接,发一个数据包要得到确认才算发送完成,没有收到就一直给你重发;
  udp协议没有链接存在,udp直接丢数据,不管你有没有收到。

11.网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?

1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自
己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在
SMP(Symmetric Multi-Processing,对称多处理结构的简称,是指在一个计算机上汇集了一组处理器(多CPU),各
CPU之间共享内存子系统以及总线结构。)机器上运行,而进程则可以跨机器迁移。

12.大规模连接上来,并发模型怎么设计?

所谓并发服务器就是在同一个时刻可以处理来自多个客户端的请求。而且对于TCP和UDP套接字,这两种服务器的实
现方式也有不同的特点。

TCP并发服务器:
并发服务器的思想是每一个客户端的请求并不由服务器的主进程直接处理,而是服务器主进程创建一个子进程来处理。创建TCP并发服务器的算法如下:

复制代码 代码如下:
socket(……); //创建一个TCP套接字
bind(……); //邦定公认的端口号
listen(……);//倾听客户端连接
while(1) //开始循环接收客户端的接收
{
accept(……);//接收一个客户端的连接
if(fork(……)==0) //创建子进程
{
while(1)
{ //子进程处理某个客户端的连接
read(……);
process(……);
write(……);
}
close(……); //关闭子进程处理的客户端连接
exit(……) ;//终止该子进程
}
close(……); //父进程关闭连接套接字描述符,准备接收下一个客户端连接
}
TCP并发服务器可以解决TCP循环服务器客户端独占服务器的情况。但同时也带来了一个不小的问题,即响应客户机
的请求,服务器要创建子进程来处理,而创建子进程是一种非常消耗资源的操作。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值