今日内容详细

软件开发架构

概念

软件开发架构即程序员在编写软件的时候应该遵循的架构设计

我们了解的涉及到两个程序之间通讯的应用大致可以分为两种:

第一种是应用类: 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的更多相关文章

  1. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  2. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  3. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  4. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  5. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  6. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  7. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  8. [Python] 学习资料汇总

    Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...

  9. Python学习之路【目录】

    本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...

随机推荐

  1. 基于MRS-ClickHouse构建用户画像系统方案介绍

    业务场景 用户画像是对用户信息的标签化.用户画像系统通过对收集的各维度数据,进行深度的分析和挖掘,给不同的用户打上不同的标签,从而刻画出客户的全貌.通过用户画像系统,可以对各个用户进行精准定位,从而将 ...

  2. JVM知识(一) 求你了,别再说Java对象都是在堆内存上分配空间的了!

    求你了,别再说Java对象都是在堆内存上分配空间的了! https://baijiahao.baidu.com/s?id=1661296872935371634&wfr=spider& ...

  3. React算法复杂度优化?

    react树对比是按照层级去对比的, 他会给树编号0,1,2,3,4.... 然后相同的编号进行比较.所以复杂度是n,这个好理解. 关键是传统diff的复杂度是怎么算的?传统的diff需要出了上面的比 ...

  4. Math类有哪些常用的方法

    public static int abs(int a) , public static long abs(long a), public static float abs(float a),  pu ...

  5. 什么是 Spring 的依赖注入?

    依赖注入,是 IOC 的一个方面,是个通常的概念,它有多种解释.这概念是说你 不用创建对象,而只需要描述它如何被创建.你不在代码里直接组装你的组件和 服务,但是要在配置文件里描述哪些组件需要哪些服务, ...

  6. 学习Squid(二)

    第6章 squid代理模式案例 6.1 squid传统正向代理生产使用案例 6.1.1 squid传统正向代理两种方案 (1)普通代理服务器 作为代理服务器,这是SQUID的最基本功能:通过在squi ...

  7. Collection单列集合的继承关系(集合的层次结构)

  8. Java 新内存(cache)模型解析

    JMM 相关文档: Java Language Specification Chapter 17 The JSR-133 Cookbook for Compiler Writers - Doug Le ...

  9. AGENS算法

    3.2 层次方法 下图,上面是从左到右由5个簇逐渐合并成1个簇的过程,下面是从右到左由一个簇逐渐分裂成5个簇的过程 AGENS算法 最后面一句话是重点,假设有<A,B>,<C,D&g ...

  10. Python中module文件夹里__init__.py的功能

    怎么引用模块 环境:win7 + python3.5.2文档结构: -project -data -src  -filterCorpus.py  -translateMonolingual.py 问题 ...