交换机:能够将所有接入交换机的计算机互连起来,形成一个局域网。
路由器:也叫网关设备,用来连接局域网与局域网的。
广播:在一个局域网内,对所有的每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号。
广播风暴:接入同一台交换机的多台计算机同时发广播。
.
OSI七层模型 (Open System Interconnect),全称为开放系统互相连接
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
物理层: 为终端设备间的数据通信提供 传输介质及其连接设备,(网线,接收器发送器等)
数据链路层:规定了电信号的分组方式,(网卡、交换机) 常把这一层的数据叫做帧
网络层:将从下层接收到的数据进行IP地址的封装和将上层接收到的数据进行IP地址的解封装。(路由器)常把这一层数据叫做数据包
传输层:定义了一些传输数据的协议和端口,如TCP、UDP协议,主要将从下层收到的数据进行分段和传输(tcp的三次握手建立连接,四次挥手普终端连接,造成数据不容易丢失的原因不是因为有双向通道,而是因为有反馈机制)
会话层:主要负责在网络中的两个节点之间建立、维持和终止会话或者说通信。节点简单的认为就是设备
表示层:主要是进行对接收的数据进行解释、压缩与解压等,就是把计算机能够识别的东西转化为人能够识别的东西。
应用层:主要是一些终端的应用,比如说FTP、浏览器、微信等,可以将其理解为在电脑屏幕上可以看到的东西,也就是终端应用。
.
socket是在应表会层 与 传输层之间的一个抽象层,它是一组接口,是进程间通信的一种方式。
如何使用socket
---------------------------------------------
服务端使用socket代码
import socket
server_obj = socket.socket() # 前一个socket是py文件名,后一个socket是类名,所以产生一个对象
server_obj.bind(('127.0.0.1', 8080)) # 绑定要连接的端口
server_obj.listen(5) # 设置监听状态,建立半连接池
sock, address = server_obj.accept() # 等待客户连接,建立双向通道
data = sock.recv(1024) # 通过双向通道接收客户端发送过来的消息,只接收1024字节
sock.send(b'HTTP/1.1 200 ok\r\n\r\n hello big baby')
sock.close() # 关闭双向通道
server_obj.close() # 关闭服务端
-----------------------------------------------
客户端如何使用socket代码
import socket
client_obj = socket.socket() # 产生一个socket对象
client_obj.connect(('127.0.0.1', 8080)) # 通过ip与端口连接服务端
client_obj.send('大爷有钱 把你们店最好的给我叫出来'.encode('utf8'))
data = client.recv(1024) # 接收服务端发送过来的消息
print(data.decode('utf8'))
client.close() # 断开与服务端的链接
当然代码可以优化,服务端的accept上面可以建立连接循环,accept下面可以加个通讯循环,接收消息的地方可以 来个异常监测!!
客户端也是发消息的上面也可以来个通讯循环,原来写死的的消息,可以由input框来动态获取用户输入的信息来发送了。
.
粘包问题解决
利用stuct模块,将一个固定字节长度的数据比如该数据8888KB,利用struct将数字8888打包成一个固定字节长度的报头,因为报头的字节长度服务端能提前知道,所以客户端先发一个报头过去,服务端能够精准的接收到报头的数据。服务端再将报头解析一下,就拿到了客户端要准备发送的真实数据的字节长度。这样客户端再发送真实数据的时候,服务端根据字节长度,就能精准的接收到客户端发过来的真实的数据了,而不会出现粘包现象了,
.
进程:运行的程序
进程的调度算法:时间片轮转法+多级反馈队列
将时间均分 然后根据进程时间长短再分多个等级,等级越靠下表示耗时越长 每次分到的时间越多 但是优先级越低
进程的并行与并发:
并行:多个进程同时执行,默认情况下,单个cpu无法实现并行效果
并发:多个进程看上去像同时执行,实际上不是同时执行
进程的三种状态:就绪态,运行态,阻塞态
阻塞态:进程运行过程中出现了IO操作,阻塞态无法直接进入运行态,需要先进入就绪态排队才能变成运行态
单道技术:所有的程序排队执行 过程中不能重合
多道技术:利用空闲时间提前准备其他数据,最大化提升CPU利用率(比如当cpu在运行程序A的时候,让硬盘去读取程序B,这样当cpu运行完程序A的时候,程序B也已经被硬盘读好了,这个时候cpu就可以直接去运行程序B了,这样cpu就不需要等待了,而且当cpu在运行程序B的同时,让输出的硬件去输出刚刚程序A被cpu运行后的结果,硬件与cpu同时压榨,有活就让它们干,不让它们停下来)
一个程序可能会被分成很多段来被cpu执行,cpu可能执行几段后,就切换给其他程序用了,过一段时间后再回来继续执行该程序!!
计算机的CPU在两种情况下会切换给其他的程序用,1、程序有IO操作 2、一个程序长时间占用CPU
保存状态:CPU每次切换走之前都需要保存当前操作的状态 下次切换回来基于上次的进度继续执行
.
同步:提交完任务之后,原地等待任务的返回结果,期间不做任何事情
异步:提交完任务之后,不愿等待任务的返回结果,就去做其他的事情,有结果自动通知!!
阻塞:进程处于阻塞态,就是进程处在一个等待的状态了
非阻塞:进程处于就绪态或运行态,不处在等待的状态
标签:总结,obj,socket,20221230,程序,---,cpu,服务端,客户端
From: https://www.cnblogs.com/tengyifan888/p/17016088.html