socket, urllib,urllib3 , requests, grab, pycurlpython
应用层:HTTP,FTP,NFS程序员
表示层:Telnet,SNMP算法
会话层:SMTP,DNS编程
传输层:TCP,UDP设计模式
网络层:IP,ICMP,ARP,数组
数据链路层:Ethernet,PPP,PDN,SLIP,FDDI浏览器
物理层:IEEE 802.1A,IEEE 802.11安全
C/S架构:是指客服端和服务端,交互性好,对服务器压力小,安全,可是更新服务端的是后客户端也得更新。服务器
B/S架构:是指浏览器和服务器,优势是不须要更新客服端,缺点是交互性差,安全性低。网络
创建链接:
第一次握手:客户端向服务器发出请求。
第二次握手:服务器收到请求,赞成链接,想客服端发送确认报文。
第三次握手:客服端接收到报文,向上层应用传达已创建链接。
释放链接:
第一次挥手:数据传输结束后,客服端发送链接释放报文段,并结束数据传输。
第二次挥手:服务端接收到链接释放报文段后,向客户端发送确认报文。
第三次挥手:服务器没有要发送的数据后,其应用进程就通知服务器释放TCP链接。这个阶段服务器所发出的最后一个报文。
第四次挥手:客户端收到链接释放报文段以后,必须发出确认。再通过2MSL(最长报文端寿命)后,本次TCP链接真正结束,通讯双方完成了他们的告别。
arp协议是地址解析协议,使用ARP协议可实现经过IP地址得到对应主机的物理地址(MAC地址)。
一、TCP是面向链接的,发送数据以前必须创建链接,UDP不须要创建链接就能够发送数据。
二、TCP协议提供可靠的服务,经过TCP传输数据,无差错,不丢失,不重复,且按序到达,UDP是尽最大努力交付,且不保证可靠交付。
三、TCP面向字节流,其实是TCP把数据当作一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,所以网络出现拥塞不会使源主机的发送速率下降(对实时应用颇有用,如IP电话,实时视频会议等)
四、每一条TCP链接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通讯。
五、TCP首部开销20字节;UDP的首部开销小,只有8个字节。
六、TCP的逻辑通讯信道是全双工的可靠信道,UDP则是不可靠信道
tcp:可靠 对方给了确认收到信息,才发下一个,若是没收到确认信息就重发
udp:不可靠 一直发数据,不须要对方回应
局域网,LAN(Local Area Network)是指在某一区域内(如一个学校、工厂和机关内)由多台计算机互联成的计算机组。
广域网,WAN(Wide Area Network)也称远程网。一般跨接很大的物理范围,所覆盖的范围从几十千米到几千千米,它能链接多个城市或国家,或横跨几个洲并能提供远距离通讯,造成国际性的远程网络。
Socket是应用层与TCP/IP协议族通讯的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来讲,一组简单的接口就是所有。
黏包就是数据黏在一块儿,TCP协议是面向字节流的,基于tcp的套接字客户端往服务端上传文件,发送时文件内容是按照一段一段的字节流发送的,在接收方看了,根本不知道该文件的字节流从何处开始,在何处结束
所谓粘包问题主要仍是由于接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所形成的。
只有TCP有粘包现象,UDP永远不会粘包。
客户端粘包:
发送端须要等缓冲区满才发送出去,形成粘包(发送数据时间间隔很短,数据量很小,TCP优化算法会当作一个包发出去,产生粘包)
服务端粘包:
接收方不及时接收缓冲区的包,形成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候仍是从缓冲区拿上次遗留的数据,产生粘包)
阻塞IO:特色就是在IO执行的两个阶段(等待数据和拷贝数据两个阶段)都被阻塞了。
非阻塞IO:特色就是,数据准备阶段,用户发出read操做时,若是数据没有准备完成,会马上返回一个error,用户进程能够去作其余事情,须要不断的轮询查看数据是否准备完成,可是在数据拷贝期间,进程仍是阻塞的。
IO多路复用:select和epoll可让单个线程同时处理多个链接,内核会监视全部select负责的socket,当有一个数据准备完成时,select就会返回,这是用户进程就能够直接进行read操做了。适用于多个链接。
异步IO:用户进程发出read操做时就能够去干其余事了,内核会等数据准备完成时,将数据拷贝到进程,这一切完成后,内核会给用户进程发一个报文,告知一切都已完成。
防火墙做为一个边界防护工具,其监控流量——要么容许它、要么屏蔽它。
select:它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至所有),咱们只能无差异轮询全部流,找出能读出数据,或者写入数据的流,对他们进行操做。因此select具备O(n)的无差异轮询复杂
度,同时处理的流越多,无差异轮询时间就越长。
poll:本质上和select没有区别,它将用户传入的数组拷贝到内核空间,而后查询每一个fd对应的设备状态, 可是它没有最大链接数的限制,缘由是它是基于链表来存储的.
epoll:epoll能够理解为event poll,不一样于忙轮询和无差异轮询,epoll会把哪一个流发生了怎样的I/O事件通知咱们。因此咱们说epoll其实是事件驱动(每一个事件关联上fd)的,此时咱们对这些流的操做都是有意义的。
进程:操做系统是由一个个的进程组成的,一个应用程序就能够看做一个进程,他有本身独立的运行空间,有本身独立的堆和栈,进程是操做系统资源分配的最小单位。
线程:线程是属于进程的,进程能够建立线程,线程之间共享堆不共享栈,线程是操做系统资源调动的最小单位。
协程:协程也是共享堆不共享栈,他是由程序员调度的。
GIL是全局解释锁,这个机制只容许一个线程控制python解释器。
concurrent.futures 模块中的 Executor,Executor 提供了两个子类,即 ThreadPoolExecutor 和 ProcessPoolExecutor,其中 ThreadPoolExecutor 用于建立线程池,而 ProcessPoolExecutor 用于建立进程池。
threading.local()这个方法的特色用来保存一个全局变量,可是这个全局变量只有在当前线程才能访问,若是你在开发多线程应用的时候 须要每一个线程保存一个单独的数据供当前线程操做,能够考虑使用这个方法,简单有效。
一、管道,一般指无名管道,是 UNIX 系统IPC最古老的形式。
特色:单向的,具备固定的读端和写端,他只能用于有亲缘关系的进程之间(父子进程、兄弟进程),他能够看做特殊的文件,能够读写,可是寻在于内存中。
二、FIFO,也称为命名管道,它是一种文件类型。
特色:他能够在无关进程之间通讯,能够看做一种特殊的设备文件,存在于文件系统中。
三、消息队列,是消息的连接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。
特色:他是面向记录的,有必定特殊的格式和优先级,消息队列是独立于进程的,进程消失,消息队列不会消失,消息不必定是先进先出的顺序,也能够根据类型读取。
四、信号量(semaphore)与已经介绍过的 IPC 结构不一样,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通讯数据。
特色:信号量用于进程间同步,若要想在进程间传递顺序须要共享内存。
五、共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。
特色:共享内存是最快的一种IPC,由于进程是直接堆内存进行存取,由于多个进程能够同时操做,因此须要进行同步,信号量和共享内存一般一块儿使用。
并发:在计算机领域开发过程当中,并发指的是应用可以交替执行不一样的任务,好比多线程,多线程并不是是同时执行多个任务,而是经过时间轮转发等算法的调度,时多个任务以咱们察觉不到的速度交替执行。
并行:指多个任务同时执行。
区别:一个是交替,一个是同时。
同步阻塞:调用结果返回前,进程会被挂起,直到调用结果返回,效率低。
异步阻塞:不一样的是,调用结果返回前会用回调或者消息的方式通知进程,可是调用结果返回前,进程仍是会被挂起,效率同样的低。
同步非阻塞:调用结果返回前,进程能够去作其余事情,可是须要经过轮询不断的查看调用结果是否返回,效率比前两个高,可是耗CPU,也通常。
异步非阻塞:调用结果返回以前,进程能够去作其余事情,当函数调用完成后,会以回调或者消息的形式通知进程,效率最高。
区别一:路由器能够给局域网自动分配IP,虚拟拨号。交换机则只是用来分配网络数据的。
区别二:路由器能够把一个IP分配给不少个主机使用,这些主机对外只表现出一个IP。交换机能够把不少主机连起来,这些主机对外各有各的IP。
区别三:交换机工做在中继层,根据MAC地址寻址,不能处理TCP/IP协议。
路由器工做在网络层,根据IP地址寻址,能够处理TCP/IP协议。
区别四:路由器提供防火墙服务,交换机不能提供该功能。
域名解析是把域名指向网站空间IP,让人们经过注册的域名能够方便地访问到网站一种服务。IP地址是网络上标识站点的数字地址,为方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。
vi/ etc/host
不少的生产者同时生产数据到流水线上,而后消费者在从流水线上取下,这样咱们能够有多个生产者同时生产提高了效率,同时也能够容纳多个消费者在流水线上消费。
爬虫的时候,会将网上的大量数据爬取下来放入本地或者云端供将来使用,若是数据量太大,咱们的处理器会处理不过来,这时候就能够引入生产者,流水线,消费者的概念,就能够解决这个问题。
CDN的全称是Content Delivery Network,即内容分发网络。CDN是一组分布在多个不一样地理位置的Web服务器,用于更加有效地向用户发布内容,在优化性能时,会根据距离的远近来选择。
import threading import time def _wait(): time.sleep(60) #FlagA t = threading.Thread(target=_wait, daemon=False) t.start() #FlagB
大体为0秒,由于线程开启速度很是快,start()方法为异步非阻塞,因此不会等待任务的结束。
SYN, ACK
SNMP工做在四层
ICMP
A、屏蔽192.168.1.5访问本机dns服务端口。
BLOCK_THIS_IP="192.168.1.5"
B、容许10.1.1.0/24访问本机的udp 8888 9999 端口
iptables -t filter -A INPUT -s 192.168.1.0/24 -p udp -m state --state NEW -m udp --dport 8888 9999 -j ACCEPT
一、实现server端的功能便可
二、遵循基本语言编程规范
import socket sk = socket.socket() sk.bind(('127.0.0.1', 8800)) # 把地址绑定到套接字 sk.listen() # 监听连接 conn, addr = sk.accept() # 接受客户端连接 ret = conn.recv(1024) # 接受客服端发来的数据 print(ret) # 保存客户端数据 conn.send(b'hi') # 想客户端发送信息 conn.close() # 关闭客户端连接 sk.close() # 关闭服务器套接字套接字
顺便把客户端的也放上来吧
import socket sk = socket.socket() sk.connect(('127.0.0.1', 8800)) sk.send(b'hi') ret = sk.recv(1024) print(ret) sk.close()
多线程是为了解决多个任务同时执行的需求,同个进程内的多线程共享资源,他们是并发的,各个线程是在交替执行,同一时间只有一个线程在运行,他能够防止CPU资源浪费,防止阻塞,增长任务执行效率。
CPU密集型就是计算密集型,应该使用多核多线程,这样多个线程能够真正意义上的并行处理,大大增长了运行效率,若是是IO密集型,多核就没有用了,由于多核的状况下,一个线程发出IO请求,也是会阻塞,并无在单核的状况下有什么提升,反而会增长CPU的损耗,因此应该使用单核多线程。
线程池:去你妈的
线程锁:去你妈的
没有用过
全部守护线程终止运行时,即便存在非守护线程,进程运行终止。
主线程:main,不是守护线程
守护线程:指程序运行期间在后台提供通用服务的一种线程。
非守护线程:用户线程,有用户建立。
主线程和守护线程一块儿被销毁,主线程和用户想程互不影响。
三次
deamon是主线程会设置子线程为守护线程,主线程一旦终止运行,所有线程都会被终止执行,即便子线程尚未执行完成。‘
join的工做是线程同步,主线程执行结束后,会进入阻塞状态,等所有子线程运行结束后,主线程在终止。
GIL是全局解释器锁,线程以后获取GIL才能运行,因此在python的多线程中,实际上同个进程内同一时间只能有一个线程在工做,者无疑对python的多线程的效率有着不小的影响。
没有用过
死锁是在多线程或者多进程的状况下,两个线程或者进程在争夺资源的时候,形成的一种互相等待的现象,被称为死锁。
异步IO
Gevent是一种基于协程的Python网络库,它用到Greenlet提供的,封装了libevent事件循环的高层同步API。它让开发者在不改变编程习惯的同时,用同步的方式写异步I/O的代码。