网络编程和并发

第二部分 网络编程和并发
1. 简述 OSI 七层协议:人们按照分工不同把互联网协议从逻辑上划分了层级:
1)应用层 应用层 应用层 用户进层
表示层
会话层

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

2)传输层 传输层 传输层 TCP协议/UDP协议
3)网络层 网络层 网络层 ICPM/IP协议
4)网络接口层 数据链路层 数据链路层 ARP/硬件接口/RARP/arp协议
物理层 物理层

2.什么是C/S和B/S架构?
C/S架构,Client与Server,中文意思:客户端与服务端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。
B/S架构,Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。
Bowser浏览器,其实也是一种Client客户端。

3.简述 三次握手、四次挥手的流程。
客户端 主动发送SYN报文连接请求 进入等待SYN_SEND状态
服务器 接收到SYN报文,并回应一个SYN报文, 、进入SYN_RECV状态
客户端 收到服务端报文,回应一个ACK报文,进入Established状态
三次握手完成,成功建立连接,可以开始传输数据了。

主动关闭方,发送一个FIN,表示要断开连接。
接收FIN方执行被动关闭,并发送一个ACK表示同意关闭。
然后被动关闭方再发送一个FIN,表示断开连接。
主动关闭方,收到FIN,并回一个ACK同意断开。

4.什么是arp协议?
地址解析协议:查询IP地址和MAC地址的对应关系

5.TCP和UDP的区别?
TCP 可靠的、面向连接的协议、传输效率低、双全工通信(发送缓存/接受缓存)、面向字节流。
使用TCP的应用:Web浏览器/电子邮件/文件传输程序
UDP 不可靠、无连接的服务,传输效率高(发送前延时小),一对一、一对多、多对一、多对多、面向报文,尽最大努力服务,无拥塞控制。
使用UDP的应用:域名系统(DNS)/视频流/IP语音

6.什么是局域网和广域网?
局域网:是指某一个区域内由多台计算机互联成为计算机组。
广域网:由若干个局域网相互连接而成的网络。

7.为何基于tcp协议的通信比基于udp协议的通信更可靠?
TCP的可靠保证,是它的三次握手双向机制,这一机制保证校验了数据,保证了他的可靠性。
而UDP就没有了,UDP信息发出后,不验证是否到达对方,所以不可靠。
不过UDP的速度是TCP比不了的,而且UDP的反应速度更快,

8.什么是socket?简述基于tcp协议的套接字通信流程。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
在设计模式中,Socket其实就是一个门面模式,他把复杂的TCP/IP协议族隐藏在Socket接口后面。
对用户来说,一组简单的接口就是全部,以符合制定的协议。

9.什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
同时执行多条命令之后,得到的结果很可能只有一部分,在执行器他命令的时候又接收到之前执行的另外一部分结果,这种现象就叫黏包。
只有TCP有黏包现象,UDP永远不会发生黏包。

当发送端缓冲区的长度大于网卡的MTU(网络上传送的最大数据包,单位是字节。)时,
TCP会将这次发送的数据拆成几个数据包发送出去。增加丢包率和降低网络速度。

会发生黏包的两种情况:
1)发送方的缓存机制:发送端需要等缓冲区满才发送出去,造成黏包。(发送数据时间间隔很短,数据很小,就会合到一块,产生黏包)
2)接收方的缓存机制:接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端直接收到一小段数据,服务端下次在接收的时候还是从缓冲区拿上次遗留的数据,产生黏包)

黏包现象只发生在tcp协议中:
1)从表面上看,黏包问题主要是因为发送方和接收方的缓存机制、tcp协议面向流通信的特点。
2)实际上,主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的

10.IO多路复用的作用?
IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。

11.什么是防火墙以及作用?
是一项协助确保信息安全的设备,会依照特定的规则,允许或是限制传输的数据通过。防火墙可以是一台专属的硬件也可以是架设在一般硬件上的一套软件。

12.select、poll、epoll 模型的区别?

13.简述 进程、线程、协程的区别 以及应用场景?
-- 1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。
2) 线程进程都是同步机制,而协程则是异步
3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态

14.GIL锁是什么鬼?
-- python代码的执行由python虚拟机来控制,python在设计之初就考虑到要在解释器的主循环中,
同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行。对python虚拟机的
访问由全局解释器锁GIL来控制,正是这个锁能保证同一时刻只有一个线程在运行。

15.Python中如何使用线程池和进程池?
--

16.threading.local的作用?
-- threading.local()的作用就是为每个线程开辟一个独立的空间进行数据存储。

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

18.什么是并发和并行?
-- 并发:指应用能够交替执行不同的任务,例:吃完饭->喝水 喝完水->睡觉 一觉醒来->吃饭......
并行:指应用能够同时执行不同的任务,例:吃饭的时候可以边吃饭边打电话,这两件事情可以同时执行
两者区别:一个是交替执行,一个是同时执行.

