首页 > 其他 > 详细

第五章 网络编程和并发编程

时间:2019-09-15 21:07:22      阅读:119      评论:0      收藏:0      [点我收藏+]

1、python的底层网络交互模块有哪些?

  socket, urllib,urllib3 , requests, grab, pycurl

2、简述OSI七层协议

  应用层:HTTP,FTP,NFS

  表示层:Telnet,SNMP

  会话层:SMTP,DNS

  传输层:TCP,UDP

  网络层:IP,ICMP,ARP,

  数据链路层:Ethernet,PPP,PDN,SLIP,FDDI

  物理层:IEEE 802.1A,IEEE 802.11

3、什么是C/S和B/S架构

  C/S架构:是指客服端和服务端,交互性好,对服务器压力小,安全,但是更新服务端的是后客户端也得更新。

  B/S架构:是指浏览器和服务器,优点是不需要更新客服端,缺点是交互性差,安全性低。

4、简述TCP三次握手四次挥手的过程。

  建立连接:

  第一次握手:客户端向服务器发出请求。

  第二次握手:服务器收到请求,同意连接,想客服端发送确认报文。

  第三次握手:客服端接收到报文,向上层应用传达已建立连接。

  释放连接:

  第一次挥手:数据传输结束后,客服端发送连接释放报文段,并结束数据传输。

  第二次挥手:服务端接收到连接释放报文段后,向客户端发送确认报文。

  第三次挥手:服务器没有要发送的数据后,其应用进程就通知服务器释放TCP连接。这个阶段服务器所发出的最后一个报文。

  第四次挥手:客户端收到连接释放报文段之后,必须发出确认。再经过2MSL(最长报文端寿命)后,本次TCP连接真正结束,通信双方完成了他们的告别。

5、什么事arp协议?

  arp协议是地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)。

6、TCP协议和UDP协议的区别?为什么TCP协议更可靠?

  1、TCP是面向连接的,发送数据之前必须建立连接,UDP不需要建立连接就可以发送数据。

  2、TCP协议提供可靠的服务,通过TCP传输数据,无差错,不丢失,不重复,且按序到达,UDP是尽最大努力交付,且不保证可靠交付。

  3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

  4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。

  5、TCP首部开销20字节;UDP的首部开销小,只有8个字节。

  6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

  tcp:可靠 对方给了确认收到信息,才发下一个,如果没收到确认信息就重发  

  udp:不可靠 一直发数据,不需要对方回应

7、什么是局域网和广域网?

  局域网,LAN(Local Area Network)是指在某一区域内(如一个学校、工厂和机关内)由多台计算机互联成的计算机组。

  广域网,WAN(Wide Area Network)也称远程网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个城市或国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。

8、什么是socket?简述基于TCP协议的套接字通信流程。

  Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。  

9、什么是黏包?socket中造成黏包的原因是什么?哪些情况会发生黏包现象。

  黏包就是数据黏在一起,TCP协议是面向字节流的,基于tcp的套接字客户端往服务端上传文件,发送时文件内容是按照一段一段的字节流发送的,在接收方看了,根本不知道该文件的字节流从何处开始,在何处结束

  所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

  只有TCP有粘包现象,UDP永远不会粘包。

  客户端粘包:

  发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据量很小,TCP优化算法会当做一个包发出去,产生粘包)

  服务端粘包:

  接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)

10、IO多路复用的作用

  阻塞IO:特点就是在IO执行的两个阶段(等待数据和拷贝数据两个阶段)都被阻塞了。

  非阻塞IO:特点就是,数据准备阶段,用户发出read操作时,如果数据没有准备完成,会立刻返回一个error,用户进程可以去做其他事情,需要不断的轮询查看数据是否准备完成,但是在数据拷贝期间,进程还是阻塞的。

  IO多路复用:select和epoll可以让单个线程同时处理多个连接,内核会监视所有select负责的socket,当有一个数据准备完成时,select就会返回,这是用户进程就可以直接进行read操作了。适用于多个连接。

  异步IO:用户进程发出read操作时就可以去干其他事了,内核会等数据准备完成时,将数据拷贝到进程,这一切完成后,内核会给用户进程发一个报文,告知一切都已完成。

