py知识(每日更新) 7.15

C/S B/S架构

C:client 客户端
B:Browers 浏览器
S:Service 服务端
C/S 客户端与服务器之间的架构 :QQ 微信 APP等 都属于C/S架构
?   优点:安全性高,个性化设置,功能全面,相应速度快
?   缺点:开发成本高,维护成本高,面向客户固定
B/S架构属于C/S架构,  浏览器-服务器之间的架构
?   优点:开发维护成本低,面向用户广泛
?   缺点: 安全性相对低,响应速度相对较慢,个性化设置单一

互联网通讯的原理

ISO七层协议(五层)

? 1.物理层:一系列的物理连接介质

    发送的数据就是0101001101010001比特数据流,这些数据连续不断地收发.比特数据流要进行分组(按照一定规则) 数据分组这件事不是物理层的功能,要由数据链路做

? 2.数据链路层: 以太网协议

是按照一定的协议对比特流数据进行分组.
以太网协议:就是对数据进行分组;一组叫做一帧(数据报),
    每一数据帧分为:报头head和数据data部分
    数据头(head)   |   data数据
    数据头:固定长度 18个字节 为了提取源地址以及目标地址
        源地址,目的地址,数据类型 666
    data数据: 最短46字节<=data<=1500字节
网线直接接触的硬件就是网卡,网卡上有一个地址,Mac地址,确定计算机的唯一性的物理地址 网卡上:12位16进制组成的一串数字,前六位:厂商编号 后六位:流水线号

? 广播: 计算机最原始的通讯方式就是吼

数据的分组(源地址,目标地址)+广播 理论上我的计算机就可以通信了. 但效率太低,每台计算机都需要接受广播的消息,查看是否是给自己的数据
所以:广播他是有范围的,在同一子网,局域网内是通过广播的方式发小时

? 3.网络层: IP协议:确定对方的局域网的位置

广播,Mac地址+ip == 可以找到世界上任意一台计算机
计算机的通讯:计算机的软件与服务器的软件进行的通讯

? 4.传输层: 端口协议

广播,Mac地址,+ip+端口 == 可以找到世界上任意一台计算机对应的软件

? 5.应用层:软件自己定义的协议.

QQ:发送数据'今晚请我吃饭...' ---> {id:'username', content:'今晚请我吃饭...'}
将数据按照自己定义的协议进行封装

重新梳理:

# 数据经过以太网协议封装吼,先要从局域网内进行广播,每次发消息,每次都要广播,这样效率是很低的.
广播:计算机的吼
单播:单线直接联系
# RP协议:通过将对方的ip地址获取到对方的Mac地址
# ip协议:ip地址加子网掩码确定计算机所在的网段,子网,局域网的位置
ipV4地址:四点分十进制
    192.168.1.1   取值范围 0~255
子网掩码 中国都是C类网 最多可以分配的IP数量为254个
255.255.255.0
一个局域网最多可以放置254个IP地址(同一个局域网的IP地址唯一)

# 物理层---->数据链路层(以太网协议(Mac地址))---->网络层(ip协议)---->传输层(端口协议,TCP/udp)----> 应用层
Mac地址+广播形式+IP地址+端口 == 锁定全世界范围的任意一个计算机的某软件的位置
ip地址 + 端口 == 锁定全世界范围的任意一个计算机的某软件的位置
传输层:端口协议
    TCP协议,UDP协议
端口: 0 ~ 65535端口号
    1~1023 系统占用的端口号
    1024~8000软件占用的端口号
    

UDP和TCP

TCP的三次握手四次挥手

# 三次握手
客户端 与 服务端第一次建立通信联系 需要三次'握手'
    客户端向服务端发送syn=1 seq=序列号至服务端
    服务端返回 ack=1+x syn=1 seq=y
    客户端向服务端发送ack=1+y
    ack:确认信号    syn:请求建立连接的信号   seq:发送的数据信号
# TCP协议:
    优点:好人协议,不会拒绝别人,稳定,安全
    缺点:效率低
syn洪水攻击:黑客会虚拟很多的假ip,然后访问你的服务器. 半连接池,缓冲效果.

# udp协议:
    优点:效率高,传输快
    缺点:不安全,不是面向连接的,不是很可靠

# 四次挥手
客户端 与 服务端结束通讯联系 需要四次'挥手'
    客户端向服务端发送 fin=1 seq=x+2 ack=y+1
    服务端返回客户端 ack=x+3
    服务端向客户端发送 fin=1 seq=y+1
    服务端返回客户端 ack=y+2