19.进程锁和线程锁的作用?
-- 线程锁:大家都不陌生,主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余线程必须要等待当前线程执行完之后才能执行该代码段。但是,其余线程是可以访问该对象中的非加锁代码块的。

   进程锁:也是为了控制同一操作系统中多个进程访问一个共享资源,只是因为程序的独立性,各个进程是无法控制其他进程对资源的访问的,但是可以使用本地系统的信号量控制(操作系统基本知识)。

   分布式锁:当多个进程不在同一个系统之中时,使用分布式锁控制多个进程对资源的访问。

20.解释什么是异步非阻塞?
同步阻塞形式:
效率是最低的,
拿上面的例子来说,就是你专心排队,什么别的事都不做。

异步阻塞形式:
如果在银行等待办理业务的人采用的是异步的方式去等待消息被触发,也就是领了一张小纸条,
假如在这段时间里他不能离开银行做其它的事情,那么很显然,这个人被阻塞在了这个等待的操作上面;

异步操作是可以被阻塞住的,只不过它不是在处理消息时阻塞,而是在等待消息被触发时被阻塞.
比如select 函数,
假如传入的最后一个timeout 参数为NULL,那么如果所关注的事件没有一个被触发,
程序就会一直阻塞在这个select 调用处.

同步非阻塞形式:
实际上是效率低下的,
想象一下你一边打着电话一边还需要抬头看到底队伍排到你了没有,
如果把打电话和观察排队的位置看成是程序的两个操作的话,
这个程序需要在这两种不同的行为之间来回的切换,效率可想而知是低下的;

异步非阻塞形式:
效率更高,
因为打电话是你(等待者)的事情,而通知你则是柜台(消息触发机制)的事情,
程序没有在两种不同的操作中来回切换.

比如说,这个人突然发觉自己烟瘾犯了,需要出去抽根烟,
于是他告诉大堂经理说,排到我这个号码的时候麻烦到外面通知我一下(注册一个回调函数),
那么他就没有被阻塞在这个等待的操作上面,自然这个就是异步+非阻塞的方式了.

21.路由器和交换机的区别?
A.工作层次不同:交换机比路由器更简单,路由器比交换器能获取更多信息
B.数据转发所依据的对象不同
C.传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域
D.路由器提供了防火墙的服务

22.什么是域名解析?
-- 域名解析是把域名指向网站空间IP

23.如何修改本地hosts文件?
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,
当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,
如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
浏览器访问网站,要首先通过DNS服务器把要访问的网站域名解析成一个唯一的IP地址,之后,浏览器才能对此网站进行定位并且访问其数据。
操作系统规定,在进行DNS请求以前,先检查系自己的Hosts文件中是否有这个域名和IP的映射关系。如果有,则直接访问这个IP地址指定的网络位置,
如果没有,再向已知的DNS服务器提出域名解析请求。也就是说Hosts的IP解析优先级比DNS要高。

直接修改

24.生产者消费者模型应用场景及优势?

25.什么是cdn?
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,
使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,
CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

26.LVS是什么及作用?

27.Nginx是什么及作用?
Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。也是由于其的特性,其应用非常广。
反向代理
正向代理:某些情况下,代理我们用户去访问服务器,需要用户手动的设置代理服务器的ip和端口号。
反向代理:是用来代理服务器的,代理我们要访问的目标服务器。
代理服务器接受请求,然后将请求转发给内部网络的服务器(集群化),
并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器。
负载均衡
负载均衡:多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,
多台服务器(集群)共同完成工作任务,从而提高了数据的吞吐量。
动静分离
Nginx提供的动静分离是指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。

Nginx可以根据配置对不同的请求做不同转发,这是动态分离的基础。静态请求对应的静态资源可以直接放在Nginx上做缓冲,
更好的做法是放在相应的缓冲服务器上。动态请求由相应的后端服务器处理。

28.keepalived是什么及作用?
keepalived是一个类似于Layer2,4,7交换机制的软件。是Linux集群管理中保证集群高可用的一个服务软件,其功能是用来防止单点故障。
keepalived的工作原理:
keepalived是基于VRRP协议实现的保证集群高可用的一个服务软件,主要功能是实现真机的故障隔离和负载均衡器间的失败切换,防止单点故障。
VRRP协议:Virtual Route Redundancy Protocol虚拟路由冗余协议。是一种容错协议,保证当主机的下一跳路由出现故障时,
由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。

29.haproxy是什么以及作用?
(1)HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
(2)HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
(3)HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救
了很多站点,这个优点也是其它负载均衡器没有的。
(4)HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。

30.什么是负载均衡?
负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

31.什么是rpc及应用场景?

32.简述 asynio模块的作用和应用场景。

33.简述 gevent模块的作用和应用场景。

34.twisted框架的使用和应用?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值