socket, urllib,urllib3 , requests, grab, pycurl
应用层: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地址)。
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:不可靠 一直发数据,不需要对方回应
局域网,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()这个方法的特点用来保存一个全局变量,但是这个全局变量只有在当前线程才能访问,如果你在开发多线程应用的时候 需要每个线程保存一个单独的数据供当前线程操作,可以考虑使用这个方法,简单有效。
1、管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。
特点:单向的,具有固定的读端和写端,他只能用于有亲缘关系的进程之间(父子进程、兄弟进程),他可以看作特殊的文件,可以读写,但是寻在于内存中。
2、FIFO,也称为命名管道,它是一种文件类型。
特点:他可以在无关进程之间通信,可以看作一种特殊的设备文件,存在于文件系统中。
3、消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。
特点:他是面向记录的,有一定特殊的格式和优先级,消息队列是独立于进程的,进程消失,消息队列不会消失,消息不一定是先进先出的顺序,也可以根据类型读取。
4、信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
特点:信号量用于进程间同步,若要想在进程间传递顺序需要共享内存。
5、共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。
特点:共享内存是最快的一种IPC,因为进程是直接堆内存进行存取,因为多个进程可以同时操作,所以需要进行同步,信号量和共享内存通常一起使用。
并发:在计算机领域开发过程中,并发指的是应用能够交替执行不同的任务,比如多线程,多线程并非是同时执行多个任务,而是通过时间轮转发等算法的调度,时多个任务以我们察觉不到的速度交替执行。
并行:指多个任务同时执行。
区别:一个是交替,一个是同时。
同步阻塞:调用结果返回前,进程会被挂起,直到调用结果返回,效率低。
异步阻塞:不同的是,调用结果返回前会用回调或者消息的方式通知进程,但是调用结果返回前,进程还是会被挂起,效率一样的低。
同步非阻塞:调用结果返回前,进程可以去做其他事情,但是需要通过轮询不断的查看调用结果是否返回,效率比前两个高,但是耗CPU,也一般。
异步非阻塞:调用结果返回之前,进程可以去做其他事情,当函数调用完成后,会以回调或者消息的形式通知进程,效率最高。
区别一:路由器可以给局域网自动分配IP,虚拟拨号。交换机则只是用来分配网络数据的。
区别二:路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP。交换机可以把很多主机连起来,这些主机对外各有各的IP。
区别三:交换机工作在中继层,根据MAC地址寻址,不能处理TCP/IP协议。
路由器工作在网络层,根据IP地址寻址,可以处理TCP/IP协议。
区别四:路由器提供防火墙服务,交换机不能提供该功能。
域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站一种服务。IP地址是网络上标识站点的数字地址,为方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。
原文:https://www.cnblogs.com/490144243msq/p/11517298.html