python学习-Day32
今日内容详细
软件开发架构
概念
软件开发架构即程序员在编写软件的时候应该遵循的架构设计
我们了解的涉及到两个程序之间通讯的应用大致可以分为两种:
第一种是应用类: qq、微信、网盘、优酷这一类是属于需要安装的桌面应用
第二种是web类: 比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用
这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构~
软件开发架构的分类
C/S架构
# C : Client(客户端)
# S : Server(服务端)
# C/S即:Client与Server,中文意思:客户端与服务器端架构
# 这种架构是从用户层面(也可以是物理层面)来划分的。
这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。
B/S架构
# B : browser(浏览器)
# S : server(服务器)
# B/S即:Browser与Server,中文意思:浏览器端与服务器端架构
# 这种架构是从用户层面来划分的。
Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。
'''
B/S架构本质也是C/S架构,只不过端口是浏览器
'''
两种架构的优缺点
C/S架构:
优势:针对客户端,功能全面
劣势:必须用户下载才能使用
B/S架构:
优势:无需下载,可以直接使用浏览器
劣势:客户能够使用的功能很少
tip
'''
目前的趋势其实更加偏向于B/S架构
微信小程序
只需要下载一个微信就可以通过微信去访问很多服务端
支付宝诸多应用
只需要下载一个支付宝就可以通过支付宝体验很多服务
统一提供接口服务>>>:获取大量用户及数据 中途还可以提供广告服务
'''
网络编程
概念
# 基于互联网编写代码,基于网络跨区传输信息
# 最先源于美军研发使用后转向民用
# 远程通信的前提是必须具备一个物理链接介质,如 电话线 网线 无限网卡
通过掌握网络编程知识开发C/S架构的软件
互联网
# 什么是互联网
将计算机彼此链接到一起的介质。
# 互联网建立的目的
基于互联网进行数据交互。
# 上网的本质
基于网线去访问其他计算机上面的资源
我们的计算机也可以称之为是服务器/服务端(专门对外提供服务)
互联网协议
不同计算机之间要想实现无障碍交互,除了需要有物理链接介质之外还需要一套公有的标准
# 这个标准是>>>:互联网协议(OSI七层协议)
OSI七层协议简介
所有的计算机在生产过程中必须有相同的部分和相同的功能。分为应、表、会、传、网、数、物,分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理链接层。
上述的七层也有很多人总结为五层,应用层(三层)、传输层、网络层、数据链路层、物理链接层。
专业设施名词
1.交换机
让接入交互机的多台计算机之间彼此互联
2.局域网
由交换机组成的网络称之为局域网(一个区域)
3.广播与单播
广播:在交换机中群发
单播:定向回复消息(记录mac地址)
4.路由器
将局域网彼此链接起来并支持数据交互
互联网其实可以看成是由多个局域网链接在一起
"""
在局域网中可以直接基于mac地址实现数据交互
但是可能会产生广播风暴:交换机中同一时间出现太多广播操作
mac地址只能用于局域网交互数据,不能跨局域网传输
"""
OSI七层协议
OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程
物理链接层
物理链接介质,传递电信号
数据链路层
遵循ARP协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
# 基于物理链接层接收到一串二进制数据,规定二进制数据的分组方式
# 规定了'以太网协议',但凡能够接入互联网的计算机都必须有一块网卡,每块网卡在出厂的时候都会被烧制一个全世界独一无二的编号,该编号是由12位16进制数组成,前六位是产商编号,后六位是流水线号
''' “以太网协议”:将一组电信号称为一组数据报或者数据帧。 '''
这个独一无二的编号也有一个称呼>>>:'mac地址'(类似于身份证号)
工作的方式
# 单播:定向回复消息(记录mac地址)
# 广播:在交换机中群发
缺点:广播:只能在局域网内实现通信, 无法跨局域实现通信
基于mac地址就可以实现计算机之间的数据通信
网络层
IP协议
规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线)
IP地址目前有两个版本:
# IPV4:点分十进制
最小:0.0.0.0
最大:255.255.255.255
随着社会的进步,计算机的使用越来越普遍,IPV4地址不够用
# IPV6:十六进制
IPV6可以表示出地球上每一粒沙子,用于表示计算机绰绰有余。
IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机
公网 IP 和私网 IP
公网 IP 是可以直接被浏览器访问到的,但是私网 IP 是不可以的,我们所有人的电脑默认使用的都是私网 IP ,公网 IP 需要花钱购买并且需要实名认证并备案,很多非法网站都是在国外注册备案。
传输层
PORT协议(端口协议)
一台计算机上面可以运行很多数据交互软件,它们都是从内存中获取数据,为什么不会错乱,就是因为端口协议的存在。
用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号)
端口号的范围是:0~65535
0~1024:系统经常使用的端口号
1024~8000:常用软件端口号
我们以后在写项目的时候推荐使用8000之后的端口
1.同一时间同一台计算机上面端口号不能冲突
2.端口号是动态分配的
eg:打开微信随机分配一个没有被使用的端口号8888
关闭微信重新打开那么会随机分配可能还是8888也可能是其他
很多常见的服务端都不需要指定端口 只要访问了ip地址内部去会自动映射
"""
IP地址:用于标识全世界独一无二的一台接入互联网的计算机
PORT号:用于标识一台计算机上面的某一个应用程序
IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序
"""
# 我们日常生活使用浏览器访问的各个网址其实就是IP+PORT
域名解析
将好记的地址解析成真正的地址
www.baidu.com 解析 202.108.22.5:80
应用层
这里完全可以取决于程序员自己
# HTTP协议 HTTPS协议 FTP协议 自定义协议
TCP与UDP协议
都属于传输层
TCP协议
面向链接
# 流式协议、可靠协议
基于TCP协议进行数据交互之前需要做一系列复杂的操作>>>:
三次握手,传输确认,四次挥手
三次握手是建立连接的过程,四次挥手断开连接.
# 挥手必须是四次,中间的两次不能合并成一次,原因就在于需要检查是否还有数据需要给对方发送
# 洪水攻击:服务端接收到了大量的syn请求 处于rcvd状态
控制很多台计算机同一时刻去访问服务端 造成服务端瞬间过载瘫痪
通道的建立——三次握手
1)在建立通道时,客户端首先要向服务端发送一个SYN同步信号。
2)服务端在接收到这个信号之后会向客户端发出SYN同步信号和ACK确认信号。
3)当服务端的ACK和SYN到达客户端后,客户端与服务端之间的这个“通道”就会被建立起来。
传输确认
tcp协议为每一个连接建立了发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1。发送数据时,从数据缓冲区取一部分数据组成发送报文,在tcp协议头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ack等于接受序列号加长度,也就是下包数据发送的起始序列号,这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到,发送端也可以发送一次的连续的多包数据,接受端只需要回复一次ack就可以了。
通道的关闭——四次挥手
1)在数据传输完毕之后,客户端会向服务端发出一个FIN终止信号。
2)服务端在收到这个信号之后会向客户端发出一个ACK确认信号。
3)如果服务端此后也没有数据发给客户端时服务端会向客户端发送一个FIN终止信号。
4)客户端在收到这个信号之后会回复一个确认信号,在服务端接收到这个信号之后,服务端与客户端的通道也就关闭了。
UDP协议
无连接
# 丢包协议、不可靠协议
不需要建立双下通道,数据的传输速度快,但是可能会丢失
eg: qq使用的就是UDP协议 所以有时候会产生数据丢失现象
但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全
# udp还有一个非常重要的引用场景就是隧道网络,比如:vpn,VXLAN.
区别
# tcp传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件,浏览网页等等
# udp的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高但是对少量丢包并没有太大要求的场景。比如:域名查询,语音通话,视屏直播等
小总结
"""
IP地址:用于标识全世界独一无二的一台接入互联网的计算机
PORT号:用于标识一台计算机上面的某一个应用程序
IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序
TCP协议类似于打电话:在正式通信前必须要与对方建立起连接,你一句我一句
UDP协议类似于发短信:在正式通信前不必与对方先建立连接,不管对方状态就直接发送。
"""
面试题
# TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
描述的不够精确 不对
TCP协议之所以比UDP协议可靠,原因在于TCP协议发送消息有反馈机制
基于TCP发送的消息会在本地先保存该消息,如果地方确认收到才会删除,否则在一定的时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立刻删除内存数据,不会保留
python学习-Day32的更多相关文章
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- [Python] 学习资料汇总
Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...
- Python学习之路【目录】
本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...
随机推荐
- Java基础 - 注解详解
What - 什么是注解? Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素( ...
- 羽夏逆向指引—— Hook
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的, ...
- 查找bug的一些经验总结
项目开发中遇到的bug解决经验总结 今天在项目开发中遇到了两个很难解决的bug,我把我的思路记录下来,以供之后遇到bug时,提供一些思路: 编译通过,但总结"core dumped" ...
- 【Java】这 35 个 Java 代码优化细节!
前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没 ...
- 使用Pycharm获取Resources目录里的内容
def get_resource_path(path: str) -> str: """\ 获取Resources目录里的资源 :param path: :retu ...
- 初识Spring(为什么要使用Spring?)
Spring,英文翻译是春天的意思,而在Java中,是一个开放源代码的设计层面框架(手动滑稽,程序员的春天),他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.S ...
- linux java7升级到java8
转自:https://blog.csdn.net/u010199866/article/details/81744382 linux java7升级到java8 版权 1.第一步先卸载所有老的jd ...
- 还能这样?把 Python 自动翻译成 C++
作者:byronhe,腾讯 WXG 开发工程师 一.问题背景 随着深度学习的广泛应用,在搜索引擎/推荐系统/机器视觉等业务系统中,越来越多的深度学习模型部署到线上服务. 机器学习模型在离线训练时,一般 ...
- anijs 一个小巧的动画库
很多时候我意识到前端已近变成写h5宣传页面 我不知道是可悲 还是生活的必然 小问题 使用css animation和js animation api制作动画是目前比较流行的做法 但是最后很多人的代码就 ...
- Spark周总结(一)
本周学习内容: 1.搭建虚拟机Spark环境 2.idea编写Scala脚本并在yarn上运行 总结: 这周是回家第一周,虽然没啥事,但是还是想放松放松,也是万事开头难,跟着教程做,但总有几步跟教程上 ...