11、什么是防火墙以及作用?

  防火墙作为一个边界防御工具,其监控流量——要么允许它、要么屏蔽它。

12、select, poll, epoll的区别

  select:它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂

  度,同时处理的流越多,无差别轮询时间就越长。

  poll:本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态, 但是它没有最大连接数的限制,原因是它是基于链表来存储的.

  epoll:epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实际上是事件驱动(每个事件关联上fd)的,此时我们对这些流的操作都是有意义的。

13、请简述进程、线程、协程的区别,以及应用场景。

  进程:操作系统是由一个个的进程组成的,一个应用程序就可以看作一个进程,他有自己独立的运行空间,有自己独立的堆和栈,进程是操作系统资源分配的最小单位。

  线程:线程是属于进程的,进程可以创建线程,线程之间共享堆不共享栈,线程是操作系统资源调动的最小单位。

  协程:协程也是共享堆不共享栈,他是由程序员调度的。

14、什么是GIL锁。

  GIL是全局解释锁,这个机制只允许一个线程控制python解释器。

15、python中如何使用线程池和进程池?

   concurrent.futures 模块中的 Executor,Executor 提供了两个子类,即 ThreadPoolExecutor 和 ProcessPoolExecutor,其中 ThreadPoolExecutor 用于创建线程池,而 ProcessPoolExecutor 用于创建进程池。

16、threading.local的作用?

  threading.local()这个方法的特点用来保存一个全局变量,但是这个全局变量只有在当前线程才能访问,如果你在开发多线程应用的时候  需要每个线程保存一个单独的数据供当前线程操作,可以考虑使用这个方法,简单有效。

17、进程之间如何进行通信?

  1、管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。

  特点:单向的,具有固定的读端和写端,他只能用于有亲缘关系的进程之间(父子进程、兄弟进程),他可以看作特殊的文件,可以读写,但是寻在于内存中。

  2、FIFO,也称为命名管道,它是一种文件类型。 

  特点:他可以在无关进程之间通信,可以看作一种特殊的设备文件,存在于文件系统中。

  3、消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。 

  特点:他是面向记录的,有一定特殊的格式和优先级,消息队列是独立于进程的,进程消失,消息队列不会消失,消息不一定是先进先出的顺序,也可以根据类型读取。

  4、信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。

  特点:信号量用于进程间同步,若要想在进程间传递顺序需要共享内存。

  5、共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。

  特点:共享内存是最快的一种IPC,因为进程是直接堆内存进行存取,因为多个进程可以同时操作,所以需要进行同步,信号量和共享内存通常一起使用。

18、什么是并发和并行?

  并发:在计算机领域开发过程中,并发指的是应用能够交替执行不同的任务,比如多线程,多线程并非是同时执行多个任务,而是通过时间轮转发等算法的调度,时多个任务以我们察觉不到的速度交替执行。

  并行:指多个任务同时执行。

  区别:一个是交替,一个是同时。

19、解释什么是异步非阻塞。

  同步阻塞:调用结果返回前,进程会被挂起,直到调用结果返回,效率低。

  异步阻塞:不同的是,调用结果返回前会用回调或者消息的方式通知进程,但是调用结果返回前,进程还是会被挂起,效率一样的低。

  同步非阻塞:调用结果返回前,进程可以去做其他事情,但是需要通过轮询不断的查看调用结果是否返回,效率比前两个高,但是耗CPU,也一般。

  异步非阻塞:调用结果返回之前,进程可以去做其他事情,当函数调用完成后,会以回调或者消息的形式通知进程,效率最高。

20、路由器和交换机的区别?

  区别一:路由器可以给局域网自动分配IP,虚拟拨号。交换机则只是用来分配网络数据的。

  区别二:路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP。交换机可以把很多主机连起来,这些主机对外各有各的IP。

  区别三:交换机工作在中继层,根据MAC地址寻址,不能处理TCP/IP协议。

      路由器工作在网络层,根据IP地址寻址,可以处理TCP/IP协议。

  区别四:路由器提供防火墙服务,交换机不能提供该功能。

21、什么是域名解析?

  域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站一种服务。IP地址是网络上标识站点的数字地址,为方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。

 

 

 

第五章 网络编程和并发编程

原文:https://www.cnblogs.com/490144243msq/p/11517298.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!