每日小题8
1.python的底层交互模块有哪些
答:socket, struct,socketserver
2.简述osi七层模型
答:网络层,传输层,网络层,数据链路层,物理层
3.什么是c/s和b/s架构
答:
c/s架构是客户和服务器之间的
b/s架构是浏览器和服务器之间的
4.tcp三次握手.四次挥手
先发送一个sym报头 seq=x
然后回复一个sym seq=y ack=x+1
然后再回复一个ack=y+1
四次挥手
先发送一个请求fin报头 seq=x
然后回复一个ack=x+1
然后继续发一个fin seq=y
然后再回复一个ack=y+1
5.什么是arp协议
6.tcp和udp的区别简述基于tcp协议的通信比基于udp协议的通信更可靠?
tcp可靠udp不可靠
tcp速度慢没有udp安全,tcp靠三次握手建立连接
udp速度快稍微安全但是不可靠
7.什么是广域网什么是局域网
1、广域网(Wide Area Network),简称WAN,是一种跨越大的、地域性的计算机网络的集合,通常跨越省、市,甚至一个国家。广域网包括大大小小不同的子网,子网可以是局域网,也可以是小型的广域网。
2、也称远程网(long haul network ),通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个城市或国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。
二、局域网:
1、局域网(Local Area Network),简称LAN,是指在某一区域内由多台计算机互联成的计算机组。
2、某一区域指的是同一办公室、同一建筑物、同一公司和同一学校等,一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、扫描仪共享、工作组内的日程安排、电子邮件和传真通信服务等功能。
3、局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
8.什么是socket?简述基于tcp协议的套接字通信流程.
a=socket.socket()
a.bind()
a.listen()
c,d=a.accept()
9.什么是粘包?socket中造成粘包的原因是什么?那些情况会发生粘包现象?
发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一个TCP段。若连续几次需要send的数据都很少,通常TCP会根据优化算法把这些数据合成一个TCP段后一次发送出去,这样接收方就收到了粘包数据。
10.io多路复用的作用
I/O多路复用是用于提升效率,单个进程可以同时监听多个网络连接IO。
举例:通过一种机制,可以监视多个文件描述符,一旦描述符就绪(读就绪和写就绪),能通知程序进行相应的读写操作,I/O多路复用避免阻塞在io上,原本为多进程或多线程来接收多个连接的消息变为单进程或单线程保存多个socket的状态后轮询处理 select是通过系统调用来监视一组由多个文件描述符组成的数组,通过调用select()返回结果,数组中就绪的文件描述符会被内核标记出来,然后进程就可以获得这些文件描述符,然后进行相应的读写操作。 每次调用select,都需要把fd集合由用户态拷贝到内核态,在fd多的时候开销会很大,每次select都是线性遍历整个列表,当fd很大的时候,遍历的开销也很大 poll本质上与select基本相同,只不过监控的最大连接数上相较于select没有了限制,因为poll使用的数据结构是链表,而select使用的是数组,数组是要初始化长度大小的,且不能改变 Epoll:解决select和poll本身的缺陷 数组长度限制解决方案:fd上限是最大可以打开文件的数目,具体数目可以查看/proc/sys/fs/file-max。一般会和内存有关 需要每次轮询将数组全部拷贝到内核态解决方案:每次注册事件的时候,会把fd拷贝到内核态,而不是每次poll的时候拷贝,这样就保证每个fd只需要拷贝一次。 每次遍历都需要列表线性遍历解决方案:不再采用遍历的方案,给每个fd指定一个回调函数,fd就绪时,调用回调函数,这个回调函数会把fd加入到就绪的fd列表中,所以epoll只需要遍历就绪的list即可
11.什么是防火墙以及作用?
1.什么是防火墙
防火墙是指设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间的一系列部件的组合。 它可通过监测、限制、更改跨越防火墙的数据流,尽可能地对外部屏蔽网络内部的信息、结构和运行状况, 以此来实现网络的安全保护。
在逻辑上,防火墙是一个分离器,一个限制器,也是一个分析器,有效地监控了内部网和Internet之间的任何活动, 保证了内部网络的安全。
2.使用Firewall的益处
保护脆弱的服务
通过过滤不安全的服务,Firewall可以极大地提高网络安全和减少子网中主机的风险。例如, Firewall可以禁止NIS、NFS服务通过,Firewall同时可以拒绝源路由和ICMP重定向封包。
控制对系统的访问
Firewall可以提供对系统的访问控制。如允许从外部访问某些主机,同时禁止访问另外的主机。例如, Firewall允许外部访问特定的Mail Server和Web Server。
集中的安全管理
Firewall对企业内部网实现集中的安全管理,在Firewall定义的安全规则可以运行于整个内部网络系统, 而无须在内部网每台机器上分别设立安全策略。Firewall可以定义不同的认证方法, 而不需要在每台机器上分别安装特定的认证软件。外部用户也只需要经过一次认证即可访问内部网。
增强的保密性
使用Firewall可以阻止攻击者获取攻击网络系统的有用信息,如Figer和DNS。
记录和统计网络利用数据以及非法使用数据
Firewall可以记录和统计通过Firewall的网络通讯,提供关于网络使用的统计数据,并且,Firewall可以提供统计数据, 来判断可能的攻击和探测。
策略执行
Firewall提供了制定和执行网络安全策略的手段。未设置Firewall时,网络安全取决于每台主机的用户。
3.防火墙的种类
防火墙总体上分为包过滤、应用级网关和代理服务器等几大类型。
数 据 包 过 滤
数据包过滤(Packet Filtering)技术是在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑, 被称为访问控制表(Access Control Table)。通过检查数据流中每个数据包的源地址、目的地址、所用的端口号、 协议状态等因素,或它们的组合来确定是否允许该数据包通过。 数据包过滤防火墙逻辑简单,价格便宜,易于安装和使用, 网络性能和透明性好,它通常安装在路由器上。路由器是内部网络与Internet连接必不可少的设备, 因此在原有网络上增加这样的防火墙几乎不需要任何额外的费用。
数据包过滤防火墙的缺点有二:一是非法访问一旦突破防火墙,即可对主机上的软件和配置漏洞进行攻击; 二是数据包的源地址、目的地址以及IP的端口号都在数据包的头部,很有可能被窃听或假冒。
应 用 级 网 关
应用级网关(Application Level Gateways)是在网络应用层上建立协议过滤和转发功能。 它针对特定的网络应用服务协议使用指定的数据过滤逻辑,并在过滤的同时,对数据包进行必要的分析、 登记和统计,形成报告。实际中的应用网关通常安装在专用工作站系统上。
数据包过滤和应用网关防火墙有一个共同的特点,就是它们仅仅依靠特定的逻辑判定是否允许数据包通过。 一旦满足逻辑,则防火墙内外的计算机系统建立直接联系, 防火墙外部的用户便有可能直接了解防火墙内部的网络结构和运行状态,这有利于实施非法访问和攻击。
代 理 服 务
代理服务(Proxy Service)也称链路级网关或TCP通道(Circuit Level Gateways or TCP Tunnels), 也有人将它归于应用级网关一类。它是针对数据包过滤和应用网关技术存在的缺点而引入的防火墙技术, 其特点是将所有跨越防火墙的网络通信链路分为两段。防火墙内外计算机系统间应用层的" 链接", 由两个终止代理服务器上的" 链接"来实现,外部计算机的网络链路只能到达代理服务器, 从而起到了隔离防火墙内外计算机系统的作用。此外,代理服务也对过往的数据包进行分析、注册登记, 形成报告,同时当发现被攻击迹象时会向网络管理员发出警报,并保留攻击痕迹。
4.设置防火墙的要素
网络策略
影响Firewall系统设计、安装和使用的网络策略可分为两级,高级的网络策略定义允许和禁止的服务以及如何使用服务, 低级的网络策略描述Firewall如何限制和过滤在高级策略中定义的服务。
服务访问策略
服务访问策略集中在Internet访问服务以及外部网络访问(如拨入策略、SLIP/PPP连接等)。 服务访问策略必须是可行的和合理的。可行的策略必须在阻止已知的网络风险和提供用户服务之间获得平衡。 典型的服务访问策略是:允许通过增强认证的用户在必要的情况下从Internet访问某些内部主机和服务; 允许内部用户访问指定的Internet主机和服务。
防火墙设计策略
防火墙设计策略基于特定的Firewall,定义完成服务访问策略的规则。通常有两种基本的设计策略: 允许任何服务除非被明确禁止;禁止任何服务除非被明确允许。第一种的特点是安全但不好用, 第二种是好用但不安全,通常采用第二种类型的设计策略。 而多数防火墙都在两种之间采取折衷。
增强的认证
许多在Internet上发生的入侵事件源于脆弱的传统用户/口令机制。多年来,用户被告知使用难于猜测和破译口令, 虽然如此,攻击者仍然在Internet上监视传输的口令明文,使传统的口令机制形同虚设。增强的认证机制包含智能卡, 认证令牌,生理特征(指纹)以及基于软件(RSA)等技术,来克服传统口令的弱点。虽然存在多种认证技术, 它们均使用增强的认证机制产生难被攻击者重用的口令和密钥。 目前许多流行的增强机制使用一次有效的口令和密钥(如SmartCard和认证令牌)。
5.防火墙在大型网络系统中的部署
根据网络系统的安全需要,可以在如下位置部署防火墙:
局域网内的VLAN之间控制信息流向时。
Intranet与Internet之间连接时(企业单位与外网连接时的应用网关)。
在广域网系统中,由于安全的需要,总部的局域网可以将各分支机构的局域网看成不安全的系统, (通过公网ChinaPac,ChinaDDN,Frame Relay等连接)在总部的局域网和各分支机构连接时采用防火墙隔离, 并利用VPN构成虚拟专网。
总部的局域网和分支机构的局域网是通过Internet连接,需要各自安装防火墙,并利用NetScreen的VPN组成虚拟专网。
在远程用户拨号访问时,加入虚拟专网。
ISP可利用NetScreen的负载平衡功能在公共访问服务器和客户端间加入防火墙进行负载分担、 存取控制、用户认证、流量控制、日志纪录等功能。
两网对接时,可利用NetScreen硬件防火墙作为网关设备实现地址转换(NAT),地址映射(MAP), 网络隔离(DMZ), 存取安全控制,消除传统软件防火墙的瓶颈问题。
6.防火墙在网络系统中的作用
防火墙能有效地防止外来的入侵,它在网络系统中的作用是:
控制进出网络的信息流向和信息包;
提供使用和流量的日志和审计;
隐藏内部IP地址及网络结构的细节;
12selcet,poll,epoll,模型的区别?
1.https://www.cnblogs.com/curo0119/p/8459962.html
2,https://blog.csdn.net/davidsguo008/article/details/73556811
总结epoll比另外两个都好效率高,没有监视文件数量的限制
13进程,线程,协程的区别以及应用场景
https://www.cnblogs.com/lxmhhy/p/6041001.html
14什么是GIL锁?
GIL保证同一时刻只有一个线程执行代码,每个线程在执行过程中都要先获取GIL
15python中如何使用线程池和进程池
进程使用
Pool([numprocess [,initializer [, initargs]]]):创建进程池
1 numprocess:要创建的进程数,如果省略,将默认使用cpu_count()的值 2 initializer:是每个工作进程启动时要执行的可调用对象,默认为None 3 initargs:是要传给initializer的参数组
1 p.apply(func [, args [, kwargs]]):在一个池工作进程中执行func(*args,**kwargs),然后返回结果。 2 '''需要强调的是:此操作并不会在所有池工作进程中并执行func函数。如果要通过不同参数并发地执行func函数,必须从不同线程调用p.apply()函数或者使用p.apply_async()''' 3 4 p.apply_async(func [, args [, kwargs]]):在一个池工作进程中执行func(*args,**kwargs),然后返回结果。 5 '''此方法的结果是AsyncResult类的实例,callback是可调用对象,接收输入参数。当func的结果变为可用时,将理解传递给callback。callback禁止执行任何阻塞操作,否则将接收其他异步操作中的结果。''' 6 7 p.close():关闭进程池,防止进一步操作。如果所有操作持续挂起,它们将在工作进程终止前完成 8 9 P.jion():等待所有工作进程退出。此方法只能在close()或teminate()之后调用
线程使用
#1 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor: 进程池,提供异步调用 Both implement the same interface, which is defined by the abstract Executor class. #2 基本方法 #submit(fn, *args, **kwargs) 异步提交任务 #map(func, *iterables, timeout=None, chunksize=1) 取代for循环submit的操作 #shutdown(wait=True) 相当于进程池的pool.close()+pool.join()操作 wait=True,等待池内所有任务执行完毕回收完资源后才继续 wait=False,立即返回,并不会等待池内的任务执行完毕 但不管wait参数为何值,整个程序都会等到所有任务执行完毕 submit和map必须在shutdown之前 #result(timeout=None) 取得结果 #add_done_callback(fn) 回调函数
# done()
判断某一个线程是否完成
# cancle()
取消某个任务