第二部分--网络编程和并发解答

1. 简述 OSI 七层协议。

2. 什么是C/S和B/S架构?

- C/S架构(需要安装应用程序使用的软件)
  c client 客户端
  s server 服务端

- B/S架构(可以通过浏览器使用的)
  b broser 浏览器
  s server 服务端

不需要额外的安装客户端了,只需要一个网址就可以访问
轻量级,使用成本低

3. 简述 三次握手、四次挥手的流程。

建立TCP连接的三次握手:
    首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发送ACK报文,并分配资源,这样TCP连接就建立了。

断开连接的四次挥手:
    第一次挥手:假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。
    第二次挥手:server端送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。
    第三次挥手:当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。
    第四次挥手:Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

4. 什么是arp协议?

ARP:地址解析协议(网络层)
作用:将逻辑IP地址解析为物理地址的协议(将IP地址翻译为以太网的MAC地址)

在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。
在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。

IP地址在OSI模型的第三层(网络层),MAC地址在第二层(数据链路层), 所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。 ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

逆向地址解析协议——RARP:在知道物理地址而不知道IP地址时,应该使用RARP。

5. TCP和UDP的区别?

tcp协议(传输控制协议)
  全双工的通信协议
  建立了专门穿送数据的通道(连接),是一个长连接
  面向流的传输
  传输速率比udp协议慢
  数据安全不容易丢失(是一种可靠的传输)
  大文件算法自己拆包编号发送
  建立连接的 三次握手
  断开连接的 四次挥手
udp协议(用户数据报协议)
  是面向文件的传输,
  是一种不可靠的
  不需要建立连接,直接传送(传输通道)
  传输速率比tcp协议高
  不适合大文件的传输(文件过大会报错)

6. 什么是局域网和广域网?

局域网和广域网是按规模大小而划分的两种计算机网络。
范围在几千米以内的计算机网络统称为局域网(LAN、私网、内网) 而连接的范围超过10千米的,则称为广域网,因特网(Intenet)就是目前最大的广域网。(WAN、公网、外网、因特网)

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

因为TCP协议建立了专门穿送数据的通道(连接),是一个长连接
  UDP不需要建立连接,直接传送(传输通道)
只要不得到确认,就重新发送数据报,直到得到对方的确认为止。 通过三次握手建立连接,四次挥手断开连接,确保了数据的安全可靠,避免丢包

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

#服务端:socket(),bind(),listen(),accept(),recv(),send(),close()
   创建套接字               
   绑定IP和端口             
   监听                  
   accept等待连接          
   通信(收recv、发send)
#客户端:socket(),connect(),send(),recv(),close()
   创建套接字
   绑定IP和端口
   链接服务器
   通信(收revc、发send)
基于TCP的Socket示例

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

1.什么是黏包:
数据粘在一起

2.为什么会出现黏包现象:
首先只有在tcp协议中才会出现黏包现象
是因为tcp协议是面向流传输的协议,UDP协议是面向文件的传输
在发送数据传输的过程中还有缓存机制来避免数据丢失
因此在连续发送小数据的时候,以及接收大小不符合的时候都容易出现黏包现象
本质还是因为我们在接收数据的时候不知道发送的数据的长短

3.解决黏包问题的方案:
a、在传输大量数据之前先高数接收端要发送的数据的大小
b、通过struct模块来定制协议

10.IO多路复用的作用?

# IO多路复用分为时间上的复用和空间上的复用,
# 空间上的复用是指将内存分为几部分,每一部分放一个程序,这样同一时间内存中就有多道程序;
# 时间上的复用是指多个程序需要在一个cpu上运行,不同的程序轮流使用cpu,
# 当某个程序运行的时间过长或者遇到I/O阻塞,操作系统会把cpu分配给下一个程序,
# 保证cpu处于高使用率,实现伪并发。

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

# 什么是防火墙?
防火墙是一个分离器,一个限制器,也是一个分析器,
有效地监控了内部网和Internet之间的任何活动,保证了内部网络的安全。
# 作用
防火墙可通过监测、限制、更改跨越防火墙的数据流,
尽可能地对外部屏蔽网络内部的信息、结构和运行状况,以此来实现网络的安全保护。

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

select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:
    1.单个进程可监视的fd数量被限制
    2.需要维护一个用来存放大量fd的数据结构
      这样会使得用户空间和内核空间在传递该结构时复制开销大
    3.对socket进行扫描时是线性扫描

poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,
它没有最大连接数的限制,原因是它是基于链表来存储的但是同样有一个缺点:
大量的fd的数组被整体复制于用户态和内核地址空间之间,而不管这样的复制是不是有意义。
epoll支持水平触发和边缘触发,最大的特点在于边缘触发,
它只告诉进程哪些fd刚刚变为就需态,并且只会通知一次。

 13. 简述 进程、线程、协程的区别 以及应用场景?

 

14. GIL锁

 

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

 

16. threading.local的作用?

 

17. 进程之间如何通信

进程间通讯有多种方式,包括信号,管道,消息队列,信号量,共享内存,socket等

18. 什么是并发和并行

并发:同一时刻只能处理一个任务,但一个时段内可以对多个任务进行交替处理(一个处理器同时处理多个任务)
并行:同一时刻可以处理多个任务(多个处理器或者是多核的处理器同时处理多个不同的任务)

类比:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。

19. 进程锁和线程锁的作用?

20. 解释什么是异步非阻塞

21.路由器和交换机的区别

22. 什么是域名解析

23. 如何修改本地host文件

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

25.什么是cdn

26. LVS是什么及作用

27.Nginx是什么及作用

28. Keepalived是什么及作用

 

posted @ 2019-03-04 21:47  Aberwang  阅读(132)  评论(0)    收藏  举报