Python学习笔记
网络编程
cs架构与bs架构
Client<=======>Server
Browser<=======>Server
网络通信
网络存在的意义就是跨地域数据传输——>称之为通信
网络 = 物理链接介质 + 互联网通信协议
OSI七层协议
应用层
表示层
会话层
传输层 段
网络层 包
数据链路层 帧
物理层 位(bit)
协议:规定数据的组织格式
格式:头部 + 数据部分
封包裹的过程:数据外加头
拆包裹的过程:拆掉头获取数据
物理层基于电工作:二进制
物理层负责发送电信号
一组物理层数据称之为:位
单纯的电信号毫无意义,必须对其进行分组
数据链路层:ethernet以太网协议
规定1:一组数据称之为一个数据帧
规定2:分成两部分 => 头 + 数据
head(报头)包含:(固定18个字节)
发送者/源地址,6个字节
接受者/目标地址,6个字节
数据类型,6个字节
该地址是mac地址
data(数据)包含:(最短46字节,最长1500字节)
数据包的具体内容
数据包含:包含的是网络层整体的内容
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
规定3:规定但凡接入互联网的主机必须有一块网卡,每块网卡在出厂时都烧制好一个全世界独一无二的mac地址
网络层:IP协议
要达到得到目:
划分广播域
每一个广播域但凡要接通外部,一定要有一个网关帮内部的计算机转发包到公网
网关与外界通信走的是路由协议
规定1:一组数据称之为一个数据包
规定2:分成两部分 => 头 + 数据
头包含:源地址与目标地址,该地址是IP地址
数据包含:传输层发过来的整体的内容
ipv4地址:
8bit.8bit.8bit.8bit
子网掩码:
8bit.8bit.8bit.8bit
255.255.255.0对应的二进制表达
11111111.11111111.11111111.00000000
一个合法的ipv4地址组成部分=ip地址/子网掩码地址
172.16.10.1/255.255.255.0
ARP:地址解析协议
所以必须能够将ip地址解析成mac地址
标识
mac地址用于标识局域网(广播域)内的一台唯一的机器
总结:
ip地址+mac地址=> 标识全世界范围内独一无二的一台计算机
ip地址(ARP)=> 标识全世界范围内独一无二的一台计算机
传输层:tcp\udp=>基于端口
端口范围0-65535,0-1023为系统占用端口
ip+port=>标识全世界范围独一无二的一个基于网络通信的应用程序
基于tcp协议通信:必须建立一个双向的通信的链接
三次握手建立链接:
建立链接是为了传输数据做准备的,三次挥手即可
四次挥手断开链接:
断开链接时,由于链接内有数据传输,所以必须四次断开
tcp是可靠传输的:
发送数据必须等到对方确认后才算完成,才会将自己内存中的数据发送
tcp协议的半链接池:
backlog
[连接请求1,链接请求2,链接请求3,链接请求4]
粘包:
粘包问题出现的原因
1.tcp是流式协议,数据就像水流一样粘在一起,没有任何边界区分
2.收数据没收干净,有残留,就会跟下一次结果混淆在一起
解决的核心法门就是:每次都收干净,不要有任何才残留
并发编程:
多道技术:单核实现并发的效果
空间上的复用与时间上的复用
空间上的复用:
多个程序公用一套计算机硬件
时间上的复用:
切换+保存状态
切换(CPU)分为两种情况
1.当一个程序遇到IO操作的时候,操作系统会剥夺该程序的CPU执行权限
作用:提高了CPU的利用率,并且也不影响程序的执行效率
2.当一个程序长时间占用CPU的时候,操作系统也会剥夺该程序的CPU执行权限
作用:降低了程序的执行效率(原本时间+切换时间)
并发:
看起来像同时进行的就可以称之为并发
并行:
真正意义上的同时执行
程序与进程的区别:
程序就是一堆躺在硬盘上的代码
进程则表示程序正在执行的过程
进程调度:
先来先服务 FCFS
对长作业有利,对短作业无益
短作业优先调度算法
对短作业有利,对长作业无益
时间片轮转法+多级反馈队列
时间片:将固定的时间切分成N多份,每一份就表示一个时间片
同步和异步
描述的是任务的提交方式
同步:任务提交之后,原地等待任务的返回结果,等待的过程不做任何事
异步:任务提交之后,不原地等待任务的返回结果,直接去做其他事情任务的返回结果会有一个异步回调机制自动处理
堵塞非堵塞
描述的程序的运行状态
堵塞:堵塞态
非堵塞:就绪态、运行态
理想状态:我们应该让我们的代码永远处于就绪和运行态之间切换
进程:
windows操作系统下,创建进程一定要在main内创建
因为Windows下创建进程类似于模块导入的方式
会从上往下依次执行代码
Linux则是直接将代码完整的拷贝一份
创建进程就是在内存中申请一块内存空间将需要运行的代码丢进去
一个进程对应在内存中就是一块独立的内存空间
多个进程对应在内存中就是多块独立的内存空间
进程与进程之间数据默认情况下是无法直接交互,如果想交互可以借助于第三方工具、模块
互斥锁:
多个进程操作同一份数据的时候,会出现数据错乱的问题
针对上述问题,解决方式就是加锁处理:将并发变成串行,牺牲效率但是保证了数据的安全

浙公网安备 33010602011771号