原文地址:https://www.cnblogs.com/lyoko1996/p/11201837.html

时间: 2024-11-09 10:04:28

py知识(每日更新) 7.15的相关文章

py知识(每日更新) 7.30

sql语句的分类 sql语句的分类 # DDL : CREATE ALTER DROP # DML : SELECT INSERT DELETE UPDATE # DCL : GRANT REVOKE 常用sql语句 # 库 # create database 库名; # use 库名 # show tables; # 表 # create table 表名(字段名 类型(长度),...); # desc 表名; # show create table 表名; # alter table 表名

py知识(每日更新) 6.18

万能传参 #当给函数传入的参数数目不定时,之前的穿饭餐方式解决不了问题 #万能参数//动态参数*args 将实参角度: 定义一个函数时* 所有位置参数聚合到一个元祖中. # **kwargs 函数定义是:**讲实参角度所有的关键字参数聚合成一个字典 * 的魔性用法: def func(*args,**kwargs): print(args) print(kwatgs) l1 = [1,2,3] l2 = ["阿萨德","去去去"] 函数形参角度的形参顺序 位置参数&

py知识(每日更新) 7.1

包的使用 第一类: ? 执行文件 通过import导入包以及包内的功能 ? 创建一个aaa的包,自行创建一个__init__py文件 ? 创建一个包会发生三件事儿: ? 1.将以XXX包内的__init__py文件加载到内存中 ? 2.创建一个以XXX命名的名称空间. ? 3.通过XXX . 的当时引用__init__的所有的名字. import aaa # 如何在当前文件中,引用aaa包的bbb包? 1.在执行文件写入 import aaa 2. aaa的__init__ 里面写 from a

py知识(每日更新) 6.5

1整数 int 计算和比较 a.bit_length() #求十进制数转换为二进制时所占用的位数 2布尔值 bool True 真 False 假 数字转成布尔值: 0 False 非0 True 字符串转换成布尔值: 空字符串 "" False 非空 True 布尔值转换成数字 True = 1 False = 0 布尔值转换成字符串 True = str(True) False = str(False) 3字符串 作用:存储少量数据 索引(下标):从左向右 0, 1, 2, 3;;

py知识(每日更新) 6.13

文件操作初识 f = open("文件",mode="模式",encoding="编码") open() #调用操作系统打开文件 mode #对文件的操作方式 encoding #文件的编码 ? #不写indocing 默认为系统编码 Windows--gbk ? #linux&mac ----utf-8 f 文件句柄 ---- 操作文件的锅把 文件操作怎么用? 读 r rb r+ r+b r 读 r+ 读写 #后期开发中使用频率比较低

py知识(每日更新) 7.2

collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtuple和OrderedDict等. 1.namedtuple: 生成可以使用名字来访问元素内容的tuple 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象 3.Counter: 计数器,主要用来计数 4.OrderedDict: 有序字典 5.defaultdict:

py知识(每日更新) 7.16

socket套接字 五层协议:从传输层包括传输层以下,都是操作系统版主我们封装的各种head 套接字:他存在于传输层与应用层之间的抽象层 ? 1.避免你学习各层的接口以及协议的使用 socket已经封装好了所有的接口.直接使用这这些接口或者方法即可,提升开发效率. ? 2.在Python中socket就是一个模块.通过调用模块中已经实现的方法建立两个进程之间的通信. 单个客户端通讯 # client端 import socket # 1. 创建socket对象 phone = socket.so

py知识(每日更新) 7.12

反射 通过字符串去操作一个对象 字符串: 字符串类型 对象: 实例,类,当前文件(模块),其他模块 hasattr() # getattr() # setattr() # 增 delattr() # 删 函数VS方法 1.通过函数名可以大致判断 print(func) print(obj.func) 2.通过模块types模块去验证 from types import FunctionType from types import MethodType print(isinstance(func,

py知识(每日更新) 7.25

GIL锁. GIL锁: 全局解释器锁. 就是一个把互斥锁,将并发变成串行,同一时刻只能有一个线程使用共享资源,牺牲效率,保证数据安全. 带来的问题1: ? 单进程的多线程不能利用多核. 诟病之一. ? 多进程的多线程可以利用多核. 带来的问题2: ? 感觉上不能并发的执行问题. 讨论: 单核处理IO阻塞的多线程,与多核处理IO阻塞的多线程效率差不多. # 多核的前提下: 如果任务Io密集型: 多线程并发.如果任务计算密集型: 多进程并发. GIL锁与互斥锁的关系. # 1. GIL 自动上锁解锁