Python企业面试题4 —— 网络编程和并发
1. 简述OSI七层协议?
OSI七层协议:一种用于计算机网络通的标准体系结构,它将网络通信过程划分为七个不同的层次,每个层次负责不同的功能。以下是对每个层次的简要介绍:
- 物理层:负责传输比特流,将数据转换为电信号,并通过物理介质进行传输,如网线、光纤等。
- 数据链路层:负责将比特流划分为数据帧,并提供可靠的数据传输,通过物理地址(MAC地址)进行寻址和错误检测。
- 网络层:负责将数据包从源主机传输到目标主机,通过IP地址进行寻址和路由选择,实现不同网络之间的通信。
- 传输层:负责提供端到端的可靠数据传输,通过端口号进行寻址和数据分段,常见的协议有TCP和UDP。
- 会话层:负责建立、管理和终止会话连接,提供会话控制和同步功能。
- 表示层:负责数据的格式化、加密和压缩,确保不同系统之间的数据能够正确解释和处理。
- 应用层:提供用户与网络服务之间的接口,包括各种应用协议,如HTTP、FTP、SMTP等。
2. 什么事C/S架构和B/S架构?
C/S架构:client(客户端)与server(服务端),即客户端与服务端的架构。
- 优点:响应速度快;界面美化;可以完成复杂的业务过程;安全性能高。
- 缺点:兼容性差;开发维护费用较高;用户群固定。
B/S架构:brosver(浏览器端)与与server(服务端),即浏览器端与服务端的架构。
- 优点:分布性强;业务扩展简单便利;维护简单便利;开发简单共享性强。
- 缺点:在跨浏览器上,BS架构不尽如人意;数据库的压力较大;在速度与安全性上须要花费超大的设计费用;功能弱化;留存率低。
3. 简述3次握手4次挥手的过程?
- 三次握手:
第一次握手:客户端先向服务端发起一次询问建立连接的请求,并随机生成一个值作为标识。
第二次握手:服务端向客户端先回应第一个标识,再重新发一个确认标识。
第三次握手:客户端确认标识,建立连接,开始传输数据。 - 四次挥手:——> 断开连接
第一次挥手:客户端向服务端发起断开连接的请求。
第二次挥手:服务端向客户端确认请求。
第三次挥手:服务端向客户端发起断开连接的请求。
第四次挥手:客户端向服务端确认断开连接的请求。
4. TCP和UDP两种协议的区别?
- TCP协议:面向连接,保证高可靠性传输层协议。
- UDP协议:数据丢失,无秩序的传输层协议(QQ基于UDP协议)。
5. 为何基于TCP协议的通信比基于UDP协议的通信更可靠?
- 流失协议:TCP协议,可靠传输,只要对方回复了确认收到信息,才发下一个,如果没收到确认信息就重发。
- 数据包协议:UDP协议,不可靠传输,它是一直发数据,不需要对方回应。
6. 什么是socket?简述基于TCP协议的套接字通信流程?
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在socket接口后面,对用户来说,一组简单的接口就是全部。
-
服务端:
创建socket对象,
绑定ip端口bind(),
设置最大连接数listen(),
accept()与客户端的connect()创建双向管道,等到联连,
send(),recv(),收发数据
close() -
客户端
创建socket对象,
connect()与服务端accept()创建双向管道,
send(),
recv(),
close()
7. 什么是粘包?socket中造成粘包的原因是什么?哪些情况会发生粘包现象?
注意:只有TCP有粘包现象,UDP永远不会粘包
- 粘包:在获取数据时,出现数据的内容不是本应该接收的数据,如:对方第一次发送hello,第二次发送world,我方接收时,应该收到两次,一次是hello,一次是world,但事实上是一次收到helloworld,一次收到空,这种现象就叫做粘包。
- 原因:粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。
- 什么情况会发生:
(1)发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据量很小,会合到一起,产生粘包)
(2)接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)
8. IO多路复用的作用?
socketserver多个客户端连接,单线程下实现并发效果,就叫做多路复用。
与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,从而大大减小了系统的开销。
9. select、poll、epoll模型的区别?(属于多路复用IO的模型)
都是io多路复用的机制,监视多个socket是否发生变化,本质上都是同步io。select,poll实现需要自己不断轮循所有监测对象,直到对象发生变化,在这个阶段中,可能要睡眠和唤醒多次交替,而epoll也需要调用epoll_wait不断轮循就绪链表,但是当对象发生变化时,会调用回调函数,将变化的对象放入就绪链接表中,并唤醒在epoll_wait进入睡眠的进程。虽然都会睡眠和唤醒,但是select和poll在被唤醒的时候要遍历整个监测对象集合,而epoll只要判断就绪链表是否为空即可,节省了大量cpu时间。
select、poll、epoll都是IO多路复用的机制,但select、poll、epoll本质上都是同步IO,因为它们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。
FD(文件描述符)
select模型:
- 优点:
(1)可移植性好,在某些Unix系统下不支持poll()。
(2)对于超时值提供了更好的精度:微秒,而poll是毫秒。 - 缺点:
(1)最大并发数限制,因为一个进程锁打开的FD是有限的,由FD_SETSIZE设置,默认值是1024/2048,因此select模型的最大并发数就被相应限制了。
(2)效率问题:select每次调用都会线性扫描全部的FD集合,所以将FD_SETSIZE改大,会越慢。
(3)需要维护一个用来存放大量FD的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大。
poll本质上和select没有区别,它将用户传入的数据组拷贝到内核空间,它没有最大连接数的限制,原因是它基于链表来存储的,但是同样有一个缺点:大量的FD的数组被整体复制于用户态和内核地址空间,而不管这样的复制是不是有意义。
10. 什么是防火墙?以及作用?
防火墙:是一个分离器、一个限制器,也是一个分析器,有效地监控了内部网和Internet之间的任何活动,保证了内部网络的安全。
作用:
- 防火墙是网络安全的屏障;
- 可以强化网络安全策略;
- 对网络存取和访问进行监控审计;
- 防止内部信息的外泄;
- 除了安全作用,防火墙还支持具有Internet服务特性的企业内部网络技术体系VPN(虚拟专用网)。
本文来自博客园,作者:生而自由爱而无畏,转载请注明原文链接:https://www.cnblogs.com/zczhaod/p/18132857