OSI 开放系统互联参考模型,它是理论的,参考模型
七层:物理层->数据链路层->网络层->传输层->会话层->表示层->应用层html
c/s : 客户端/服务端 b/s : 浏览器/服务端python
详情linux
ARP (Address Resolution Protocal) 地址解析协议,就是 把 IP->MAC(你听过ARP欺骗的)git
TCP是确认包的到达,因此不丢失包(数据),顺序也是好的。
UDP不会确认包的到达,因此可能会丢失数据包,固然顺序也有可能会乱。
除了这些之外:
1. TCP是面向链接(三次握手)的,因此稳定、可靠,那相对就慢了
好比平时的:文件传输,右键,http等用的都是tcp协议
2. UDP是面向无链接的,因此不稳定,可是相对快,实时性高
好比平时:作什么现场直播,视频通话啥的github
局域网和广域网是按规模大小而划分的两种计算机网络。范围在几公里之内的计算机网络统称为局域网;而链接的范围超过10公里的,则称为广域网,因特网(Intenet)就是目前最大的广域网。web
TCP的可靠保证,是它的三次握手双向机制,这一机制保证校验了数据,保证了他的可靠性。而UDP就没有了,udp信息发出后,不验证是否到达对方,因此不可靠。算法
在计算机通讯领域,socket 被翻译为“套接字”,它是计算机之间进行通讯的一种约定或一种方式。经过 socket 这种约定,一台计算机能够接收其余计算机的数据,也能够向其余计算机发送数据。浏览器
①服务端建立一个ServerSocket对象,指定端口号,ServerSocket对象等待客户端的链接请求。
②客户端建立一个Socket对象,指定主机地址和端口号,向服务端发出链接请求。
③服务端接收到客户端的链接请求,创建一条TCP链接,再建立一个Socket对象与客户端的Socket对象进行通讯。
④服务端和客户端分别建立字节输入流和字节输出流,经过字节输入流得到对方发来的数据,经过字节输出流向对方发送数据。
⑤当一方决定结束通讯时,向对方发送结束信息;另外一方接收到结束信息后,双方分别关闭各自的TCP链接。
⑥ServerSocket对象中止等待客户端的链接请求。安全
TCP是流式传送的 也就是链接创建后能够一直不停的发送 并无明确的边界定义.发送端
-
接收端都存在这一个缓冲区
由接收方形成的粘包
当接收方不能及时接收缓冲区的包,形成多个包接收就产生了粘包
客户端发送一段数据,服务端只收了一小部分,服务端下次再收的时候仍是从缓冲区拿上次
遗留的数据
由传输方形成的粘包
tcp协议中会使用Nagle算法来优化数据。发送时间间隔短,数据量小的包会一块儿发送,形成粘包
详情服务器
它是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防御系统,依照特定的规则,容许或是限制传输的数据经过。
防火可使企业内部局域网(LAN)网络与Internet之间或者与其余外部网络互相隔离、限制网络互访用来保护内部网络。
selete : 有最大链接数 遍历 支持win
poll : 无最大链接数 遍历 支持win
epoll : 无最大链接数 事件通知 不支持win
# 进程
一个任务,进程之间内存隔离,一个进程修改数据不会影响其余进程(建立变量,修改变量值)
# 线程
线程位于进程内
一个进程内至少有一个线程,线程之间资源共享.一个线程修改数据其余进程也会受影响因此有了锁的概念
# 协程
代码级别的保存状态
+
切换
多线程,协程用于IO密集型,如socket,爬虫,web,抢占cpu资源
多进程用于计算密集型,如金融分析,利用多核优点
# 进程池 from concurrent.futures import ProcessPoolExecutor import time,os def piao(name,n): print("%s is piaoing %s"%(name,os.getpid())) # 打印了进程id time.sleep(1) if __name__ == "__main__": p = ProcessPoolExecutor(4) # 指定进程池最大进程个数 for i in range(10): obj = p.submit(piao,"alex %s"%i,i) 提交任务 # 线程池 rom concurrent.futures import ThreadPoolExecutor import time,os,random def piao(name,n): print("%s is piaoing %s"%(name,os.getpid())) # 打印了进程id time.sleep(random.randint(1,3)) if __name__ == "__main__": p = ThreadPoolExecutor(4) # 指定线程池最大线程个数,不包含控制线程 for i in range(10): obj = p.submit(piao,"alex %s"%i,i) # 提交任务
建立一个对象,每一个线程为该对象设置值数据都是隔离的
并发 : 看上去是在同时工做,其实是cpu一直在切换着工做
并行 : 利用多核同时工做多个任务
进程锁 : 防止进程同时操做一套文件系统
线程锁 : 防止多个线程同时修改进程内数据
# 非阻塞和阻塞的概念相对应,指在不能马上获得结果以前也会马上返回,同时该函数不会阻塞当前线程
# 异步的概念和同步相对。当一个异步功能调用发出后,调用者不能马上获得结果。当该异步功能完成后,
# 经过状态、通知或回调来通知调用者。
路由器 : 链接外部网络,有接入外部的线
交换机 : 链接内部网络,能够没有接入外部的线
咱们在浏览器上输入网站域名时,会去请求DNS服务器获取该域名对应的IP地址,再去访问改地址
win : C:\Windows\System32\drivers\etc\hosts
linux : /etc/hosts
按格式修改便可
生产者与消费者模式是经过一个容器来解决生产者与消费者的强耦合关系,生产者与消费者之间不直接进行通信,
而是利用阻塞队列来进行通信,生产者生成数据后直接丢给阻塞队列,消费者须要数据则从阻塞队列获取,实际应
用中,生产者与消费者模式则主要解决生产者与消费者生产与消费的速率不一致的问题,达到平衡生产者与消费者
的处理能力,而阻塞队列则至关于缓冲区。
# 应用场景
由一个线程生成订单,并将其放入队列中.由多个线程去处理
# 优点
平衡生产者与消费者的处理能力
CDN的全称是Content Delivery Network,即内容分发网络。
其基本思路是尽量避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
经过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统可以实时地根
据网络流量和各节点的链接、负载情况以及到用户的距离和响应时间等综合信息将用户的请求从新导向离用户最近
的服务节点上。
其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的情况,提升用户访问网站的响应速度。
LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器
LVS主要用于多服务器的负载均衡。它工做在网络层,能够实现高性能,高可用的服务器集群技术。它廉价,可把
许多低性能的服务器组合在一块儿造成一个超级服务器。它易用,配置很是简单,且有多种负载均衡的方法。它稳定
可靠,即便在集群的服务器中某台服务器没法正常工做,也不影响总体效果。另外可扩展性也很是好。
处理静态文件
负载均衡
反向代理
Keepalived的做用是检测服务器的状态,若是有一台web服务器宕机,或工做出现故障,Keepalived将检测到,
并将有故障的服务器从系统中剔除,同时使用其余服务器代替该服务器的工做,当服务器工做正常后Keepalived
自动将服务器加入到服务器群中,这些工做所有自动完成,不须要人工干涉,须要人工作的只是修复故障的服务
器。
HAProxy是一个使用C语言编写的自由及开放源代码软件[
1
],其提供高可用性、负载均衡,以及基于TCP和HTTP
的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点一般又须要会话保持或七层处理。HAProxy运行在当前
的硬件上,彻底能够支持数以万计的并发链接。而且它的运行模式使得它能够很简单安全的整合进您当前的架构
中, 同时能够保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持很是大的并发链接数。多进程或多线程模型受内存限制
、系统调度器限制以及无处不在的锁限制,不多能处理数千并发链接。事件驱动模型由于在有更好的资源和时间管
理的用户空间(User
-
Space) 实现全部这些任务,因此没有这些问题。此模型的弊端是,在多核系统上,这些程
序一般扩展性较差。这就是为何他们必须进行优化以 使每一个CPU时间片(Cycle)作更多的工做。
包括 GitHub、Bitbucket[
3
]、Stack Overflow[
4
]、Reddit、Tumblr、Twitter[
5
][
6
]和 Tuenti[
7
]在内的知
名网站,及亚马逊网络服务系统都使用了HAProxy。
# 做用
负载均衡
负载均衡 创建在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增长吞吐
量、增强网络数据处理能力、提升网络的灵活性和可用性。
负载均衡,英文名称为Load Balance,其意思就是分摊到多个操做单元上进行执行,例如Web服务器、FTP服务
器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工做任务。
# 重点
拓展网络设备
RPC(Remote Procedure Call)—远程过程调用,它是一种经过网络从远程计算机程序上请求服务,而不须要
了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通讯程序之间携带信息数据。在
OSI网络通讯模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容
易。
RPC采用客户机
/
服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进
程发送一个有进程参数的调用信息到服务进程,而后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息
到达为止。当一个调用信息到达,服务器得到进程参数,计算结果,发送答复信息,而后等待下一个调用信息,最
后,客户端调用进程接收答复信息,得到进程结果,而后调用执行继续进行。
# 简单来讲就是客户端与服务端并不直接通讯,而是经过两个管道,多客户端经过一个管道向服务端发送消息,
每一个客户端都有一个管道来接收信息